예제 #1
0
 public override void Load (StreamReader stream, bool validateHeader)
 {
     Xspf.Playlist playlist = new Xspf.Playlist ();
     playlist.DefaultBaseUri = BaseUri;
     playlist.Load (stream);
     Title = playlist.Title;
     foreach (Xspf.Track track in playlist.Tracks) {
         Dictionary<string, object> element = AddElement ();
         element["uri"] = track.GetLocationAt (0);
     }
 }
예제 #2
0
 public override void Load(StreamReader stream, bool validateHeader)
 {
     Xspf.Playlist playlist = new Xspf.Playlist();
     playlist.DefaultBaseUri = BaseUri;
     playlist.Load(stream);
     Title = playlist.Title;
     foreach (Xspf.Track track in playlist.Tracks)
     {
         Dictionary <string, object> element = AddElement();
         element["uri"] = track.GetLocationAt(0);
     }
 }
예제 #3
0
파일: XspfTests.cs 프로젝트: knocte/banshee
        public static void TestPlaylist(Playlist playlist)
        {
            Assert.AreEqual("Playlist Title", playlist.Title);
            Assert.AreEqual("Aaron Bockover", playlist.Creator);
            Assert.AreEqual("Comment", playlist.Annotation);

            Uri uri = new Uri("http://abock.org/");

            Assert.AreEqual(uri, playlist.Location);
            Assert.AreEqual(uri, playlist.Identifier);
            Assert.AreEqual(uri, playlist.Image);
            Assert.AreEqual(uri, playlist.License);

            Assert.AreEqual(W3CDateTime.Parse("2005-01-08T17:10:47-05:00").LocalTime, playlist.Date);

            Assert.AreEqual(2, playlist.Meta.Count);
            foreach(MetaEntry meta in playlist.Meta) {
                Assert.AreEqual(new Uri("http://abock.org/fruit"), meta.Rel);
                if(meta.Value != "Apples" && meta.Value != "Oranges") {
                    Assert.Fail("Expected one of 'Apples' or 'Oranges'");
                }
            }

            Assert.AreEqual(2, playlist.Links.Count);
            foreach(LinkEntry link in playlist.Links) {
                if(!link.Rel.AbsoluteUri.StartsWith("http://abock.org")) {
                    Assert.Fail("Incorrect rel, expected it to start with http://abock.org");
                }

                if(!link.Value.AbsoluteUri.StartsWith("http://abock.org")) {
                    Assert.Fail("Incorrect content, expected it to start with http://abock.org");
                }
            }

            Assert.AreEqual(1, playlist.Tracks.Count);

            Track track = playlist.Tracks[0];
            Assert.AreEqual("Track 1", track.Title);
            Assert.AreEqual("Aaron Bockover", track.Creator);
            Assert.AreEqual("Comment", track.Annotation);
            Assert.AreEqual("Album", track.Album);

            Assert.AreEqual(uri, track.Info);
            Assert.AreEqual(uri, track.Image);

            Assert.AreEqual(11, track.TrackNumber);
            Assert.AreEqual(TimeSpan.FromMilliseconds(5159), track.Duration);

            Assert.AreEqual(2, track.Locations.Count);
        }
예제 #4
0
        private void MigrateXspf (string path)
        {
            try {
                Media.Playlists.Xspf.Playlist playlist = new Media.Playlists.Xspf.Playlist ();
                playlist.Load (path);

                foreach (Track track in playlist.Tracks) {
                    try {
                        MigrateXspfTrack (playlist, track);
                    } catch (Exception e) {
                        Log.Exception ("Could not migrate XSPF track", e);
                    }
                }
            } catch (Exception e) {
                Log.Exception ("Could not migrat XSPF playlist", e);
            }
        }
예제 #5
0
        private void MigrateXspf(string path)
        {
            try {
                Media.Playlists.Xspf.Playlist playlist = new Media.Playlists.Xspf.Playlist();
                playlist.Load(path);

                foreach (Track track in playlist.Tracks)
                {
                    try {
                        MigrateXspfTrack(playlist, track);
                    } catch (Exception e) {
                        Log.Exception("Could not migrate XSPF track", e);
                    }
                }
            } catch (Exception e) {
                Log.Exception("Could not migrat XSPF playlist", e);
            }
        }
예제 #6
0
 public override void Save (Stream stream, ITrackModelSource source)
 {
     Xspf.Playlist playlist = new Xspf.Playlist ();
     playlist.Title = source.Name;
     playlist.Date = DateTime.Now;
     for (int ii = 0; ii < source.TrackModel.Count; ii++) {
         TrackInfo track = source.TrackModel[ii];
         Xspf.Track xtrack = new Xspf.Track ();
         xtrack.AddLocation (new Uri (ExportUri (track.Uri), UriKind.RelativeOrAbsolute));
         xtrack.Title = track.TrackTitle;
         xtrack.Creator = track.ArtistName;
         xtrack.Album = track.AlbumTitle;
         if (track.TrackNumber >= 0) {
             xtrack.TrackNumber = (uint)track.TrackNumber;
         }
         xtrack.Duration = track.Duration;
         playlist.AddTrack (xtrack);
     }
     playlist.Save (stream);
 }
예제 #7
0
        private void MigrateXspfTrack(Media.Playlists.Xspf.Playlist playlist, Track track)
        {
            if (track.LocationCount <= 0)
            {
                return;
            }

            DatabaseTrackInfo station = new DatabaseTrackInfo();

            station.PrimarySource = source;
            station.IsLive        = true;

            station.Uri = GetSafeUri(track.Locations[0]);

            if (!String.IsNullOrEmpty(track.Title))
            {
                station.TrackTitle = track.Title;
            }

            if (!String.IsNullOrEmpty(track.Creator))
            {
                station.ArtistName = track.Creator;
            }

            if (!String.IsNullOrEmpty(track.Annotation))
            {
                station.Comment = track.Annotation;
            }

            if (!String.IsNullOrEmpty(playlist.Title))
            {
                station.Genre = playlist.Title;
            }

            if (track.Info != null)
            {
                station.MoreInfoUri = GetSafeUri(track.Info);
            }

            station.Save();
        }
예제 #8
0
 public override void Save(Stream stream, ITrackModelSource source)
 {
     Xspf.Playlist playlist = new Xspf.Playlist();
     playlist.Title = source.Name;
     playlist.Date  = DateTime.Now;
     for (int ii = 0; ii < source.TrackModel.Count; ii++)
     {
         TrackInfo  track  = source.TrackModel[ii];
         Xspf.Track xtrack = new Xspf.Track();
         xtrack.AddLocation(new Uri(ExportUri(track.Uri), UriKind.RelativeOrAbsolute));
         xtrack.Title   = track.TrackTitle;
         xtrack.Creator = track.ArtistName;
         xtrack.Album   = track.AlbumTitle;
         if (track.TrackNumber >= 0)
         {
             xtrack.TrackNumber = (uint)track.TrackNumber;
         }
         xtrack.Duration = track.Duration;
         playlist.AddTrack(xtrack);
     }
     playlist.Save(stream);
 }
예제 #9
0
        public Playlist LoadPlaylistFor (string station)
        {
            lock (this) {
                if (station != Station)
                    return null;

                Playlist pl = new Playlist ();
                Stream stream = null;
                LastfmRequest radio_playlist = new LastfmRequest ("radio.getPlaylist", RequestType.AuthenticatedRead, ResponseFormat.Raw);
                try {
                    radio_playlist.Send ();
                    stream = radio_playlist.GetResponseStream ();
                    pl.Load (stream);
                    Log.Debug (String.Format ("Adding {0} Tracks to Last.fm Station {1}", pl.TrackCount, station), null);
                } catch (System.Net.WebException e) {
                    Log.Warning ("Error Loading Last.fm Station", e.Message, false);
                    return null;
                } catch (Exception e) {
                    string body = null;
                    try {
                        using (StreamReader strm = new StreamReader (stream)) {
                            body = strm.ReadToEnd ();
                        }
                    } catch {}
                    Log.Warning (
                        "Error loading station",
                        String.Format ("Exception:\n{0}\n\nResponse:\n{1}", e.ToString (), body ?? "Unable to get response"), false
                    );
                    return null;
                }

                return pl;
            }
        }
예제 #10
0
파일: XspfTests.cs 프로젝트: knocte/banshee
 public void Load()
 {
     Playlist playlist = new Playlist ();
     playlist.Load (complete_path);
     Helper.TestPlaylist (playlist);
 }