Skip to content

Commit 4b0f349

Browse files
committed
Feature: Daily Backup
1 parent 7fa5f4a commit 4b0f349

File tree

12 files changed

+197
-41
lines changed

12 files changed

+197
-41
lines changed

Source/NETworkManager.Localization/Resources/Strings.Designer.cs

Lines changed: 19 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Source/NETworkManager.Localization/Resources/Strings.resx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3952,13 +3952,12 @@ If you click Cancel, the profile file will remain unencrypted.</value>
39523952
<value>Could not parse "{0}".</value>
39533953
</data>
39543954
<data name="MaximumNumberOfBackups" xml:space="preserve">
3955-
<value>Maximum Number of Backups</value>
3955+
<value>Maximum number of backups</value>
39563956
</data>
3957-
<data name="HelpMessage_SettingsMaximumNumberOfBackups" xml:space="preserve">
3958-
<value>The number of settings backups that are retained before the oldest one is deleted.
3959-
3960-
An automatic backup is only created once a day, before saving a change.
3961-
3962-
The value 0 disables the creation of automatic backups. Backups that have already been created are not deleted.</value>
3957+
<data name="CreateDailyBackup" xml:space="preserve">
3958+
<value>Create daily backup</value>
3959+
</data>
3960+
<data name="HelpMessage_MaximumNumberOfBackups" xml:space="preserve">
3961+
<value>Number of backups that are retained before the oldest one is deleted.</value>
39633962
</data>
39643963
</root>

Source/NETworkManager.Settings/GlobalStaticConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@ public static class GlobalStaticConfiguration
8181
public static bool Experimental_EnableExperimentalFeatures => false;
8282

8383
// Settings: Profiles
84+
public static bool Profiles_IsDailyBackupEnabled => true;
8485
public static int Profiles_MaximumNumberOfBackups => 10;
8586

8687
// Settings: Settings
88+
public static bool Settings_IsDailyBackupEnabled => true;
8789
public static int Settings_MaximumNumberOfBackups => 10;
8890

8991
// Application: Dashboard

Source/NETworkManager.Settings/SettingsInfo.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,21 @@ public string Profiles_LastSelected
582582
}
583583
}
584584

585+
private bool _profiles_IsDailyBackupEnabled = GlobalStaticConfiguration.Profiles_IsDailyBackupEnabled;
586+
587+
public bool Profiles_IsDailyBackupEnabled
588+
{
589+
get => _profiles_IsDailyBackupEnabled;
590+
set
591+
{
592+
if (value == _profiles_IsDailyBackupEnabled)
593+
return;
594+
595+
_profiles_IsDailyBackupEnabled = value;
596+
OnPropertyChanged();
597+
}
598+
}
599+
585600
private int _profiles_MaximumNumberOfBackups = GlobalStaticConfiguration.Profiles_MaximumNumberOfBackups;
586601

587602
public int Profiles_MaximumNumberOfBackups
@@ -598,6 +613,21 @@ public int Profiles_MaximumNumberOfBackups
598613
}
599614

600615
// Settings
616+
private bool _settings_IsDailyBackupEnabled = GlobalStaticConfiguration.Settings_IsDailyBackupEnabled;
617+
618+
public bool Settings_IsDailyBackupEnabled
619+
{
620+
get => _settings_IsDailyBackupEnabled;
621+
set
622+
{
623+
if (value == _settings_IsDailyBackupEnabled)
624+
return;
625+
626+
_settings_IsDailyBackupEnabled = value;
627+
OnPropertyChanged();
628+
}
629+
}
630+
601631
private int _settings_MaximumNumberOfBackups = GlobalStaticConfiguration.Settings_MaximumNumberOfBackups;
602632

603633
public int Settings_MaximumNumberOfBackups

Source/NETworkManager.Settings/SettingsManager.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,8 @@ private static void SerializeToFile(string filePath)
265265
/// called as part of a daily maintenance routine.</remarks>
266266
private static void CreateDailyBackupIfNeeded()
267267
{
268-
var maxBackups = Current.Settings_MaximumNumberOfBackups;
269-
270268
// Check if backups are disabled
271-
if (maxBackups == 0)
269+
if (!Current.Settings_IsDailyBackupEnabled)
272270
{
273271
Log.Debug("Daily backups are disabled. Skipping backup creation...");
274272

@@ -294,7 +292,7 @@ private static void CreateDailyBackupIfNeeded()
294292
// Cleanup old backups
295293
CleanupBackups(GetSettingsBackupFolderLocation(),
296294
GetSettingsFileName(),
297-
maxBackups);
295+
Current.Settings_MaximumNumberOfBackups);
298296

299297
Current.LastBackup = currentDate;
300298
}

Source/NETworkManager/ViewModels/SettingsProfilesViewModel.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,24 @@ public ProfileFileInfo SelectedProfileFile
6969
}
7070
}
7171

72+
private bool _isDailyBackupEnabled;
73+
74+
public bool IsDailyBackupEnabled
75+
{
76+
get => _isDailyBackupEnabled;
77+
set
78+
{
79+
if (value == _isDailyBackupEnabled)
80+
return;
81+
82+
if (!_isLoading)
83+
SettingsManager.Current.Profiles_IsDailyBackupEnabled = value;
84+
85+
_isDailyBackupEnabled = value;
86+
OnPropertyChanged();
87+
}
88+
}
89+
7290
private int _maximumNumberOfBackups;
7391

7492
public int MaximumNumberOfBackups
@@ -108,6 +126,7 @@ public SettingsProfilesViewModel()
108126
private void LoadSettings()
109127
{
110128
Location = ProfileManager.GetProfilesFolderLocation();
129+
IsDailyBackupEnabled = SettingsManager.Current.Profiles_IsDailyBackupEnabled;
111130
MaximumNumberOfBackups = SettingsManager.Current.Profiles_MaximumNumberOfBackups;
112131
}
113132

Source/NETworkManager/ViewModels/SettingsSettingsViewModel.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,24 @@ public string Location
3131
}
3232
}
3333

34+
private bool _isDailyBackupEnabled;
35+
36+
public bool IsDailyBackupEnabled
37+
{
38+
get => _isDailyBackupEnabled;
39+
set
40+
{
41+
if (value == _isDailyBackupEnabled)
42+
return;
43+
44+
if (!_isLoading)
45+
SettingsManager.Current.Settings_IsDailyBackupEnabled = value;
46+
47+
_isDailyBackupEnabled = value;
48+
OnPropertyChanged();
49+
}
50+
}
51+
3452
private int _maximumNumberOfBackups;
3553

3654
public int MaximumNumberOfBackups
@@ -65,6 +83,7 @@ public SettingsSettingsViewModel()
6583
private void LoadSettings()
6684
{
6785
Location = SettingsManager.GetSettingsFolderLocation();
86+
IsDailyBackupEnabled = SettingsManager.Current.Settings_IsDailyBackupEnabled;
6887
MaximumNumberOfBackups = SettingsManager.Current.Settings_MaximumNumberOfBackups;
6988
}
7089

Source/NETworkManager/Views/SettingsProfilesView.xaml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
67
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
78
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
89
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
@@ -144,7 +145,8 @@
144145
</DataGrid>
145146
<Button Command="{Binding AddProfileFileCommand}"
146147
Style="{StaticResource ResourceKey=ImageWithTextButton}"
147-
HorizontalAlignment="Left">
148+
HorizontalAlignment="Left"
149+
Margin="0,0,0,20">
148150
<Button.Content>
149151
<Grid>
150152
<Grid.ColumnDefinitions>
@@ -162,5 +164,23 @@
162164
</Grid>
163165
</Button.Content>
164166
</Button>
167+
<TextBlock Style="{StaticResource HeaderTextBlock}" Text="{x:Static localization:Strings.Backup}" />
168+
<mah:ToggleSwitch Header="{x:Static localization:Strings.CreateDailyBackup}"
169+
IsOn="{Binding IsDailyBackupEnabled}" Margin="0,0,0,10" />
170+
<TextBlock Text="{x:Static localization:Strings.MaximumNumberOfBackups}"
171+
Style="{StaticResource CenterTextBlock}"
172+
Margin="0,0,0,10" />
173+
<StackPanel Orientation="Horizontal">
174+
<mah:NumericUpDown Value="{Binding MaximumNumberOfBackups}"
175+
IsEnabled="{Binding IsDailyBackupEnabled}"
176+
Minimum="1" Maximum="365" Interval="1"/>
177+
<Rectangle Width="24" Height="24"
178+
ToolTip="{x:Static localization:Strings.HelpMessage_MaximumNumberOfBackups}"
179+
Style="{StaticResource HelpImageRectangle}" Margin="10,0,0,0">
180+
<Rectangle.Resources>
181+
<Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource HelpToolTip}" />
182+
</Rectangle.Resources>
183+
</Rectangle>
184+
</StackPanel>
165185
</StackPanel>
166-
</UserControl>
186+
</UserControl>

Source/NETworkManager/Views/SettingsSettingsView.xaml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,17 @@
3232
</Button.Content>
3333
</Button>
3434
<TextBlock Style="{StaticResource HeaderTextBlock}" Text="{x:Static localization:Strings.Backup}" />
35-
<StackPanel Orientation="Horizontal" Margin="0,0,0,20">
36-
<TextBlock Text="{x:Static localization:Strings.MaximumNumberOfBackups}"
37-
Style="{StaticResource CenterTextBlock}"
38-
Margin="0,0,0,10" />
39-
<mah:NumericUpDown Value="{Binding MaximumNumberOfBackups}" Minimum="0" Maximum="100" Interval="1"/>
35+
<mah:ToggleSwitch Header="{x:Static localization:Strings.CreateDailyBackup}"
36+
IsOn="{Binding IsDailyBackupEnabled}" Margin="0,0,0,10" />
37+
<TextBlock Text="{x:Static localization:Strings.MaximumNumberOfBackups}"
38+
Style="{StaticResource CenterTextBlock}"
39+
Margin="0,0,0,10" />
40+
<StackPanel Orientation="Horizontal" Margin="0,0,0,20">
41+
<mah:NumericUpDown Value="{Binding MaximumNumberOfBackups}"
42+
IsEnabled="{Binding IsDailyBackupEnabled}"
43+
Minimum="1" Maximum="365" Interval="1"/>
4044
<Rectangle Width="24" Height="24"
41-
ToolTip="{x:Static localization:Strings.HelpMessage_SettingsMaximumNumberOfBackups}"
45+
ToolTip="{x:Static localization:Strings.HelpMessage_MaximumNumberOfBackups}"
4246
Style="{StaticResource HelpImageRectangle}" Margin="10,0,0,0">
4347
<Rectangle.Resources>
4448
<Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource HelpToolTip}" />

Website/docs/changelog/next-release.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Release date: **xx.xx.2025**
6565
**Settings**
6666

6767
- Settings file format migrated from `XML` to `JSON`. The settings file will be automatically converted on first load after the update. [#3282](https://github.com/BornToBeRoot/NETworkManager/pull/3282)
68-
- Create a daily backup of the settings file before saving changes. Up to `10` backup files are kept in the `Backups` subfolder of the settings directory. [#3283](https://github.com/BornToBeRoot/NETworkManager/pull/3283)
68+
- Create a daily backup of the settings file before saving changes. By default, up to `10` backup files are kept in the `Backups` subfolder of the settings directory. [#3283](https://github.com/BornToBeRoot/NETworkManager/pull/3283) [#3302](https://github.com/BornToBeRoot/NETworkManager/pull/3302)
6969

7070
**Dashboard**
7171

0 commit comments

Comments
 (0)