aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs116
1 files changed, 88 insertions, 28 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
index 85fe6b0ad..c115f4f5b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
@@ -129,6 +129,11 @@ namespace Tango.PPC.Common.MachineUpdate
private void _app_manager_ApplicationReady(object sender, EventArgs e)
{
_checkForUpdateTimer.Start();
+
+ if (!_app_manager.IsUpdateFailed)
+ {
+ ClearLastDatabaseBackup();
+ }
}
private void _packageRunner_PackageProgress(object sender, PackageProgressEventArgs e)
@@ -327,14 +332,14 @@ namespace Tango.PPC.Common.MachineUpdate
}
}
- try
- {
- Directory.Delete(backupsFolder, true);
- }
- catch (Exception ex)
- {
- LogManager.Log(ex, $"Error deleting backups folder '{backupsFolder}'.");
- }
+ //try
+ //{
+ // Directory.Delete(backupsFolder, true);
+ //}
+ //catch (Exception ex)
+ //{
+ // LogManager.Log(ex, $"Error deleting backups folder '{backupsFolder}'.");
+ //}
if (!result.RequiresBinariesUpdate)
{
@@ -604,6 +609,26 @@ namespace Tango.PPC.Common.MachineUpdate
return logsString;
}
+ private void ClearLastDatabaseBackup()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ try
+ {
+ var lastBackupFile = SettingsManager.Default.GetOrCreate<PPCSettings>().LastDatabaseBackupFile;
+
+ if (File.Exists(lastBackupFile))
+ {
+ File.Delete(lastBackupFile);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error removing last database backup file.");
+ }
+ });
+ }
+
#endregion
#region Public Methods
@@ -733,6 +758,27 @@ namespace Tango.PPC.Common.MachineUpdate
//Copy new updater utility to app path.
File.Copy(Path.Combine(_newPackageTempFolder, "Tango.PPC.Updater.exe"), Path.Combine(PathHelper.GetStartupPath(), "Tango.PPC.Updater.exe"), true);
+ LogManager.Log("Initializing database manager...");
+ DbManager db = DbManager.FromDataSource(localDataSource);
+
+ //Create Database Backup
+ UpdateProgress("Updating Database", "Creating database backup...");
+ try
+ {
+ Directory.CreateDirectory(backupsFolder);
+ dbBackupFile = $"{backupsFolder}\\{Path.GetRandomFileName()}.bak";
+ _settings.LastDatabaseBackupFile = dbBackupFile;
+ _settings.Save();
+ LogManager.Log($"Creating database backup to '{dbBackupFile}'...");
+ await Task.Factory.StartNew(() => db.Backup(localDataSource.Catalog, dbBackupFile));
+ performDatabaseRollback = true;
+ LogManager.Log("Database backup created successfully.");
+ }
+ catch (Exception ex)
+ {
+ throw LogManager.Log(ex, "Update manager error while trying to create a database backup.");
+ }
+
//Run pre-update packages.
try
{
@@ -763,8 +809,6 @@ namespace Tango.PPC.Common.MachineUpdate
LogManager.Log($"Synchronizing database '{update_response.DataSource.ToString()}' => '{localDataSource.ToString()}'...");
UpdateProgress("Updating Database", "Connecting to local database...");
- LogManager.Log("Initializing database manager...");
- DbManager db = DbManager.FromDataSource(localDataSource);
LogManager.Log("Checking Tango database exists on the local machine...");
if (!db.Exists(localDataSource.Catalog))
@@ -772,24 +816,6 @@ namespace Tango.PPC.Common.MachineUpdate
throw new InvalidProgramException("Database tango does not exists.");
}
- UpdateProgress("Updating Database", "Creating database backup...");
-
- //Create Database Backup
- try
- {
- Directory.CreateDirectory(backupsFolder);
- dbBackupFile = $"{backupsFolder}\\{Path.GetRandomFileName()}.bak";
- LogManager.Log($"Creating database backup to '{dbBackupFile}'...");
- await Task.Factory.StartNew(() => db.Backup(localDataSource.Catalog, dbBackupFile));
- performDatabaseRollback = true;
- LogManager.Log("Database backup created successfully.");
- }
- catch (Exception ex)
- {
- throw LogManager.Log(ex, "Update manager error while trying to create a database backup.");
- }
-
-
LogManager.Log("Disposing database manager.");
db.Dispose();
@@ -1621,6 +1647,40 @@ namespace Tango.PPC.Common.MachineUpdate
}
}
+ public Task RestoreLastDatabaseBackup()
+ {
+ return Task.Factory.StartNew(() =>
+ {
+ LogManager.Log("Rolling back database changes...");
+ UpdateProgress("Rollback", "Rolling back database changes...");
+
+ var localDataSource = SettingsManager.Default.GetOrCreate<CoreSettings>().DataSource;
+ var lastBackupFile = SettingsManager.Default.GetOrCreate<PPCSettings>().LastDatabaseBackupFile;
+
+ using (DbManager db = DbManager.FromDataSource(localDataSource))
+ {
+ try
+ {
+ db.Restore(localDataSource.Catalog, lastBackupFile);
+ LogManager.Log("Database restored successfully.");
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Could not rollback the database after a failed updater.");
+ throw ex;
+ }
+ finally
+ {
+ try
+ {
+ File.Delete(lastBackupFile);
+ }
+ catch { }
+ }
+ }
+ });
+ }
+
#endregion
#region Protected Methods