public static bool DownloadAll(out Downloader handler) { var bundles = new List <BundleRef>(); for (var i = 0; i < serverVersions.bundles.Count; i++) { var bundle = serverVersions.bundles[i]; if (IsNew(bundle)) { bundles.Add(bundle); } } if (bundles.Count > 0) { var downloader = new Downloader(); foreach (var item in bundles) { downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len); } Downloaders.Add(downloader); handler = downloader; return(true); } handler = null; return(false); }
private void ProcessVideos(IEnumerable <YTVideo> videos, SeenItems seenItems, string downloadFolder, int season, LocalMetadata localMetadata) { var client = new YoutubeClient(); var seasonFolder = Path.Combine(downloadFolder, $"Season {season}"); Directory.CreateDirectory(seasonFolder); var episodeNumber = GetLastEpisodeNumber(seasonFolder); videos.ToList().ForEach(video => { episodeNumber++; Console.WriteLine($" 0.00% Downloading {video.Id} {episodeNumber} {video.Title}"); Console.SetCursorPosition(0, Console.CursorTop - 1); var videoFileNameBase = $"S{season.ToString().PadLeft(2, '0')}E{episodeNumber.ToString("N0").PadLeft(2, '0')} " + video.Title.Aggregate("", (agg, cur) => Path.GetInvalidFileNameChars().Contains(cur) ? agg : agg + cur); var progress = new ConcurrentProgress <double>(d => { Console.SetCursorPosition(0, Console.CursorTop); Console.Write((d * 100).ToString("N2").PadLeft(6)); }); Downloaders.DownloadVideo(client, video, seasonFolder, videoFileNameBase, progress); Downloaders.DownloadAllCaptions(client, video, seasonFolder, videoFileNameBase, progress); CreateMetadata(video, seasonFolder, videoFileNameBase, localMetadata); seenItems.SaveId(video.Id); Console.WriteLine(); }); }
private async Task InitilizeTasks() { int max = Config.MaxDownloaders; for (int i = 0; i < Config.MaxDownloaders; i++) { TaskState state = new TaskState(); Task task = new Task <Task>(DoDownloadWork, state); //Task task = DoDownloadWork(state); state.Id = task.Id; Downloaders.TryAdd(i, task); Tasks.TryAdd(task.Id, task); } for (int i = 0; i < Config.MaxProcessors; i++) { TaskState state = new TaskState(); Task task = new Task <Task>(DoWork, state, TaskCreationOptions.LongRunning); state.Id = task.Id; Workers.TryAdd(i, task); Tasks.TryAdd(task.Id, task); } }
public static MangaDownloaderBase GetDownloader(Downloaders downloader) { if (downloader == Downloaders.ReadMangaToday) { return new ReadMangaToday(); } else if (downloader == Downloaders.Mangafox) { return new Mangafox(); } else if (downloader == Downloaders.Kissmanga) { return new Kissmanga(); } else return null; }
public static bool DownloadAll(string[] patches, out Downloader handler) { if (updateAll) { return(DownloadAll(out handler)); } var bundles = new List <BundleRef>(); foreach (var patch in patches) { var saved = PlayerPrefs.GetString(patch, string.Empty); if (!saved.Equals(currentVersions.ver)) { var newFiles = GetNewFiles(patch); foreach (var file in newFiles) { if (!bundles.Exists(x => x.name.Equals(file.name))) { bundles.Add(file); } } } } if (bundles.Count > 0) { var downloader = new Downloader(); foreach (var item in bundles) { downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len); } Downloaders.Add(downloader); handler = downloader; handler.onFinished += () => { foreach (var item in patches) { PlayerPrefs.SetString(item, currentVersions.ver); } }; return(true); } handler = null; return(false); }
private static void UpdateDownloaders() { if (Downloaders.Count > 0) { for (var i = 0; i < Downloaders.Count; ++i) { var downloader = Downloaders[i]; downloader.Update(); if (downloader.isDone) { Log("RemoveDownloader:" + i); Downloaders.RemoveAt(i); --i; } } } }
private void SaveVideo(YTVideo video, string downloadFolder, string videoFileNameBase) { var client = new YoutubeClient(); Console.WriteLine($" 0.00% Downloading {video.Id} {video.Title}"); Console.SetCursorPosition(0, Console.CursorTop - 1); var progress = new ConcurrentProgress <double>(d => { Console.SetCursorPosition(0, Console.CursorTop); Console.Write((d * 100).ToString("N2").PadLeft(6)); }); Downloaders.DownloadVideo(client, video, downloadFolder, videoFileNameBase, progress); Downloaders.DownloadAllCaptions(client, video, downloadFolder, videoFileNameBase, progress); Console.WriteLine(); }
public static bool DownloadAll(string[] patches, out Downloader handler) { if (updateAll) { return(DownloadAll(out handler)); } var bundles = new List <BundleRef>(); foreach (var patch in patches) { var newFiles = GetNewFiles(patch); foreach (var file in newFiles) { if (!bundles.Exists(x => x.name.Equals(file.name))) { bundles.Add(file); } } } if (bundles.Count > 0) { var downloader = new Downloader(); foreach (var item in bundles) { downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len); } Downloaders.Add(downloader); handler = downloader; return(true); } handler = null; return(false); }
/* * public int SetProxy(string ProxyURL) { * var cnt = 0; * * this.Downloaders.ForEach(x => { * if (x is IProxy) { * (x as IProxy).ProxyURL = ProxyURL; * cnt++; * } * }); * * return cnt; * } */ public void AddDownloader(IFileDownloader downloader) { Downloaders.Add(downloader); }
private void DownloadFinishedCallback(Downloaders.AbstractDownloader downloader, int id) { Log.Info("Finished downloading file with id '{0}'", id); // Don't report finished signal when download is called blocking if (id != BLOCKING_DOWNLOAD_ID) { lock (this) { // Remove Download this.Downloads.Remove(id); } } // TODO: Maybe dangerous when disconnecting while other download // is still running? // Disconnect signals downloader.Status -= new Downloaders.StatusHandler( this.OnDownloadStatus ); downloader.Finished -= new Downloaders.FinishedHandler( this.DownloadFinishedCallback ); this.OnDownloadFinished(id); }
private async Task InitializeMangaDownloader(Downloaders downloader) { ToggleAllButtons(); await Task.Run(() => { if (mangaDownloader != null) { mangaDownloader.Dispose(); } mangaDownloader = MangaDownloaderBase.GetDownloader(downloader); mangaDownloader.ChapterDownloadEvent += MangaDownloader_ChapterDownloadEvent; mangaDownloader.PageDownloadEvent += MangaDownloader_PageDownloadEvent; mangaDownloader.ChapterHtmlDownloadEvent += MangaDownloader_ChapterHtmlDownloadEvent; }); ToggleAllButtons(); }