Esempio n. 1
0
        public static InfoDict FromDict(Dictionary <string, object> infoDict, string type = null)
        {
            if (type == null)
            {
                type = (string)infoDict.GetValueOrDefault("_type");
            }

            if (infoDict.ContainsKey("_type"))
            {
                infoDict.Remove("_type");
            }

            switch (type)
            {
            case "video":
                return(new Video(infoDict));

            case "playlist":
                return(new Playlist(infoDict));

            case "url":
                return(new ContentUrl(infoDict));

            case "url-transparent":
                return(new TransparentUrl(infoDict));

            case "format":
                return(FormatBase.FromDict(infoDict));

            case "thumbnail":
                return(new Thumbnail(infoDict));

            case "subtitleformat":
                return(new SubtitleFormat(infoDict));

            default:
                return(new InfoDict(infoDict));
            }
        }
Esempio n. 2
0
        public Video(Dictionary <string, object> infoDict) : base(infoDict)
        {
            if (infoDict.TryGetValue("thumbnails", out object thumbnails))
            {
                var thumbnailList = new List <Thumbnail>();
                if (thumbnails is List <Dictionary <string, object> > xthumbnails)
                {
                    foreach (Dictionary <string, object> thumbDict in xthumbnails)
                    {
                        thumbDict.Add("_type", "thumbnail");
                        Thumbnail thumbInfoDict = InfoDict.FromDict <Thumbnail>(thumbDict);
                        thumbnailList.Add(thumbInfoDict);
                    }
                }
                else if (thumbnails is List <object> xthumbnails2)
                {
                    foreach (object thumbDict in xthumbnails2)
                    {
                        var td = (thumbDict as Dictionary <string, object>);
                        td.Add("_type", "thumbnail");
                        Thumbnail thumbInfoDict = InfoDict.FromDict <Thumbnail>(td);
                        thumbnailList.Add(thumbInfoDict);
                    }
                }
                thumbnailList.Sort();
                for (int i = 0; i < thumbnailList.Count; i++)
                {
                    thumbnailList[i].Url = Util.SanitizeUrl(thumbnailList[i].Url);
                    if (thumbnailList[i].Id == null)
                    {
                        thumbnailList[i].Id = i.ToString();
                    }
                }
                if (AdditionalProperties.ContainsKey("thumbnails"))
                {
                    AdditionalProperties.Remove("thumbnails");
                }
                Thumbnails = new ThumbnailCollection(thumbnailList);
            }
            else if (infoDict.TryGetValue("thumbnail", out object thumbnail))
            {
                var thumbnailList = new List <Thumbnail>();
                Dictionary <string, object> xthumbnail = new Dictionary <string, object>()
                {
                    { "url", (string)thumbnail }
                };
                Thumbnail thumbInfoDict = InfoDict.FromDict <Thumbnail>(xthumbnail);
                thumbInfoDict.Url = Util.SanitizeUrl(thumbInfoDict.Url);
                thumbnailList.Add(thumbInfoDict);
                if (AdditionalProperties.ContainsKey("thumbnail"))
                {
                    AdditionalProperties.Remove("thumbnail");
                }
                Thumbnails = new ThumbnailCollection(thumbnailList);
            }

            if (infoDict.TryGetValue("timestamp", out object timestamp))
            {
                if (timestamp is string s)
                {
                    UploadDate = DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64(s)).UtcDateTime;
                }
                else if (timestamp is int i)
                {
                    UploadDate = DateTimeOffset.FromUnixTimeSeconds(i).UtcDateTime;
                }
                else if (timestamp is long l)
                {
                    UploadDate = DateTimeOffset.FromUnixTimeSeconds(l).UtcDateTime;
                }
            }

            if (infoDict.TryGetValue("duration", out object duration))
            {
                if (timestamp is string s)
                {
                    Duration = TimeSpan.FromSeconds(Convert.ToInt32(s));
                }
                else if (duration is int i)
                {
                    Duration = TimeSpan.FromSeconds(i);
                }
                else if (duration is long l)
                {
                    Duration = TimeSpan.FromSeconds(l);
                }
            }

            if (infoDict.TryGetValue("subtitles", out object subs))
            {
                var subtitles = new List <Subtitle>();
                Dictionary <string, object> xsubs = (Dictionary <string, object>)subs;
                foreach (var kv in xsubs)
                {
                    Subtitle sub = new Subtitle(kv.Key);
                    foreach (Dictionary <string, object> subDict in (List <Dictionary <string, object> >)kv.Value)
                    {
                        subDict.Add("_type", "subtitleformat");
                        SubtitleFormat subf = InfoDict.FromDict <SubtitleFormat>(subDict);
                        subf.Url = Util.SanitizeUrl(subf.Url);
                        // subf.Extension = Util.DetermineExt(subf.Extension);
                        sub.Formats.Add(subf);
                    }
                    subtitles.Add(sub);
                }
                if (AdditionalProperties.ContainsKey("subtitles"))
                {
                    AdditionalProperties.Remove("subtitles");
                }
                Subtitles = new SubtitleCollection(subtitles);
            }

            if (infoDict.TryGetValue("automatic_captions", out object autoSubs))
            {
                var automaticSubtitles            = new List <Subtitle>();
                Dictionary <string, object> xsubs = (Dictionary <string, object>)autoSubs;
                foreach (var kv in xsubs)
                {
                    Subtitle sub = new Subtitle(kv.Key);
                    foreach (Dictionary <string, object> subDict in (List <Dictionary <string, object> >)kv.Value)
                    {
                        subDict.Add("_type", "subtitleformat");
                        SubtitleFormat subf = InfoDict.FromDict <SubtitleFormat>(subDict);
                        subf.Url = Util.SanitizeUrl(subf.Url);
                        // subf.Extension = Util.DetermineExt(subf.Extension);
                        sub.Formats.Add(subf);
                    }
                    automaticSubtitles.Add(sub);
                }
                if (AdditionalProperties.ContainsKey("automatic_captions"))
                {
                    AdditionalProperties.Remove("automatic_captions");
                }
                AutomaticSubtitles = new SubtitleCollection(automaticSubtitles);
            }

            if (infoDict.TryGetValue("formats", out object formats))
            {
                var           formatlist = new List <IFormat>();
                List <object> xformats   = (List <object>)formats;
                foreach (Dictionary <string, object> formatDict in xformats)
                {
                    IFormat fmt = FormatBase.FromDict(formatDict);
                    // fmt.Url = Util.SanitizeUrl(fmt.Url);
                    // fmt.Extension = Util.DetermineExt(fmt.Extension);
                    formatlist.Add(fmt);
                }
                if (AdditionalProperties.ContainsKey("formats"))
                {
                    AdditionalProperties.Remove("formats");
                }
                Formats = new FormatCollection(formatlist);
            }
            else
            {
                // the video is a format
                var     formatlist = new List <IFormat>();
                IFormat fmt        = FormatBase.FromDict(AdditionalProperties);
                formatlist.Add(fmt);
                Formats = new FormatCollection(formatlist);
            }
        }