Skip to content

Commit e800caa

Browse files
committed
#49 Export save changes, Import without restart (not application settings)
1 parent 6f563be commit e800caa

6 files changed

Lines changed: 122 additions & 24 deletions

File tree

Source/NETworkManager/Models/Settings/ImportExportManager.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ public static void Import(string filePath, List<ImportExportOptions> importOptio
4949
}
5050
}
5151

52-
ForceRestart = true;
52+
// Restart, when application settings are changed
53+
if (importOptions.Contains(ImportExportOptions.ApplicationSettings))
54+
ForceRestart = true;
5355
}
5456

5557
public static void Export(List<ImportExportOptions> exportOptions, string filePath)

Source/NETworkManager/Models/Settings/NetworkInterfaceProfileManager.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,33 @@ public static void Load()
2222
{
2323
Profiles = new ObservableCollection<NetworkInterfaceProfileInfo>();
2424

25+
Deserialize().ForEach(profile => AddProfile(profile));
26+
27+
Profiles.CollectionChanged += Profiles_CollectionChanged;
28+
}
29+
30+
public static void Reload()
31+
{
32+
Profiles.Clear();
33+
34+
Deserialize().ForEach(profile => AddProfile(profile));
35+
}
36+
37+
private static List<NetworkInterfaceProfileInfo> Deserialize()
38+
{
39+
List<NetworkInterfaceProfileInfo> list = new List<NetworkInterfaceProfileInfo>();
40+
2541
if (File.Exists(GetProfilesFilePath()))
2642
{
2743
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<NetworkInterfaceProfileInfo>));
2844

2945
using (FileStream fileStream = new FileStream(GetProfilesFilePath(), FileMode.Open))
3046
{
31-
((List<NetworkInterfaceProfileInfo>)(xmlSerializer.Deserialize(fileStream))).ForEach(template => Profiles.Add(template));
47+
((List<NetworkInterfaceProfileInfo>)(xmlSerializer.Deserialize(fileStream))).ForEach(profile => Profiles.Add(profile));
3248
}
3349
}
3450

35-
Profiles.CollectionChanged += Profiles_CollectionChanged;
51+
return list;
3652
}
3753

3854
private static void Profiles_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
@@ -41,15 +57,20 @@ private static void Profiles_CollectionChanged(object sender, NotifyCollectionCh
4157
}
4258

4359
public static void Save()
60+
{
61+
Serialize();
62+
63+
ProfilesChanged = false;
64+
}
65+
66+
private static void Serialize()
4467
{
4568
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<NetworkInterfaceProfileInfo>));
4669

4770
using (FileStream fileStream = new FileStream(GetProfilesFilePath(), FileMode.Create))
4871
{
4972
xmlSerializer.Serialize(fileStream, new List<NetworkInterfaceProfileInfo>(Profiles));
5073
}
51-
52-
ProfilesChanged = false;
5374
}
5475

5576
public static void Reset()

Source/NETworkManager/Models/Settings/WakeOnLANClientManager.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace NETworkManager.Models.Settings
88
public static class WakeOnLANClientManager
99
{
1010
public const string ClientsFileName = "WakeOnLAN.clients";
11-
11+
1212
public static ObservableCollection<WakeOnLANClientInfo> Clients { get; set; }
1313
public static bool ClientsChanged { get; set; }
1414

@@ -21,17 +21,33 @@ public static void Load()
2121
{
2222
Clients = new ObservableCollection<WakeOnLANClientInfo>();
2323

24+
Deserialize().ForEach(client => AddClient(client));
25+
26+
Clients.CollectionChanged += WakeOnLANClients_CollectionChanged;
27+
}
28+
29+
public static void Reload()
30+
{
31+
Clients.Clear();
32+
33+
Deserialize().ForEach(client => AddClient(client));
34+
}
35+
36+
private static List<WakeOnLANClientInfo> Deserialize()
37+
{
38+
List<WakeOnLANClientInfo> list = new List<WakeOnLANClientInfo>();
39+
2440
if (File.Exists(GetClientsFilePath()))
2541
{
2642
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<WakeOnLANClientInfo>));
2743

2844
using (FileStream fileStream = new FileStream(GetClientsFilePath(), FileMode.Open))
2945
{
30-
((List<WakeOnLANClientInfo>)(xmlSerializer.Deserialize(fileStream))).ForEach(template => Clients.Add(template));
46+
((List<WakeOnLANClientInfo>)(xmlSerializer.Deserialize(fileStream))).ForEach(client => list.Add(client));
3147
}
3248
}
3349

34-
Clients.CollectionChanged += WakeOnLANClients_CollectionChanged;
50+
return list;
3551
}
3652

3753
private static void WakeOnLANClients_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
@@ -40,15 +56,20 @@ private static void WakeOnLANClients_CollectionChanged(object sender, System.Col
4056
}
4157

4258
public static void Save()
59+
{
60+
Serialize();
61+
62+
ClientsChanged = false;
63+
}
64+
65+
private static void Serialize()
4366
{
4467
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<WakeOnLANClientInfo>));
4568

4669
using (FileStream fileStream = new FileStream(GetClientsFilePath(), FileMode.Create))
4770
{
4871
xmlSerializer.Serialize(fileStream, new List<WakeOnLANClientInfo>(Clients));
4972
}
50-
51-
ClientsChanged = false;
5273
}
5374

5475
public static void Reset()

Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@
171171
<system:String x:Key="String_SettingsSuccessfullyExported">Einstellungen erfolgreich exportiert!</system:String>
172172
<system:String x:Key="String_Path">Pfad</system:String>
173173
<system:String x:Key="String_SettingsSuccessfullyReset">Einstellungen erfolgreich zurückgesetzt!</system:String>
174-
<system:String x:Key="String_SelectedSettingsAreOverwritten">Die ausgewählten Einstellungen werden überschrieben und die Anwendung wird neu gestartet.</system:String>
174+
<system:String x:Key="String_SelectedSettingsAreOverwritten">Die ausgewählten Einstellungen werden überschrieben.</system:String>
175175
<system:String x:Key="String_Vendor">Hersteller</system:String>
176176
<system:String x:Key="String_Protocol">Protokoll</system:String>
177177
<system:String x:Key="String_Service">Dienst</system:String>
@@ -219,7 +219,10 @@
219219
<system:String x:Key="String_Back">zurück</system:String>
220220
<system:String x:Key="String_AddDNSSuffixToHostname">DNS-Suffix (primär) zum Hostnamen hinzufügen</system:String>
221221
<system:String x:Key="String_UseCustomDNSSuffix">Verwende benutzerdefinierten DNS-Suffix</system:String>
222-
222+
<system:String x:Key="String_SettingsSuccessfullyImported">Einstellungen erfolgreich importiert!</system:String>
223+
<system:String x:Key="String_WakeOnLANClientsReloaded">Wake on LAN Clients neu geladen</system:String>
224+
<system:String x:Key="String_NetworkInterfaceProfilesReloaded">Netzwerkinterface Profile neu geladen</system:String>
225+
223226
<!-- Buttons -->
224227
<system:String x:Key="String_Button_Change">Wechseln</system:String>
225228
<system:String x:Key="String_Button_Default">Standard</system:String>

Source/NETworkManager/Resources/Localization/Resources.en-US.xaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@
171171
<system:String x:Key="String_SettingsSuccessfullyExported">Settings successfully exported!</system:String>
172172
<system:String x:Key="String_Path">Path</system:String>
173173
<system:String x:Key="String_SettingsSuccessfullyReset">Settings successfully reset!</system:String>
174-
<system:String x:Key="String_SelectedSettingsAreOverwritten">The selected settings are overwritten and the application is restarted.</system:String>
174+
<system:String x:Key="String_SelectedSettingsAreOverwritten">The selected settings are overwritten.</system:String>
175175
<system:String x:Key="String_Vendor">Vendor</system:String>
176176
<system:String x:Key="String_Protocol">Protocol</system:String>
177177
<system:String x:Key="String_Service">Service</system:String>
@@ -219,7 +219,10 @@
219219
<system:String x:Key="String_Back">back</system:String>
220220
<system:String x:Key="String_AddDNSSuffixToHostname">Add DNS suffix (primary) to hostname</system:String>
221221
<system:String x:Key="String_UseCustomDNSSuffix">Use custom DNS suffix</system:String>
222-
222+
<system:String x:Key="String_SettingsSuccessfullyImported">Settings successfully imported!</system:String>
223+
<system:String x:Key="String_WakeOnLANClientsReloaded">Wake on LAN clients reloaded</system:String>
224+
<system:String x:Key="String_NetworkInterfaceProfilesReloaded">Network interface profiles reloaded</system:String>
225+
223226
<!-- Buttons -->
224227
<system:String x:Key="String_Button_Change">Change</system:String>
225228
<system:String x:Key="String_Button_Default">Default</system:String>

Source/NETworkManager/ViewModels/Settings/SettingsGeneralImportExportViewModel.cs

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,10 @@ public SettingsGeneralImportExportViewModel(IDialogCoordinator instance)
254254
{
255255
dialogCoordinator = instance;
256256

257-
LoadSettings();
257+
CheckFilesExist();
258258
}
259259

260-
private void LoadSettings()
260+
private void CheckFilesExist()
261261
{
262262
ApplicationSettingsExists = File.Exists(SettingsManager.GetSettingsFilePath());
263263
NetworkInterfaceProfilesExists = File.Exists(NetworkInterfaceProfileManager.GetProfilesFilePath());
@@ -318,7 +318,12 @@ private async void ImportSettingsAction()
318318

319319
settings.DefaultButtonFocus = MessageDialogResult.Affirmative;
320320

321-
if (await dialogCoordinator.ShowMessageAsync(this, Application.Current.Resources["String_Header_AreYouSure"] as string, Application.Current.Resources["String_SelectedSettingsAreOverwritten"] as string, MessageDialogStyle.AffirmativeAndNegative, settings) == MessageDialogResult.Affirmative)
321+
string message = Application.Current.Resources["String_SelectedSettingsAreOverwritten"] as string;
322+
323+
if (ImportApplicationSettingsExists && (ImportEverything || ImportApplicationSettings))
324+
message += Environment.NewLine + Environment.NewLine + string.Format("* {0}", Application.Current.Resources["String_ApplicationIsRestartedAfterwards"] as string);
325+
326+
if (await dialogCoordinator.ShowMessageAsync(this, Application.Current.Resources["String_Header_AreYouSure"] as string, message, MessageDialogStyle.AffirmativeAndNegative, settings) == MessageDialogResult.Affirmative)
322327
{
323328
List<ImportExportManager.ImportExportOptions> importOptions = new List<ImportExportManager.ImportExportOptions>();
324329

@@ -333,7 +338,33 @@ private async void ImportSettingsAction()
333338

334339
ImportExportManager.Import(ImportLocationSelectedPath, importOptions);
335340

336-
CloseAction();
341+
// Restart if application settings are changed
342+
if (ImportExportManager.ForceRestart)
343+
{
344+
CloseAction();
345+
}
346+
else
347+
{
348+
settings.AffirmativeButtonText = Application.Current.Resources["String_Button_OK"] as string;
349+
350+
message = Application.Current.Resources["String_SettingsSuccessfullyImported"] as string + Environment.NewLine;
351+
352+
if (importOptions.Contains(ImportExportManager.ImportExportOptions.NetworkInterfaceProfiles))
353+
{
354+
NetworkInterfaceProfileManager.Reload();
355+
356+
message += Environment.NewLine + string.Format("* {0}", Application.Current.Resources["String_NetworkInterfaceProfilesReloaded"] as string);
357+
}
358+
359+
if (importOptions.Contains(ImportExportManager.ImportExportOptions.WakeOnLANClients))
360+
{
361+
WakeOnLANClientManager.Reload();
362+
363+
message += Environment.NewLine + string.Format("* {0}", Application.Current.Resources["String_WakeOnLANClientsReloaded"] as string);
364+
}
365+
366+
await dialogCoordinator.ShowMessageAsync(this, Application.Current.Resources["String_Header_Success"] as string, message, MessageDialogStyle.Affirmative, settings);
367+
}
337368
}
338369
}
339370

@@ -347,22 +378,39 @@ private async void ExportSettingsAction()
347378
List<ImportExportManager.ImportExportOptions> exportOptions = new List<ImportExportManager.ImportExportOptions>();
348379

349380
if (ApplicationSettingsExists && (ExportEverything || ExportApplicationSettings))
381+
{
382+
// Save them, before export
383+
if (SettingsManager.Current.SettingsChanged)
384+
SettingsManager.Save();
385+
386+
// Add to export
350387
exportOptions.Add(ImportExportManager.ImportExportOptions.ApplicationSettings);
388+
}
351389

352390
if (NetworkInterfaceProfilesExists && (ExportEverything || ExportNetworkInterfaceProfiles))
391+
{
392+
// Save them, before export
393+
if (NetworkInterfaceProfileManager.ProfilesChanged)
394+
NetworkInterfaceProfileManager.Save();
395+
396+
// Add to export
353397
exportOptions.Add(ImportExportManager.ImportExportOptions.NetworkInterfaceProfiles);
398+
}
354399

355400
if (WakeOnLANClientsExists && (ExportEverything || ExportWakeOnLANClients))
356-
exportOptions.Add(ImportExportManager.ImportExportOptions.WakeOnLANClients);
357-
358-
// Save the settings before exporting them
359-
if (SettingsManager.Current.SettingsChanged)
360-
SettingsManager.Save();
401+
{
402+
// Save them, before export
403+
if (WakeOnLANClientManager.ClientsChanged)
404+
WakeOnLANClientManager.Save();
361405

406+
// Add to export
407+
exportOptions.Add(ImportExportManager.ImportExportOptions.WakeOnLANClients);
408+
}
409+
362410
System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog()
363411
{
364412
Filter = ImportExportFileExtensionFilter,
365-
FileName = string.Format("{0}_{1}_{2}{3}", Application.Current.Resources["String_ProductName"] as string, Application.Current.Resources["String_Backup"] as string,TimestampHelper.GetTimestamp(), ImportExportManager.ImportExportFileExtension)
413+
FileName = string.Format("{0}_{1}_{2}{3}", Application.Current.Resources["String_ProductName"] as string, Application.Current.Resources["String_Backup"] as string, TimestampHelper.GetTimestamp(), ImportExportManager.ImportExportFileExtension)
366414
};
367415

368416
if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)

0 commit comments

Comments
 (0)