Catch exception when trying to share (#1203)

* Fix crash

* Fix errors
This commit is contained in:
Pepe Rivera 2020-05-05 09:36:09 -07:00 committed by GitHub
parent f9a1ae1a28
commit 9817738307
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 12 deletions

View File

@ -215,7 +215,7 @@ wstringstream GraphingCalculator::FormatTraceValue(double min, double max, float
auto precision = static_cast<int>(floor(log10(max - min)) - 3); auto precision = static_cast<int>(floor(log10(max - min)) - 3);
// Determine if we want to show scientific notation instead // Determine if we want to show scientific notation instead
if (precision <= -7 || precision >= 7) if (precision <= -7 || precision >= 7)
{ {
traceValueString << scientific; traceValueString << scientific;
} }
@ -282,11 +282,26 @@ void GraphingCalculator::ViewModel::set(GraphingCalculatorViewModel ^ vm)
} }
} }
void CalculatorApp::GraphingCalculator::OnShareClick(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e) void GraphingCalculator::OnShareClick(Object ^ sender, RoutedEventArgs ^ e)
{ {
// Ask the OS to start a share action. // Ask the OS to start a share action.
DataTransferManager::ShowShareUI(); try
TraceLogger::GetInstance()->LogGraphButtonClicked(GraphButton::Share, GraphButtonValue::None); {
DataTransferManager::ShowShareUI();
TraceLogger::GetInstance()->LogGraphButtonClicked(GraphButton::Share, GraphButtonValue::None);
}
catch (COMException ^ ex)
{
if (ex->HResult == RPC_E_SERVERCALL_RETRYLATER)
{
ShowShareError();
TraceLogger::GetInstance()->LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex);
}
else
{
throw;
}
}
} }
// When share is invoked (by the user or programmatically) the event handler we registered will be called to populate the data package with the // When share is invoked (by the user or programmatically) the event handler we registered will be called to populate the data package with the
@ -394,17 +409,21 @@ void GraphingCalculator::OnDataRequested(DataTransferManager ^ sender, DataReque
} }
catch (Exception ^ ex) catch (Exception ^ ex)
{ {
ShowShareError();
TraceLogger::GetInstance()->LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex); TraceLogger::GetInstance()->LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex);
// Something went wrong, notify the user.
auto errDialog = ref new ContentDialog();
errDialog->Content = resourceLoader->GetString(L"ShareActionErrorMessage");
errDialog->CloseButtonText = resourceLoader->GetString(L"ShareActionErrorOk");
errDialog->ShowAsync();
} }
} }
void GraphingCalculator::ShowShareError()
{
// Something went wrong, notify the user.
auto resourceLoader = ResourceLoader::GetForCurrentView();
auto errDialog = ref new ContentDialog();
errDialog->Content = resourceLoader->GetString(L"ShareActionErrorMessage");
errDialog->CloseButtonText = resourceLoader->GetString(L"ShareActionErrorOk");
errDialog->ShowAsync();
}
void GraphingCalculator::GraphingControl_VariablesUpdated(Object ^, Object ^) void GraphingCalculator::GraphingControl_VariablesUpdated(Object ^, Object ^)
{ {
m_viewModel->UpdateVariables(GraphingControl->Variables); m_viewModel->UpdateVariables(GraphingControl->Variables);

View File

@ -106,6 +106,7 @@ public ref class GraphingCalculator sealed : public Windows::UI::Xaml::Data::INo
void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e); void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e);
std::wstringstream FormatTraceValue(double min, double max, float pointValue); std::wstringstream FormatTraceValue(double min, double max, float pointValue);
void GraphViewButton_Click(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void GraphViewButton_Click(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void ShowShareError();
}; };
} }