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); }
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); } }
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 })); }
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)); }
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); } }