Winify

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 20  →  ?path2? @ 21
/trunk/Winify/Form1.cs
@@ -22,7 +22,7 @@
{
#region Private Delegates, Events, Enums, Properties, Indexers and Fields
 
private readonly Announcements.Announcements _notifications;
private readonly Announcements.Announcements _announcements;
 
private readonly global::Servers.Servers _servers;
 
@@ -74,8 +74,10 @@
 
_servers = new global::Servers.Servers();
_servers.Server.CollectionChanged += Server_CollectionChanged;
_notifications = new Announcements.Announcements();
_notifications.Announcement.CollectionChanged += Announcements_CollectionChanged;
_servers.Server.ListChanged += Server_ListChanged;
_announcements = new Announcements.Announcements();
_announcements.Announcement.CollectionChanged += Announcements_CollectionChanged;
_announcements.Announcement.ListChanged += Announcement_ListChanged;
 
_taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
 
@@ -100,7 +102,7 @@
 
foreach (var announcement in restoreAnnouncements.Announcement)
{
_notifications.Announcement.Add(announcement);
_announcements.Announcement.Add(announcement);
}
});
 
@@ -117,7 +119,7 @@
if (disposing && components != null)
{
_servers.Server.CollectionChanged -= Server_CollectionChanged;
_notifications.Announcement.CollectionChanged -= Announcements_CollectionChanged;
_announcements.Announcement.CollectionChanged -= Announcements_CollectionChanged;
 
Settings.Default.SettingsLoaded -= Default_SettingsLoaded;
Settings.Default.SettingsSaving -= Default_SettingsSaving;
@@ -140,45 +142,29 @@
 
#region Event Handlers
 
private async void Announcement_ListChanged(object sender, ListChangedEventArgs e)
{
await SaveAnnouncements();
}
 
private async void Server_ListChanged(object sender, ListChangedEventArgs e)
{
await SaveServers();
}
 
private async void Announcements_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
switch (await ServersSerialization.Serialize(_notifications, Constants.NotificationsFile, "Announcements",
"<!ATTLIST Announcements xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"))
{
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to serialize announcements.");
break;
}
await SaveAnnouncements();
}
 
private void GotifyConnectionManager_GotifyNotification(object sender, GotifyNotificationEventArgs e)
{
_notificationManager.ShowNotification(e, _notifications);
_notificationManager.ShowNotification(e, _announcements);
}
 
private async void Server_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// Encrypt password for all servers.
var deviceId = Miscellaneous.GetMachineGuid();
var @protected = new global::Servers.Servers
{
Server = new BindingListWithCollectionChanged<Server>()
};
foreach (var server in _servers.Server)
{
var encrypted = AES.Encrypt(Encoding.UTF8.GetBytes(server.Password), deviceId);
var armored = Convert.ToBase64String(encrypted);
 
@protected.Server.Add(new Server(server.Name, server.Url, server.Username, armored));
}
 
switch (await ServersSerialization.Serialize(@protected, Constants.ServersFile, "Servers",
"<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"))
{
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to serialize servers.");
break;
}
await SaveServers();
}
 
private static void Default_PropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -201,7 +187,7 @@
return;
}
 
_settingsForm = new SettingsForm(_servers, _notifications);
_settingsForm = new SettingsForm(_servers, _announcements);
_settingsForm.Closing += SettingsForm_Closing;
_settingsForm.Show();
}
@@ -258,6 +244,42 @@
 
#region Private Methods
 
private async Task SaveAnnouncements()
{
switch (await ServersSerialization.Serialize(_announcements, Constants.NotificationsFile, "Announcements",
"<!ATTLIST Announcements xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"))
{
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to serialize announcements.");
break;
}
}
 
private async Task SaveServers()
{
// Encrypt password for all servers.
var deviceId = Miscellaneous.GetMachineGuid();
var @protected = new global::Servers.Servers
{
Server = new BindingListWithCollectionChanged<Server>()
};
foreach (var server in _servers.Server)
{
var encrypted = AES.Encrypt(Encoding.UTF8.GetBytes(server.Password), deviceId);
var armored = Convert.ToBase64String(encrypted);
 
@protected.Server.Add(new Server(server.Name, server.Url, server.Username, armored));
}
 
switch (await ServersSerialization.Serialize(@protected, Constants.ServersFile, "Servers",
"<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"))
{
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to serialize servers.");
break;
}
}
 
private static async Task<Announcements.Announcements> LoadAnnouncements()
{
if (!Directory.Exists(Constants.UserApplicationDirectory))
@@ -273,6 +295,9 @@
{
case SerializationSuccess<Announcements.Announcements> serializationSuccess:
return serializationSuccess.Result;
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to load announcements.");
return new Announcements.Announcements();
default:
return new Announcements.Announcements();
}
@@ -308,6 +333,10 @@
 
return @protected;
 
case SerializationFailure serializationFailure:
Log.Warning(serializationFailure.Exception, "Unable to load servers.");
return new global::Servers.Servers();
 
default:
return new global::Servers.Servers();
}