MessageDialog.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. namespace InABox.Avalonia.Dialogs;
  2. public enum MessageDialogButtonPosition
  3. {
  4. Left,
  5. Right
  6. }
  7. public enum MessageDialogResult
  8. {
  9. None,
  10. OK,
  11. Cancel,
  12. Yes,
  13. No,
  14. Other
  15. }
  16. public static class MessageDialog
  17. {
  18. public static async Task ShowMessage(string message)
  19. => await MessageDialogViewModel.ShowMessage(message);
  20. public static async Task ShowError(Exception e)
  21. => await MessageDialogViewModel.ShowMessage($"Error: {e.Message}");
  22. public static async Task<bool> ShowOkCancel(string message)
  23. => await MessageDialogViewModel.ShowOkCancel(message);
  24. public static async Task<bool> ShowYesNo(string message)
  25. => await MessageDialogViewModel.ShowYesNo(message);
  26. public static async Task<bool> ShowYesCancel(string message)
  27. => await MessageDialogViewModel.ShowYesCancel(message);
  28. public static async Task<MessageDialogResult> ShowYesNoCancel(string message)
  29. => await MessageDialogViewModel.ShowYesNoCancel(message);
  30. /// <summary>
  31. /// When <paramref name="task"/> has finished, show a message dialog with the error if the task failed.
  32. /// </summary>
  33. /// <remarks>
  34. /// Call this on the main thread. Use if spinning of a task that you don't care about the result, but don't want to fail silently.
  35. /// </remarks>
  36. /// <param name="task"></param>
  37. /// <returns></returns>
  38. public static Task ErrorIfFail(this Task task, bool shouldLog = true)
  39. {
  40. return task.ContinueWith(async t =>
  41. {
  42. if(t.Exception is AggregateException e && e.InnerException is not null)
  43. {
  44. MobileLogging.Log(e);
  45. await ShowError(e.InnerException);
  46. }
  47. else if(t.Exception is not null)
  48. {
  49. MobileLogging.Log(t.Exception);
  50. await ShowError(t.Exception);
  51. }
  52. }, TaskScheduler.FromCurrentSynchronizationContext());
  53. }
  54. }