private static string SerializePlaylist(IPlaylist playlist, Format fileFormat)
        {
            switch (fileFormat)
            {
            case Format.XSPF:
                var xspfSerializer = new XspfSerializer();
                var xspfPl         = new XspfPlaylist(playlist);
                return(xspfSerializer.Serialize(xspfPl));

            case Format.WPL:
                var wplSerializer = new WplSerializer();
                var wplPlaylist   = new WplPlaylist(playlist);
                return(wplSerializer.Serialize(wplPlaylist));

            case Format.M3U:
                var m3USerializer = new M3uSerializer();
                var m3UPlaylist   = new M3uPlaylist(playlist);
                return(m3USerializer.Serialize(m3UPlaylist));

            case Format.ASX:
                var asxSerializer = new AsxSerializer();
                var asxPlaylist   = new AsxPlaylist(playlist);
                return(asxSerializer.Serialize(asxPlaylist));

            case Format.PLS:
                var plsSerializer = new PlsSerializer();
                var plsPlaylist   = new PlsPlaylist(playlist);
                return(plsSerializer.Serialize(plsPlaylist));
            }

            return(String.Empty);
        }
示例#2
0
        public void Update_UpdateFileSaveAndCompareWithCorrect_Equal()
        {
            WplContent  content  = new WplContent();
            WplPlaylist playlist = new WplPlaylist();

            playlist.Title = "abc";
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = "Nieznany wykonawca",
                AlbumTitle  = "Nieznany album",
                Path        = @"D:\abc.wav",
                TrackArtist = "Nieznany",
                TrackTitle  = "abc"
            });
            playlist.Author    = "me";
            playlist.Generator = "PlaylistsNET";
            var    stream         = Helpers.ReadStream("2seq.wpl");
            string updatedContent = content.Update(playlist, stream);

            stream.Dispose();
            Helpers.Save("2seqoutputTest.wpl", updatedContent);
            string updated  = Helpers.Read("2seqoutputTest.wpl");
            string expected = Helpers.Read("2seqoutput.wpl");

            Assert.AreEqual(updated, expected);
        }
示例#3
0
        public void Create_CreatePlaylistAndCompareWithFile_Equal()
        {
            WplContent  content  = new WplContent();
            WplPlaylist playlist = new WplPlaylist();

            playlist.Title = "Eurowizja";
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = null,
                AlbumTitle  = "",
                Duration    = TimeSpan.FromMilliseconds(185364),
                Path        = @"D:\Muzyka\Eurowizja\Eurowizja 2014\Can-linn & Kasey Smith - Heartbeat(Irlandia).mp3",
                TrackArtist = "Can-linn & Kasey Smith",
                TrackTitle  = "Heartbeat"
            });
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = "Elaiza",
                AlbumTitle  = "Eurovision Song Contest 2014",
                Duration    = TimeSpan.Zero,
                Path        = @"D:\Muzyka\Eurowizja\Eurowizja 2014\Elaiza - Is It Right.mp3",
                TrackArtist = "Elaiza",
                TrackTitle  = "Is It Right"
            });

            string created  = content.ToText(playlist);
            string fromFile = Helpers.Read("Playlist2.wpl");

            Assert.AreEqual(created, fromFile);
        }
示例#4
0
 private static List <Meta> ExtractHeadMeta(WplPlaylist playlist)
 {
     return(playlist
            .Tags
            .Where(kv =>
                   kv.Key != TagNames.Author &&
                   kv.Key != TagNames.Title)
            .Select(kv => new Meta {
         Name = kv.Key, Content = kv.Value
     })
            .ToList());
 }
示例#5
0
        public void GetFromStream_ReadEmptyPlaylistAndCompareWithObject_Equal()
        {
            WplContent  content  = new WplContent();
            WplPlaylist playlist = new WplPlaylist();

            playlist.Title = "";
            var stream = Helpers.ReadStream("Empty.wpl");
            var file   = content.GetFromStream(stream);

            Assert.AreEqual(playlist.Title, file.Title);
            Assert.AreEqual(playlist.PlaylistEntries.Count, file.PlaylistEntries.Count);
            stream.Dispose();
        }
        public void Serialize_GivenATag_SerializeTheTag()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <head>
                    <meta name=""Foo"" content=""Bar"" />
                </head>
            ");

            var playlist = new WplPlaylist();

            playlist.Tags["Foo"] = "Bar";

            Assert.Matches(pattern, serializer.Serialize(playlist));
        }
        public void Serialize_GivenAuthor_SerializeTheAuthor()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <head>
                    <author>Foo</author>
                </head>
            ");

            var playlist = new WplPlaylist
            {
                Author = "Foo"
            };

            Assert.Matches(pattern, serializer.Serialize(playlist));
        }
        public void Serialize_GivenTitle_SerializeTheTitle()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <head>
                    <title>Foo</title>
                </head>
            ");

            var playlist = new WplPlaylist
            {
                Title = "Foo"
            };

            Assert.Matches(pattern, serializer.Serialize(playlist));
        }
        public void Serialize_GivenAMedia_SerializeTheMedia()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <body>
                    <seq>
                        <media src=""Foo"" />
                    </seq>
                </body>
            ");

            var playlist = new WplPlaylist();

            playlist.Add(new WplItem("Foo"));

            Assert.Matches(pattern, serializer.Serialize(playlist));
        }
示例#10
0
        public void GetFromStream_ReadPlaylistAndCompareWithObject_Equal()
        {
            WplContent  content  = new WplContent();
            WplPlaylist playlist = new WplPlaylist();

            playlist.Title = "Eurowizja";
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = null,
                AlbumTitle  = "",
                Duration    = TimeSpan.FromMilliseconds(185364),
                Path        = @"D:\Muzyka\Eurowizja\Eurowizja 2014\Can-linn & Kasey Smith - Heartbeat(Irlandia).mp3",
                TrackArtist = "Can-linn & Kasey Smith",
                TrackTitle  = "Heartbeat"
            });
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = "Elaiza",
                AlbumTitle  = "Eurovision Song Contest 2014",
                Path        = @"D:\Muzyka\Eurowizja\Eurowizja 2014\Elaiza - Is It Right.mp3",
                TrackArtist = "Elaiza",
                TrackTitle  = "Is It Right"
            });

            var stream = Helpers.ReadStream("Playlist.wpl");
            var file   = content.GetFromStream(stream);

            stream.Dispose();
            Assert.AreEqual(playlist.PlaylistEntries.Count, file.PlaylistEntries.Count);
            Assert.AreEqual(playlist.Title, file.Title);

            Assert.AreEqual(playlist.PlaylistEntries[0].AlbumArtist, file.PlaylistEntries[0].AlbumArtist);
            Assert.AreEqual(playlist.PlaylistEntries[1].AlbumArtist, file.PlaylistEntries[1].AlbumArtist);

            Assert.AreEqual(String.IsNullOrEmpty(playlist.PlaylistEntries[0].AlbumTitle), String.IsNullOrEmpty(file.PlaylistEntries[0].AlbumTitle));
            Assert.AreEqual(playlist.PlaylistEntries[1].AlbumTitle, file.PlaylistEntries[1].AlbumTitle);

            Assert.AreEqual(playlist.PlaylistEntries[0].TrackArtist, file.PlaylistEntries[0].TrackArtist);
            Assert.AreEqual(playlist.PlaylistEntries[1].TrackArtist, file.PlaylistEntries[1].TrackArtist);

            Assert.AreEqual(playlist.PlaylistEntries[0].TrackTitle, file.PlaylistEntries[0].TrackTitle);
            Assert.AreEqual(playlist.PlaylistEntries[1].TrackTitle, file.PlaylistEntries[1].TrackTitle);

            Assert.AreEqual(playlist.PlaylistEntries[0].Path, file.PlaylistEntries[0].Path);
            Assert.AreEqual(playlist.PlaylistEntries[1].Path, file.PlaylistEntries[1].Path);
            stream.Dispose();
        }
示例#11
0
        public void Serialize_GivenAuthor_SerializeTheAuthor()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <head>
                    <author>Foo</author>
                </head>
            ");

            var playlist = new WplPlaylist {
                Author = "Foo"
            };
            var serializer = new WplSerializer();

            var actual = serializer.Serialize(playlist);

            actual.Should().MatchRegex(pattern);
        }
示例#12
0
        public void Serialize_GivenATag_SerializeTheTag()
        {
            var pattern    = PrepareXmlForPatternMatching(@"
                <head>
                    <meta name=""Foo"" content=""Bar"" />
                </head>
            ");
            var serializer = new WplSerializer();

            var playlist = new WplPlaylist();

            playlist.Tags["Foo"] = "Bar";

            var actual = serializer.Serialize(playlist);

            actual.Should().MatchRegex(pattern);
        }
示例#13
0
        public void Serialize_GivenTitle_SerializeTheTitle()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <head>
                    <title>Foo</title>
                </head>
            ");

            var playlist = new WplPlaylist
            {
                Title = "Foo"
            };
            var serializer = new WplSerializer();

            var actual = serializer.Serialize(playlist);

            actual.Should().MatchRegex(pattern);
        }
示例#14
0
        public void Serialize_GivenAMedia_SerializeTheMedia()
        {
            var pattern = PrepareXmlForPatternMatching(@"
                <body>
                    <seq>
                        <media src=""Foo"" />
                    </seq>
                </body>
            ");

            var playlist = new WplPlaylist();

            playlist.Add(new WplItem("Foo"));
            var serializer = new WplSerializer();
            var actual     = serializer.Serialize(playlist);

            actual.Should().MatchRegex(pattern);
        }
示例#15
0
        public void Test_UnEscape()
        {
            WplContent  content  = new WplContent();
            WplPlaylist playlist = new WplPlaylist();

            playlist.Title = "Eurowizja";
            playlist.PlaylistEntries.Add(new WplPlaylistEntry()
            {
                AlbumArtist = "E<>laiza",
                AlbumTitle  = "E<u>r'o&vision \"Song Contest 2014",
                Duration    = TimeSpan.Zero,
                Path        = @"D:\Muzyka\Eurowizja\Eurowizja 2014\Elaiza - Is It Right.mp3",
                TrackArtist = "Elaiza",
                TrackTitle  = "Is It Right"
            });

            string created  = content.ToText(playlist);
            string fromFile = Helpers.Read("playlist3b.wpl");

            Assert.AreEqual(created, fromFile);
        }
示例#16
0
        /// <summary>
        /// Returns the playlist in wpl format.
        /// </summary>
        private string CreateWplPlaylist()
        {
            var playlist = new WplPlaylist()
            {
                Title = _album.Title,
            };

            foreach (Track track in _album.Tracks)
            {
                playlist.PlaylistEntries.Add(new WplPlaylistEntry()
                {
                    AlbumArtist = _album.Artist,
                    AlbumTitle  = _album.Title,
                    Duration    = TimeSpan.FromSeconds(track.Duration),
                    Path        = Path.GetFileName(track.Path),
                    TrackArtist = _album.Artist,
                    TrackTitle  = track.Title,
                });
            }

            return(new WplContent().ToText(playlist));
        }
示例#17
0
 public RawPlaylist(WplPlaylist wplPlaylist)
 {
     Head = new Head(wplPlaylist);
     Body = new Body(wplPlaylist.Items);
 }
示例#18
0
 public Head(WplPlaylist wplPlaylist)
 {
     Meta   = ExtractHeadMeta(wplPlaylist);
     Author = wplPlaylist.Author;
     Title  = wplPlaylist.Title;
 }
示例#19
0
        private void SavePlaylistFile(Playlist item)
        {
            // this is probably best done as a metadata provider
            // saving a file over itself will require some work to prevent this from happening when not needed
            var playlistPath = item.Path;
            var extension    = Path.GetExtension(playlistPath);

            if (string.Equals(".wpl", extension, StringComparison.OrdinalIgnoreCase))
            {
                var playlist = new WplPlaylist();
                foreach (var child in item.GetLinkedChildren())
                {
                    var entry = new WplPlaylistEntry()
                    {
                        Path       = NormalizeItemPath(playlistPath, child.Path),
                        TrackTitle = child.Name,
                        AlbumTitle = child.Album
                    };

                    var hasAlbumArtist = child as IHasAlbumArtist;
                    if (hasAlbumArtist != null)
                    {
                        entry.AlbumArtist = hasAlbumArtist.AlbumArtists.FirstOrDefault();
                    }

                    var hasArtist = child as IHasArtist;
                    if (hasArtist != null)
                    {
                        entry.TrackArtist = hasArtist.Artists.FirstOrDefault();
                    }

                    if (child.RunTimeTicks.HasValue)
                    {
                        entry.Duration = TimeSpan.FromTicks(child.RunTimeTicks.Value);
                    }

                    playlist.PlaylistEntries.Add(entry);
                }

                string text = new WplContent().ToText(playlist);
                File.WriteAllText(playlistPath, text);
            }

            if (string.Equals(".zpl", extension, StringComparison.OrdinalIgnoreCase))
            {
                var playlist = new ZplPlaylist();
                foreach (var child in item.GetLinkedChildren())
                {
                    var entry = new ZplPlaylistEntry()
                    {
                        Path       = NormalizeItemPath(playlistPath, child.Path),
                        TrackTitle = child.Name,
                        AlbumTitle = child.Album
                    };

                    var hasAlbumArtist = child as IHasAlbumArtist;
                    if (hasAlbumArtist != null)
                    {
                        entry.AlbumArtist = hasAlbumArtist.AlbumArtists.FirstOrDefault();
                    }

                    var hasArtist = child as IHasArtist;
                    if (hasArtist != null)
                    {
                        entry.TrackArtist = hasArtist.Artists.FirstOrDefault();
                    }

                    if (child.RunTimeTicks.HasValue)
                    {
                        entry.Duration = TimeSpan.FromTicks(child.RunTimeTicks.Value);
                    }
                    playlist.PlaylistEntries.Add(entry);
                }

                string text = new ZplContent().ToText(playlist);
                File.WriteAllText(playlistPath, text);
            }

            if (string.Equals(".m3u", extension, StringComparison.OrdinalIgnoreCase))
            {
                var playlist = new M3uPlaylist();
                playlist.IsExtended = true;
                foreach (var child in item.GetLinkedChildren())
                {
                    var entry = new M3uPlaylistEntry()
                    {
                        Path  = NormalizeItemPath(playlistPath, child.Path),
                        Title = child.Name,
                        Album = child.Album
                    };

                    var hasAlbumArtist = child as IHasAlbumArtist;
                    if (hasAlbumArtist != null)
                    {
                        entry.AlbumArtist = hasAlbumArtist.AlbumArtists.FirstOrDefault();
                    }

                    if (child.RunTimeTicks.HasValue)
                    {
                        entry.Duration = TimeSpan.FromTicks(child.RunTimeTicks.Value);
                    }

                    playlist.PlaylistEntries.Add(entry);
                }

                string text = new M3uContent().ToText(playlist);
                File.WriteAllText(playlistPath, text);
            }

            if (string.Equals(".m3u8", extension, StringComparison.OrdinalIgnoreCase))
            {
                var playlist = new M3uPlaylist();
                playlist.IsExtended = true;
                foreach (var child in item.GetLinkedChildren())
                {
                    var entry = new M3uPlaylistEntry()
                    {
                        Path  = NormalizeItemPath(playlistPath, child.Path),
                        Title = child.Name,
                        Album = child.Album
                    };

                    var hasAlbumArtist = child as IHasAlbumArtist;
                    if (hasAlbumArtist != null)
                    {
                        entry.AlbumArtist = hasAlbumArtist.AlbumArtists.FirstOrDefault();
                    }

                    if (child.RunTimeTicks.HasValue)
                    {
                        entry.Duration = TimeSpan.FromTicks(child.RunTimeTicks.Value);
                    }

                    playlist.PlaylistEntries.Add(entry);
                }

                string text = new M3u8Content().ToText(playlist);
                File.WriteAllText(playlistPath, text);
            }

            if (string.Equals(".pls", extension, StringComparison.OrdinalIgnoreCase))
            {
                var playlist = new PlsPlaylist();
                foreach (var child in item.GetLinkedChildren())
                {
                    var entry = new PlsPlaylistEntry()
                    {
                        Path  = NormalizeItemPath(playlistPath, child.Path),
                        Title = child.Name
                    };

                    if (child.RunTimeTicks.HasValue)
                    {
                        entry.Length = TimeSpan.FromTicks(child.RunTimeTicks.Value);
                    }

                    playlist.PlaylistEntries.Add(entry);
                }

                string text = new PlsContent().ToText(playlist);
                File.WriteAllText(playlistPath, text);
            }
        }