diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index e325fc3..4398400 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -539,6 +539,16 @@ namespace Elwig.Helpers { } } + public static List GetLogEntries() { + using var log = new EventLog { + Log = "Application", + Source = ".NET Runtime", + }; + return log.Entries.Cast() + .Where(e => e.Message.StartsWith("Application: Elwig.exe")) + .ToList(); + } + public static int GetEntityIdetifierForPk(params object?[] primaryKey) { var pk = primaryKey.Select(k => k?.GetHashCode() ?? 0).ToArray(); return ((IStructuralEquatable)pk).GetHashCode(EqualityComparer.Default); diff --git a/Elwig/Windows/LogWindow.xaml b/Elwig/Windows/LogWindow.xaml new file mode 100644 index 0000000..ea9379f --- /dev/null +++ b/Elwig/Windows/LogWindow.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Elwig/Windows/LogWindow.xaml.cs b/Elwig/Windows/LogWindow.xaml.cs new file mode 100644 index 0000000..0ef0329 --- /dev/null +++ b/Elwig/Windows/LogWindow.xaml.cs @@ -0,0 +1,44 @@ +using Elwig.Helpers; +using System.Diagnostics; +using System.Linq; +using System.Windows; + +namespace Elwig.Windows { + public partial class LogWindow : Window { + + public LogWindow() { + InitializeComponent(); + WindowState = WindowState.Maximized; + } + + private void Window_Loaded(object sender, RoutedEventArgs evt) { + var log = Utils.GetLogEntries(); + EventList.ItemsSource = log + .Select(e => new { + Event = e, + Lines = e.Message.Split('\n').ToArray(), + }) + .Select(e => new { + e.Event, + Exception = e.Lines.FirstOrDefault(l => l.StartsWith("Exception Info: "))?[16..].Trim().Split(':', 2), + Location = e.Lines.FirstOrDefault(l => l.StartsWith(" at Elwig."))?[5..].Trim(), + }) + .Select(e => new { + e.Event, + e.Exception, + ExceptionName = e.Exception?[0].Trim(), + ExceptionMessage = e.Exception?.Length >= 2 ? e.Exception?[1].Trim() : null, + e.Location, + }) + .OrderByDescending(e => e.Event.TimeGenerated) + .ToList(); + EventList.SelectedIndex = 0; + } + + private void EventList_SelectionChanged(object sender, RoutedEventArgs evt) { + var t = EventList.SelectedItem.GetType(); + var p = t.GetProperty("Event")!; + EventData.Text = ((EventLogEntry)p.GetValue(EventList.SelectedItem)!).Message; + } + } +} diff --git a/Elwig/Windows/MainWindow.xaml b/Elwig/Windows/MainWindow.xaml index 8ba88b9..c34b1b4 100644 --- a/Elwig/Windows/MainWindow.xaml +++ b/Elwig/Windows/MainWindow.xaml @@ -32,6 +32,7 @@ + diff --git a/Elwig/Windows/MainWindow.xaml.cs b/Elwig/Windows/MainWindow.xaml.cs index b382c74..24c4400 100644 --- a/Elwig/Windows/MainWindow.xaml.cs +++ b/Elwig/Windows/MainWindow.xaml.cs @@ -90,6 +90,11 @@ namespace Elwig.Windows { } catch { } } + private void Menu_Help_Log_Click(object sender, RoutedEventArgs evt) { + var w = new LogWindow(); + w.Show(); + } + private async void Menu_Scale_SetDateTime_Click(object sender, RoutedEventArgs evt) { if (App.CommandScales.Count == 0) { MessageBox.Show("Es sind keine geeigneten Waagen verfügbar!", "Datum und Uhrzeit setzen", MessageBoxButton.OK, MessageBoxImage.Error);