From e36faaa0b5fad5c2a6d8c4b3825d1b458383da42 Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Fri, 25 Oct 2024 10:46:44 +0800 Subject: [PATCH] DeflateUtils --- src/Calculator/Calculator.csproj | 1 + src/Calculator/Common/LaunchArguments.cs | 6 +++- src/Calculator/Utils/DeflateUtils.cs | 44 ++++++++++++++++++++++++ src/Calculator/Views/MainPage.xaml.cs | 20 ++--------- 4 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 src/Calculator/Utils/DeflateUtils.cs diff --git a/src/Calculator/Calculator.csproj b/src/Calculator/Calculator.csproj index 6dee5aa8..00bdc954 100644 --- a/src/Calculator/Calculator.csproj +++ b/src/Calculator/Calculator.csproj @@ -165,6 +165,7 @@ + diff --git a/src/Calculator/Common/LaunchArguments.cs b/src/Calculator/Common/LaunchArguments.cs index 1906c14f..3d60896d 100644 --- a/src/Calculator/Common/LaunchArguments.cs +++ b/src/Calculator/Common/LaunchArguments.cs @@ -15,7 +15,11 @@ namespace CalculatorApp { result = null; var protoArgs = args as IProtocolActivatedEventArgs; - if (protoArgs == null || protoArgs.Uri == null) + if (protoArgs == null || + protoArgs.Uri == null || + protoArgs.Uri.Segments == null || + protoArgs.Uri.Segments.Length < 2 || + protoArgs.Uri.Segments[0] != "snapshot/") { return false; } diff --git a/src/Calculator/Utils/DeflateUtils.cs b/src/Calculator/Utils/DeflateUtils.cs new file mode 100644 index 00000000..1cdb4c6c --- /dev/null +++ b/src/Calculator/Utils/DeflateUtils.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.IO.Compression; +using System.Text; + +namespace CalculatorApp +{ + internal static class DeflateUtils + { + public static byte[] Compress(string text) + { + var data = Encoding.UTF8.GetBytes(text); + using (var compressed = new MemoryStream()) + { + using (var deflater = new DeflateStream(compressed, CompressionLevel.Optimal)) + { + deflater.Write(data, 0, data.Length); + } + return compressed.ToArray(); + } + } + + public static bool TryDecompress(byte[] data, out string text) + { + text = null; + try + { + using (var srcStream = new MemoryStream(data)) + using (var deflateStream = new DeflateStream(srcStream, CompressionMode.Decompress)) + using (var resultStream = new MemoryStream()) + { + deflateStream.CopyTo(resultStream); + byte[] decompressed = resultStream.ToArray(); + text = Encoding.UTF8.GetString(decompressed); + return true; + } + } + catch (Exception) + { + return false; + } + } + } +} diff --git a/src/Calculator/Views/MainPage.xaml.cs b/src/Calculator/Views/MainPage.xaml.cs index a3f142bc..e7efa4c6 100644 --- a/src/Calculator/Views/MainPage.xaml.cs +++ b/src/Calculator/Views/MainPage.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Text.Json; using System.Threading.Tasks; using Windows.ApplicationModel.UserActivities; @@ -23,10 +24,6 @@ using CalculatorApp.ViewModel.Common; using CalculatorApp.ViewModel.Common.Automation; using wuxc = Windows.UI.Xaml.Controls; -using System.Text.Json; -using System.IO.Compression; -using System.IO; -using System.Text; namespace CalculatorApp { @@ -78,7 +75,7 @@ namespace CalculatorApp try { var json = JsonSerializer.Serialize(new ApplicationSnapshotAlias { Value = Model.Snapshot }); - embeddedData = Convert.ToBase64String(Compress(json)); + embeddedData = Convert.ToBase64String(DeflateUtils.Compress(json)); } catch (Exception) { @@ -720,19 +717,6 @@ namespace CalculatorApp await dialog.ShowAsync(); } - private static byte[] Compress(string text) - { - var data = Encoding.UTF8.GetBytes(text); - using (var compressed = new MemoryStream()) - { - using (var deflater = new DeflateStream(compressed, CompressionLevel.Optimal)) - { - deflater.Write(data, 0, data.Length); - } - return compressed.ToArray(); - } - } - private Calculator m_calculator; private GraphingCalculator m_graphingCalculator; private UnitConverter m_converter;