Skip to content

Commit 14775b2

Browse files
committed
Feature: Reload hosts file
1 parent 1e160cf commit 14775b2

File tree

3 files changed

+75
-36
lines changed

3 files changed

+75
-36
lines changed

Source/NETworkManager/ViewModels/HostsFileEditorViewModel.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using System.Windows.Input;
1313
using System.Windows.Threading;
1414
using log4net;
15+
using MahApps.Metro.Controls;
1516
using MahApps.Metro.Controls.Dialogs;
1617
using NETworkManager.Localization.Resources;
1718
using NETworkManager.Models.Export;
@@ -166,12 +167,12 @@ public HostsFileEditorViewModel(IDialogCoordinator instance)
166167
};
167168

168169
// Get hosts file entries
169-
Refresh().ConfigureAwait(false);
170+
Refresh(true).ConfigureAwait(false);
170171

171172
// Watch hosts file for changes
172-
HostsFileEditor.HostsFileChanged += async (_, _) =>
173+
HostsFileEditor.HostsFileChanged += (_, _) =>
173174
{
174-
StatusMessage = "Hosts file changed on disk. Reloading...";
175+
StatusMessage = "Refreshing...";
175176
IsStatusMessageDisplayed = true;
176177

177178
Application.Current.Dispatcher.Invoke(() =>
@@ -191,7 +192,23 @@ private void LoadSettings()
191192
#endregion
192193

193194
#region ICommands & Actions
195+
public ICommand RefreshCommand => new RelayCommand(_ => RefreshAction().ConfigureAwait(false), Refresh_CanExecute);
196+
197+
private bool Refresh_CanExecute(object parameter)
198+
{
199+
return Application.Current.MainWindow != null &&
200+
!((MetroWindow)Application.Current.MainWindow).IsAnyDialogOpen &&
201+
!ConfigurationManager.Current.IsChildWindowOpen;
202+
}
194203

204+
private async Task RefreshAction()
205+
{
206+
StatusMessage = "Refreshing...";
207+
IsStatusMessageDisplayed = true;
208+
209+
await Refresh();
210+
}
211+
195212
public ICommand RestartAsAdminCommand => new RelayCommand(_ => RestartAsAdminAction().ConfigureAwait(false));
196213

197214
private async Task RestartAsAdminAction()
@@ -210,20 +227,25 @@ await _dialogCoordinator.ShowMessageAsync(this, Strings.Error, ex.Message,
210227

211228
#region Methods
212229

213-
private async Task Refresh()
230+
private async Task Refresh(bool init = false)
214231
{
215232
if(IsRefreshing)
216233
return;
217234

218235
IsRefreshing = true;
219-
236+
237+
if (!init)
238+
await Task.Delay(2500);
239+
220240
Results.Clear();
221241

242+
// Todo: try catch + Re-try count and delay
243+
222244
(await HostsFileEditor.GetHostsFileEntriesAsync()).ToList().ForEach(Results.Add);
223-
224-
StatusMessage = "Hosts file reloaded at " + DateTime.Now;
225-
IsStatusMessageDisplayed = true;
226245

246+
StatusMessage = "Reloaded at " + DateTime.Now.ToShortTimeString();
247+
IsStatusMessageDisplayed = true;
248+
227249
IsRefreshing = false;
228250
}
229251

@@ -236,6 +258,5 @@ public void OnViewHide()
236258
{
237259

238260
}
239-
240261
#endregion
241262
}

Source/NETworkManager/Views/HostsFileEditorView.xaml

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,16 @@
2020
<converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
2121
<converters:BooleanToStringConverter x:Key="BooleanToStringConverter" />
2222
</UserControl.Resources>
23-
<!--
2423
<UserControl.InputBindings>
25-
<KeyBinding Key="F5" Command="{Binding RefreshCommand}" />
24+
<KeyBinding Key="F5" Command="{Binding Path=RefreshCommand}" />
2625
</UserControl.InputBindings>
27-
-->
2826
<TabControl Style="{StaticResource ResourceKey=DefaultTabControl}">
2927
<TabItem Header="{x:Static Member=localization:Strings.HostsFileEditor}">
3028
<Grid Margin="10">
3129
<Grid.RowDefinitions>
3230
<RowDefinition Height="Auto" />
3331
<RowDefinition Height="10" />
3432
<RowDefinition Height="*" />
35-
<RowDefinition Height="Auto" />
36-
<RowDefinition Height="Auto" />
3733
<RowDefinition Height="10" />
3834
<RowDefinition Height="Auto" />
3935
</Grid.RowDefinitions>
@@ -123,33 +119,56 @@
123119
Binding="{Binding Path=(hostsFileEditor:HostsFileEntry.IPAddress)}"
124120
SortMemberPath="IPAddress"
125121
MinWidth="150" />
126-
<DataGridTextColumn Header="{x:Static localization:Strings.Hostname}"
127-
Binding="{Binding (hostsFileEditor:HostsFileEntry.Hostname)}"
122+
<DataGridTextColumn Header="{x:Static Member=localization:Strings.Hostname}"
123+
Binding="{Binding Path=(hostsFileEditor:HostsFileEntry.Hostname)}"
128124
SortMemberPath="Hostname"
129125
MinWidth="200" />
130-
<DataGridTextColumn Header="{x:Static localization:Strings.Comment}"
131-
Binding="{Binding (hostsFileEditor:HostsFileEntry.Comment)}"
126+
<DataGridTextColumn Header="{x:Static Member=localization:Strings.Comment}"
127+
Binding="{Binding Path=(hostsFileEditor:HostsFileEntry.Comment)}"
132128
SortMemberPath="Hostname"
133129
MinWidth="200" />
134130
</controls:MultiSelectDataGrid.Columns>
135131
</controls:MultiSelectDataGrid>
136-
<TextBlock Grid.Column="0" Grid.Row="3" Foreground="{DynamicResource MahApps.Brushes.Accent}"
137-
Text="{Binding StatusMessage}"
138-
Visibility="{Binding IsStatusMessageDisplayed, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}"
139-
Style="{DynamicResource StatusMessageTextBlock}" Margin="0,10,0,0" />
140-
<mahAppsControls:MetroProgressBar Grid.Column="0" Grid.Row="4" Margin="0,10,0,0"
141-
Foreground="{DynamicResource MahApps.Brushes.Accent}"
142-
IsIndeterminate="True">
143-
<mahAppsControls:MetroProgressBar.Style>
144-
<Style TargetType="{x:Type mahAppsControls:MetroProgressBar}">
145-
<Style.Triggers>
146-
<DataTrigger Binding="{Binding IsRefreshing}" Value="False">
147-
<Setter Property="Visibility" Value="Collapsed" />
148-
</DataTrigger>
149-
</Style.Triggers>
150-
</Style>
151-
</mahAppsControls:MetroProgressBar.Style>
152-
</mahAppsControls:MetroProgressBar>
132+
<Grid Grid.Column="0" Grid.Row="4">
133+
<Grid.ColumnDefinitions>
134+
<ColumnDefinition Width="Auto" />
135+
<ColumnDefinition Width="10" />
136+
<ColumnDefinition Width="*" />
137+
<ColumnDefinition Width="10" />
138+
<ColumnDefinition Width="Auto" />
139+
</Grid.ColumnDefinitions>
140+
<WrapPanel Grid.Column="0" Grid.Row="0"
141+
Orientation="Horizontal"
142+
VerticalAlignment="Center"
143+
HorizontalAlignment="Center">
144+
<networkManager:LoadingIndicator IsActive="True"
145+
Style="{DynamicResource ResourceKey=LoadingIndicatorPulseStyle}"
146+
Visibility="{Binding Path=IsRefreshing, Converter={StaticResource ResourceKey=BooleanToVisibilityCollapsedConverter}}"
147+
Width="24" Height="24"
148+
SpeedRatio="1"
149+
Margin="0,0,10,0" />
150+
<TextBlock Style="{StaticResource ResourceKey=AccentTextBlock}"
151+
Visibility="{Binding Path=IsStatusMessageDisplayed, Converter={StaticResource ResourceKey=BooleanToVisibilityCollapsedConverter}}"
152+
Text="{Binding Path=StatusMessage}"
153+
VerticalAlignment="Center" />
154+
</WrapPanel>
155+
</Grid>
156+
<!--
157+
<StackPanel Grid.Column="0" Grid.Row="3"
158+
VerticalAlignment="Center">
159+
<networkManager:LoadingIndicator IsActive="True"
160+
SpeedRatio="1"
161+
Visibility="{Binding Path=IsRefreshing, Converter={StaticResource ResourceKey=BooleanToVisibilityCollapsedConverter}}"
162+
Style="{DynamicResource ResourceKey=LoadingIndicatorArcsStyle}"
163+
Margin="0,10,0,10" />
164+
165+
<TextBlock Foreground="{DynamicResource ResourceKey=MahApps.Brushes.Accent}"
166+
167+
Text="{Binding Path=StatusMessage}"
168+
Visibility="{Binding Path=IsStatusMessageDisplayed, Converter={StaticResource ResourceKey=BooleanToVisibilityCollapsedConverter}}"
169+
Style="{DynamicResource ResourceKey=StatusMessageTextBlock}" Margin="0,10,0,0" />
170+
</StackPanel>
171+
-->
153172
<!--
154173
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"
155174
Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsAdmin, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">

Source/NETworkManager/Views/WiFiView.xaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,6 @@
774774
Style="{DynamicResource ResourceKey=LoadingIndicatorPulseStyle}"
775775
Visibility="{Binding Path=IsBackgroundSearchRunning, Converter={StaticResource ResourceKey=BooleanToVisibilityCollapsedConverter}}"
776776
Width="24" Height="24"
777-
VerticalAlignment="Center"
778777
SpeedRatio="1"
779778
Margin="0,0,10,0" />
780779
<TextBlock Style="{StaticResource ResourceKey=AccentTextBlock}"

0 commit comments

Comments
 (0)