public static List <OnlineMediaItem> Search(OnlineMediaSource source, OnlineContentSearchParameters searchParams, ManualResetEvent abortEvent) { try { if (searchParams == null) { searchParams = new OnlineContentSearchParameters(); } // Nothing means Everything. if (searchParams.Filter == OnlineContentSearchFilter.None) { searchParams.Filter = OnlineContentSearchFilter.Any; } searchParams.SearchText = searchParams.SearchText.ToLowerInvariant(); OnlineContentSearcher searcher = GetSearcher(source); if (searcher != null) { return(searcher.Search(searchParams, abortEvent)); } } catch (Exception ex) { Logger.LogException(ex); } return(null); }
protected override List <OnlineMediaItem> Search(OnlineContentSearchParameters searchParams, ManualResetEvent abortEvent) { List <OnlineMediaItem> results = new List <OnlineMediaItem>(); if (abortEvent.WaitOne(5)) { return(results); } OnlineMediaData internalDatabase = LoadOnlineMediaData(); if (abortEvent.WaitOne(5)) { return(results); } if (internalDatabase != null && internalDatabase.OnlineMediaItems != null && internalDatabase.OnlineMediaItems.Count > 0) { foreach (var rs in internalDatabase.OnlineMediaItems) { if (abortEvent.WaitOne(5)) { break; } var content = rs.Content ?? string.Empty; var genre = rs.Genre ?? string.Empty; var title = rs.Title ?? string.Empty; var url = rs.Url ?? string.Empty; if (content.ToLowerInvariant().Contains(searchParams.SearchText) || genre.ToLowerInvariant().Contains(searchParams.SearchText) || title.ToLowerInvariant().Contains(searchParams.SearchText) || url.ToLowerInvariant().Contains(searchParams.SearchText)) { results.Add(rs); } } } return(results); }
protected override List <OnlineMediaItem> Search(OnlineContentSearchParameters searchParams, ManualResetEvent abortEvent) { List <OnlineMediaItem> results = new List <OnlineMediaItem>(); if (abortEvent.WaitOne(5)) { return(results); } if (HasValidConfig) { string shoutCastdevId = ProTONEConfig.ShoutCastApiDevID; string shoutCastSearchBaseUrl = ProTONEConfig.ShoutCastSearchBaseURL; string shoutCastTuneInBaseUrl = ProTONEConfig.ShoutCastTuneInBaseURL; // ShoutCast API DevID available, try to get stations list from ShoutCast Directory string searchUrl = string.Format("{0}/advancedsearch?mt=audio/mpeg&f=json&limit={1}&k={2}", shoutCastSearchBaseUrl, MaxSearchCount, shoutCastdevId); if (string.IsNullOrEmpty(searchParams.SearchText) == false) { if (searchParams.SearchText.StartsWith("now:")) { // search by "now playing" searchParams.SearchText = searchParams.SearchText.Replace("now:", "").Trim(); searchUrl = string.Format("{0}/nowplaying?mt=audio/mpeg&f=json&limit={1}&k={2}&ct={3}", shoutCastSearchBaseUrl, MaxSearchCount, shoutCastdevId, StringUtils.UrlEncode(searchParams.SearchText)); } else { // generic search searchUrl += string.Format("&search={0}", StringUtils.UrlEncode(searchParams.SearchText)); } } if (abortEvent.WaitOne(5)) { return(results); } using (WebClient wc = new WebClient()) { string jsonReply = wc.DownloadString(searchUrl); if (abortEvent.WaitOne(5)) { return(results); } dynamic obj2 = JObject.Parse(jsonReply); if (abortEvent.WaitOne(5)) { return(results); } var response = obj2.response; if (response != null && response.statusCode == "200") { if (abortEvent.WaitOne(5)) { return(results); } if (response.data != null && response.data.stationlist != null) { if (abortEvent.WaitOne(5)) { return(results); } var stations = response.data.stationlist.station; if (stations != null) { if (abortEvent.WaitOne(5)) { return(results); } string tuneInBase = string.Empty; try { tuneInBase = response.data.stationlist.tunein["base"] as string; } catch (Exception ex) { Logger.LogException(ex); tuneInBase = null; } if (abortEvent.WaitOne(5)) { return(results); } if (string.IsNullOrEmpty(tuneInBase)) { tuneInBase = "/sbin/tunein-station.pls"; } for (int i = 0; i < stations.Count; i++) { if (abortEvent.WaitOne(5)) { return(results); } var station = stations[i]; try { RadioStation rs = new RadioStation(OnlineMediaSource.ShoutCast); rs.Title = station.name; rs.Type = station.mt; rs.Genre = station.genre; rs.Bitrate = station.br; string ct = ""; string cst = ""; try { ct = station.ct; } catch { } try { cst = station.cst; } catch { } if (string.IsNullOrEmpty(ct) == false) { rs.Content = ct; } else if (string.IsNullOrEmpty(cst) == false) { rs.Content = cst; } else { rs.Content = Translator.Translate("TXT_NA"); } int stationId = station.id; string tuneInUrl = string.Format("{0}/{1}?id={2}", shoutCastTuneInBaseUrl, tuneInBase, stationId); string reply = wc.DownloadString(tuneInUrl); string stationUrl = ParseReply(reply); if (string.IsNullOrEmpty(stationUrl)) { continue; } rs.Url = stationUrl; if (rs.Title.ToLowerInvariant().Contains("radionomy") || rs.Url.ToLowerInvariant().Contains("radionomy")) { continue; } results.Add(rs); } catch (Exception ex) { Logger.LogException(ex); } } } } } } } if (abortEvent.WaitOne(5)) { return(results); } results.Sort((r1, r2) => { int cmp = 0; RadioStation rs1 = r1 as RadioStation; RadioStation rs2 = r2 as RadioStation; if (rs1 != null && rs2 != null) { cmp = string.Compare(rs1.Content, rs2.Content, true); if (cmp != 0) { return(cmp); } cmp = string.Compare(rs1.Genre, rs2.Genre, true); if (cmp != 0) { return(cmp); } } cmp = string.Compare(r1.Title, r2.Title, true); if (cmp != 0) { return(cmp); } cmp = string.Compare(r1.Url, r2.Url, true); if (cmp != 0) { return(cmp); } return(0); }); return(results); }
protected override List <OnlineMediaItem> Search(OnlineContentSearchParameters searchParams, ManualResetEvent abortEvent) { List <OnlineMediaItem> results = new List <OnlineMediaItem>(); if (abortEvent.WaitOne(5)) { return(results); } if (HasValidConfig) { string userAccessToken = ProTONEConfig.DeezerUserAccessToken; string applicationId = ProTONEConfig.DeezerApplicationId; string deezerApiEndpoint = ProTONEConfig.DeezerApiEndpoint; DeezerRuntime dzr = new DeezerRuntime(deezerApiEndpoint, userAccessToken, applicationId); if (_dzr != dzr) { _dzr = dzr; } searchParams.Filter = OnlineContentSearchFilter.None; bool isFilteredSearch = false; isFilteredSearch |= searchParams.SearchText.Contains("artist:"); isFilteredSearch |= searchParams.SearchText.Contains("track:"); isFilteredSearch |= searchParams.SearchText.Contains("album:"); DeezerJsonFilter filter = null; if (isFilteredSearch) { filter = BuildFilterFromQuery(searchParams.SearchText); } List <Track> tracks = _dzr.ExecuteSearch(searchParams.SearchText, abortEvent); if (tracks != null) { foreach (var t in tracks) { try { DeezerTrackItem dti = new DeezerTrackItem { Album = (t.Album != null) ? t.Album.Title : String.Empty, Artist = (t.Artist != null) ? t.Artist.Name : string.Empty, Title = t.Title ?? string.Empty, Url = string.Format("dzmedia:///track/{0}", t.Id), Duration = t.Duration }; bool shouldAddTrack = true; if (DeezerJsonFilter.IsNullOrEmpty(filter) == false) { if (shouldAddTrack && string.IsNullOrEmpty(filter.Artist) == false) { shouldAddTrack &= dti.Artist.ToLowerInvariant().Contains(filter.Artist); } if (shouldAddTrack && string.IsNullOrEmpty(filter.Album) == false) { shouldAddTrack &= dti.Album.ToLowerInvariant().Contains(filter.Album); } if (shouldAddTrack && string.IsNullOrEmpty(filter.Title) == false) { shouldAddTrack &= dti.Title.ToLowerInvariant().Contains(filter.Title); } } if (shouldAddTrack) { results.Add(dti); } } catch (Exception ex) { Logger.LogException(ex); } } } } if (abortEvent.WaitOne(5)) { return(results); } SortResults(ref results); return(results); }
protected abstract List <OnlineMediaItem> Search(OnlineContentSearchParameters searchParams, ManualResetEvent abortEvent);