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);
        }
示例#2
0
 /// <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("&amp;", "&");
             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);
     }
 }
示例#3
0
 public ShareConfigForm(PageResolve page) : this()
 {
     Page     = page;
     Share.Id = Page.Id;
 }