diff --git a/.gitignore b/.gitignore index 5cae882..e0e6633 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ bin obj *.user +/src/MjmlVisualizer/Properties/Settings.Debug.settings +/src/MjmlVisualizer/Properties/Settings.settings diff --git a/exclusion.dic b/exclusion.dic index 42618d4..d66f8d4 100644 --- a/exclusion.dic +++ b/exclusion.dic @@ -1,2 +1,3 @@ Mjml Vsix +Newtonsoft diff --git a/src/MjmlVisualizer.Vsix/MjmlVisualizerPackage.cs b/src/MjmlVisualizer.Vsix/MjmlVisualizerPackage.cs index d04bbc1..efbe771 100644 --- a/src/MjmlVisualizer.Vsix/MjmlVisualizerPackage.cs +++ b/src/MjmlVisualizer.Vsix/MjmlVisualizerPackage.cs @@ -2,6 +2,7 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; @@ -23,6 +24,8 @@ public MjmlVisualizerPackage() protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) { + var fileNames = new List { "MjmlVisualizer.dll", "Newtonsoft.Json.dll" }; + try { await base.InitializeAsync(cancellationToken, progress); @@ -46,11 +49,13 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke var documentsFolderFullName = documentsFolderFullNameObject.ToString(); var destinationFolderFullName = Path.Combine(documentsFolderFullName, "Visualizers"); - var sourceFileFullName = Path.Combine(sourceFolderFullName, "MjmlVisualizer.dll"); - var destinationFileFullName = Path.Combine(destinationFolderFullName, "MjmlVisualizer.dll"); - - CopyFileIfNewerVersion(sourceFileFullName, destinationFileFullName); + foreach (var fileName in fileNames) + { + var sourceFileFullName = Path.Combine(sourceFolderFullName, fileName); + var destinationFileFullName = Path.Combine(destinationFolderFullName, fileName); + CopyFileIfNewerVersion(sourceFileFullName, destinationFileFullName); + } } catch (Exception ex) { diff --git a/src/MjmlVisualizer/MjmlVisualizer.cs b/src/MjmlVisualizer/MjmlVisualizer.cs index 06d3eb0..5abf9ad 100644 --- a/src/MjmlVisualizer/MjmlVisualizer.cs +++ b/src/MjmlVisualizer/MjmlVisualizer.cs @@ -25,7 +25,7 @@ protected override void Show(IDialogVisualizerService windowService, IVisualizer { var debugObject = (objectProvider as IVisualizerObjectProvider3).GetDeserializableObject(); - var response = new MjmlRepository().GenerateHTML(debugObject.ToObject()); + var response = MjmlRepository.GenerateHTML(debugObject.ToObject()).Result; if (response == null) { diff --git a/src/MjmlVisualizer/MjmlVisualizer.csproj b/src/MjmlVisualizer/MjmlVisualizer.csproj index 76182b1..aa61e43 100644 --- a/src/MjmlVisualizer/MjmlVisualizer.csproj +++ b/src/MjmlVisualizer/MjmlVisualizer.csproj @@ -34,44 +34,20 @@ 4 - - packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - False ..\..\..\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.DebuggerVisualizers.dll + + ..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + - - packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - - packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - - - packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - - packages\System.Text.Encodings.Web.7.0.0\lib\net462\System.Text.Encodings.Web.dll - - - ..\..\packages\System.Text.Json.7.0.3\lib\net462\System.Text.Json.dll - - - packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - - - packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll - @@ -89,6 +65,11 @@ + + True + True + Settings.settings + @@ -101,6 +82,10 @@ + + SettingsSingleFileGenerator + Settings.Designer.cs + @@ -121,4 +106,14 @@ + + + + + + \ No newline at end of file diff --git a/src/MjmlVisualizer/Models/ResponseBody.cs b/src/MjmlVisualizer/Models/ResponseBody.cs index 60143be..e8ac14b 100644 --- a/src/MjmlVisualizer/Models/ResponseBody.cs +++ b/src/MjmlVisualizer/Models/ResponseBody.cs @@ -1,13 +1,13 @@ -using System.Text.Json.Serialization; +using Newtonsoft.Json; namespace MjmlVisualizer.Models { public class ResponseBody { - [JsonPropertyName("mjml")] + [JsonProperty("mjml")] public string MJML { get; set; } = string.Empty; - [JsonPropertyName("html")] + [JsonProperty("html")] public string HTML { get; set; } = string.Empty; } } diff --git a/src/MjmlVisualizer/Properties/Settings.Designer.cs b/src/MjmlVisualizer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..abf0f38 --- /dev/null +++ b/src/MjmlVisualizer/Properties/Settings.Designer.cs @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MjmlVisualizer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("c4303cb3-7710-417d-9bc7-da57885b3432")] + public string MJMLUserName { + get { + return ((string)(this["MJMLUserName"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("acaca040-7197-4450-b057-5bb3465f3459")] + public string MJMLPassword { + get { + return ((string)(this["MJMLPassword"])); + } + } + } +} diff --git a/src/MjmlVisualizer/Properties/Settings.Release.settings b/src/MjmlVisualizer/Properties/Settings.Release.settings new file mode 100644 index 0000000..67af682 --- /dev/null +++ b/src/MjmlVisualizer/Properties/Settings.Release.settings @@ -0,0 +1,12 @@ + + + + + + #{MJML_USERNAME}# + + + #{MJML_PASSWORD}# + + + \ No newline at end of file diff --git a/src/MjmlVisualizer/Repositories/MjmlRepository.cs b/src/MjmlVisualizer/Repositories/MjmlRepository.cs index 466d8b9..fd89ede 100644 --- a/src/MjmlVisualizer/Repositories/MjmlRepository.cs +++ b/src/MjmlVisualizer/Repositories/MjmlRepository.cs @@ -1,40 +1,42 @@ using MjmlVisualizer.Models; +using Newtonsoft.Json; using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; -using System.Text.Json; +using System.Threading.Tasks; namespace MjmlVisualizer.Repositories { - public class MjmlRepository + public static class MjmlRepository { private const string _apiURL = "https://api.mjml.io/v1/render"; - private const string _userName = "#{MJML_USERNAME}#"; - private const string _password = "#{MJML_PASSWORD}#"; - private readonly HttpClient _httpClient; + private static readonly HttpClient _httpClient; - public MjmlRepository() + static MjmlRepository() { + var userName = Properties.Settings.Default.MJMLUserName; + var password = Properties.Settings.Default.MJMLPassword; + _httpClient = new HttpClient(); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", - Convert.ToBase64String(Encoding.UTF8.GetBytes($"{_userName}:{_password}"))); + Convert.ToBase64String(Encoding.UTF8.GetBytes($"{userName}:{password}"))); } - public ResponseBody GenerateHTML(string mjml) + public static async Task GenerateHTML(string mjml) { - var requestBody = new StringContent(JsonSerializer.Serialize(new RequestBody(mjml))); + var requestBody = new StringContent(JsonConvert.SerializeObject(new RequestBody(mjml))); - var response = _httpClient.PostAsync(_apiURL, requestBody).Result; + var response = await _httpClient.PostAsync(_apiURL, requestBody); if (!response.IsSuccessStatusCode) { return null; } - var stream = response.Content.ReadAsStringAsync().Result; - var result = JsonSerializer.Deserialize(stream); + var json = await response.Content.ReadAsStringAsync(); + var result = JsonConvert.DeserializeObject(json); return result; } diff --git a/src/MjmlVisualizer/packages.config b/src/MjmlVisualizer/packages.config index 808181f..0b14af3 100644 --- a/src/MjmlVisualizer/packages.config +++ b/src/MjmlVisualizer/packages.config @@ -1,12 +1,4 @@  - - - - - - - - - + \ No newline at end of file