예제 #1
0
 public RadioStationPlaylistItem(RadioStation rs) :
     base(rs.Url, false, false)
 {
     _rs = rs;
 }
예제 #2
0
        public void LoadM3UPlaylistFromString(string content, string playlistFileName = "")
        {
            try
            {
                OnlineMediaItem omi = null;

                string[] lines = content.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                if (lines != null)
                {
                    foreach (string line in lines)
                    {
                        if (_abortLoad)
                        {
                            break;
                        }

                        if (line.StartsWith("#"))
                        {
                            if (line.StartsWith("#RADIO:"))
                            {
                                string   s      = line.Replace("#RADIO:", "").Trim();
                                string[] fields = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                                if (fields != null && fields.Length > 1)
                                {
                                    omi       = new RadioStation(OnlineMediaSource.ShoutCast);
                                    omi.Title = fields[1];
                                }
                            }
                            else if (line.StartsWith("#DZMEDIA:"))
                            {
                                string s   = line.Replace("#DZMEDIA:", "").Trim();
                                int    idx = s.IndexOf(',');
                                if (idx > 0)
                                {
                                    string durStr = s.Substring(0, idx);

                                    DeezerTrackItem dti = new DeezerTrackItem();

                                    int sec = 0;
                                    int.TryParse(durStr, out sec);
                                    dti.Duration = TimeSpan.FromSeconds(sec);

                                    if (idx < (s.Length - 2))
                                    {
                                        string[] fields2 = s.Substring(idx + 1).Split("`".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                                        dti.Artist = fields2[0];
                                        dti.Title  = fields2[1];
                                        dti.Album  = fields2[2];
                                    }

                                    omi = dti;
                                }
                            }
                        }
                        else
                        {
                            if (omi != null)
                            {
                                omi.Url = line;
                                AddOnlineMediaItem(omi);
                            }
                            else
                            {
                                AddItem(GetAbsoluteItemPath(line, playlistFileName));
                            }

                            omi = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }
예제 #3
0
        private static void ValidateUrl(string url, string title, string genre)
        {
            Console.WriteLine("Trying url: {0}", url);

            try
            {
                Uri uri = new Uri(url);
                string hostName = uri.DnsSafeHost;

                //if (!QueryDnsWithTimeout(hostName, 300))
                //{
                //    Console.WriteLine("\t   -> Url: {0} is not valid (DNS error)", url);
                //    return;
                //}

                List<String> urlsToCkeck = new List<string>();

                if (IsPlaylist(url))
                {
                    string fileName = Path.GetFileName(uri.LocalPath);
                    string tempFile = @"c:\temp.pls";

                    using (WebClientWithTimeout wc = new WebClientWithTimeout())
                    {
                        wc.Timeout = 500;
                        wc.Proxy = AppSettings.GetWebProxy();
                        wc.DownloadFile(uri, tempFile);
                    }

                    if (File.Exists(tempFile))
                    {
                        Playlist p = new Playlist();
                        p.LoadPlaylist(tempFile);

                        File.Delete(tempFile);

                        foreach (PlaylistItem item in p.AllItems)
                        {
                            urlsToCkeck.Add(item.Path);
                        }
                    }
                }
                else
                {
                    urlsToCkeck.Add(url);
                }

                foreach(string url2 in urlsToCkeck)
                {
                    //if (!QueryDnsWithTimeout(url2, 300))
                      //  continue;

                    ShoutcastStream ss = new ShoutcastStream(url2, 500);
                    if (ss.Connected)
                    {
                        RadioStation rs = new RadioStation { Genre = genre, Title = title, Url = url2 };
                        data.RadioStations.Add(rs);

                        Console.WriteLine("\t   -> Added radio station: {0}", url2);

                        ss.Close();
                        ss.Dispose();
                        ss = null;
                    }
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("\t   ->" + ex.Message);
            }

            Console.WriteLine("\t   -> Url: {0} is not valid", url);

        }