示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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);
        }
        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);
        }