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;