private async Task DownloadChapter(DownloadChapterTask task, string mangaLocalPath, IProgress <int> progress) { var chapter = task.Chapter; progress.Report(0); var service = FrameworkProvider.GetService(chapter.Url); var images = await service.FindImages(chapter, new Progress <int>(count => { progress.Report(count / 2); }), _source.Token); var tempFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); Directory.CreateDirectory(tempFolder); await DownloadImages(images, tempFolder, progress); var folderName = chapter.Name; var finalFolder = Path.Combine(mangaLocalPath, folderName); if (task.Formats.Contains(OutputFormat.Folder)) { if (!Directory.Exists(finalFolder)) { Directory.CreateDirectory(finalFolder); } ExtensionHelper.SuperMove(tempFolder, finalFolder); } if (task.Formats.Contains(OutputFormat.CBZ)) { PackageCbzHelper.Create(tempFolder, Path.Combine(task.SaveToFolder, task.Chapter.Name + ".cbz")); } progress.Report(100); }
private async Task DownloadChapter(DownloadChapterTask task, IProgress <int> progress) { var chapter = task.Chapter; progress.Report(0); var service = ServiceManager.GetService(chapter.Url); var images = await service.FindImages(chapter, new Progress <int>(count => { progress.Report(count / 2); }), _source.Token); var tempFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); Directory.CreateDirectory(tempFolder); await DownloadImages(images, tempFolder, progress); if (task.Formats.Contains(OutputFormat.Folder)) { if (!Directory.Exists(task.SaveToFolder)) { Directory.CreateDirectory(task.SaveToFolder); } ExtensionHelper.SuperMove(tempFolder, task.SaveToFolder); } if (task.Formats.Contains(OutputFormat.CBZ)) { cbz.Create(tempFolder, task.SaveToFolder + ".cbz"); } progress.Report(100); }
private async Task DownloadChapter(DownloadChapterTask task, IProgress <int> progress) { var chapter = task.Chapter; progress.Report(0); var service = serviceManager.GetService(chapter.Url); var images = await service.FindImages(chapter, new Progress <int>(count => { progress.Report(count / 2); }), cancelSource.Token); var tempFolder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); Directory.CreateDirectory(tempFolder); await DownloadImages(images, tempFolder, progress); foreach (var format in task.Formats) { var factory = outputFactory.CreateOutput(format); factory.CreateOutput(tempFolder, task.SaveToFolder); } progress.Report(100); }
private void btnRemove_Click(object sender, EventArgs e) { foreach (DataGridViewRow item in dgvQueueChapter.SelectedRows) { DownloadChapterTask chapter = (DownloadChapterTask)item.DataBoundItem; if (chapter.IsBusy == false) { _downloadQueue.Remove(chapter); } } }
/// <summary> /// Run task download a chapter /// </summary> /// <param name="task">Contain chapter and save to path</param> /// <param name="progress">Callback to report progress</param> /// <returns></returns> public async Task RunDownloadTaskAsync(DownloadChapterTask task, IProgress <int> progress) { Logger.Info("> DownloadChapter: {0} To: {1}", task.Chapter.Url, task.SaveToFolder); await Task.Run(async() => { try { _source = new CancellationTokenSource(); await _sema.WaitAsync(); task.IsBusy = true; await DownloadChapter(task, task.SaveToFolder, progress); } catch (Exception ex) { Logger.Error(ex, "Failed to download chapter: {0}", task.Chapter.Url); throw; } finally { task.IsBusy = false; _sema.Release(); } }); }
/// <summary> /// Run task download a chapter /// </summary> /// <param name="task">Contain chapter and save to path</param> /// <param name="progress">Callback to report progress</param> /// <returns></returns> public async Task RunDownloadTaskAsync(DownloadChapterTask task, IProgress <int> progress) { logger.Info($"> DownloadChapter: {task.Chapter.Url} To: {task.SaveToFolder}"); await Task.Run(async() => { try { cancelSource = new CancellationTokenSource(); await semaphore.WaitAsync(); task.IsBusy = true; await DownloadChapter(task, progress); } catch (Exception ex) { logger.Error(ex, $"Failed to download chapter: {task.Chapter.Url}"); throw; } finally { task.IsBusy = false; semaphore.Release(); } }); }