Move markdown parsing logic outside control thread (#2099)

* Move markdown parsing logic outside control thread

* Update MarkdownPreviewHandlerControl.cs

* Remove trailing whitespace.

That'll teach me for trying to make an edit from the GitHub page.
This commit is contained in:
Ben Randall 2020-04-15 13:10:55 -07:00 committed by GitHub
parent 2077cd4864
commit 67e6688e69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,11 +3,8 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using Common;
@ -73,28 +70,29 @@ namespace MarkdownPreviewHandler
/// <param name="dataSource">Path to the file.</param>
public override void DoPreview<T>(T dataSource)
{
this.InvokeOnControlThread(() =>
this.infoBarDisplayed = false;
try
{
try
if (!(dataSource is string filePath))
{
this.infoBarDisplayed = false;
throw new ArgumentException($"{nameof(dataSource)} for {nameof(MarkdownPreviewHandler)} must be a string but was a '{typeof(T)}'");
}
StringBuilder sb = new StringBuilder();
string filePath = dataSource as string;
string fileText = File.ReadAllText(filePath);
this.extension.BaseUrl = Path.GetDirectoryName(filePath);
string fileText = File.ReadAllText(filePath);
Regex imageTagRegex = new Regex(@"<[ ]*img.*>");
if (imageTagRegex.IsMatch(fileText))
{
this.infoBarDisplayed = true;
}
Regex rgx = new Regex(@"<[ ]*img.*>");
if (rgx.IsMatch(fileText))
{
this.infoBarDisplayed = true;
}
MarkdownPipeline pipeline = this.pipelineBuilder.Build();
string parsedMarkdown = Markdown.ToHtml(fileText, pipeline);
sb.AppendFormat("{0}{1}{2}", this.htmlHeader, parsedMarkdown, this.htmlFooter);
string markdownHTML = sb.ToString();
this.extension.BaseUrl = Path.GetDirectoryName(filePath);
MarkdownPipeline pipeline = this.pipelineBuilder.Build();
string parsedMarkdown = Markdown.ToHtml(fileText, pipeline);
string markdownHTML = $"{this.htmlHeader}{parsedMarkdown}{this.htmlFooter}";
this.InvokeOnControlThread(() =>
{
this.browser = new WebBrowserExt
{
DocumentText = markdownHTML,
@ -109,24 +107,30 @@ namespace MarkdownPreviewHandler
if (this.infoBarDisplayed)
{
this.infoBar = this.GetTextBoxControl(Resources.BlockedImageInfoText);
this.Resize += this.FormResized;
this.Controls.Add(this.infoBar);
}
});
this.Resize += this.FormResized;
base.DoPreview(dataSource);
MarkdownTelemetry.Log.MarkdownFilePreviewed();
}
catch (Exception e)
MarkdownTelemetry.Log.MarkdownFilePreviewed();
}
catch (Exception e)
{
MarkdownTelemetry.Log.MarkdownFilePreviewError(e.Message);
this.InvokeOnControlThread(() =>
{
MarkdownTelemetry.Log.MarkdownFilePreviewError(e.Message);
this.Controls.Clear();
this.infoBarDisplayed = true;
this.infoBar = this.GetTextBoxControl(Resources.MarkdownNotPreviewedError);
this.Resize += this.FormResized;
this.Controls.Clear();
this.Controls.Add(this.infoBar);
base.DoPreview(dataSource);
}
});
});
}
finally
{
base.DoPreview(dataSource);
}
}
/// <summary>