From 26fcc18b5a067d4f5f5f35c1374bb3cdbd43531e Mon Sep 17 00:00:00 2001 From: BornToBeRoot Date: Wed, 23 Aug 2017 18:12:18 +0200 Subject: [PATCH] Close #31, some improvements --- .../Models/Settings/CommandLineManager.cs | 17 +- .../Models/Settings/SettingsInfo.cs | 14 ++ .../Localization/Resources.de-DE.xaml | 4 +- .../Localization/Resources.en-US.xaml | 2 +- .../Applications/IPScannerViewModel.cs | 13 +- .../Applications/PortScannerViewModel.cs | 157 +++++++++++++++--- .../Applications/TracerouteViewModel.cs | 2 +- .../Help/HelpCommandLineViewModel.cs | 24 +-- .../Views/Applications/IPScannerView.xaml | 2 - .../Views/Applications/PortScannerView.xaml | 58 ++++++- .../Applications/PortScannerView.xaml.cs | 2 +- .../Views/Help/HelpCommandLineWindow.xaml | 48 +++--- 12 files changed, 257 insertions(+), 86 deletions(-) diff --git a/Source/NETworkManager/Models/Settings/CommandLineManager.cs b/Source/NETworkManager/Models/Settings/CommandLineManager.cs index 7d9f93fd5..da8156254 100644 --- a/Source/NETworkManager/Models/Settings/CommandLineManager.cs +++ b/Source/NETworkManager/Models/Settings/CommandLineManager.cs @@ -54,9 +54,8 @@ public static void Parse() } else { - AddToWrongParameter(parameters[i]); - - Current.Help = true; + WrongParameterDetected(parameters); + return; } } else @@ -64,19 +63,17 @@ public static void Parse() // Ignore the first parameter because it's the path of the .exe if (i != 0) { - AddToWrongParameter(parameters[i]); - Current.Help = true; + WrongParameterDetected(parameters); + return; } } } } - private static void AddToWrongParameter(string parameter) + private static void WrongParameterDetected(string[] parameters) { - if (!string.IsNullOrEmpty(Current.WrongParameter)) - Current.WrongParameter += Environment.NewLine; - - Current.WrongParameter += parameter; + Current.WrongParameter = string.Join(" ", parameters); + Current.Help = true; } } } diff --git a/Source/NETworkManager/Models/Settings/SettingsInfo.cs b/Source/NETworkManager/Models/Settings/SettingsInfo.cs index ae0432ad2..26cf32817 100644 --- a/Source/NETworkManager/Models/Settings/SettingsInfo.cs +++ b/Source/NETworkManager/Models/Settings/SettingsInfo.cs @@ -718,6 +718,20 @@ public bool PortScanner_ResolveHostnamePreferIPv4 SettingsChanged = true; } } + + private bool _portScanner_ExpandStatistics = true; + public bool PortScanner_ExpandStatistics + { + get { return _portScanner_ExpandStatistics; } + set + { + if (value == _portScanner_ExpandStatistics) + return; + + _portScanner_ExpandStatistics = value; + SettingsChanged = true; + } + } #endregion #region WakeOnLAN diff --git a/Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml b/Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml index e3d48e2ff..c56c576b6 100644 --- a/Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml +++ b/Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml @@ -64,7 +64,6 @@ Transparenz Wake on LAN Befehlszeilenargumente - Falscher Parameter NETworkManager @@ -224,7 +223,8 @@ Die Anwendung kann ohne Parameter gestartet werden! Die folgenden Parameter können nicht verarbeitet werden: Folgende Parameter stehen zur Verfügung: - + Offen + Wechseln Standard diff --git a/Source/NETworkManager/Resources/Localization/Resources.en-US.xaml b/Source/NETworkManager/Resources/Localization/Resources.en-US.xaml index 0af5a1e7a..51982b1d1 100644 --- a/Source/NETworkManager/Resources/Localization/Resources.en-US.xaml +++ b/Source/NETworkManager/Resources/Localization/Resources.en-US.xaml @@ -65,7 +65,6 @@ Transparency Wake on LAN Command Line Arguments - Wrong parameter NETworkManager @@ -226,6 +225,7 @@ The application can be started without parameters! The following parameters can not be processed: The following parameters are available: + Open Change diff --git a/Source/NETworkManager/ViewModels/Applications/IPScannerViewModel.cs b/Source/NETworkManager/ViewModels/Applications/IPScannerViewModel.cs index 3ac2d1ce2..347886439 100644 --- a/Source/NETworkManager/ViewModels/Applications/IPScannerViewModel.cs +++ b/Source/NETworkManager/ViewModels/Applications/IPScannerViewModel.cs @@ -361,9 +361,7 @@ private void StopScan() } private void ScanFinished() - { - IsScanRunning = false; - + { // Stop timer and stopwatch stopwatch.Stop(); dispatcherTimer.Stop(); @@ -372,6 +370,9 @@ private void ScanFinished() EndTime = DateTime.Now; stopwatch.Reset(); + + CancelScan = false; + IsScanRunning = false; } public void OnShutdown() @@ -406,12 +407,10 @@ private void IpScanner_ProgressChanged(object sender, ProgressChangedArgs e) private void UserHasCanceled(object sender, EventArgs e) { - CancelScan = false; - - ScanFinished(); - StatusMessage = Application.Current.Resources["String_CanceledByUser"] as string; DisplayStatusMessage = true; + + ScanFinished(); } private void DispatcherTimer_Tick(object sender, EventArgs e) diff --git a/Source/NETworkManager/ViewModels/Applications/PortScannerViewModel.cs b/Source/NETworkManager/ViewModels/Applications/PortScannerViewModel.cs index 8763bb8dc..d3244e2c4 100644 --- a/Source/NETworkManager/ViewModels/Applications/PortScannerViewModel.cs +++ b/Source/NETworkManager/ViewModels/Applications/PortScannerViewModel.cs @@ -9,6 +9,8 @@ using System.Threading; using System.Net; using System.Net.Sockets; +using System.Windows.Threading; +using System.Diagnostics; namespace NETworkManager.ViewModels.Applications { @@ -17,6 +19,9 @@ public class PortScannerViewModel : ViewModelBase #region Variables CancellationTokenSource cancellationTokenSource; + DispatcherTimer dispatcherTimer = new DispatcherTimer(); + Stopwatch stopwatch = new Stopwatch(); + private bool _isLoading = true; private string _hostnameOrIPAddress; @@ -122,30 +127,44 @@ public ObservableCollection PortScanResult } } - private int _progressBarMaximum; - public int ProgressBarMaximum + private int _portsToScan; + public int PortsToScan + { + get { return _portsToScan; } + set + { + if (value == _portsToScan) + return; + + _portsToScan = value; + OnPropertyChanged(); + } + } + + private int _portsScanned; + public int PortsScanned { - get { return _progressBarMaximum; } + get { return _portsScanned; } set { - if (value == _progressBarMaximum) + if (value == _portsScanned) return; - _progressBarMaximum = value; + _portsScanned = value; OnPropertyChanged(); } } - private int _progressBarValue; - public int ProgressBarValue + private int _portsOpen; + public int PortsOpen { - get { return _progressBarValue; } + get { return _portsOpen; } set { - if (value == _progressBarValue) + if (value == _portsOpen) return; - _progressBarValue = value; + _portsOpen = value; OnPropertyChanged(); } } @@ -164,6 +183,65 @@ public bool PreparingScan } } + private DateTime? _startTime; + public DateTime? StartTime + { + get { return _startTime; } + set + { + if (value == _startTime) + return; + + _startTime = value; + OnPropertyChanged(); + } + } + + private TimeSpan _duration; + public TimeSpan Duration + { + get { return _duration; } + set + { + if (value == _duration) + return; + + _duration = value; + OnPropertyChanged(); + } + } + + private DateTime? _endTime; + public DateTime? EndTime + { + get { return _endTime; } + set + { + if (value == _endTime) + return; + + _endTime = value; + OnPropertyChanged(); + } + } + + private bool _expandStatistics; + public bool ExpandStatistics + { + get { return _expandStatistics; } + set + { + if (value == _expandStatistics) + return; + + if (!_isLoading) + SettingsManager.Current.PortScanner_ExpandStatistics = value; + + _expandStatistics = value; + OnPropertyChanged(); + } + } + private bool _displayStatusMessage; public bool DisplayStatusMessage { @@ -200,9 +278,7 @@ public PortScannerViewModel() _isLoading = false; } - #endregion - #region Settings private void LoadSettings() { if (SettingsManager.Current.PortScanner_HostnameOrIPAddressHistory != null) @@ -210,6 +286,8 @@ private void LoadSettings() if (SettingsManager.Current.PortScanner_PortsHistory != null) PortsHistory = new List(SettingsManager.Current.PortScanner_PortsHistory); + + ExpandStatistics = SettingsManager.Current.PortScanner_ExpandStatistics; } #endregion @@ -237,7 +315,16 @@ private async void StartScan() IsScanRunning = true; PreparingScan = true; + // Measure the time + StartTime = DateTime.Now; + stopwatch.Start(); + dispatcherTimer.Tick += DispatcherTimer_Tick; + dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); + dispatcherTimer.Start(); + EndTime = null; + PortScanResult.Clear(); + PortsOpen = 0; cancellationTokenSource = new CancellationTokenSource(); @@ -312,11 +399,11 @@ private async void StartScan() if (hostData.Count == 0) { - IsScanRunning = false; - StatusMessage += Environment.NewLine + Application.Current.Resources["String_NothingToDoCheckYourInput"] as string; DisplayStatusMessage = true; + ScanFinished(); + return; } @@ -324,8 +411,8 @@ private async void StartScan() try { - ProgressBarMaximum = ports.Length * hostData.Count; - ProgressBarValue = 0; + PortsToScan = ports.Length * hostData.Count; + PortsScanned = 0; PreparingScan = false; @@ -350,10 +437,10 @@ private async void StartScan() catch (Exception ex) // This will catch any exception { - IsScanRunning = false; - StatusMessage = ex.Message; DisplayStatusMessage = true; + + ScanFinished(); } } @@ -363,6 +450,21 @@ private void StopScan() cancellationTokenSource.Cancel(); } + private void ScanFinished() + { + // Stop timer and stopwatch + stopwatch.Stop(); + dispatcherTimer.Stop(); + + Duration = stopwatch.Elapsed; + EndTime = DateTime.Now; + + stopwatch.Reset(); + + CancelScan = false; + IsScanRunning = false; + } + public void OnShutdown() { if (IsScanRunning) @@ -373,32 +475,39 @@ public void OnShutdown() #region Events private void PortScanner_UserHasCanceled(object sender, EventArgs e) { - CancelScan = false; - IsScanRunning = false; - StatusMessage = Application.Current.Resources["String_CanceledByUser"] as string; DisplayStatusMessage = true; + + ScanFinished(); } private void PortScanner_ProgressChanged(object sender, ProgressChangedArgs e) { - ProgressBarValue = e.Value; + PortsScanned = e.Value; } private void PortScanner_ScanComplete(object sender, EventArgs e) { - IsScanRunning = false; + ScanFinished(); } private void PortScanner_PortScanned(object sender, PortScannedArgs e) { PortInfo portInfo = PortInfo.Parse(e); - + Application.Current.Dispatcher.BeginInvoke(new Action(delegate () { PortScanResult.Add(portInfo); })); + + if (portInfo.Status == PortInfo.PortStatus.Open) + PortsOpen++; + } + + private void DispatcherTimer_Tick(object sender, EventArgs e) + { + Duration = stopwatch.Elapsed; } #endregion } diff --git a/Source/NETworkManager/ViewModels/Applications/TracerouteViewModel.cs b/Source/NETworkManager/ViewModels/Applications/TracerouteViewModel.cs index d28b92aa3..217c9fc45 100644 --- a/Source/NETworkManager/ViewModels/Applications/TracerouteViewModel.cs +++ b/Source/NETworkManager/ViewModels/Applications/TracerouteViewModel.cs @@ -239,8 +239,8 @@ private async void StartTrace() private void TracerouteFinished() { - IsTraceRunning = false; CancelTrace = false; + IsTraceRunning = false; } public void OnShutdown() diff --git a/Source/NETworkManager/ViewModels/Help/HelpCommandLineViewModel.cs b/Source/NETworkManager/ViewModels/Help/HelpCommandLineViewModel.cs index fd519bb0f..0843294a4 100644 --- a/Source/NETworkManager/ViewModels/Help/HelpCommandLineViewModel.cs +++ b/Source/NETworkManager/ViewModels/Help/HelpCommandLineViewModel.cs @@ -39,30 +39,30 @@ public LocalizationInfo LocalizationSelectedItem } } - private bool _displayWrongParameterNote; - public bool DisplayWrongParameterNote + private bool _displayWrongParameter; + public bool DisplayWrongParameter { - get { return _displayWrongParameterNote; } + get { return _displayWrongParameter; } set { - if (value == _displayWrongParameterNote) + if (value == _displayWrongParameter) return; - _displayWrongParameterNote = value; + _displayWrongParameter = value; OnPropertyChanged(); } } - private string _wrongParameterNote; - public string WrongParameterNote + private string _wrongParameter; + public string WrongParameter { - get { return _wrongParameterNote; } + get { return _wrongParameter; } set { - if (value == _wrongParameterNote) + if (value == _wrongParameter) return; - _wrongParameterNote = value; + _wrongParameter = value; OnPropertyChanged(); } } @@ -104,8 +104,8 @@ public HelpCommandLineViewModel() if (!string.IsNullOrEmpty(CommandLineManager.Current.WrongParameter)) { - WrongParameterNote = CommandLineManager.Current.WrongParameter; - DisplayWrongParameterNote = true; + WrongParameter = CommandLineManager.Current.WrongParameter; + DisplayWrongParameter = true; } ParameterHelp = CommandLineManager.ParameterHelp; diff --git a/Source/NETworkManager/Views/Applications/IPScannerView.xaml b/Source/NETworkManager/Views/Applications/IPScannerView.xaml index bc7a3613f..67786ad79 100644 --- a/Source/NETworkManager/Views/Applications/IPScannerView.xaml +++ b/Source/NETworkManager/Views/Applications/IPScannerView.xaml @@ -219,8 +219,6 @@ - diff --git a/Source/NETworkManager/Views/Applications/PortScannerView.xaml b/Source/NETworkManager/Views/Applications/PortScannerView.xaml index 87ef0cba8..68e69c474 100644 --- a/Source/NETworkManager/Views/Applications/PortScannerView.xaml +++ b/Source/NETworkManager/Views/Applications/PortScannerView.xaml @@ -13,6 +13,7 @@ + @@ -22,6 +23,7 @@ + @@ -129,7 +131,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/NETworkManager/Views/Applications/PortScannerView.xaml.cs b/Source/NETworkManager/Views/Applications/PortScannerView.xaml.cs index b483fa921..3392eea23 100644 --- a/Source/NETworkManager/Views/Applications/PortScannerView.xaml.cs +++ b/Source/NETworkManager/Views/Applications/PortScannerView.xaml.cs @@ -20,4 +20,4 @@ private void Dispatcher_ShutdownStarted(object sender, System.EventArgs e) viewModel.OnShutdown(); } } -} +} \ No newline at end of file diff --git a/Source/NETworkManager/Views/Help/HelpCommandLineWindow.xaml b/Source/NETworkManager/Views/Help/HelpCommandLineWindow.xaml index 2059400ca..ca8460708 100644 --- a/Source/NETworkManager/Views/Help/HelpCommandLineWindow.xaml +++ b/Source/NETworkManager/Views/Help/HelpCommandLineWindow.xaml @@ -6,7 +6,7 @@ xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:Converter="clr-namespace:NETworkManager.Converters" mc:Ignorable="d" - Title="{DynamicResource String_ProductName}" Topmost="True" Style="{DynamicResource DefaultWindow}" Height="450" Width="550" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" IsMinButtonEnabled="False" IsMaxRestoreButtonEnabled="False" ShowInTaskbar="False"> + Title="{DynamicResource String_ProductName}" Topmost="True" Style="{DynamicResource DefaultWindow}" MinHeight="500" Height="500" MinWidth="500" Width="500" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" IsMinButtonEnabled="False" IsMaxRestoreButtonEnabled="False" ShowInTaskbar="False"> @@ -15,50 +15,54 @@ - + - + + + + + + - - + + + + + + - - - - - - - + + + + + + + + - - - - - - - - - - + + + +