Exemplo n.º 1
0
        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
            }));
        }
Exemplo n.º 2
0
        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));
        }