Пример #1
0
        public async Task Execute()
        {
            if (this.SiteDb == null || this.TransferTask == null || string.IsNullOrEmpty(TransferTask.FullStartUrl))
            {
                return;
            }

            var cookieContainer = new System.Net.CookieContainer();

            TransferPage transpage = new TransferPage();

            transpage.absoluteUrl = TransferTask.FullStartUrl;
            transpage.taskid      = TransferTask.Id;

            var oldpage = SiteDb.TransferPages.Get(transpage.Id);

            if (oldpage == null || oldpage.PageId == default(Guid))
            {
                var down = await DownloadHelper.DownloadUrlAsync(transpage.absoluteUrl, cookieContainer);

                if (down == null)
                {
                    return;
                }

                string htmlsource = down.GetString();

                var savepage = new Page();

                string name = TransferTask.RelativeName;
                if (!string.IsNullOrWhiteSpace(name))
                {
                    if (name.EndsWith("\\"))
                    {
                        name = name.TrimEnd('\\');
                    }

                    if (name.EndsWith("/"))
                    {
                        name = name.TrimEnd('/');
                    }

                    name = System.IO.Path.GetFileNameWithoutExtension(name);
                }

                if (!string.IsNullOrWhiteSpace(name))
                {
                    savepage.Name = name;
                }

                htmlsource = UrlHelper.ReplaceMetaCharSet(htmlsource);
                string FirstImportUrl = SiteDb.TransferTasks.FirstImportHost();

                if (string.IsNullOrEmpty(FirstImportUrl))
                {
                    FirstImportUrl = TransferTask.FullStartUrl;
                }

                DownloadManager manager = new DownloadManager()
                {
                    SiteDb = SiteDb
                };
                manager.OriginalImportUrl = FirstImportUrl;

                var context = AnalyzerManager.Execute(htmlsource, transpage.absoluteUrl, savepage.Id, savepage.ConstType, manager, FirstImportUrl);

                htmlsource = context.HtmlSource;

                savepage.Body = htmlsource;

                string PageRelativeName = TransferTask.RelativeName;


                if (string.IsNullOrWhiteSpace(PageRelativeName))
                {
                    bool issamehost = Kooboo.Lib.Helper.UrlHelper.isSameHost(TransferTask.FullStartUrl, FirstImportUrl);
                    PageRelativeName = UrlHelper.RelativePath(TransferTask.FullStartUrl, issamehost);
                }

                if (!PageRelativeName.StartsWith("/"))
                {
                    PageRelativeName = "/" + PageRelativeName;
                }

                SiteDb.Routes.AddOrUpdate(PageRelativeName, savepage.ConstType, savepage.Id, this.TransferTask.UserId);

                SiteDb.Pages.AddOrUpdate(savepage, this.TransferTask.UserId);

                while (!manager.IsComplete)
                {
                    System.Threading.Thread.Sleep(15);
                }

                transpage.done   = true;
                transpage.PageId = savepage.Id;
                SiteDb.TransferPages.AddOrUpdate(transpage);
            }


            this.SiteDb.TransferTasks.SetDone(this.TransferTask.Id);
        }