public object DetectTemplate(IProgressHost progress) { // if our context has not been set then just return without doing anything // (supports this being an optional step at the end of a chain of // other progress operations) if (_contextSet == false) { return(this); } using (BlogClientUIContextScope uiContextScope = new BlogClientUIContextScope(_uiContext)) { // initial progress progress.UpdateProgress(Res.Get(StringId.ProgressDetectingWeblogEditingStyle)); // build list of detected templates ArrayList blogTemplateFiles = new ArrayList(); // build list of template types that we need to auto-detect ArrayList detectionTargetTypes = new ArrayList(); ArrayList detectionTargetStrategies = new ArrayList(); // try explicit detection of templates BlogEditingTemplateFiles templateFiles = SafeGetTemplates(new ProgressTick(progress, 50, 100)); // see if we got the FramedTemplate if (templateFiles.FramedTemplate != null) { blogTemplateFiles.Add(templateFiles.FramedTemplate); } else { detectionTargetTypes.Add(BlogEditingTemplateType.Framed); detectionTargetStrategies.Add(BlogEditingTemplateStrategies.GetTemplateStrategy(BlogEditingTemplateStrategies.StrategyType.NoSiblings)); } // see if we got the WebPageTemplate if (templateFiles.WebPageTemplate != null) { blogTemplateFiles.Add(templateFiles.WebPageTemplate); } else { detectionTargetTypes.Add(BlogEditingTemplateType.Webpage); detectionTargetStrategies.Add(BlogEditingTemplateStrategies.GetTemplateStrategy(BlogEditingTemplateStrategies.StrategyType.Site)); } // perform detection if we have detection targets if (detectionTargetTypes.Count > 0) { BlogEditingTemplateFile[] detectedBlogTemplateFiles = DetectTemplates(new ProgressTick(progress, 50, 100), detectionTargetTypes.ToArray(typeof(BlogEditingTemplateType)) as BlogEditingTemplateType[], detectionTargetStrategies.ToArray(typeof(BlogEditingTemplateStrategy)) as BlogEditingTemplateStrategy[]); if (detectedBlogTemplateFiles != null) { blogTemplateFiles.AddRange(detectedBlogTemplateFiles); } } // updates member if we succeeded if (blogTemplateFiles.Count > 0) { // capture template files _blogTemplateFiles = blogTemplateFiles.ToArray(typeof(BlogEditingTemplateFile)) as BlogEditingTemplateFile[]; // if we got at least one template by some method then clear any exception // that occurs so we can at least update that template _exception = null; } foreach (BlogEditingTemplateFile file in blogTemplateFiles) { if (file.TemplateType == BlogEditingTemplateType.Webpage) { _postBodyBackgroundColor = BackgroundColorDetector.DetectColor(UrlHelper.SafeToAbsoluteUri(new Uri(file.TemplateFile)), _postBodyBackgroundColor); } } // return return(this); } }
private BlogEditingTemplateFiles SafeGetTemplates(IProgressHost progress) { WriterEditingManifest editingManifest = null; BlogEditingTemplateFiles templateFiles = new BlogEditingTemplateFiles(); try { // if we have a manifest url then try to get our manifest if (_manifestDownloadInfo != null) { // try to get the editing manifest string manifestUrl = _manifestDownloadInfo.SourceUrl; editingManifest = WriterEditingManifest.FromUrl( new Uri(manifestUrl), _blogClient, _credentials, true); // progress CheckCancelRequested(progress); progress.UpdateProgress(20, 100); } // if we have no editing manifest then probe (if allowed) if ((editingManifest == null) && _probeForManifest) { editingManifest = WriterEditingManifest.FromHomepage( new LazyHomepageDownloader(_blogHomepageUrl, new HttpRequestHandler(_blogClient.SendAuthenticatedHttpRequest)), new Uri(_blogHomepageUrl), _blogClient, _credentials); } // progress CheckCancelRequested(progress); progress.UpdateProgress(40, 100); // if we got one then return templates from it as-appropriate if (editingManifest != null) { if (editingManifest.WebLayoutUrl != null) { string webLayoutTemplate = DownloadManifestTemplate(new ProgressTick(progress, 10, 100), editingManifest.WebLayoutUrl); if (BlogEditingTemplate.ValidateTemplate(webLayoutTemplate)) { // download supporting files string templateFile = DownloadTemplateFiles(webLayoutTemplate, _blogHomepageUrl, new ProgressTick(progress, 20, 100)); // return the template templateFiles.FramedTemplate = new BlogEditingTemplateFile(BlogEditingTemplateType.Framed, templateFile); } else { Trace.WriteLine("Invalid webLayoutTemplate specified in manifest"); } } if (editingManifest.WebPreviewUrl != null) { string webPreviewTemplate = DownloadManifestTemplate(new ProgressTick(progress, 10, 100), editingManifest.WebPreviewUrl); if (BlogEditingTemplate.ValidateTemplate(webPreviewTemplate)) { // download supporting files string templateFile = DownloadTemplateFiles(webPreviewTemplate, _blogHomepageUrl, new ProgressTick(progress, 20, 100)); // return the template templateFiles.WebPageTemplate = new BlogEditingTemplateFile(BlogEditingTemplateType.Webpage, templateFile); } else { Trace.WriteLine("Invalid webPreviewTemplate specified in manifest"); } } } } catch { } finally { progress.UpdateProgress(100, 100); } return(templateFiles); }
private BlogEditingTemplateFiles SafeGetTemplates(IProgressHost progress) { WriterEditingManifest editingManifest = null; BlogEditingTemplateFiles templateFiles = new BlogEditingTemplateFiles(); try { // if we have a manifest url then try to get our manifest if (_manifestDownloadInfo != null) { // try to get the editing manifest string manifestUrl = _manifestDownloadInfo.SourceUrl; editingManifest = WriterEditingManifest.FromUrl( new Uri(manifestUrl), _blogClient, _credentials, true); // progress CheckCancelRequested(progress); progress.UpdateProgress(20, 100); } // if we have no editing manifest then probe (if allowed) if ((editingManifest == null) && _probeForManifest) { editingManifest = WriterEditingManifest.FromHomepage( new LazyHomepageDownloader(_blogHomepageUrl, new HttpRequestHandler(_blogClient.SendAuthenticatedHttpRequest)), new Uri(_blogHomepageUrl), _blogClient, _credentials); } // progress CheckCancelRequested(progress); progress.UpdateProgress(40, 100); // if we got one then return templates from it as-appropriate if (editingManifest != null) { if (editingManifest.WebLayoutUrl != null) { string webLayoutTemplate = DownloadManifestTemplate(new ProgressTick(progress, 10, 100), editingManifest.WebLayoutUrl); if (BlogEditingTemplate.ValidateTemplate(webLayoutTemplate)) { // download supporting files string templateFile = DownloadTemplateFiles(webLayoutTemplate, _blogHomepageUrl, new ProgressTick(progress, 20, 100)); // return the template templateFiles.FramedTemplate = new BlogEditingTemplateFile(BlogEditingTemplateType.Framed, templateFile); } else { Trace.WriteLine("Invalid webLayoutTemplate specified in manifest"); } } if (editingManifest.WebPreviewUrl != null) { string webPreviewTemplate = DownloadManifestTemplate(new ProgressTick(progress, 10, 100), editingManifest.WebPreviewUrl); if (BlogEditingTemplate.ValidateTemplate(webPreviewTemplate)) { // download supporting files string templateFile = DownloadTemplateFiles(webPreviewTemplate, _blogHomepageUrl, new ProgressTick(progress, 20, 100)); // return the template templateFiles.WebPageTemplate = new BlogEditingTemplateFile(BlogEditingTemplateType.Webpage, templateFile); } else { Trace.WriteLine("Invalid webPreviewTemplate specified in manifest"); } } } } catch { } finally { progress.UpdateProgress(100, 100); } return templateFiles; }