diff --git a/.vs/youtube-downloader/xs/UserPrefs.xml b/.vs/youtube-downloader/xs/UserPrefs.xml index 5160dd5..f7624db 100644 --- a/.vs/youtube-downloader/xs/UserPrefs.xml +++ b/.vs/youtube-downloader/xs/UserPrefs.xml @@ -1,30 +1,30 @@ - - + + - + - - + + - + - - + + + + - - - - + - - + + + diff --git a/Downloader.cs b/Downloader.cs deleted file mode 100644 index 7f28c45..0000000 --- a/Downloader.cs +++ /dev/null @@ -1,412 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using YoutubeExplode.Videos; -using YoutubeExplode; -using System.Net.Http; -using System.Net; -using System.IO; -using TessesYoutubeDownloader.Server.Models; -using Newtonsoft.Json; - -using YoutubeExplode.Videos.Streams; -using YoutubeExplode.Channels; -using YoutubeExplode.Playlists; - -namespace youtube_downloader.Server.Functions -{ - public class Downloader - { - public static YoutubeClient CreateYoutubeClient() - { - - ServicePointManager -.ServerCertificateValidationCallback += -(sender, cert, chain, sslPolicyErrors) => true; - HttpClientHandler handler = new HttpClientHandler(); - handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; - Http = new HttpClient(handler); - - return new YoutubeExplode.YoutubeClient(Http); - } - - internal static VideoDownloadProgress GetProgress() - { - return P; - } - - static HttpClient Http; - YoutubeClient ytc = CreateYoutubeClient(); - static VideoDownloadProgress P=new VideoDownloadProgress(); - Progress DownloadP =new Progress( (e)=> { P.Progress = (int)(e * 100.0); }); - - List Queue = new List(); - - internal static string GetQueue() - { - string q; - lock (DL.Queue) - { - q = JsonConvert.SerializeObject(DL.Queue.Select(o => o.Video)) ; - } - return q; - } - - internal static void ModQueue(string mvto, string index) - { - try - { - //?mv=up|down|top|bottom|remove,int&i=0,last - lock (DL.Queue) - { - int index2 = 0; - if (index == "last") - { - index2 = DL.Queue.Count - 1; - } - else - { - if (!int.TryParse(index, out index2)) - { - index2 = 0; - } - } - if (index2 >= DL.Queue.Count) - { - index2 = DL.Queue.Count - 1; - } - if (mvto == "top") - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - DL.Queue.Insert(0,v); - } - else if (mvto == "bottom") - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - DL.Queue.Add(v); - } - else if (mvto == "remove") - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - - } - else if (mvto == "up") - { - if (index2 > 0) - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - - DL.Queue.Insert(index2 - 1, v); - } - - } - else if (mvto == "down") - { - if (index2 < DL.Queue.Count - 1) - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - - DL.Queue.Insert(index2 + 1, v); - } - } - else - { - int n1; - - if (int.TryParse(mvto, out n1)) - { - var v = DL.Queue[index2]; - DL.Queue.Remove(v); - if (n1 > index2) - { - DL.Queue.Insert(n1 - 1, v); - } - else - { - DL.Queue.Insert(n1, v); - } - } - } - - } - }catch(Exception ex) - { - _ = ex; - } - } - public bool Continue(string v) - { - if (File.Exists(v)) - { - using(var f = File.OpenRead(v)) - { - return f.Length == 0; - } - } - return true; - } - private string gStorageLocation() - { - if (System.IO.File.Exists("loc.txt")) - { - string loc=System.IO.File.ReadAllText("loc.txt"); - try - { - System.IO.Directory.CreateDirectory(loc); - if (System.IO.Directory.Exists(loc)) - { - return loc; - } - }catch(Exception ex) - { - - } - } - return Environment.CurrentDirectory; - } - public string StorageLocation { get { return gStorageLocation(); } } - private async Task _DownloadVideo(VideoId videoId,Resolution res) - { string infpath= GetPath(true, "Info", videoId + ".json"); - SavedVideoObject sv; - bool exist = File.Exists(videoId); - if (exist) - { - sv = new SavedVideoObject(); - sv.Resolution = res; - sv.Video = Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(infpath)); - } - else - { - var vinfo = await ytc.Videos.GetAsync(videoId); - - - sv = SavedVideo.CreateFrom(res, vinfo, _DownloadThumbnail); - - } - - if (!exist) - { - File.WriteAllText(infpath, JsonConvert.SerializeObject(sv.Video)); - } - lock (Queue) - { - Queue.Insert(0,sv); //new elements get added to begining - } - } - public async Task DownloadThread() - { - do - { - bool canDownload = false; - SavedVideoObject v; - lock (Queue) - { - canDownload= Queue.Count > 0; - if (canDownload) - { - v = Queue[0]; - Queue.RemoveAt(0); - P.Saved = v.Video; - Console.WriteLine($"Download: {v.Video.Title}"); - } - else - { - v = null; - } - } - - if (canDownload) - { - switch (v.Resolution) - { - case Resolution.Convert: - - string mypath = GetPath(true, "Converted", v.Video.Id + "-vidonly.bkp"); - string mypathaudio = GetPath(true, "Audio", v.Video.Id + "incomplete.mp4"); - string mypathCompleteAudio = GetPath(true, "Audio", v.Video.Id + ".mp4"); - string mypathComplete = GetPath(true, "Converted", v.Video.Id + ".mp4"); - string mypathIncompleteConverting = GetPath(true, "Converted", "conv.mkv"); - - if (Continue(mypathComplete)) - { - var s3 = await ytc.Videos.Streams.GetManifestAsync(v.Video.Id); - var best2 = s3.GetAudioOnlyStreams().GetWithHighestBitrate(); - - - - var best = s3.GetVideoOnlyStreams().GetWithHighestVideoQuality(); - P.Length = best.Size.Bytes + best2.Size.Bytes; - ProgressTwo p = new ProgressTwo(best.Size.Bytes, best2.Size.Bytes, DownloadP); - await ytc.Videos.Streams.DownloadAsync(best,mypath, p.Video); - IProgress pv = p.Video; - pv.Report(1); - if (Continue(mypathCompleteAudio)) - { - await ytc.Videos.Streams.DownloadAsync(best2, mypathaudio,p.Audio); - File.Move(mypathaudio, mypathCompleteAudio); - } - IProgress pa = p.Video; - pa.Report(1); - ffmpeg.mux(mypath,mypathCompleteAudio,mypathIncompleteConverting); - - - File.Move(mypathIncompleteConverting, mypathComplete); - } - break; - case Resolution.NoConvert: - string mypath2 = GetPath(true, "NotConverted", v.Video.Id + "incomplete.mp4"); - string mypath2Complete = GetPath(true, "NotConverted", v.Video.Id + ".mp4"); - - if (Continue(mypath2Complete)) - { - var s = await ytc.Videos.Streams.GetManifestAsync(v.Video.Id); - var best = s.GetMuxedStreams().GetWithHighestVideoQuality(); - P.Length = best.Size.Bytes; - - await ytc.Videos.Streams.DownloadAsync(best, mypath2, DownloadP); - File.Move(mypath2, mypath2Complete); - } - - - break; - case Resolution.Audio: - string mypath3 = GetPath(true, "Audio", v.Video.Id + "incomplete.mp4"); - string mypath3Complete = GetPath(true, "Audio", v.Video.Id + ".mp4"); - if (Continue(mypath3Complete)) - { - var s2 = await ytc.Videos.Streams.GetManifestAsync(v.Video.Id); - var best2 = s2.GetAudioOnlyStreams().GetWithHighestBitrate(); - P.Length = best2.Size.Bytes; - await ytc.Videos.Streams.DownloadAsync(best2, mypath3, DownloadP); - File.Move(mypath3, mypath3Complete); - } - break; - } - } - System.Threading.Thread.Sleep(1); - } - while (true); - } - private void _DownloadThumbnail(int w,int h,string id,string tnail) - { - try - { - string p = GetPath(true,"Thumbnails", w.ToString() + 'x' + h.ToString(), id + ".jpg"); - if (!File.Exists(p)) - { - ffmpeg.download_thumbnail(tnail, p); - } - } - catch(Exception ex) - { - _ = ex; - } - } - - internal static List GetQueueItems() - { - return DL.Queue; - } - - private async Task _DownloadChannel(ChannelId id,Resolution res) - { - var c=await ytc.Channels.GetAsync(id); - SavedChannel c2 = SavedChannel.FromChannel(c, _DownloadThumbnail); - string infpath = GetPath(true, "Channel", id + ".json"); - File.WriteAllText(infpath, JsonConvert.SerializeObject(c2)); - var cvids = ytc.Channels.GetUploadsAsync(id).GetAsyncEnumerator(); - while (await cvids.MoveNextAsync()) - { - await _DownloadVideo(cvids.Current.Id, res); - } - - } - private async Task _DownloadPlaylist(PlaylistId id,Resolution res) - { - SavedPlaylist pl =await SavedPlaylist.FromPlaylistId(res, ytc, id, DownloadVideo, _DownloadThumbnail); - string infpath = GetPath(true, "Playlist", id + ".json"); - File.WriteAllText(infpath, JsonConvert.SerializeObject(pl)); - } - private async Task _DownloadUser(UserName name, Resolution res) - { - var c = await ytc.Channels.GetByUserAsync(name); - SavedChannel c2 = SavedChannel.FromChannel(c, _DownloadThumbnail); - string infpath = GetPath(true, "Channels", c.Id + ".json"); - File.WriteAllText(infpath, JsonConvert.SerializeObject(c2)); - var cvids = ytc.Channels.GetUploadsAsync(c.Id).GetAsyncEnumerator(); - while (await cvids.MoveNextAsync()) - { - await _DownloadVideo(cvids.Current.Id, res); - } - - } - public static void DownloadVideo(VideoId v,Resolution res) - { - DL._DownloadVideo(v, res).GetAwaiter().GetResult(); - } - public static void DownloadVideo(VideoId v) - { - DownloadVideo(v, Resolution.NoConvert); - } - public static void DownloadPlaylist(PlaylistId id,Resolution res) - { - DL._DownloadPlaylist(id, res).GetAwaiter().GetResult(); - } - public static void DownloadPlaylist(PlaylistId id) - { - DownloadPlaylist(id, Resolution.NoConvert); - } - public static void DownloadChannel(ChannelId id,Resolution res) - { - DL._DownloadChannel(id, res).GetAwaiter().GetResult(); - } - public static void DownloadChannel(ChannelId id) - { - DownloadChannel(id, Resolution.NoConvert); - } - public static void DownloadUser(UserName name, Resolution res) - { - DL._DownloadUser(name, res).GetAwaiter().GetResult(); - } - public static void DownloadUser(UserName name) - { - DownloadUser(name, Resolution.NoConvert); - } - public string GetPath(bool createParent,params string[] _path) - { - - if (createParent) - { - string dir = GetPath(_path); - try - { - Directory.CreateDirectory(Path.GetDirectoryName(dir)); - }catch(Exception ex) - { - _ = ex; - } - return dir; - } - else - { - return GetPath(_path); - } - } - private string GetPath(params string[] _path) - { - string[] array2 = new string[_path.Length + 1]; - array2[0] = StorageLocation; - Array.Copy(_path, 0, array2, 1,_path.Length); - return System.IO.Path.Combine(array2); - } - public static Downloader DL = new Downloader(); - - } -} diff --git a/Program.cs b/Program.cs index 2b10e5d..b660c9e 100644 --- a/Program.cs +++ b/Program.cs @@ -31,6 +31,20 @@ namespace youtube_downloader // we need to get our app name so that // we can create unique names for our mutex and our pipe string webSitePath = Server.Functions.Downloader.DL.GetPath(true, "WebSite"); + + /*Route.Add("/api/endpoint/", (rq, rp, args) => + { + rp.AsText(HandleRequest(rq.InputStream,rq.CurrentEncoding), "application/json"); + }, + "POST");*/ + + Route.Add("/api/upload/", (rq,rp,args) => { + var files = rq.ParseBody(args); + foreach (var f in files.Values) + f.Save(Path.Combine(webSitePath,f.FileName)); + + },"POST") + Route.Add("/", (rq, rp, args) => { rp.AsFile(rq, Path.Combine(webSitePath, "index.html")); @@ -41,6 +55,13 @@ namespace youtube_downloader string json = JsonConvert.SerializeObject(Server.Functions.Downloader.Search(search)); rp.AsText(json, "application/json"); + }); + Route.Add("/api/SearchOnly/{text}", (rq, rp, args) => + { + string search = System.Web.HttpUtility.UrlDecode(args["text"]); + string json = JsonConvert.SerializeObject(Server.Functions.Downloader.Search(search,false)); + rp.AsText(json, "application/json"); + }); Route.Add("/api/Storage/GetDirectories/{Path}", (rq, rp, args) => { @@ -137,11 +158,21 @@ namespace youtube_downloader rp.AsRedirect("/"); }); - Route.Add("/api/AddUserOnly/{R}/{Id}", (rq, rp, args) => + Route.Add("/api/AddUserOnly/{Id}", (rq, rp, args) => { Server.Functions.Downloader.DownloadUserOnly(System.Web.HttpUtility.UrlDecode(args["Id"])); rp.AsRedirect("/"); }); + Route.Add("/api/AddPlaylistOnly/{Id}", (rq, rp, args) => + { + Server.Functions.Downloader.DownloadPlaylistOnly(System.Web.HttpUtility.UrlDecode(args["Id"])); + rp.AsRedirect("/"); + }); + Route.Add("/api/AddVideoInfo/{Id}", (rq, rp, args) => + { + Server.Functions.Downloader.DownloadVideoInfo(System.Web.HttpUtility.UrlDecode(args["Id"])); + rp.AsRedirect("/"); + }); Route.Add("/api/AddUserRes/{R}/{Id}", (rq, rp, args) => { Server.Functions.Downloader.DownloadUser(System.Web.HttpUtility.UrlDecode(args["Id"]), (Resolution)int.Parse(args["R"])); @@ -202,8 +233,17 @@ namespace youtube_downloader HttpServer.ListenAsync(3250, CancellationToken.None, Route.OnHttpRequestAsync).Wait(); } } + /* + private static string HandleRequest(Stream inputStream, Encoding currentEncoding) + { + using (var streamReader = new StreamReader(inputStream, currentEncoding)) + { + return Newtonsoft.Json.JsonConvert.SerializeObject(HandleRequest(Newtonsoft.Json.JsonConvert.DeserializeObject(streamReader.ReadToEnd())); + } + } + private static YoutubeDownloaderResponse HandleRequest(YoutubeDownloaderRequest data) + { - - + }*/ } } diff --git a/Server/Functions/Downloader.cs b/Server/Functions/Downloader.cs index 1c600db..2f10507 100644 --- a/Server/Functions/Downloader.cs +++ b/Server/Functions/Downloader.cs @@ -321,7 +321,9 @@ namespace youtube_downloader.Server.Functions myProgress.Report(1); } + /* This is why videos get corrupted */ srcStrm.Seek(destStrm.Length, SeekOrigin.Begin); + destStrm.Seek(destStrm.Length,SeekOrigin.Begin); byte[] buffer = new byte[4096]; int read = 0; do @@ -357,7 +359,10 @@ namespace youtube_downloader.Server.Functions myProgress.Report(1); } + /* This is why videos get corrupted */ srcStrm.Seek(destStrm.Length, SeekOrigin.Begin); + destStrm.Seek(destStrm.Length,SeekOrigin.Begin); + byte[] buffer = new byte[4096]; int read = 0; do @@ -407,7 +412,9 @@ namespace youtube_downloader.Server.Functions myProgress.Report(1); } + /* This is why videos get corrupted */ srcStrm.Seek(destStrm.Length, SeekOrigin.Begin); + destStrm.Seek(destStrm.Length,SeekOrigin.Begin); byte[] buffer = new byte[4096]; int read = 0; do @@ -451,8 +458,10 @@ namespace youtube_downloader.Server.Functions myProgress.Report(1); } + /* This is why videos get corrupted */ srcStrm.Seek(destStrm.Length, SeekOrigin.Begin); - byte[] buffer = new byte[4096]; + destStrm.Seek(destStrm.Length,SeekOrigin.Begin); + byte[] buffer = new byte[4096]; int read = 0; do { @@ -476,7 +485,7 @@ namespace youtube_downloader.Server.Functions Console.WriteLine(ex.Message); } } - System.Threading.Thread.Sleep(1); + System.Threading.Thread.Sleep(4000); } while (true); } @@ -517,32 +526,42 @@ namespace youtube_downloader.Server.Functions _ = ex; } } - public static async Task> Search(string text) + public static async Task> Search(string text,bool downloadThumbs=true) { List media = new List(); try { - await DL.ytc.Search.GetVideosAsync(text).ForEachAsync((e) => { - foreach(var t in e.Thumbnails) + await DL.ytc.Search.GetVideosAsync(text).ForEachAsync((e) => + { + if (downloadThumbs) { - DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + foreach (var t in e.Thumbnails) + { + DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + } } - media.Add(new SavedMedia() {Title = e.Title, Id = e.Id, Kind = InfoType.Video }); - + media.Add(new SavedMedia() { Title = e.Title, Id = e.Id, Kind = InfoType.Video }); + }); await DL.ytc.Search.GetPlaylistsAsync(text).ForEachAsync((e) => { - foreach (var t in e.Thumbnails) + if (downloadThumbs) { - DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + foreach (var t in e.Thumbnails) + { + DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + } } media.Add(new SavedMedia() { Title = e.Title, Id = e.Id, Kind = InfoType.Playlist }); }); await DL.ytc.Search.GetChannelsAsync(text).ForEachAsync((e) => { - foreach (var t in e.Thumbnails) + if (downloadThumbs) { - DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + foreach (var t in e.Thumbnails) + { + DL._DownloadThumbnail2(t.Resolution.Width, t.Resolution.Height, e.Id, t.Url); + } } media.Add(new SavedMedia() { Title = e.Title, Id = e.Id, Kind = InfoType.Channel }); @@ -571,6 +590,19 @@ namespace youtube_downloader.Server.Functions } } } + public static void DownloadVideoInfo(string id, Resolution res) + { + VideoId? v = VideoId.TryParse(id); + if (v.HasValue) + { + InfomationQueueItem item = new InfomationQueueItem(v.Value, res, false); + lock (DL.infoQueue) + { + DL.infoQueue.Insert(0, item); + } + } + } + public static void DownloadVideo(string v) { DownloadVideo(v, Resolution.NoConvert); @@ -587,6 +619,18 @@ namespace youtube_downloader.Server.Functions } } } + public static void DownloadPlaylistOnly(string id, Resolution res) + { + PlaylistId? v = PlaylistId.TryParse(id); + if (v.HasValue) + { + InfomationQueueItem item = new InfomationQueueItem(v.Value, res, false); + lock (DL.infoQueue) + { + DL.infoQueue.Insert(0, item); + } + } + } public static void DownloadPlaylist(string id) { DownloadPlaylist(id, Resolution.NoConvert); diff --git a/mono_crash.12ecaa89f.0.json b/mono_crash.12ecaa89f.0.json index 925884d..d19bdfe 100644 --- a/mono_crash.12ecaa89f.0.json +++ b/mono_crash.12ecaa89f.0.json @@ -15,125 +15,25 @@ "suspend" : "hybrid" }, "memory" : { - "minor_gc_time" : "5782050483", - "major_gc_time" : "95219144", - "minor_gc_count" : "94700", - "major_gc_count" : "99", - "major_gc_time_concurrent" : "461311594" + "minor_gc_time" : "11806297971", + "major_gc_time" : "48644374", + "minor_gc_count" : "149297", + "major_gc_count" : "58", + "major_gc_time_concurrent" : "154359880" }, "threads" : [ - { - "is_managed" : false, - "offset_free_hash" : "0x0", - "offset_rich_hash" : "0x0", - "crashed" : false, - "native_thread_id" : "0x7f2710426fc0", - "thread_info_addr" : "0x56087de06310", - "thread_name" : "GUI Thread", - "ctx" : { - "IP" : "0x7f271097b618", - "SP" : "0x7ffdb624d370", - "BP" : "0x5608857871c0" - }, - "unmanaged_frames" : [ - { - "is_managed" : "false", - "native_address" : "0x56087badc4c9", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bcc2319", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bcc3655", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bccc6c7", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bb315b5", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x7f271097d3c0", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x7f271097b618", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x7f271097b743", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bd0e29c", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087baab6ff", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087bab2f88", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087baa1f1c", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x7f271044f0b3", - "native_offset" : "0x00000" - } -, - { - "is_managed" : "false", - "native_address" : "0x56087baa253a", - "native_offset" : "0x00000" - } - - ] - }, { "is_managed" : true, "offset_free_hash" : "0x12ecaa89f", "offset_rich_hash" : "0x12ecaa921", "crashed" : true, - "native_thread_id" : "0x7f270db93700", - "thread_info_addr" : "0x7f2708000b60", + "native_thread_id" : "0x7f6018793700", + "thread_info_addr" : "0x7f6014000b60", "thread_name" : "Finalizer", "ctx" : { - "IP" : "0x7f27104a1a61", - "SP" : "0x7f270db922b0", - "BP" : "0x7f270db92820" + "IP" : "0x7f601afb9a61", + "SP" : "0x7f60187922b0", + "BP" : "0x7f6018792820" }, "managed_frames" : [ { @@ -222,79 +122,79 @@ "unmanaged_frames" : [ { "is_managed" : "false", - "native_address" : "0x56087badc4c9", + "native_address" : "0x55db49a534c9", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bcc2319", + "native_address" : "0x55db49c39319", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bcc3655", + "native_address" : "0x55db49c3a655", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bccc82c", + "native_address" : "0x55db49c4382c", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bb322a7", + "native_address" : "0x55db49aa92a7", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bb324b9", + "native_address" : "0x55db49aa94b9", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bade7af", + "native_address" : "0x55db49a557af", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x56087bb2bb13", + "native_address" : "0x55db49aa2b13", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x7f27104a1a61", + "native_address" : "0x7f601afb9a61", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x7f27104b6d4a", + "native_address" : "0x7f601afced4a", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x7f2707f720f3", + "native_address" : "0x7f6012aa10f3", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x7f2707f49301", + "native_address" : "0x7f6012a78301", "native_offset" : "0x00000" } , { "is_managed" : "false", - "native_address" : "0x7f2707f303ae", + "native_address" : "0x7f6012a5f3ae", "native_offset" : "0x00000" } , @@ -309,6 +209,106 @@ "il_offset" : "0x00000" } + ] +}, +{ + "is_managed" : false, + "offset_free_hash" : "0x0", + "offset_rich_hash" : "0x0", + "crashed" : false, + "native_thread_id" : "0x7f601af3efc0", + "thread_info_addr" : "0x55db4b39f280", + "thread_name" : "GUI Thread", + "ctx" : { + "IP" : "0x7f601b493618", + "SP" : "0x7ffe8121c8c0", + "BP" : "0x55db5296bb00" + }, + "unmanaged_frames" : [ + { + "is_managed" : "false", + "native_address" : "0x55db49a534c9", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49c39319", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49c3a655", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49c436c7", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49aa85b5", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x7f601b4953c0", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x7f601b493618", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x7f601b493743", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49c8529c", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49a226ff", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49a29f88", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49a18f1c", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x7f601af670b3", + "native_offset" : "0x00000" + } +, + { + "is_managed" : "false", + "native_address" : "0x55db49a1953a", + "native_offset" : "0x00000" + } + ] } ] diff --git a/packages.config b/packages.config index 42b5d95..04747c3 100644 --- a/packages.config +++ b/packages.config @@ -1,26 +1,25 @@  - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/youtube-downloader.csproj b/youtube-downloader.csproj index 2d8e64f..4b029a1 100644 --- a/youtube-downloader.csproj +++ b/youtube-downloader.csproj @@ -1,104 +1,87 @@ - - - + + Debug - AnyCPU - {55AFA327-A943-42F1-BEAB-02A4CBF389FD} + x86 + {E26F8159-6B4B-4660-A7A4-D0333DFEF0DD} Exe - youtube_downloader + youtubedownloader youtube-downloader - v4.8 - 512 - true - true - + v4.7 - - AnyCPU + true full false - bin\Debug\ - DEBUG;TRACE + bin\Debug + DEBUG; prompt 4 + true + x86 - - AnyCPU - pdbonly + true - bin\Release\ - TRACE + bin\Release prompt 4 + true + x86 - - packages\Microsoft.Bcl.AsyncInterfaces.6.0.0-preview.6.21352.12\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - - - - - packages\System.Linq.Async.5.0.0\lib\net461\System.Linq.Async.dll - - - - packages\System.Runtime.CompilerServices.Unsafe.6.0.0-preview.6.21352.12\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - packages\System.Text.Encodings.Web.6.0.0-preview.6.21352.12\lib\net461\System.Text.Encodings.Web.dll - - - packages\System.Text.Json.6.0.0-preview.6.21352.12\lib\net461\System.Text.Json.dll - - - - - - - - - - packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll - - - packages\AngleSharp.0.14.0\lib\net472\AngleSharp.dll - - - packages\Simple-HTTP.1.0.6\lib\net47\SimpleHTTP.dll + + packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + packages\System.Memory.4.5.4\lib\net461\System.Memory.dll packages\System.Text.Encoding.CodePages.4.5.0\lib\net461\System.Text.Encoding.CodePages.dll + + packages\AngleSharp.0.14.0\lib\net461\AngleSharp.dll + + + packages\System.Text.Encodings.Web.4.7.1\lib\net461\System.Text.Encodings.Web.dll + packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + + packages\System.Text.Json.4.7.2\lib\net461\System.Text.Json.dll + + + + packages\YoutubeExplode.6.0.5\lib\net461\YoutubeExplode.dll + packages\MimeTypesMap.1.0.2\lib\net45\MimeTypesMap.dll - - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - packages\System.IO.4.3.0\lib\net462\System.IO.dll packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll @@ -111,29 +94,30 @@ packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll - - packages\YoutubeExplode.6.0.5\lib\net461\YoutubeExplode.dll + + packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll + + + packages\Simple-HTTP.1.0.6\lib\net47\SimpleHTTP.dll - + - - - - - + + + + + + + - - - - - + \ No newline at end of file