/// <summary> /// The function starts the rebuild process /// </summary> /// <returns></returns> public async Task Rebuild(Constants.Settings.OverwriteMode overwriteMode = Constants.Settings.OverwriteMode.IgnoreExisting) { var all = 0; DomainLists.DownloadedFilesCountersList.Clear(); _overwriteMode = overwriteMode; // save all files and pages locally var htmlCount = Task.Run(() => SaveList(DomainLists.HtmlFilesList["available"], "html"), _cancellationToken); var jsCount = Task.Run(() => SaveList(DomainLists.JsFilesList["available"], "js"), _cancellationToken); var cssCount = Task.Run(() => SaveList(DomainLists.CssFilesList["available"], "css"), _cancellationToken); var imgsCount = Task.Run(() => SaveList(DomainLists.ImgsList["available"], "images"), _cancellationToken); await Task.WhenAll(htmlCount, jsCount, cssCount, imgsCount); if (_cancellationToken.IsCancellationRequested) { return; } DomainLists.DownloadedFilesCountersList.Add("pages", htmlCount.Result); DomainLists.DownloadedFilesCountersList.Add("js", jsCount.Result); DomainLists.DownloadedFilesCountersList.Add("css", cssCount.Result); DomainLists.DownloadedFilesCountersList.Add("images", imgsCount.Result); all = htmlCount.Result + jsCount.Result + cssCount.Result + imgsCount.Result; DomainLists.DownloadedFilesCountersList.Add("all", all); UpdateRebuiltStatus(); }
/// <summary> /// /// </summary> public async Task RebuildList(IProgress <KeyValuePair <string, KeyValuePair <string, int> > > progress, CancellationToken ct, Constants.Settings.OverwriteMode overwriteMode = Constants.Settings.OverwriteMode.IgnoreExisting) { if (Lists["toRebuild"].Count > 0) { var tasks = new ConcurrentBag <Task>(); Parallel.ForEach(Lists["toRebuild"], webSite => { webSite.SetProgressAndCancellation(progress, ct); tasks.Add(Task.Run(() => webSite.Rebuild(overwriteMode))); }); await Task.WhenAll(tasks); } }