public void Create_CreatePlaylistAndCompareWithFile_Equal()
        {
            PlsContent  content  = new PlsContent();
            PlsPlaylist playlist = new PlsPlaylist();

            playlist.Version = 2;
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.Zero,
                Nr     = 1,
                Path   = "http://stream3.polskieradio.pl:8902/",
                Title  = null,
            });
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.FromSeconds(-1),
                Nr     = 1,
                Path   = "http://stream.polskastacja.pl/ps43_mp3?player_group=PS_EXT_MP3",
                Title  = "Server1-> >>> P O L S K A S T A C J A <<<- Ballady Rockowe",
            });
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.FromSeconds(5720),
                Nr     = 1,
                Path   = "/home/uzytkownik/muzyka-1.mp3",
                Title  = "Myslovitz - Sprzedawcy Marzeń",
            });

            string created  = content.ToText(playlist);
            string fromFile = Helpers.Read("Playlist.pls");

            Assert.AreEqual(created, fromFile);
        }
Exemple #2
0
        private void CreatePlaylist()
        {
            string folder            = textBoxFolder.Text;
            string textPlaylist      = string.Empty;
            string playlistExtension = string.Empty;

            switch (comboBoxPlaylist.SelectedItem)
            {
            case Constants.WinMediaPlayerPLS:

                PlsPlaylist plsPlaylist = new PlsPlaylist();
                playlistExtension = "pls";

                foreach (var episode in listBoxEpisodes.Items)
                {
                    plsPlaylist.PlaylistEntries.Add(new PlsPlaylistEntry()
                    {
                        Path  = Path.Combine(folder, episode.ToString()),
                        Title = Path.GetFileNameWithoutExtension(episode.ToString())
                    });
                }

                PlsContent plsContent = new PlsContent();
                textPlaylist = plsContent.ToText(plsPlaylist);

                break;

            case Constants.WinampM3U:

                M3uPlaylist m3uPlaylist = new M3uPlaylist();
                playlistExtension = "m3u";

                foreach (var episode in listBoxEpisodes.Items)
                {
                    m3uPlaylist.PlaylistEntries.Add(new M3uPlaylistEntry()
                    {
                        Path  = Path.Combine(folder, episode.ToString()),
                        Title = Path.GetFileNameWithoutExtension(episode.ToString())
                    });
                }

                M3uContent m3uContent = new M3uContent();
                textPlaylist = m3uContent.ToText(m3uPlaylist);

                break;

            default:
                break;
            }

            string playlistName     = $"Playlist - {Utils.GetTimestamp(DateTime.Now)}";
            string playlistFullName = Path.Combine(folder, $"{playlistName}.{playlistExtension}");

            using (FileStream fs = File.Create(playlistFullName))
            {
                byte[] info = new UTF8Encoding(true).GetBytes(textPlaylist);
                fs.Write(info, 0, info.Length);
            }
        }
Exemple #3
0
        private IEnumerable <LinkedChild> GetPlsItems(Stream stream)
        {
            var content  = new PlsContent();
            var playlist = content.GetFromStream(stream);

            return(playlist.PlaylistEntries.Select(i => new LinkedChild
            {
                Path = i.Path,
                Type = LinkedChildType.Manual
            }));
        }
Exemple #4
0
            public static Playlist Read(string playlistPath)
            {
                if (!File.Exists(playlistPath))
                {
                    return(null);
                }
                var ext            = Path.GetExtension(playlistPath).ToLower();
                var playlistStream = new FileStream(playlistPath, FileMode.Open);
                IEnumerable <BasePlaylistEntry> playlistEntries;

                switch (ext)
                {
                case ".pls":
                    playlistEntries = new PlsContent().GetFromStream(playlistStream).PlaylistEntries;
                    break;

                case ".m3u":
                    playlistEntries = new M3uContent().GetFromStream(playlistStream).PlaylistEntries;
                    break;

                case ".m3u8":
                    playlistEntries = new M3u8Content().GetFromStream(playlistStream).PlaylistEntries;
                    break;

                case ".wpl":
                    playlistEntries = new WplContent().GetFromStream(playlistStream).PlaylistEntries;
                    break;

                case ".zpl":
                    playlistEntries = new ZplContent().GetFromStream(playlistStream).PlaylistEntries;
                    break;

                default:
                    throw new InvalidOperationException("unknown playlist format");
                }
                playlistStream.Close();
                if (playlistEntries.Count() == 0)
                {
                    return(null);
                }
                return(new Playlist(playlistEntries.Select(e => e.Path)));
            }
        public void GetFromStream_ReadPlaylistAndCompareWithObject_Equal()
        {
            PlsContent  content  = new PlsContent();
            PlsPlaylist playlist = new PlsPlaylist();

            playlist.Version = 2;
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.Zero,
                Nr     = 1,
                Path   = "http://stream3.polskieradio.pl:8902/",
                Title  = null,
            });
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.FromSeconds(-1),
                Nr     = 2,
                Path   = "http://stream.polskastacja.pl/ps43_mp3?player_group=PS_EXT_MP3",
                Title  = "Server1-> >>> P O L S K A S T A C J A <<<- Ballady Rockowe",
            });
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.FromSeconds(5720),
                Nr     = 3,
                Path   = "/home/uzytkownik/muzyka-1.mp3",
                Title  = "Myslovitz - Sprzedawcy Marzeń",
            });
            playlist.PlaylistEntries.Add(new PlsPlaylistEntry()
            {
                Length = TimeSpan.Zero,
                Nr     = 4,
                Path   = "Weird Al - This Is The Life.mp3",
                Title  = "Weird Al Yankovic - This is the Life",
            });

            var stream = Helpers.ReadStream("Playlist2.pls");
            var file   = content.GetFromStream(stream);

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

            Assert.AreEqual(playlist.PlaylistEntries[0].Path, file.PlaylistEntries[0].Path);
            Assert.AreEqual(playlist.PlaylistEntries[1].Path, file.PlaylistEntries[1].Path);
            Assert.AreEqual(playlist.PlaylistEntries[2].Path, file.PlaylistEntries[2].Path);
            Assert.AreEqual(playlist.PlaylistEntries[3].Path, file.PlaylistEntries[3].Path);

            Assert.AreEqual(playlist.PlaylistEntries[0].Title, file.PlaylistEntries[0].Title);
            Assert.AreEqual(playlist.PlaylistEntries[1].Title, file.PlaylistEntries[1].Title);
            Assert.AreEqual(playlist.PlaylistEntries[2].Title, file.PlaylistEntries[2].Title);
            Assert.AreEqual(playlist.PlaylistEntries[3].Title, file.PlaylistEntries[3].Title);

            Assert.AreEqual(playlist.PlaylistEntries[0].Length, file.PlaylistEntries[0].Length);
            Assert.AreEqual(playlist.PlaylistEntries[1].Length, file.PlaylistEntries[1].Length);
            Assert.AreEqual(playlist.PlaylistEntries[2].Length, file.PlaylistEntries[2].Length);
            Assert.AreEqual(playlist.PlaylistEntries[3].Length, file.PlaylistEntries[3].Length);

            Assert.AreEqual(playlist.PlaylistEntries[0].Nr, file.PlaylistEntries[0].Nr);
            Assert.AreEqual(playlist.PlaylistEntries[1].Nr, file.PlaylistEntries[1].Nr);
            Assert.AreEqual(playlist.PlaylistEntries[2].Nr, file.PlaylistEntries[2].Nr);
            Assert.AreEqual(playlist.PlaylistEntries[3].Nr, file.PlaylistEntries[3].Nr);
            stream.Dispose();
        }
        private R <Playlist, LocalStr> GetPlaylistContent(Stream stream, string url, Uid owner, string mime = null)
        {
            string name = null;
            List <PlaylistItem> items;

            mime = mime.ToLowerInvariant();
            url  = url.ToLowerInvariant();
            string anyId = mime ?? url;

            switch (anyId)
            {
            case ".m3u":
            {
                var parser = new M3uContent();
                var list   = parser.GetFromStream(stream);

                items = new List <PlaylistItem>(
                    from e in list.PlaylistEntries
                    select new PlaylistItem(new AudioResource(e.Path, e.Title, ResolverFor)));
                break;
            }

            case ".m3u8":
            case "application/mpegurl":
            case "application/x-mpegurl":
            case "audio/mpegurl":
            case "audio/x-mpegurl":
            case "application/vnd.apple.mpegurl":
            case "application/vnd.apple.mpegurl.audio":
            {
                var parser = new M3u8Content();
                var list   = parser.GetFromStream(stream);

                items = new List <PlaylistItem>(
                    from e in list.PlaylistEntries
                    select new PlaylistItem(new AudioResource(e.Path, e.Title, ResolverFor)));
                break;
            }

            case ".pls":
            case "audio/x-scpls":
            case "application/x-scpls":
            case "application/pls+xml":
            {
                var parser = new PlsContent();
                var list   = parser.GetFromStream(stream);

                items = new List <PlaylistItem>(
                    from e in list.PlaylistEntries
                    select new PlaylistItem(new AudioResource(e.Path, e.Title, ResolverFor)));
                break;
            }

            case ".wpl":
            {
                var parser = new WplContent();
                var list   = parser.GetFromStream(stream);

                items = new List <PlaylistItem>(
                    from e in list.PlaylistEntries
                    select new PlaylistItem(new AudioResource(e.Path, e.TrackTitle, ResolverFor)));
                name = list.Title;
                break;
            }

            case ".zpl":
            {
                var parser = new ZplContent();
                var list   = parser.GetFromStream(stream);

                items = new List <PlaylistItem>(
                    from e in list.PlaylistEntries
                    select new PlaylistItem(new AudioResource(e.Path, e.TrackTitle, ResolverFor)));
                name = list.Title;
                break;
            }

            // ??
            case "application/jspf+json":
            // ??
            case "application/xspf+xml":
            default:
                return(new LocalStr(strings.error_media_file_not_found));                // TODO Loc "media not supported"
            }

            if (string.IsNullOrEmpty(name))
            {
                var index = url.LastIndexOfAny(new[] { '\\', '/' });
                name = index >= 0 ? url.Substring(index) : url;
            }
            return(new Playlist(name, owner, Enumerable.Empty <Uid>(), items));
        }
Exemple #7
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);
            }
        }