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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);