Skip to content

Commit 674d03c

Browse files
committed
Auto refresh added BornToBeRoot#204
1 parent 278ad97 commit 674d03c

5 files changed

Lines changed: 201 additions & 30 deletions

File tree

Source/NETworkManager/GlobalStaticConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class GlobalStaticConfiguration
5454
// Application: WiFi
5555
public static bool WiFi_Show2dot4GHzNetworks => true;
5656
public static bool WiFi_Show5GHzNetworks => true;
57+
public static AutoRefreshTimeInfo WiFi_AutoRefreshTime => AutoRefreshTime.Defaults.First(x => x.Value == 30 && x.TimeUnit == TimeUnit.Second);
5758

5859
// Application: IP Scanner
5960
public static int IPScanner_Threads => 256;

Source/NETworkManager/Models/Settings/SettingsInfo.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,36 @@ public bool WiFi_Show5GHzNetworks
601601
SettingsChanged = true;
602602
}
603603
}
604+
605+
private bool _wiFi_AutoRefresh;
606+
public bool WiFi_AutoRefresh
607+
{
608+
get => _wiFi_AutoRefresh;
609+
set
610+
{
611+
if (value == _wiFi_AutoRefresh)
612+
return;
613+
614+
_wiFi_AutoRefresh = value;
615+
OnPropertyChanged();
616+
SettingsChanged = true;
617+
}
618+
}
619+
620+
private AutoRefreshTimeInfo _wiFi_AutoRefreshTime = GlobalStaticConfiguration.WiFi_AutoRefreshTime;
621+
public AutoRefreshTimeInfo WiFi_AutoRefreshTime
622+
{
623+
get => _wiFi_AutoRefreshTime;
624+
set
625+
{
626+
if (value == _wiFi_AutoRefreshTime)
627+
return;
628+
629+
_wiFi_AutoRefreshTime = value;
630+
OnPropertyChanged();
631+
SettingsChanged = true;
632+
}
633+
}
604634
#endregion
605635

606636
#region IPScanner

Source/NETworkManager/ViewModels/ConnectionsViewModel.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,15 +361,17 @@ private void ResumeAutoRefreshTimer()
361361
_autoRefreshTimer.Start();
362362
_isTimerPaused = false;
363363
}
364-
public void OnViewHide()
364+
365+
public void OnViewVisible()
365366
{
366-
PauseAutoRefreshTimer();
367+
ResumeAutoRefreshTimer();
367368
}
368369

369-
public void OnViewVisible()
370+
public void OnViewHide()
370371
{
371-
ResumeAutoRefreshTimer();
372+
PauseAutoRefreshTimer();
372373
}
374+
373375
#endregion
374376

375377
#region Events

Source/NETworkManager/ViewModels/WiFiViewModel.cs

Lines changed: 110 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using System.Threading.Tasks;
1212
using System.Windows.Data;
1313
using System.Windows.Input;
14+
using System.Windows.Threading;
1415
using Windows.Devices.WiFi;
1516

1617
namespace NETworkManager.ViewModels
@@ -19,6 +20,8 @@ public class WiFiViewModel : ViewModelBase
1920
{
2021
#region Variables
2122
private readonly bool _isLoading;
23+
private readonly DispatcherTimer _autoRefreshTimer = new DispatcherTimer();
24+
private bool _isTimerPaused;
2225

2326
private bool _isAdaptersLoading;
2427
public bool IsAdaptersLoading
@@ -84,6 +87,56 @@ public bool IsNetworksLoading
8487
}
8588
}
8689

90+
private bool _autoRefresh;
91+
public bool AutoRefresh
92+
{
93+
get => _autoRefresh;
94+
set
95+
{
96+
if (value == _autoRefresh)
97+
return;
98+
99+
if (!_isLoading)
100+
SettingsManager.Current.WiFi_AutoRefresh = value;
101+
102+
_autoRefresh = value;
103+
104+
// Start timer to refresh automatically
105+
if (!_isLoading)
106+
{
107+
if (value)
108+
StartAutoRefreshTimer();
109+
else
110+
StopAutoRefreshTimer();
111+
}
112+
113+
OnPropertyChanged();
114+
}
115+
}
116+
117+
public ICollectionView AutoRefreshTimes { get; }
118+
119+
private AutoRefreshTimeInfo _selectedAutoRefreshTime;
120+
public AutoRefreshTimeInfo SelectedAutoRefreshTime
121+
{
122+
get => _selectedAutoRefreshTime;
123+
set
124+
{
125+
if (value == _selectedAutoRefreshTime)
126+
return;
127+
128+
if (!_isLoading)
129+
SettingsManager.Current.WiFi_AutoRefreshTime = value;
130+
131+
_selectedAutoRefreshTime = value;
132+
133+
if (AutoRefresh)
134+
ChangeAutoRefreshTimerInterval(AutoRefreshTime.CalculateTimeSpan(value));
135+
136+
OnPropertyChanged();
137+
}
138+
}
139+
87140
private string _search;
88141
public string Search
89142
{
@@ -101,7 +154,6 @@ public string Search
101154
}
102155
}
103156

104-
105157
private bool _show2dot4GHzNetworks;
106158
public bool Show2dot4GHzNetworks
107159
{
@@ -210,6 +262,11 @@ public WiFiViewModel()
210262
}
211263
};
212264

265+
AutoRefreshTimes = CollectionViewSource.GetDefaultView(AutoRefreshTime.Defaults);
266+
SelectedAutoRefreshTime = AutoRefreshTimes.SourceCollection.Cast<AutoRefreshTimeInfo>().FirstOrDefault(x => (x.Value == SettingsManager.Current.WiFi_AutoRefreshTime.Value && x.TimeUnit == SettingsManager.Current.WiFi_AutoRefreshTime.TimeUnit));
267+
268+
_autoRefreshTimer.Tick += AutoRefreshTimer_Tick;
269+
213270
LoadSettings();
214271

215272
LoadAdapters();
@@ -238,9 +295,9 @@ private void ReloadAdapterAction()
238295

239296
private bool ScanNetworks_CanExecute(object obj) => !IsAdaptersLoading && !IsNetworksLoading;
240297

241-
private void ScanNetworksAction()
298+
private async void ScanNetworksAction()
242299
{
243-
ScanNetworks(SelectedAdapter.WiFiAdapter);
300+
await ScanNetworks(SelectedAdapter.WiFiAdapter);
244301
}
245302
#endregion
246303

@@ -276,15 +333,12 @@ private async void ReloadAdapter()
276333
Adapters = await WiFi.GetAdapterAsync();
277334

278335
if (Adapters.Count > 0)
279-
{
280-
// Change interface...
281336
SelectedAdapter = string.IsNullOrEmpty(id) ? Adapters.FirstOrDefault() : Adapters.FirstOrDefault(x => x.NetworkInterfaceInfo.Id == id);
282-
}
283337

284338
IsAdaptersLoading = false;
285339
}
286340

287-
private async void ScanNetworks(WiFiAdapter adapter)
341+
private async Task ScanNetworks(WiFiAdapter adapter)
288342
{
289343
IsNetworksLoading = true;
290344

@@ -357,21 +411,67 @@ private void AddNetworkToRadio2Chart(WiFiNetworkInfo network)
357411
});
358412
}
359413

360-
public void OnViewVisible()
414+
private void ChangeAutoRefreshTimerInterval(TimeSpan timeSpan)
415+
{
416+
_autoRefreshTimer.Interval = timeSpan;
417+
}
418+
419+
private void StartAutoRefreshTimer()
361420
{
421+
ChangeAutoRefreshTimerInterval(AutoRefreshTime.CalculateTimeSpan(SelectedAutoRefreshTime));
362422

423+
_autoRefreshTimer.Start();
363424
}
364425

365-
public void OnViewHide()
426+
private void StopAutoRefreshTimer()
427+
{
428+
_autoRefreshTimer.Stop();
429+
}
430+
431+
private void PauseAutoRefreshTimer()
432+
{
433+
if (!_autoRefreshTimer.IsEnabled)
434+
return;
435+
436+
_autoRefreshTimer.Stop();
437+
_isTimerPaused = true;
438+
}
439+
440+
private void ResumeAutoRefreshTimer()
366441
{
442+
if (!_isTimerPaused)
443+
return;
444+
445+
_autoRefreshTimer.Start();
446+
_isTimerPaused = false;
447+
}
367448

449+
public void OnViewVisible()
450+
{
451+
ResumeAutoRefreshTimer();
368452
}
453+
454+
public void OnViewHide()
455+
{
456+
PauseAutoRefreshTimer();
457+
}
458+
369459
#endregion
370460

371461
#region Events
372-
private void SettingsManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
462+
private async void AutoRefreshTimer_Tick(object sender, EventArgs e)
373463
{
464+
// Stop timer...
465+
_autoRefreshTimer.Stop();
466+
467+
// Scan networks
468+
await ScanNetworks(SelectedAdapter.WiFiAdapter);
374469

470+
// Restart timer...
471+
_autoRefreshTimer.Start();
472+
}
473+
private void SettingsManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
474+
{
375475
}
376476
#endregion
377477
}

Source/NETworkManager/Views/WiFiView.xaml

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<KeyBinding Key="F5" Command="{Binding ScanNetworksCommand}" />
1818
</UserControl.InputBindings>
1919
<UserControl.Resources>
20+
<converters:AutoRefreshTimeToStringConverter x:Key="AutoRefreshTimeToStringConverter" />
2021
<converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
2122
<converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
2223
<converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
@@ -352,22 +353,59 @@
352353
<loadingIndicators:LoadingIndicator IsActive="True" Style="{DynamicResource LoadingIndicatorArcsStyle}" SpeedRatio="1" Margin="0,0,0,10"/>
353354
<TextBlock Text="{x:Static localization:Strings.SearchingForNetworksDots}" Style="{StaticResource MessageTextBlock}" />
354355
</StackPanel>
355-
<Button Grid.Row="4" Command="{Binding ScanNetworksCommand}" IsEnabled="{Binding IsNetworksLoading, Converter={StaticResource BooleanReverseConverter}}" Style="{StaticResource ImageWithTextButton}" VerticalAlignment="Bottom" HorizontalAlignment="Right">
356-
<Button.Content>
357-
<Grid>
358-
<Grid.ColumnDefinitions>
359-
<ColumnDefinition Width="Auto" />
360-
<ColumnDefinition Width="*" />
361-
</Grid.ColumnDefinitions>
362-
<Rectangle Width="20" Height="20" Fill="{DynamicResource GrayBrush3}" Margin="10,5,0,5">
363-
<Rectangle.OpacityMask>
364-
<VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Refresh}" />
365-
</Rectangle.OpacityMask>
366-
</Rectangle>
367-
<TextBlock Grid.Column="1" Text="{x:Static localization:Strings.Refresh}" TextAlignment="Center" Margin="10,5" />
368-
</Grid>
369-
</Button.Content>
370-
</Button>
356+
<Grid Grid.Row="4">
357+
<Grid.ColumnDefinitions>
358+
<ColumnDefinition Width="*" />
359+
<ColumnDefinition Width="10" />
360+
<ColumnDefinition Width="Auto" />
361+
</Grid.ColumnDefinitions>
362+
<WrapPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
363+
<CheckBox IsChecked="{Binding AutoRefresh}" Content="{x:Static localization:Strings.AutomaticallyUpdateEvery}" Margin="0,0,10,0"/>
364+
<ComboBox ItemsSource="{Binding AutoRefreshTimes}" SelectedItem="{Binding SelectedAutoRefreshTime}" MinWidth="150">
365+
<ComboBox.ItemTemplate>
366+
<DataTemplate DataType="utilities:AutoRefreshTimeInfo">
367+
<TextBlock>
368+
<TextBlock.Text>
369+
<MultiBinding StringFormat="{}{0} {1}">
370+
<Binding Path="Value" />
371+
<Binding Path="TimeUnit" Converter="{StaticResource AutoRefreshTimeToStringConverter}" />
372+
</MultiBinding>
373+
</TextBlock.Text>
374+
</TextBlock>
375+
</DataTemplate>
376+
</ComboBox.ItemTemplate>
377+
</ComboBox>
378+
</WrapPanel>
379+
<Button Grid.Column="2" Command="{Binding ScanNetworksCommand}" VerticalAlignment="Bottom" HorizontalAlignment="Right">
380+
<Button.Style>
381+
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ImageWithTextButton}">
382+
<Style.Triggers>
383+
<DataTrigger Binding="{Binding IsNetworksLoading}" Value="True">
384+
<Setter Property="IsEnabled" Value="False" />
385+
</DataTrigger>
386+
<DataTrigger Binding="{Binding AutoRefresh}" Value="True">
387+
<Setter Property="IsEnabled" Value="False" />
388+
</DataTrigger>
389+
</Style.Triggers>
390+
</Style>
391+
</Button.Style>
392+
<Button.Content>
393+
<Grid>
394+
<Grid.ColumnDefinitions>
395+
<ColumnDefinition Width="Auto" />
396+
<ColumnDefinition Width="*" />
397+
</Grid.ColumnDefinitions>
398+
<Rectangle Width="20" Height="20" Fill="{DynamicResource GrayBrush3}" Margin="10,5,0,5">
399+
<Rectangle.OpacityMask>
400+
<VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Refresh}" />
401+
</Rectangle.OpacityMask>
402+
</Rectangle>
403+
<TextBlock Grid.Column="1" Text="{x:Static localization:Strings.Refresh}" TextAlignment="Center" Margin="10,5" />
404+
</Grid>
405+
</Button.Content>
406+
</Button>
407+
</Grid>
408+
371409
</Grid>
372410
</Grid>
373411
<!-- Reload Adapter -->

0 commit comments

Comments
 (0)