From c6ee1ceb0e5cf3a66a8d98fc1daa67398d793ec0 Mon Sep 17 00:00:00 2001
From: sebeksd <18705953+sebeksd@users.noreply.github.com>
Date: Fri, 13 Mar 2020 21:54:33 +0100
Subject: [PATCH] Split Manual and pre-restore backup into separate folders
(now they are not counted towords size limit and are never deleted), fixed
som typos
---
SaveGame Backup Tool/App.xaml.cs | 2 +-
SaveGame Backup Tool/BackupMaker.cs | 55 +++++++++++++++++--
SaveGame Backup Tool/MainWindow.xaml | 2 +-
SaveGame Backup Tool/MainWindow.xaml.cs | 12 ++--
.../Properties/AssemblyInfo.cs | 4 +-
SaveGame Backup Tool/Restore.xaml.cs | 23 ++++----
6 files changed, 72 insertions(+), 26 deletions(-)
diff --git a/SaveGame Backup Tool/App.xaml.cs b/SaveGame Backup Tool/App.xaml.cs
index 9c2b208..447e000 100644
--- a/SaveGame Backup Tool/App.xaml.cs
+++ b/SaveGame Backup Tool/App.xaml.cs
@@ -59,7 +59,7 @@ private void Application_Startup(object sender, StartupEventArgs e)
BackupMaker lBackupMaker = new BackupMaker();
string lErrorMessage = "";
- if (lBackupMaker.MakeBackup(lBackupTask, "", ref lErrorMessage))
+ if (lBackupMaker.MakeBackup(lBackupTask, BackupType.btNormal, ref lErrorMessage))
Console.WriteLine("SUCCEED: Task '" + lBackupTask.Settings.Name + "' backup created");
else
Console.WriteLine("FAILED: Task '" + lBackupTask.Settings.Name + "' backup failed: \r\n" + lErrorMessage);
diff --git a/SaveGame Backup Tool/BackupMaker.cs b/SaveGame Backup Tool/BackupMaker.cs
index 94dc12a..ce6a9c8 100644
--- a/SaveGame Backup Tool/BackupMaker.cs
+++ b/SaveGame Backup Tool/BackupMaker.cs
@@ -25,6 +25,13 @@ You should have received a copy of the GNU Lesser General Public License
namespace SaveGameBackupTool
{
+ public enum BackupType
+ {
+ btNormal,
+ btManual,
+ btRestore
+ }
+
public class BackupMaker
{
public BackupMaker()
@@ -33,6 +40,41 @@ public BackupMaker()
}
+ private string BackupTypeToFilePostfix(BackupType lType)
+ {
+ switch (lType)
+ {
+ case BackupType.btManual:
+ return "-manual";
+ case BackupType.btRestore:
+ return "-pre_restore";
+ default:
+ return "";
+ }
+ }
+
+ private string DirectoryForBakupType(BackupType lType, string lDestinationPath)
+ {
+ string lSubFolder;
+ switch (lType)
+ {
+ case BackupType.btManual:
+ lSubFolder = "Manual";
+ break;
+ case BackupType.btRestore:
+ lSubFolder = "OnRestore";
+ break;
+ default:
+ lSubFolder = "";
+ break;
+ }
+
+ if (!String.IsNullOrEmpty(lSubFolder))
+ return Path.Combine(lDestinationPath, lSubFolder + "\\");
+ else
+ return lDestinationPath;
+ }
+
private bool CheckFilterForFile(string lFileFilterRegex, string lFileName)
{
// TODO Performance: make regex object persistent through whole Task scan
@@ -179,22 +221,23 @@ public void CleanUpOldBackups(BackupTask lBackupTask, ref string pErrorMessage)
}
}
- public bool MakeBackup(BackupTask lBackupTask, string lPostfix, ref string pErrorMessage)
+ public bool MakeBackup(BackupTask lBackupTask, BackupType lType, ref string pErrorMessage)
{
string lBackupFileName = DateTime.Now.ToString(lBackupTask.Settings.BackupFileNamePattern);
- lBackupFileName += lPostfix;
+ lBackupFileName += BackupTypeToFilePostfix(lType);
lBackupFileName += ".zip";
+ string lDestinationPath = DirectoryForBakupType(lType, lBackupTask.Settings.DestinationPath);
try
{
// to be sure that backup dir exists
- Directory.CreateDirectory(lBackupTask.Settings.DestinationPath);
+ Directory.CreateDirectory(lDestinationPath);
// try to make a backup
if (lBackupTask.Settings.SourcePathHelper.IsFile)
- ZipHelper.CreateFromFile(lBackupTask.Settings.SourcePathHelper.FilePath, lBackupTask.Settings.DestinationPath + lBackupFileName, CompressionLevel.Fastest, false, null, null);
+ ZipHelper.CreateFromFile(lBackupTask.Settings.SourcePathHelper.FilePath, lDestinationPath + lBackupFileName, CompressionLevel.Fastest, false, null, null);
else
- ZipHelper.CreateFromDirectory(lBackupTask.Settings.SourcePathHelper.DirectoryPath, lBackupTask.Settings.DestinationPath + lBackupFileName, CompressionLevel.Fastest, false, null, lFilterFileName => !CheckFilterForFile(lBackupTask.Settings.FileFilterRegex, lFilterFileName));
+ ZipHelper.CreateFromDirectory(lBackupTask.Settings.SourcePathHelper.DirectoryPath, lDestinationPath + lBackupFileName, CompressionLevel.Fastest, false, null, lFilterFileName => !CheckFilterForFile(lBackupTask.Settings.FileFilterRegex, lFilterFileName));
pErrorMessage = "";
@@ -207,7 +250,7 @@ public bool MakeBackup(BackupTask lBackupTask, string lPostfix, ref string pErro
try
{
// probably file was created but content is corrupted or just not complete, remove it
- File.Delete(lBackupTask.Settings.DestinationPath + lBackupFileName);
+ File.Delete(lDestinationPath + lBackupFileName);
}
catch
{
diff --git a/SaveGame Backup Tool/MainWindow.xaml b/SaveGame Backup Tool/MainWindow.xaml
index 28f7d23..90a8f0b 100644
--- a/SaveGame Backup Tool/MainWindow.xaml
+++ b/SaveGame Backup Tool/MainWindow.xaml
@@ -50,7 +50,7 @@
-
+
diff --git a/SaveGame Backup Tool/MainWindow.xaml.cs b/SaveGame Backup Tool/MainWindow.xaml.cs
index 52ab145..c9f10fb 100644
--- a/SaveGame Backup Tool/MainWindow.xaml.cs
+++ b/SaveGame Backup Tool/MainWindow.xaml.cs
@@ -213,7 +213,7 @@ private void SetToolTips()
textBoxBackupFileNamePattern.ToolTip = "Backup create new ZIP file, this pattern is used to name this result file.\r\n\r\n" +
"Remember to set pattern the way that file name will be unique (eg time),\r\n" +
"function to create name from the pattern is DateTime.ToString for more info about this pattern possibilities search Internet :)";
- checkBoxAutomaticBackup.ToolTip = "Check if you want this tusk to be run every few minutes (backup will be made only if files were modified).";
+ checkBoxAutomaticBackup.ToolTip = "Check if you want this task to be run every few minutes (backup will be made only if files were modified).";
buttonForceBackup.ToolTip = "Perform a backup regardless of whether the files have been modified, if files are locked it will fail.";
decimalUpDownBackupEvery.ToolTip = "Task will launch every few minutes (value set in this field) and it will check if file was modified and also if file is not locked.\r\n" +
"If file was not modified from last backup or it is locked for reading then next check will be triggered every 30 seconds (till backup is made).";
@@ -221,9 +221,11 @@ private void SetToolTips()
"In tray icon mode this status is also presented by icon in tray.";
checkBoxAutomaticDestinationDirSizeLimit.ToolTip = "If this option is checked application will cleanup older files/backups from destination directory to maintain size limit set in by user (at least 4 last files remains).\r\n" +
- "WARNING! Make sure destination directory is used only by one task/game because files are removed by creation date and file names are not used to chcek if file is from different task!";
+ "Manual and pre-restore backups are not counted towards this limit and they are not deleted (if needed you need to clean them manually).\r\n" +
+ "WARNING! Make sure destination directory is used only by one task/game because files are removed by creation date and file names are not used to check if file is from different task!";
decimalUpDownDestinationDirSizeLimit.ToolTip = "Limit value in [MB] for automated deletion of older files/backups from destination directory (at least 4 last files remains).\r\n" +
- "WARNING! Make sure destination directory is used only by one task/game because files are removed by creation date and file names are not used to chcek if file is from different task!";
+ "Manual and pre-restore backups are not counted towards this limit and they are not deleted (if needed you need to clean them manually).\r\n" +
+ "WARNING! Make sure destination directory is used only by one task/game because files are removed by creation date and file names are not used to check if file is from different task!";
}
private void UpdateGlobalStatus(bool lSuccess)
@@ -430,7 +432,7 @@ private void CheckTasks()
else if (lFileWasModified)
{
// success and file was modified
- lErrorOccurred = !fBackupMaker.MakeBackup(lBackupTask, "", ref lErrorMessage);
+ lErrorOccurred = !fBackupMaker.MakeBackup(lBackupTask, BackupType.btNormal, ref lErrorMessage);
lBackupTask.SetLastBackupStatus(!lErrorOccurred, lErrorMessage);
lRefreshComboBox = true;
}
@@ -581,7 +583,7 @@ private void buttonForceBackup_Click(object sender, RoutedEventArgs e)
BackupTask lBackupTask = fSettings.Settings.BackupTasks[fSelectedBackupTaskIndex];
string lErrorMessage = "";
- lBackupTask.SetLastBackupStatus(fBackupMaker.MakeBackup(lBackupTask, "-manual", ref lErrorMessage), lErrorMessage);
+ lBackupTask.SetLastBackupStatus(fBackupMaker.MakeBackup(lBackupTask, BackupType.btManual, ref lErrorMessage), lErrorMessage);
// we made backup of currently selected item, refresh GUI to refresh last backup time
SelectTaskByIndex(-1, false); // reselect same item, refresh interface
diff --git a/SaveGame Backup Tool/Properties/AssemblyInfo.cs b/SaveGame Backup Tool/Properties/AssemblyInfo.cs
index c3e4f4f..e6c5215 100644
--- a/SaveGame Backup Tool/Properties/AssemblyInfo.cs
+++ b/SaveGame Backup Tool/Properties/AssemblyInfo.cs
@@ -51,5 +51,5 @@
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.12")]
-[assembly: AssemblyFileVersion("1.0.0.12")]
+[assembly: AssemblyVersion("1.0.0.13")]
+[assembly: AssemblyFileVersion("1.0.0.13")]
diff --git a/SaveGame Backup Tool/Restore.xaml.cs b/SaveGame Backup Tool/Restore.xaml.cs
index f49ab86..2c92626 100644
--- a/SaveGame Backup Tool/Restore.xaml.cs
+++ b/SaveGame Backup Tool/Restore.xaml.cs
@@ -22,7 +22,6 @@ You should have received a copy of the GNU Lesser General Public License
using System.Windows.Controls;
using System.Windows.Data;
using System.IO;
-using System.Windows.Media;
using System.Threading;
using System.Windows.Threading;
using System;
@@ -37,6 +36,8 @@ public partial class Restore : Window
private BackupMaker fBackupMaker = null;
private BackupTask fBackupTask = null;
+ private string[] fFileList;
+
private static Action EmptyDelegate = delegate () { };
public Restore()
@@ -47,20 +48,20 @@ public Restore()
private bool ListFiles()
{
string lErrorMessage = "";
- string[] lFileList = fBackupMaker.GetBackupsList(fBackupTask, ref lErrorMessage);
+ fFileList = fBackupMaker.GetBackupsList(fBackupTask, ref lErrorMessage);
- if (lFileList != null)
+ if (fFileList != null)
{
+ ObservableCollection lList = new ObservableCollection();
+
// convert file paths to FileNames
- for (int i = 0; i < lFileList.Length; i++)
+ for (int i = 0; i < fFileList.Length; i++)
{
- lFileList[i] = System.IO.Path.GetFileName(lFileList[i]);
+ lList.Add(System.IO.Path.GetFileName(fFileList[i]));
}
-
- ObservableCollection lList = new ObservableCollection(lFileList);
- listBoxBackupFiles.DataContext = lList;
-
+
Binding lBinding = new Binding();
+ listBoxBackupFiles.DataContext = lList;
listBoxBackupFiles.SetBinding(ListBox.ItemsSourceProperty, lBinding);
listBoxBackupFiles.ScrollIntoView(listBoxBackupFiles.Items[listBoxBackupFiles.Items.Count - 1]);
@@ -90,7 +91,7 @@ private void buttonClose_Click(object sender, RoutedEventArgs e)
private bool BackupBeforeRestore()
{
string lErrorMessage = "";
- bool lResult = fBackupMaker.MakeBackup(fBackupTask, "-pre_restore", ref lErrorMessage);
+ bool lResult = fBackupMaker.MakeBackup(fBackupTask, BackupType.btRestore, ref lErrorMessage);
fBackupTask.SetLastBackupStatus(lResult, lErrorMessage);
return lResult;
}
@@ -121,7 +122,7 @@ private void ButtonRestore_Click(object sender, RoutedEventArgs e)
labelStatus.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
Thread.Sleep(1);
- if (fBackupMaker.RestoreBackup(fBackupTask, Path.GetFullPath(Path.Combine(fBackupTask.Settings.DestinationPathHelper.DirectoryPath, listBoxBackupFiles.SelectedItem.ToString()))))
+ if (fBackupMaker.RestoreBackup(fBackupTask, fFileList[listBoxBackupFiles.SelectedIndex]))
{
labelStatus.Content = "Status: restored";
}