using Newtonsoft.Json; using YoutubeExplode.Videos.Streams; using System.Linq; using System; using System.Threading.Tasks; using YoutubeExplode.Videos; using System.Threading; using YoutubeExplode.Exceptions; using System.Collections.Generic; namespace Tesses.YouTubeDownloader { public class TYTDExporter { ITYTDBase _base; string _tytd_tag; public TYTDExporter(ITYTDBase baseCtl) { _tytd_tag=TYTDStorage.TYTDTag; _base=baseCtl; } public async Task ExportEverythingAsync() { EverythingExport everythingExport=new EverythingExport(); everythingExport.Videos=await ExportVideosAsync(); everythingExport.Playlists = await ExportPlaylistsAsync(); everythingExport.Channels = await ExportChannelsAsync(); everythingExport.DownloadedFiles=await ExportDownloadsAsync(); everythingExport.Subscriptions= await ExportSubscriptionsAsync(); everythingExport.PersonalPlaylists=await ExportPersonalPlaylistsAsync(); everythingExport.TYTDTag = _tytd_tag; return everythingExport; } public async Task> ExportVideosAsync() { List videos=new List(); await foreach(var item in _base.GetVideosAsync()) { videos.Add(item); } return videos; } public async Task> ExportPlaylistsAsync() { List videos=new List(); await foreach(var item in _base.GetPlaylistsAsync()) { videos.Add(item); } return videos; } public async Task> ExportChannelsAsync() { List videos=new List(); await foreach(var item in _base.GetChannelsAsync()) { videos.Add(item); } return videos; } public async Task> ExportDownloadsAsync() { List videos=new List(); await foreach(var item in _base.GetDownloadsAsync()) { videos.Add(item); } return videos; } public async Task> ExportSubscriptionsAsync() { List subs=new List(); var dler = _base as IDownloader; if(dler != null) { await foreach(var item in dler.GetSubscriptionsAsync()) { subs.Add(item); } } return subs; } public async Task> ExportPersonalPlaylistsAsync() { List playlists=new List(); await foreach(var item in _base.GetPersonalPlaylistsAsync()) { PersonalPlaylist personalPlaylist=new PersonalPlaylist(); personalPlaylist.Name=item; personalPlaylist.Items=new List(); await foreach(var item2 in _base.GetPersonalPlaylistContentsAsync(item)) { personalPlaylist.Items.Add(item2); } playlists.Add(personalPlaylist); } return playlists; } } public class EverythingExport { public string TYTDTag {get;set;} public List Videos {get;set;} public List Playlists {get;set;} public List Channels {get;set;} public List DownloadedFiles {get;set;} public List Subscriptions {get;set;} public List PersonalPlaylists {get;set;} } public class PersonalPlaylist { public string Name {get;set;} public List Items {get;set;} } }