using Microsoft.Win32; using System; using System.Collections.Generic; using System.Windows; namespace Elwig.Services { public static class InteractionService { public static Func? Override; public static Action? NextInformation; public static Action? NextWarning; public static Action? NextError; public static Func? NextContinue; public static Func? NextConfirmation; public static Func? NextQuestion; public static Func? NextSave; public static readonly Dictionary ExtensionFilters = new() { ["pdf"] = "PDF-Datei (*.pdf)|*.pdf", ["ods"] = "OpenDocument Format Spreadsheet (*.ods)|*.ods", ["vcf"] = "vCard-Datei (*.vcf)|*.vcf", ["xml"] = "EBICS-Datei (*.xml)|*.xml", ["csv"] = "CSV-Datei (*.csv)|*.csv", ["sql.zip"] = "Komprimierte SQL-Datei (*.sql.zip)|*.sql.zip", ["elwig.zip"] = "Elwig-Export-Datei (*.elwig.zip)|*.elwig.zip", }; public static void ShowInformation(string title, string text) { if (NextInformation != null) { NextInformation(title, text); NextInformation = null; } else if (Override != null) { Override("information", title, text); } else { MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Information); } } public static bool AskContinue(string title, string text) { if (NextContinue != null) { var r = NextContinue(title, text); NextContinue = null; return r; } else if (Override != null) { return Override("continue", title, text) != null; } else { return MessageBox.Show(text, title, MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel) == MessageBoxResult.OK; } } public static bool AskConfirmation(string title, string text) { if (NextConfirmation != null) { var r = NextConfirmation(title, text); NextConfirmation = null; return r; } else if (Override != null) { return Override("confirm", title, text) != null; } else { return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No) == MessageBoxResult.Yes; } } public static bool AskQuestion(string title, string text, bool defaultResult) { if (NextQuestion != null) { var r = NextQuestion(title, text); NextQuestion = null; return r; } else if (Override != null) { return Override("question", title, text) != null; } else { return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Question, defaultResult ? MessageBoxResult.Yes : MessageBoxResult.No) == MessageBoxResult.Yes; } } public static void ShowWarning(string title, string text) { if (NextWarning != null) { NextWarning(title, text); NextWarning = null; } else if (Override != null) { Override("warning", title, text); } else { MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Warning); } } public static void ShowError(string title, string text) { if (NextError != null) { NextError(title, text); NextError = null; } else if (Override != null) { Override("error", title, text); } else { MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Error); } } public static void ShowException(Exception exc, bool showExcType = false, bool isError = true) { ShowException("Fehler", exc, showExcType, isError); } public static void ShowException(string title, Exception exc, bool showExcType = false, bool isError = true) { ShowException(title, null, exc, showExcType, isError); } public static void ShowException(string title, string? text, Exception exc, bool showExcType = false, bool isError = true) { text = text == null ? "" : text + (text.EndsWith('.') || text.EndsWith('!') || text.EndsWith('?') ? "" : ":") + "\n\n"; text += exc.Message + (showExcType ? $" ({exc.GetType().Name})" : ""); if (exc.InnerException != null) text += "\n\n" + exc.InnerException.Message; if (isError) { ShowError(title, text); } else { ShowWarning(title, text); } } public static void ShowDbException(string title, Exception exc) { ShowException(title, "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!", exc); } public static bool AskException(string title, string? text, Exception exc) { text = text == null ? "" : text + (text.EndsWith('.') || text.EndsWith('!') || text.EndsWith('?') ? "" : ":") + "\n\n"; text += exc.Message; if (exc.InnerException != null) text += "\n\n" + exc.InnerException.Message; if (Override != null) { return Override("error", title, text) != null; } else { return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Error, MessageBoxResult.No) == MessageBoxResult.Yes; } } public static string? SaveFile(string title, string defaultFileName, string extension) { if (NextSave != null) { var r = NextSave(title, $"{defaultFileName}.{extension}"); NextSave = null; return r; } else if (Override != null) { return Override("save", title, $"{defaultFileName}.{extension}"); } else { var d = new SaveFileDialog() { FileName = $"{defaultFileName}.{extension}", DefaultExt = extension, Filter = ExtensionFilters.GetValueOrDefault(extension, ""), Title = $"{title} speichern unter - Elwig", AddExtension = !extension.Contains('.'), }; return d.ShowDialog() == true ? d.FileName : null; } } } }