handle errors

This commit is contained in:
Tian Liao 2024-10-30 13:48:06 +08:00
commit 2c93865e7b
6 changed files with 23 additions and 12 deletions

View file

@ -345,10 +345,9 @@ namespace CalculatorApp
TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_RECALL_RESTORE), fields); TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_RECALL_RESTORE), fields);
} }
void TraceLogger::LogRecallError(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String^ message) void TraceLogger::LogRecallError(Platform::String^ message)
{ {
auto fields = ref new LoggingFields(); auto fields = ref new LoggingFields();
fields->AddString(StringReference(CALC_MODE), NavCategoryStates::GetFriendlyName(mode));
fields->AddString(StringReference(L"FunctionName"), L"Recall"); fields->AddString(StringReference(L"FunctionName"), L"Recall");
fields->AddString(StringReference(L"Message"), message); fields->AddString(StringReference(L"Message"), message);
TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_EXCEPTION), fields); TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_EXCEPTION), fields);

View file

@ -87,7 +87,7 @@ namespace CalculatorApp::ViewModel::Common
void LogPlatformExceptionInfo(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String ^ functionName, Platform::String ^ message, int hresult); void LogPlatformExceptionInfo(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String ^ functionName, Platform::String ^ message, int hresult);
void LogRecallSnapshot(CalculatorApp::ViewModel::Common::ViewMode mode); void LogRecallSnapshot(CalculatorApp::ViewModel::Common::ViewMode mode);
void LogRecallRestore(CalculatorApp::ViewModel::Common::ViewMode mode); void LogRecallRestore(CalculatorApp::ViewModel::Common::ViewMode mode);
void LogRecallError(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String ^ message); void LogRecallError(Platform::String ^ message);
internal: internal:
void LogPlatformException(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String ^ functionName, Platform::Exception ^ e); void LogPlatformException(CalculatorApp::ViewModel::Common::ViewMode mode, Platform::String ^ functionName, Platform::Exception ^ e);

View file

@ -5,6 +5,7 @@ using Windows.ApplicationModel.Activation;
using CalculatorApp.ViewModel.Snapshot; using CalculatorApp.ViewModel.Snapshot;
using CalculatorApp.JsonUtils; using CalculatorApp.JsonUtils;
using CalculatorApp.ViewModel.Common;
namespace CalculatorApp namespace CalculatorApp
{ {
@ -42,8 +43,9 @@ namespace CalculatorApp
var snapshot = JsonSerializer.Deserialize<ApplicationSnapshotAlias>(jsonStr); var snapshot = JsonSerializer.Deserialize<ApplicationSnapshotAlias>(jsonStr);
return new SnapshotLaunchArguments { HasError = false, Snapshot = snapshot.Value }; return new SnapshotLaunchArguments { HasError = false, Snapshot = snapshot.Value };
} }
catch (Exception) catch (Exception ex)
{ {
TraceLogger.GetInstance().LogRecallError($"Error occurs during the deserialization of Snapshot. Exception: {ex}");
return new SnapshotLaunchArguments { HasError = true }; return new SnapshotLaunchArguments { HasError = true };
} }
} }

View file

@ -23,10 +23,10 @@ namespace CalculatorApp
public static string Decompress(byte[] data) public static string Decompress(byte[] data)
{ {
using (var srcStream = new MemoryStream(data)) using (var srcStream = new MemoryStream(data))
using (var deflateStream = new DeflateStream(srcStream, CompressionMode.Decompress)) using (var inflater = new DeflateStream(srcStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream()) using (var resultStream = new MemoryStream())
{ {
deflateStream.CopyTo(resultStream); inflater.CopyTo(resultStream);
byte[] decompressed = resultStream.ToArray(); byte[] decompressed = resultStream.ToArray();
return Encoding.UTF8.GetString(decompressed); return Encoding.UTF8.GetString(decompressed);
} }

View file

@ -65,6 +65,7 @@ namespace CalculatorApp.JsonUtils
get => Value.Command; get => Value.Command;
set => Value.Command = value; set => Value.Command = value;
} }
public BinaryCommandAlias() => Value = new BinaryCommand(); public BinaryCommandAlias() => Value = new BinaryCommand();
public BinaryCommandAlias(BinaryCommand value) => Value = value; public BinaryCommandAlias(BinaryCommand value) => Value = value;
} }
@ -114,6 +115,7 @@ namespace CalculatorApp.JsonUtils
get => Value.Command; get => Value.Command;
set => Value.Command = value; set => Value.Command = value;
} }
public ParenthesesAlias() => Value = new Parentheses(); public ParenthesesAlias() => Value = new Parentheses();
public ParenthesesAlias(Parentheses value) => Value = value; public ParenthesesAlias(Parentheses value) => Value = value;
} }
@ -129,27 +131,25 @@ namespace CalculatorApp.JsonUtils
get => Value.Tokens.Select(x => new CalcManagerHistoryTokenAlias(x)); get => Value.Tokens.Select(x => new CalcManagerHistoryTokenAlias(x));
set => Value.Tokens = value.Select(Helpers.MapHistoryToken).ToList(); set => Value.Tokens = value.Select(Helpers.MapHistoryToken).ToList();
} }
[JsonPropertyName("c")] [JsonPropertyName("c")]
public IEnumerable<ICalcManagerIExprCommandAlias> Commands public IEnumerable<ICalcManagerIExprCommandAlias> Commands
{ {
get => Value.Commands.Select(Helpers.MapCommandAlias); get => Value.Commands.Select(Helpers.MapCommandAlias);
set => Value.Commands = value.Select(Helpers.MapCommandAlias).ToList(); set => Value.Commands = value.Select(Helpers.MapCommandAlias).ToList();
} }
[JsonPropertyName("e")] [JsonPropertyName("e")]
public string Expression public string Expression
{ {
get => Value.Expression; get => Value.Expression;
set => Value.Expression = value; set => Value.Expression = value;
} }
[JsonPropertyName("r")] [JsonPropertyName("r")]
public string Result public string Result
{ {
get => Value.Result; get => Value.Result;
set => Value.Result = value; set => Value.Result = value;
} }
public CalcManagerHistoryItemAlias() => Value = new CalcManagerHistoryItem(); public CalcManagerHistoryItemAlias() => Value = new CalcManagerHistoryItem();
public CalcManagerHistoryItemAlias(CalcManagerHistoryItem value) => Value = value; public CalcManagerHistoryItemAlias(CalcManagerHistoryItem value) => Value = value;
} }

View file

@ -77,9 +77,9 @@ namespace CalculatorApp
var json = JsonSerializer.Serialize(new ApplicationSnapshotAlias(Model.Snapshot)); var json = JsonSerializer.Serialize(new ApplicationSnapshotAlias(Model.Snapshot));
embeddedData = Convert.ToBase64String(DeflateUtils.Compress(json)); embeddedData = Convert.ToBase64String(DeflateUtils.Compress(json));
} }
catch (Exception) catch (Exception ex)
{ {
// TODO: trace errors TraceLogger.GetInstance().LogRecallError($"Error occurs during the serialization of Snapshot. Exception: {ex}");
deferral.Complete(); deferral.Complete();
return; return;
} }
@ -179,8 +179,18 @@ namespace CalculatorApp
} }
else if (e.Parameter is SnapshotLaunchArguments snapshotArgs) else if (e.Parameter is SnapshotLaunchArguments snapshotArgs)
{ {
Model.RestoreFromSnapshot(snapshotArgs.Snapshot);
Model.Initialize(initialMode); Model.Initialize(initialMode);
if (!snapshotArgs.HasError)
{
Model.RestoreFromSnapshot(snapshotArgs.Snapshot);
TraceLogger.GetInstance().LogRecallRestore((ViewMode)snapshotArgs.Snapshot.Mode);
}
else
{
_ = Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
async () => await ShowSnapshotLaunchErrorAsync());
TraceLogger.GetInstance().LogRecallError("OnNavigatedTo:Found errors.");
}
} }
else else
{ {