// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The Error Service // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.Services { using System; using System.Windows; using HandBrakeWPF.Controls; using HandBrakeWPF.Helpers; using HandBrakeWPF.Model; using HandBrakeWPF.Utilities; using HandBrakeWPF.Views; using Interfaces; using ViewModels.Interfaces; /// /// The Error Service /// public class ErrorService : IErrorService { private readonly IUserSettingService userSettingService; public ErrorService(IUserSettingService userSettingService) { this.userSettingService = userSettingService; } /// /// Show an Exception Error Window /// /// /// The message. /// /// /// The solution. /// /// /// The details. /// public void ShowError(string message, string solution, string details) { IWindowManager windowManager = IoCHelper.Get(); IErrorViewModel errorViewModel = IoCHelper.Get(); if (windowManager != null && errorViewModel != null) { errorViewModel.ErrorMessage = message; errorViewModel.Solution = solution; errorViewModel.Details = details; windowManager.ShowDialog(errorViewModel); } } /// /// Show an Exception Error Window /// /// /// The message. /// /// /// The solution. /// /// /// The exception. /// public void ShowError(string message, string solution, Exception exception) { IWindowManager windowManager = IoCHelper.Get(); IErrorViewModel errorViewModel = IoCHelper.Get(); if (windowManager != null && errorViewModel != null) { errorViewModel.ErrorMessage = message; errorViewModel.Solution = solution; errorViewModel.Details = exception.ToString(); windowManager.ShowDialog(errorViewModel); } } /// /// Show a Message Box. /// It is good practice to use this, so that if we ever introduce unit testing, the message boxes won't cause issues. /// /// /// The message. /// /// /// The header. /// /// /// The buttons. /// /// /// The image. /// /// /// The MessageBoxResult Object /// public MessageBoxResult ShowMessageBox(string message, string header, MessageBoxButton buttons, MessageBoxImage image) { AppThemeMode mode = userSettingService.GetUserSetting(UserSettingConstants.DarkThemeMode); if (mode == AppThemeMode.Dark || (mode == AppThemeMode.System && SystemInfo.IsAppsUsingDarkTheme())) { MessageBoxWindow window = new MessageBoxWindow(); window.Setup(header, message, buttons, image); if (Application.Current.MainWindow != null && Application.Current.MainWindow.IsActive) { window.Owner = Application.Current.MainWindow; window.WindowStartupLocation = WindowStartupLocation.CenterOwner; } window.ShowDialog(); return window.MessageBoxResult; } return MessageBox.Show(message, header, buttons, image); } } }