/// <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);
            }
        }