From 4cc74602c161d9308e12f8723e20885cac096de7 Mon Sep 17 00:00:00 2001 From: Aaron Junker Date: Mon, 21 Feb 2022 16:10:55 +0100 Subject: [PATCH] [Developer Preview] Bug fixes (#16108) * Renamed languages.json to monaco_languages.json * Update excludes.txt * Fixed encoding issue * Reverted accidently removed file * push * push * push * Fixing path to monaco_languages.json * Removing unused file * Fixing NullReferenceException bug * Minor fixes Co-authored-by: Stefan Markovic --- .github/actions/spell-check/excludes.txt | 2 +- .../modules/powerpreview/monaco/readme.md | 8 ++--- installer/PowerToysSetup/Product.wxs | 2 +- src/common/utils/modulesRegistry.h | 2 +- .../MonacoPreviewHandler/FileHandler.cs | 12 ++++---- .../MonacoPreviewHandler.csproj | 2 +- .../MonacoPreviewHandlerControl.cs | 29 +++++++++++++------ .../generateLanguagesJson.html | 4 +-- .../MonacoPreviewHandler/index.html | 10 +++++-- .../{languages.json => monaco_languages.json} | 0 10 files changed, 43 insertions(+), 28 deletions(-) rename src/modules/previewpane/MonacoPreviewHandler/{languages.json => monaco_languages.json} (100%) diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt index d78c16e76d..c328ba5c3b 100644 --- a/.github/actions/spell-check/excludes.txt +++ b/.github/actions/spell-check/excludes.txt @@ -1,6 +1,6 @@ # See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes (?:^|/)monacoSRC/ -(?:^|/)MonacoPreviewHandler/languages.json +(?:^|/)MonacoPreviewHandler/monaco_languages.json (?:^|/)MonacoPreviewHandler/index.html (?:^|/)MonacoPreviewHandler/generateLanguagesJson.html (?:^|/)(?i)COPYRIGHT diff --git a/doc/devdocs/modules/powerpreview/monaco/readme.md b/doc/devdocs/modules/powerpreview/monaco/readme.md index 286eba6735..c14a616acb 100644 --- a/doc/devdocs/modules/powerpreview/monaco/readme.md +++ b/doc/devdocs/modules/powerpreview/monaco/readme.md @@ -9,13 +9,13 @@ Developer preview is based on [Microsofts Monaco Editor](https://microsoft.githu 3. Copy the `min` folder inside the [`monacoSRC`](/src/modules/previewpane/MonacoPreviewHandler/monacoSRC) folder. 4. Generate the JSON file (see section below) -## languages.json +## monaco_languages.json -[`languages.json`](/src/modules/previewpane/MonacoPreviewHandler/languages.json) contains all extensions and Id's for the supported languages of Monaco. The [`FileHandler`](/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs) class and the installer are using this file. +[`monaco_languages.json`](/src/modules/previewpane/MonacoPreviewHandler/monaco_languages.json) contains all extensions and Id's for the supported languages of Monaco. The [`FileHandler`](/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs) class and the installer are using this file. -### Generate languages.json file +### Generate monaco_languages.json file -After you updated monaco editor or adding a new language you should update the [`languages.json`](/src/modules/previewpane/MonacoPreviewHandler/languages.json) file. +After you updated monaco editor or adding a new language you should update the [`monaco_languages.json`](/src/modules/previewpane/MonacoPreviewHandler/monaco_languages.json) file. 1. Build monaco in debug mode. 2. Open [generateLanguagesJson.html](/src/modules/previewpane/MonacoPreviewHandler/generateLanguagesJson.html) in a browser. diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 45dee350eb..507f539ad8 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -38,7 +38,7 @@ - + diff --git a/src/common/utils/modulesRegistry.h b/src/common/utils/modulesRegistry.h index 48b2487628..c9c517da5d 100644 --- a/src/common/utils/modulesRegistry.h +++ b/src/common/utils/modulesRegistry.h @@ -10,7 +10,7 @@ namespace fs = std::filesystem; namespace NonLocalizable { - const static wchar_t* MONACO_LANGUAGES_FILE_NAME = L"modules\\FileExplorerPreview\\languages.json"; + const static wchar_t* MONACO_LANGUAGES_FILE_NAME = L"modules\\FileExplorerPreview\\monaco_languages.json"; const static wchar_t* ListID = L"list"; const static wchar_t* ExtensionsID = L"extensions"; const static wchar_t* MDExtension = L".md"; diff --git a/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs b/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs index ccd7e3b61c..b51e4f680d 100644 --- a/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs +++ b/src/modules/previewpane/MonacoPreviewHandler/FileHandler.cs @@ -20,15 +20,15 @@ namespace Microsoft.PowerToys.PreviewHandler.Monaco { try { - JsonDocument a = JsonDocument.Parse(File.ReadAllText(Settings.AssemblyDirectory + "\\languages.json")); - JsonElement list = a.RootElement.GetProperty("list"); - for (int i = 0; i < list.GetArrayLength(); i++) + JsonDocument languageListDocument = JsonDocument.Parse(File.ReadAllText(Settings.AssemblyDirectory + "\\monaco_languages.json")); + JsonElement languageList = languageListDocument.RootElement.GetProperty("list"); + foreach (JsonElement e in languageList.EnumerateArray()) { - for (int j = 0; j < list[i].GetProperty("extensions").GetArrayLength(); j++) + for (int j = 0; j < e.GetProperty("extensions").GetArrayLength(); j++) { - if (list[i].GetProperty("extensions")[j].ToString() == fileExtension) + if (e.GetProperty("extensions")[j].ToString() == fileExtension) { - return list[i].GetProperty("id").ToString(); + return e.GetProperty("id").ToString(); } } } diff --git a/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj b/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj index d0dc98b328..059ba7684a 100644 --- a/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj +++ b/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj @@ -82,7 +82,7 @@ - + Always diff --git a/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs b/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs index 9580cbafab..3940b58ffd 100644 --- a/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs +++ b/src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Diagnostics; using System.Drawing; using System.IO; using System.Runtime.CompilerServices; @@ -91,11 +92,11 @@ namespace Microsoft.PowerToys.PreviewHandler.Monaco _webView2Environment = webView2EnvironmentAwaiter.GetResult(); var vsCodeLangSet = FileHandler.GetLanguage(Path.GetExtension(filePath)); - var fileContent = File.ReadAllText(filePath); + var fileContent = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)).ReadToEnd(); var base64FileCode = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(fileContent)); // prepping index html to load in - var html = File.ReadAllText(Settings.AssemblyDirectory + "\\index.html").Replace("\t", string.Empty, StringComparison.InvariantCulture); + var html = new StreamReader(new FileStream(Settings.AssemblyDirectory + "\\index.html", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)).ReadToEnd(); html = html.Replace("[[PT_LANG]]", vsCodeLangSet, StringComparison.InvariantCulture); html = html.Replace("[[PT_WRAP]]", _settings.Wrap ? "1" : "0", StringComparison.InvariantCulture); @@ -104,16 +105,24 @@ namespace Microsoft.PowerToys.PreviewHandler.Monaco html = html.Replace("[[PT_URL]]", VirtualHostName, StringComparison.InvariantCulture); // Initialize WebView - await _webView.EnsureCoreWebView2Async(_webView2Environment); - _webView.CoreWebView2.SetVirtualHostNameToFolderMapping(VirtualHostName, Settings.AssemblyDirectory, CoreWebView2HostResourceAccessKind.Allow); - _webView.NavigateToString(html); - _webView.NavigationCompleted += WebView2Init; - _webView.Height = this.Height; - _webView.Width = this.Width; - Controls.Add(_webView); + try + { + await _webView.EnsureCoreWebView2Async(_webView2Environment).ConfigureAwait(true); + _webView.CoreWebView2.SetVirtualHostNameToFolderMapping(VirtualHostName, Settings.AssemblyDirectory, CoreWebView2HostResourceAccessKind.Allow); + _webView.NavigateToString(html); + _webView.NavigationCompleted += WebView2Init; + _webView.Height = this.Height; + _webView.Width = this.Width; + Controls.Add(_webView); + } + catch (NullReferenceException) + { + } } catch (WebView2RuntimeNotFoundException) { + Controls.Remove(_loading); + // WebView2 not installed message Label errorMessage = new Label(); errorMessage.Text = Resources.WebView2_Not_Installed_Message; @@ -138,6 +147,7 @@ namespace Microsoft.PowerToys.PreviewHandler.Monaco { InvokeOnControlThread(() => { + Controls.Remove(_loading); Label text = new Label(); text.Text = Resources.Exception_Occurred; text.Text += e.Message; @@ -155,6 +165,7 @@ namespace Microsoft.PowerToys.PreviewHandler.Monaco { InvokeOnControlThread(() => { + Controls.Remove(_loading); Label errorMessage = new Label(); errorMessage.Text = Resources.Max_File_Size_Error; errorMessage.Width = 500; diff --git a/src/modules/previewpane/MonacoPreviewHandler/generateLanguagesJson.html b/src/modules/previewpane/MonacoPreviewHandler/generateLanguagesJson.html index 83e787b86f..cafc09648c 100644 --- a/src/modules/previewpane/MonacoPreviewHandler/generateLanguagesJson.html +++ b/src/modules/previewpane/MonacoPreviewHandler/generateLanguagesJson.html @@ -2,7 +2,7 @@ - Monaco Preview Handler languages.json generator + Monaco Preview Handler monaco_languages.json generator diff --git a/src/modules/previewpane/MonacoPreviewHandler/index.html b/src/modules/previewpane/MonacoPreviewHandler/index.html index 268a9b2bf3..de73f13448 100644 --- a/src/modules/previewpane/MonacoPreviewHandler/index.html +++ b/src/modules/previewpane/MonacoPreviewHandler/index.html @@ -14,7 +14,11 @@ var wrap = ([[PT_WRAP]] == 1) ? true : false; var base64code = "[[PT_CODE]]"; - var code = [atob(base64code)].join('\n'); + + // Code taken from https://stackoverflow.com/a/30106551/14774889 + var code = decodeURIComponent(atob(base64code).split('').map(function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); @@ -41,8 +45,8 @@ } - - + +
diff --git a/src/modules/previewpane/MonacoPreviewHandler/languages.json b/src/modules/previewpane/MonacoPreviewHandler/monaco_languages.json similarity index 100% rename from src/modules/previewpane/MonacoPreviewHandler/languages.json rename to src/modules/previewpane/MonacoPreviewHandler/monaco_languages.json