Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 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);
         }
     }
 }
Пример #5
0
 /// <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();
         }
     });
 }
Пример #6
0
 /// <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();
         }
     });
 }