From c5a0264095d98632ac926b9162f153dbb912cdd7 Mon Sep 17 00:00:00 2001 From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com> Date: Fri, 20 Dec 2024 01:25:02 +0100 Subject: [PATCH] Feature: Log export exception, re-design about page (#2958) --- .../Resources/Strings.Designer.cs | 72 +++++++ .../Resources/Strings.resx | 24 +++ .../ViewModels/ARPTableViewModel.cs | 6 +- .../ViewModels/AboutViewModel.cs | 20 +- .../ViewModels/BitCalculatorViewModel.cs | 3 +- .../ViewModels/ConnectionsViewModel.cs | 6 +- .../ViewModels/DNSLookupViewModel.cs | 9 +- .../ViewModels/DiscoveryProtocolViewModel.cs | 9 +- .../ViewModels/IPGeolocationViewModel.cs | 2 + .../ViewModels/IPScannerViewModel.cs | 10 +- .../ViewModels/ListenersViewModel.cs | 6 +- .../ViewModels/LookupOUILookupViewModel.cs | 6 +- .../ViewModels/LookupPortViewModel.cs | 6 +- .../ViewModels/NetworkInterfaceViewModel.cs | 6 +- .../ViewModels/PingMonitorViewModel.cs | 4 + .../ViewModels/PortScannerViewModel.cs | 6 +- .../ViewModels/SNMPViewModel.cs | 6 +- .../ViewModels/SNTPLookupViewModel.cs | 6 +- .../SubnetCalculatorSubnettingViewModel.cs | 6 +- .../ViewModels/TracerouteViewModel.cs | 3 +- .../ViewModels/WhoisViewModel.cs | 8 +- .../ViewModels/WiFiConnectViewModel.cs | 8 +- .../ViewModels/WiFiViewModel.cs | 7 +- Source/NETworkManager/Views/AboutView.xaml | 202 ++++++++++-------- .../Views/IPScannerView.xaml.cs | 2 +- 25 files changed, 313 insertions(+), 130 deletions(-) diff --git a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs index 41ccf305b9..0f995a8ebc 100644 --- a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs +++ b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs @@ -3005,6 +3005,15 @@ public static string DomainName { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Donate ähnelt. + /// + public static string Donate { + get { + return ResourceManager.GetString("Donate", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Don't fragment ähnelt. /// @@ -8296,6 +8305,15 @@ public static string Repeat { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ReportAnIssueOrCreateAFeatureRequest { + get { + return ResourceManager.GetString("ReportAnIssueOrCreateAFeatureRequest", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Report on GitHub ähnelt. /// @@ -9524,6 +9542,15 @@ public static string SSID { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string StarForkTheProjectOnGitHub { + get { + return ResourceManager.GetString("StarForkTheProjectOnGitHub", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Start minimized in tray ähnelt. /// @@ -10235,6 +10262,33 @@ public static string ToolTip_ContactOrContactMeViaX { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ToolTip_GithubDocumentationUrl { + get { + return ResourceManager.GetString("ToolTip_GithubDocumentationUrl", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ToolTip_GithubNewIssueUrl { + get { + return ResourceManager.GetString("ToolTip_GithubNewIssueUrl", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ToolTip_GitHubProjectUrl { + get { + return ResourceManager.GetString("ToolTip_GitHubProjectUrl", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Help translate the project on Transifex. ähnelt. /// @@ -10289,6 +10343,24 @@ public static string ToolTip_SupportThisProjectWithADonation { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ToolTip_TransifexProjectUrl { + get { + return ResourceManager.GetString("ToolTip_TransifexProjectUrl", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die ähnelt. + /// + public static string ToolTip_TwitterContactUrl { + get { + return ResourceManager.GetString("ToolTip_TwitterContactUrl", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Total bytes received ähnelt. /// diff --git a/Source/NETworkManager.Localization/Resources/Strings.resx b/Source/NETworkManager.Localization/Resources/Strings.resx index 57b8cf9000..a27f42d61b 100644 --- a/Source/NETworkManager.Localization/Resources/Strings.resx +++ b/Source/NETworkManager.Localization/Resources/Strings.resx @@ -3852,4 +3852,28 @@ Right-click for more options. Open documentation + + + + + + + + + + + + + + + + + + + + + + + Donate + \ No newline at end of file diff --git a/Source/NETworkManager/ViewModels/ARPTableViewModel.cs b/Source/NETworkManager/ViewModels/ARPTableViewModel.cs index b5db34ef9b..2d1d5f103d 100644 --- a/Source/NETworkManager/ViewModels/ARPTableViewModel.cs +++ b/Source/NETworkManager/ViewModels/ARPTableViewModel.cs @@ -9,6 +9,7 @@ using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; @@ -69,7 +70,8 @@ public ARPTableViewModel(IDialogCoordinator instance) #endregion #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(ARPTableViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private readonly bool _isLoading; @@ -390,6 +392,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/AboutViewModel.cs b/Source/NETworkManager/ViewModels/AboutViewModel.cs index 7329ac72c9..c4b1913122 100644 --- a/Source/NETworkManager/ViewModels/AboutViewModel.cs +++ b/Source/NETworkManager/ViewModels/AboutViewModel.cs @@ -1,14 +1,15 @@ -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Windows.Data; -using System.Windows.Input; -using NETworkManager.Documentation; +using NETworkManager.Documentation; using NETworkManager.Localization.Resources; using NETworkManager.Properties; using NETworkManager.Settings; using NETworkManager.Update; using NETworkManager.Utilities; +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Threading.Tasks; +using System.Windows.Data; +using System.Windows.Input; namespace NETworkManager.ViewModels; @@ -33,13 +34,16 @@ public AboutViewModel() #region Methods - private void CheckForUpdates() + private async Task CheckForUpdatesAsync() { IsUpdateAvailable = false; ShowUpdaterMessage = false; IsUpdateCheckRunning = true; + // Show a loading animation for the user + await Task.Delay(1000); + var updater = new Updater(); updater.UpdateAvailable += Updater_UpdateAvailable; @@ -208,7 +212,7 @@ public ResourceInfo SelectedResourceInfo private void CheckForUpdatesAction() { - CheckForUpdates(); + CheckForUpdatesAsync(); } public ICommand OpenWebsiteCommand => new RelayCommand(OpenWebsiteAction); diff --git a/Source/NETworkManager/ViewModels/BitCalculatorViewModel.cs b/Source/NETworkManager/ViewModels/BitCalculatorViewModel.cs index f3cf909cfd..ce1c4a70be 100644 --- a/Source/NETworkManager/ViewModels/BitCalculatorViewModel.cs +++ b/Source/NETworkManager/ViewModels/BitCalculatorViewModel.cs @@ -21,7 +21,6 @@ namespace NETworkManager.ViewModels; public class BitCalculatorViewModel : ViewModelBase { #region Variables - private readonly IDialogCoordinator _dialogCoordinator; private static readonly ILog Log = LogManager.GetLogger(typeof(BitCalculatorViewModel)); @@ -185,6 +184,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/ConnectionsViewModel.cs b/Source/NETworkManager/ViewModels/ConnectionsViewModel.cs index deebef2d2c..0cf04f7284 100644 --- a/Source/NETworkManager/ViewModels/ConnectionsViewModel.cs +++ b/Source/NETworkManager/ViewModels/ConnectionsViewModel.cs @@ -9,6 +9,7 @@ using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization; @@ -93,7 +94,8 @@ private async void AutoRefreshTimer_Tick(object sender, EventArgs e) #endregion #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(ConnectionsViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private readonly bool _isLoading; @@ -307,6 +309,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/DNSLookupViewModel.cs b/Source/NETworkManager/ViewModels/DNSLookupViewModel.cs index b45aedaa2d..eb50d42ee1 100644 --- a/Source/NETworkManager/ViewModels/DNSLookupViewModel.cs +++ b/Source/NETworkManager/ViewModels/DNSLookupViewModel.cs @@ -10,6 +10,7 @@ using System.Windows.Input; using System.Windows.Threading; using DnsClient; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Controls; @@ -25,6 +26,7 @@ namespace NETworkManager.ViewModels; public class DNSLookupViewModel : ViewModelBase { #region Variables + private static readonly ILog Log = LogManager.GetLogger(typeof(DNSLookupViewModel)); private readonly IDialogCoordinator _dialogCoordinator; @@ -387,6 +389,8 @@ private async Task Export() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; @@ -398,10 +402,9 @@ await _dialogCoordinator.ShowMessageAsync(window, Strings.Error, SettingsManager.Current.DNSLookup_ExportFileType = instance.FileType; SettingsManager.Current.DNSLookup_ExportFilePath = instance.FilePath; }, _ => { _dialogCoordinator.HideMetroDialogAsync(window, customDialog); }, - new[] - { + [ ExportFileType.Csv, ExportFileType.Xml, ExportFileType.Json - }, true, + ], true, SettingsManager.Current.DNSLookup_ExportFileType, SettingsManager.Current.DNSLookup_ExportFilePath); customDialog.Content = new ExportDialog diff --git a/Source/NETworkManager/ViewModels/DiscoveryProtocolViewModel.cs b/Source/NETworkManager/ViewModels/DiscoveryProtocolViewModel.cs index a4533adf3d..0eb4699fd0 100644 --- a/Source/NETworkManager/ViewModels/DiscoveryProtocolViewModel.cs +++ b/Source/NETworkManager/ViewModels/DiscoveryProtocolViewModel.cs @@ -6,6 +6,7 @@ using System.Windows; using System.Windows.Input; using System.Windows.Threading; +using log4net; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; using NETworkManager.Models.Export; @@ -19,6 +20,7 @@ namespace NETworkManager.ViewModels; public class DiscoveryProtocolViewModel : ViewModelBase { #region Variables + private static readonly ILog Log = LogManager.GetLogger(typeof(DiscoveryProtocolViewModel)); private readonly IDialogCoordinator _dialogCoordinator; @@ -281,6 +283,8 @@ private async Task CaptureAction() } catch (Exception ex) { + Log.Error("Error while trying to capture", ex); + await _dialogCoordinator.ShowMessageAsync(this, Strings.Error, ex.Message, MessageDialogStyle.Affirmative, AppearanceManager.MetroDialog); } @@ -306,6 +310,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; @@ -316,7 +322,8 @@ await _dialogCoordinator.ShowMessageAsync(this, Strings.Error, SettingsManager.Current.DiscoveryProtocol_ExportFileType = instance.FileType; SettingsManager.Current.DiscoveryProtocol_ExportFilePath = instance.FilePath; - }, _ => { _dialogCoordinator.HideMetroDialogAsync(this, customDialog); }, [ + }, _ => { _dialogCoordinator.HideMetroDialogAsync(this, customDialog); }, + [ ExportFileType.Csv, ExportFileType.Xml, ExportFileType.Json ], false, SettingsManager.Current.DiscoveryProtocol_ExportFileType, SettingsManager.Current.DiscoveryProtocol_ExportFilePath); diff --git a/Source/NETworkManager/ViewModels/IPGeolocationViewModel.cs b/Source/NETworkManager/ViewModels/IPGeolocationViewModel.cs index 2ebaa4a145..98e64c12a4 100644 --- a/Source/NETworkManager/ViewModels/IPGeolocationViewModel.cs +++ b/Source/NETworkManager/ViewModels/IPGeolocationViewModel.cs @@ -253,6 +253,8 @@ private async Task Export() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/IPScannerViewModel.cs b/Source/NETworkManager/ViewModels/IPScannerViewModel.cs index 2a2c06773d..aad0130127 100644 --- a/Source/NETworkManager/ViewModels/IPScannerViewModel.cs +++ b/Source/NETworkManager/ViewModels/IPScannerViewModel.cs @@ -13,6 +13,7 @@ using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Controls; @@ -32,11 +33,12 @@ namespace NETworkManager.ViewModels; public class IPScannerViewModel : ViewModelBase, IProfileManagerMinimal { #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(IPScannerViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private CancellationTokenSource _cancellationTokenSource; - + private readonly Guid _tabId; private bool _firstLoad = true; private bool _closed; @@ -510,6 +512,8 @@ private async Task CustomCommand(object guid) } catch (Exception ex) { + Log.Error("Error trying to run custom command", ex); + await _dialogCoordinator.ShowMessageAsync(this, Strings.ResourceManager.GetString("Error", LocalizationManager.GetInstance().Culture), ex.Message, MessageDialogStyle.Affirmative, @@ -555,6 +559,8 @@ private Task Export() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/ListenersViewModel.cs b/Source/NETworkManager/ViewModels/ListenersViewModel.cs index c03a3c3514..bddde6c2b3 100644 --- a/Source/NETworkManager/ViewModels/ListenersViewModel.cs +++ b/Source/NETworkManager/ViewModels/ListenersViewModel.cs @@ -9,6 +9,7 @@ using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; @@ -84,7 +85,8 @@ private async void AutoRefreshTimer_Tick(object sender, EventArgs e) #endregion #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(ListenersViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private readonly bool _isLoading; @@ -298,6 +300,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/LookupOUILookupViewModel.cs b/Source/NETworkManager/ViewModels/LookupOUILookupViewModel.cs index 7ea567decb..23989159fb 100644 --- a/Source/NETworkManager/ViewModels/LookupOUILookupViewModel.cs +++ b/Source/NETworkManager/ViewModels/LookupOUILookupViewModel.cs @@ -9,6 +9,7 @@ using System.Windows; using System.Windows.Data; using System.Windows.Input; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; @@ -58,7 +59,8 @@ private void AddSearchToHistory(string macAddressOrVendor) #endregion #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(LookupOUILookupViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private string _search; @@ -250,6 +252,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/LookupPortViewModel.cs b/Source/NETworkManager/ViewModels/LookupPortViewModel.cs index af84380b53..cf23746d11 100644 --- a/Source/NETworkManager/ViewModels/LookupPortViewModel.cs +++ b/Source/NETworkManager/ViewModels/LookupPortViewModel.cs @@ -9,6 +9,7 @@ using System.Windows; using System.Windows.Data; using System.Windows.Input; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; @@ -54,7 +55,8 @@ private void AddSearchToHistory(string portOrService) #endregion #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(LookupPortLookupViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private string _search; @@ -312,6 +314,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/NetworkInterfaceViewModel.cs b/Source/NETworkManager/ViewModels/NetworkInterfaceViewModel.cs index 8508269b81..9fce4e1e3e 100644 --- a/Source/NETworkManager/ViewModels/NetworkInterfaceViewModel.cs +++ b/Source/NETworkManager/ViewModels/NetworkInterfaceViewModel.cs @@ -13,6 +13,7 @@ using LiveCharts; using LiveCharts.Configurations; using LiveCharts.Wpf; +using log4net; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; @@ -31,7 +32,8 @@ namespace NETworkManager.ViewModels; public class NetworkInterfaceViewModel : ViewModelBase, IProfileManager { #region Variables - + private static readonly ILog Log = LogManager.GetLogger(typeof(NetworkInterfaceViewModel)); + private readonly IDialogCoordinator _dialogCoordinator; private readonly DispatcherTimer _searchDispatcherTimer = new(); private BandwidthMeter _bandwidthMeter; @@ -692,6 +694,8 @@ private async Task ExportAction() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/ViewModels/PingMonitorViewModel.cs b/Source/NETworkManager/ViewModels/PingMonitorViewModel.cs index 321859625e..42769ef9c3 100644 --- a/Source/NETworkManager/ViewModels/PingMonitorViewModel.cs +++ b/Source/NETworkManager/ViewModels/PingMonitorViewModel.cs @@ -11,6 +11,7 @@ using LiveCharts; using LiveCharts.Configurations; using LiveCharts.Wpf; +using log4net; using MahApps.Metro.Controls.Dialogs; using NETworkManager.Localization.Resources; using NETworkManager.Models.Export; @@ -48,6 +49,7 @@ public PingMonitorViewModel(IDialogCoordinator instance, Guid hostId, Action + var connectViewModel = new WiFiConnectViewModel(async instance => { // Connect Open/PSK/EAP await _dialogCoordinator.HideMetroDialogAsync(this, customDialog); @@ -900,7 +899,7 @@ private async void Connect() customDialog.Content = new WiFiConnectDialog { - DataContext = exportViewModel + DataContext = connectViewModel }; await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog); @@ -947,6 +946,8 @@ private async Task Export() } catch (Exception ex) { + Log.Error("Error while exporting data as " + instance.FileType, ex); + var settings = AppearanceManager.MetroDialog; settings.AffirmativeButtonText = Strings.OK; diff --git a/Source/NETworkManager/Views/AboutView.xaml b/Source/NETworkManager/Views/AboutView.xaml index 31ef11ad08..4fc5fad006 100644 --- a/Source/NETworkManager/Views/AboutView.xaml +++ b/Source/NETworkManager/Views/AboutView.xaml @@ -26,24 +26,23 @@ - - - + - + + - - - + + + + VerticalAlignment="Center" Margin="0,0,0,10" /> @@ -63,12 +62,77 @@ - + + + + + + + + + -