99using NETworkManager . Views ;
1010using NETworkManager . Utilities ;
1111using NETworkManager . Models . Settings ;
12+ using System . Windows . Threading ;
13+ using System . Linq ;
1214
1315namespace NETworkManager . ViewModels
1416{
@@ -17,6 +19,9 @@ public class ARPTableViewModel : ViewModelBase
1719 #region Variables
1820 private IDialogCoordinator dialogCoordinator ;
1921
22+ private bool _isLoading = true ;
23+ private DispatcherTimer _autoRefreshTimer = new DispatcherTimer ( ) ;
24+
2025 private string _search ;
2126 public string Search
2227 {
@@ -68,6 +73,60 @@ public ARPTableInfo SelectedARPTableInfo
6873 }
6974 }
7075
76+ private bool _autoRefresh ;
77+ public bool AutoRefresh
78+ {
79+ get { return _autoRefresh ; }
80+ set
81+ {
82+ if ( value == _autoRefresh )
83+ return ;
84+
85+ if ( ! _isLoading )
86+ SettingsManager . Current . ARPTable_AutoRefresh = value ;
87+
88+ _autoRefresh = value ;
89+
90+ // Start timer to refresh automatically
91+ if ( ! _isLoading )
92+ {
93+ if ( value )
94+ StartAutoRefreshTimer ( ) ;
95+ else
96+ StopAutoRefreshTimer ( ) ;
97+ }
98+
99+ OnPropertyChanged ( ) ;
100+ }
101+ }
102+
103+ private ICollectionView _autoRefreshTimes ;
104+ public ICollectionView AutoRefreshTimes
105+ {
106+ get { return _autoRefreshTimes ; }
107+ }
108+
109+ private AutoRefreshTimeInfo _selectedAutoRefreshTime ;
110+ public AutoRefreshTimeInfo SelectedAutoRefreshTime
111+ {
112+ get { return _selectedAutoRefreshTime ; }
113+ set
114+ {
115+ if ( value == _selectedAutoRefreshTime )
116+ return ;
117+
118+ if ( ! _isLoading )
119+ SettingsManager . Current . ARPTable_AutoRefreshTime = value ;
120+
121+ _selectedAutoRefreshTime = value ;
122+
123+ if ( AutoRefresh )
124+ ChangeAutoRefreshTimerInterval ( AutoRefreshTime . CalculateTimeSpan ( value ) ) ;
125+
126+ OnPropertyChanged ( ) ;
127+ }
128+ }
129+
71130 private bool _isRefreshing ;
72131 public bool IsRefreshing
73132 {
@@ -128,10 +187,27 @@ public ARPTableViewModel(IDialogCoordinator instance)
128187 string filter = Search . Replace ( " " , "" ) . Replace ( "-" , "" ) . Replace ( ":" , "" ) ;
129188
130189 // Search by IPAddress and MACAddress
131- return info . IPAddress . ToString ( ) . IndexOf ( filter , StringComparison . OrdinalIgnoreCase ) > - 1 || info . MACAddress . ToString ( ) . IndexOf ( filter , StringComparison . OrdinalIgnoreCase ) > - 1 ;
190+ return info . IPAddress . ToString ( ) . IndexOf ( filter , StringComparison . OrdinalIgnoreCase ) > - 1 || info . MACAddress . ToString ( ) . IndexOf ( filter , StringComparison . OrdinalIgnoreCase ) > - 1 || ( info . IsMulticast ? LocalizationManager . GetStringByKey ( "String_Yes" ) : LocalizationManager . GetStringByKey ( "String_No" ) ) . IndexOf ( filter , StringComparison . OrdinalIgnoreCase ) > - 1 ;
132191 } ;
133192
193+ _autoRefreshTimes = CollectionViewSource . GetDefaultView ( AutoRefreshTime . Defaults ) ;
194+ SelectedAutoRefreshTime = AutoRefreshTimes . SourceCollection . Cast < AutoRefreshTimeInfo > ( ) . FirstOrDefault ( x => ( x . Value == SettingsManager . Current . ARPTable_AutoRefreshTime . Value && x . TimeUnit == SettingsManager . Current . ARPTable_AutoRefreshTime . TimeUnit ) ) ;
195+
196+ _autoRefreshTimer . Tick += AutoRefreshTimer_Tick ;
197+
198+ LoadSettings ( ) ;
199+
200+ _isLoading = false ;
201+
134202 Refresh ( ) ;
203+
204+ if ( AutoRefresh )
205+ StartAutoRefreshTimer ( ) ;
206+ }
207+
208+ private void LoadSettings ( )
209+ {
210+ AutoRefresh = SettingsManager . Current . ARPTable_AutoRefresh ;
135211 }
136212 #endregion
137213
@@ -288,6 +364,23 @@ private async void Refresh()
288364
289365 IsRefreshing = false ;
290366 }
367+
368+ private void ChangeAutoRefreshTimerInterval ( TimeSpan timeSpan )
369+ {
370+ _autoRefreshTimer . Interval = timeSpan ;
371+ }
372+
373+ private void StartAutoRefreshTimer ( )
374+ {
375+ ChangeAutoRefreshTimerInterval ( AutoRefreshTime . CalculateTimeSpan ( SelectedAutoRefreshTime ) ) ;
376+
377+ _autoRefreshTimer . Start ( ) ;
378+ }
379+
380+ private void StopAutoRefreshTimer ( )
381+ {
382+ _autoRefreshTimer . Stop ( ) ;
383+ }
291384 #endregion
292385
293386 #region Events
@@ -296,6 +389,11 @@ private void ArpTable_UserHasCanceled(object sender, EventArgs e)
296389 StatusMessage = LocalizationManager . GetStringByKey ( "String_CanceledByUser" ) ;
297390 DisplayStatusMessage = true ;
298391 }
392+
393+ private void AutoRefreshTimer_Tick ( object sender , EventArgs e )
394+ {
395+ Refresh ( ) ;
396+ }
299397 #endregion
300398 }
301399}
0 commit comments