public async Task DownloadPageAsync(PageResolve page) { var resolveProgress = 10; var progressMax = (int)(page.Resources.Count * 1.25) + resolveProgress; var saveProgress = progressMax - page.Resources.Count; var rootPath = $"{configuration.AppSettings.SaveConfig.RootLocalDirectory}\\{page.Id}"; Ready(progressMax); Update(resolveProgress); for (var i = 0; i < page.Resources.Count; i++) { var r = page.Resources[i]; Debug.Print($"=== Content-Type: {r.ContentType} Url: {r.Url} ==="); try { var resourceLocalDir = $"{rootPath}\\assets"; if (!Directory.Exists(resourceLocalDir)) { Directory.CreateDirectory(resourceLocalDir); } await downloadResource(r, resourceLocalDir); r.ResolvedUrl = "./assets/" + r.FileName; var uri = new UriBuilder(r.Url); uri.Query = null; if (page.RawHtml.Contains($"{uri.Path}")) { var strRegImage = $@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\S]*{uri.Path}[\s\t\r\n]*[^<>]*?/?[\s\t\r\n]*>"; var srcReg = new Regex(strRegImage, RegexOptions.IgnoreCase); if (srcReg.IsMatch(page.RawHtml)) { page.RawHtml = srcReg.Replace(page.RawHtml, r.ResourceTag.Resolve(r.ResolvedUrl)); } } } catch (Exception ex) { Debug.Print($"[WARN]WinApp.Core.Handlers.DownloadPageAsync: can't download resource \"{r.Name}\" \"{r.Url}\", Details: {ex.Message}"); } Update(1); } if (!Directory.Exists(rootPath)) { Directory.CreateDirectory(rootPath); } File.WriteAllText(rootPath + "\\index.html", page.RawHtml); Update(saveProgress); }
/// <summary> /// 跳转到某一个网页,并且生成该网页的资源与实体 /// </summary> /// <param name="url"></param> private void Go(string url) { saveToolStripMenuItem.Enabled = false; shareToolStripMenuItem.Enabled = false; Page = new PageResolve(); Browser.FrameLoadStart += (s, e) => { if (IsHandleCreated) { Invoke(new Action(() => { progressBarStart(100); })); } }; // 浏览器加载结束 Browser.FrameLoadEnd += async(s, e) => { if (e.Frame.IsMain) { Page.RawHtml = (await e.Frame.GetSourceAsync()).Replace("&", "&"); Invoke(new Action(() => { saveToolStripMenuItem.Enabled = true; shareToolStripMenuItem.Enabled = true; })); } if (IsHandleCreated) { Invoke(new Action(() => { progressBarUpdate(100); })); } }; if (url.StartsWith("http://") || url.StartsWith("https://")) { Browser.Load(url); } else { textBoxUrl.Text = $"http://{url}"; Browser.Load(textBoxUrl.Text); } }
public ShareConfigForm(PageResolve page) : this() { Page = page; Share.Id = Page.Id; }