145 lines
6.3 KiB
C#
145 lines
6.3 KiB
C#
|
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 abstract partial class TYTDStorage
|
||
|
{
|
||
|
public LegacyConverter Legacy {get{return new LegacyConverter(this);}}
|
||
|
}
|
||
|
|
||
|
public class LegacyConverter
|
||
|
{
|
||
|
TYTDStorage storage1;
|
||
|
internal LegacyConverter(TYTDStorage storage)
|
||
|
{
|
||
|
storage1=storage;
|
||
|
}
|
||
|
|
||
|
private async Task MoveThumbnailsFromLegacy(string id)
|
||
|
{
|
||
|
/*
|
||
|
640x480= sddefault.jpg
|
||
|
120x90= default.jpg
|
||
|
320x180 = mqdefault.jpg
|
||
|
480x360= hqdefault.jpg
|
||
|
1920x1080=maxresdefault.jpg
|
||
|
|
||
|
*/
|
||
|
storage1.CreateDirectoryIfNotExist($"Thumbnails/{id}");
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/640x480/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/sddefault.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/640x480/{id}.jpg",$"Thumbnails/{id}/sddefault.jpg");
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/120x90/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/default.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/120x90/{id}.jpg",$"Thumbnails/{id}/default.jpg");
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/320x180/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/mqdefault.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/320x180/{id}.jpg",$"Thumbnails/{id}/mqdefault.jpg");
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/480x360/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/hqdefault.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/480x360/{id}.jpg",$"Thumbnails/{id}/hqdefault.jpg");
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/1920x1080/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/maxresdefault.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/1920x1080/{id}.jpg",$"Thumbnails/{id}/maxresdefault.jpg");
|
||
|
}else if(await storage1.FileExistsAsync($"Thumbnails/Legacy/1280x720/{id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{id}/maxresdefault.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/1280x720/{id}.jpg",$"Thumbnails/{id}/maxresdefault.jpg");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
public async Task ConvertFromLegacy(IProgress<string> w =null,bool eraseEmptyDirs=false)
|
||
|
{
|
||
|
DateTime time=DateTime.Now;
|
||
|
w.Print("TYTD Legacy -> TYTD Modern");
|
||
|
w.Print("Version Conversion is starting");
|
||
|
storage1.CreateDirectoryIfNotExist("NotConverted");
|
||
|
storage1.CreateDirectoryIfNotExist("Converted");
|
||
|
storage1.CreateDirectoryIfNotExist("Channel");
|
||
|
storage1.CreateDirectoryIfNotExist("Audio");
|
||
|
storage1.CreateDirectoryIfNotExist("VideoOnly");
|
||
|
storage1.CreateDirectoryIfNotExist("AudioOnly");
|
||
|
storage1.CreateDirectoryIfNotExist("PreMuxed");
|
||
|
storage1.CreateDirectoryIfNotExist("Muxed");
|
||
|
storage1.CreateDirectoryIfNotExist("Info");
|
||
|
storage1.CreateDirectoryIfNotExist("Thumbnails");
|
||
|
storage1.MoveDirectory("Thumbnails","_Thumbnails");
|
||
|
storage1.CreateDirectoryIfNotExist("Thumbnails");
|
||
|
storage1.MoveDirectory("_Thumbnails","Thumbnails/Legacy");
|
||
|
List<SavedVideo> videos=new List<SavedVideo>();
|
||
|
await foreach(var v in storage1.GetLegacyVideosAsync())
|
||
|
{
|
||
|
w.Print($"{v.Title}");
|
||
|
|
||
|
// NotConverted/videoId.mp4
|
||
|
videos.Add(v.ToSavedVideo());
|
||
|
|
||
|
|
||
|
if(await storage1.FileExistsAsync($"NotConverted/{v.Id}.mp4"))
|
||
|
{
|
||
|
if(!await storage1.FileExistsAsync($"PreMuxed/{v.Id}.mp4"))
|
||
|
{
|
||
|
storage1.RenameFile($"NotConverted/{v.Id}.mp4",$"PreMuxed/{v.Id}.mp4");
|
||
|
}
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Audio/{v.Id}.mp4"))
|
||
|
{
|
||
|
if(!await storage1.FileExistsAsync($"AudioOnly/{v.Id}.mp4"))
|
||
|
{
|
||
|
storage1.RenameFile($"Audio/{v.Id}.mp4",$"AudioOnly/{v.Id}.mp4");
|
||
|
}
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Converted/{v.Id}.mp4"))
|
||
|
{
|
||
|
if(!await storage1.FileExistsAsync($"Muxed/{v.Id}.mkv"))
|
||
|
{
|
||
|
storage1.RenameFile($"Converted/{v.Id}.mp4",$"Muxed/{v.Id}.mkv");
|
||
|
}
|
||
|
}
|
||
|
if(await storage1.FileExistsAsync($"Converted/{v.Id}-vidonly.bkp"))
|
||
|
{
|
||
|
if(!await storage1.FileExistsAsync($"VideoOnly/{v.Id}.mp4"))
|
||
|
{
|
||
|
storage1.RenameFile($"Converted/{v.Id}-vidonly.bkp",$"VideoOnly/{v.Id}.mp4");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
await MoveThumbnailsFromLegacy(v.Id);
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
await foreach(var c in storage1.GetChannelsAsync())
|
||
|
{
|
||
|
if(await storage1.FileExistsAsync($"Thumbnails/Legacy/900x900/{c.Id}.jpg") && !await storage1.FileExistsAsync($"Thumbnails/{c.Id}/900x900.jpg"))
|
||
|
{
|
||
|
storage1.RenameFile($"Thumbnails/Legacy/900x900/{c.Id}.jpg",$"Thumbnails/{c.Id}/900x900.jpg");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int count = videos.Count;
|
||
|
foreach(var v in videos)
|
||
|
{
|
||
|
await storage1.WriteAllTextAsync($"Info/{v.Id}.json",JsonConvert.SerializeObject(v));
|
||
|
|
||
|
}
|
||
|
|
||
|
TimeSpan span = DateTime.Now - time;
|
||
|
|
||
|
w.Print($"Version Conversion Has Finished with {count} Videos in {span.ToString()}");
|
||
|
}
|
||
|
}
|
||
|
}
|