public void Download(IChapterRecord chapter, string outputPath, IDownloadFormatProvider formatProvider) { var downloadViewModel = new DownloadViewModel(new DownloadedChapterInfo(chapter), _downloadsSemaphore); downloadViewModel.RemoveFromCollection += DownloadViewModel_RemoveFromCollection; downloadViewModel.DownloadStarted += DownloadViewModel_DownloadStarted; Downloads.Add(downloadViewModel); downloadViewModel.DownloadChapter(outputPath, formatProvider); OnPropertyChanged(() => HasActiveDownloads); }
public void RetryDownload(object parameter) { if (Downloader == null) { throw new InvalidOperationException("There is no downloader configured for the chapter's scraper."); } // we will be downloading the file now State = DownloadState.Ok; Completed = false; CancelText = ButtonCancelText; _cancelDownloadCommand.Disabled = false; _retryDownloadCommand.Disabled = true; IDownloadFormatProvider formatProvider = ScraperLoader.Instance.GetFirstOrDefaultDownloadFormatProvider(_downloadInfo.DownloadFormatProviderId); Downloader.DownloadChapterAsync(_downloadSemaphore, Chapter, _downloadInfo.DownloadFolder, formatProvider); }
public void DownloadChapter(string outputPath, IDownloadFormatProvider formatProvider) { if (string.IsNullOrEmpty(outputPath)) { throw new ArgumentException("Invalid output path", "outputPath"); } if (formatProvider == null) { throw new ArgumentNullException("formatProvider"); } if (Downloader == null) { throw new InvalidOperationException("There is no downloader configured for the chapter's scraper."); } _downloadInfo.DownloadFolder = outputPath; Downloader.DownloadChapterAsync(_downloadSemaphore, Chapter, _downloadInfo.DownloadFolder, formatProvider); }
public virtual void DownloadChapterAsync(ISemaphore semaphore, IChapterRecord chapter, string outputFolder, IDownloadFormatProvider formatProvider) { if (_backgroundWorker.IsBusy) throw new InvalidOperationException("Download is currently in progress."); if (semaphore == null) throw new ArgumentNullException("semaphore"); if (chapter == null) throw new ArgumentNullException("chapter"); if (String.IsNullOrEmpty(outputFolder)) throw new ArgumentException("Output folder must not be null or empty.", "outputFolder"); if (formatProvider == null) throw new ArgumentNullException("formatProvider"); var workerParams = new WorkerParams() { Chapter = chapter, Semaphore = semaphore, OutputFolder = outputFolder, FormatProvider = formatProvider }; _backgroundWorker.RunWorkerAsync(workerParams); }
private void DownloadChapter(BackgroundWorker backgroundWorker, DoWorkEventArgs e, IChapterRecord chapter, string outputFolder, IDownloadFormatProvider formatProvider) { // add task -> export result AddTask(); var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "MangaScraper", Guid.NewGuid().ToString())); try { AddTask(); backgroundWorker.ReportProgress(GetPercentComplete(), "Resolving list of pages."); var pages = _pageResolver(chapter); AddTask(pages.Count); TaskDone(); backgroundWorker.ReportProgress(GetPercentComplete(), String.Format("List of pages resolved, chapter has {0} pages.", pages.Count)); int current = 1; foreach (var page in pages) { if (backgroundWorker.CancellationPending) { e.Cancel = true; return; } backgroundWorker.ReportProgress(GetPercentComplete(), String.Format("Downloading page {0} from {1}", current, pages.Count)); string imgUrl = _imageFinder(page.Value); string filePath = GetUniqueFileName(directory.FullName, page.Key, Path.GetExtension(imgUrl)); try { RetryHelper.Retry(() => WebHelper.DownloadImage(imgUrl, filePath)); } catch (Exception ex) { _log.Error("Unable to download image from url: '" + imgUrl + "' to '" + filePath + "'", ex); } current++; TaskDone(); } backgroundWorker.ReportProgress(GetPercentComplete(), "All pages downloaded."); backgroundWorker.ReportProgress(GetPercentComplete(), "Exporting chapter"); if (backgroundWorker.CancellationPending) { e.Cancel = true; return; } string path; formatProvider.SaveDownloadedChapter(chapter, directory, outputFolder, out path); // save result path of the downloaded file e.Result = path; TaskDone(); backgroundWorker.ReportProgress(GetPercentComplete(), "Download completed"); } finally { // remove temp dir directory.Delete(true); } }
public void DownloadChapter(string outputPath, IDownloadFormatProvider formatProvider) { if (string.IsNullOrEmpty(outputPath)) throw new ArgumentException("Invalid output path", "outputPath"); if (formatProvider == null) throw new ArgumentNullException("formatProvider"); if (Downloader == null) throw new InvalidOperationException("There is no downloader configured for the chapter's scraper."); _downloadInfo.DownloadFolder = outputPath; Downloader.DownloadChapterAsync(_downloadSemaphore, Chapter, _downloadInfo.DownloadFolder, formatProvider); }
public virtual void DownloadChapterAsync(ISemaphore semaphore, IChapterRecord chapter, string outputFolder, IDownloadFormatProvider formatProvider) { if (_backgroundWorker.IsBusy) { throw new InvalidOperationException("Download is currently in progress."); } if (semaphore == null) { throw new ArgumentNullException("semaphore"); } if (chapter == null) { throw new ArgumentNullException("chapter"); } if (String.IsNullOrEmpty(outputFolder)) { throw new ArgumentException("Output folder must not be null or empty.", "outputFolder"); } if (formatProvider == null) { throw new ArgumentNullException("formatProvider"); } var workerParams = new WorkerParams() { Chapter = chapter, Semaphore = semaphore, OutputFolder = outputFolder, FormatProvider = formatProvider }; _backgroundWorker.RunWorkerAsync(workerParams); }