private IEnumerable <LinkedChild> GetM3u8Items(Stream stream) { var content = new M3u8Content(); var playlist = content.GetFromStream(stream); return(playlist.PlaylistEntries.Select(i => new LinkedChild { Path = i.Path, Type = LinkedChildType.Manual })); }
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)); }