diff --git a/GBM/Classes/clsBackup.vb b/GBM/Classes/clsBackup.vb
index f790844..4654aa9 100644
--- a/GBM/Classes/clsBackup.vb
+++ b/GBM/Classes/clsBackup.vb
@@ -49,7 +49,7 @@
ReadOnly Property FileSafeName As String
Get
- Return mgrPath.ValidateFileNameForOS(sName)
+ Return mgrPath.ValidateFileName(sName)
End Get
End Property
diff --git a/GBM/Classes/clsGame.vb b/GBM/Classes/clsGame.vb
index 9df191f..94584b4 100644
--- a/GBM/Classes/clsGame.vb
+++ b/GBM/Classes/clsGame.vb
@@ -50,7 +50,7 @@ Public Class clsGame
Property ID As String
Set(value As String)
If Not value Is Nothing Then
- sGameID = mgrPath.ValidateFileNameForOS(value)
+ sGameID = mgrPath.ValidateFileName(value)
End If
End Set
Get
@@ -70,7 +70,7 @@ Public Class clsGame
ReadOnly Property FileSafeName As String
Get
- Return mgrPath.ValidateFileNameForOS(sGameName)
+ Return mgrPath.ValidateFileName(sGameName)
End Get
End Property
diff --git a/GBM/Forms/frmAddWizard.Designer.vb b/GBM/Forms/frmAddWizard.Designer.vb
index 6712453..d434a05 100644
--- a/GBM/Forms/frmAddWizard.Designer.vb
+++ b/GBM/Forms/frmAddWizard.Designer.vb
@@ -228,19 +228,17 @@ Partial Class frmAddWizard
Me.lblLimit.AutoSize = True
Me.lblLimit.Location = New System.Drawing.Point(203, 109)
Me.lblLimit.Name = "lblLimit"
- Me.lblLimit.Size = New System.Drawing.Size(68, 13)
+ Me.lblLimit.Size = New System.Drawing.Size(138, 13)
Me.lblLimit.TabIndex = 15
- Me.lblLimit.Text = "Backup Limit"
+ Me.lblLimit.Text = "Backup Limit (0 = Unlimited)"
Me.lblLimit.Visible = False
'
'nudLimit
'
Me.nudLimit.Location = New System.Drawing.Point(157, 107)
- Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 14
- Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Visible = False
'
'lblStep3Title
diff --git a/GBM/Forms/frmAddWizard.vb b/GBM/Forms/frmAddWizard.vb
index 29bac02..13a4e76 100644
--- a/GBM/Forms/frmAddWizard.vb
+++ b/GBM/Forms/frmAddWizard.vb
@@ -75,10 +75,8 @@ Public Class frmAddWizard
If chkTimeStamp.Checked Then
nudLimit.Visible = True
lblLimit.Visible = True
- nudLimit.Value = 5
Else
nudLimit.Visible = False
- nudLimit.Value = nudLimit.Minimum
lblLimit.Visible = False
End If
End Sub
@@ -87,9 +85,13 @@ Public Class frmAddWizard
Dim sLimit As String = String.Empty
If bTimeStamp Then
- Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & iLimit & ")"
+ If iLimit <> 0 Then
+ Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & iLimit & ")"
+ Else
+ Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & frmAddWizard_Summary_NoLimit & ")"
+ End If
Else
- Return mgrCommon.BooleanYesNo(bTimeStamp)
+ Return mgrCommon.BooleanYesNo(bTimeStamp)
End If
End Function
@@ -208,7 +210,7 @@ Public Class frmAddWizard
End Function
Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
- strPath = mgrPath.ValidatePathForOS(strPath)
+ strPath = mgrPath.ValidatePath(strPath)
If strPath.Trim = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidProcess
@@ -325,7 +327,7 @@ Public Class frmAddWizard
End If
Case eSteps.Step3
- txtSavePath.Text = mgrPath.ValidatePathForOS(txtSavePath.Text)
+ txtSavePath.Text = mgrPath.ValidatePath(txtSavePath.Text)
If ValidateSavePath(txtSavePath.Text, sErrorMessage) Then
lblIncludePath.Text = txtSavePath.Text
lblExcludePath.Text = txtSavePath.Text
diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb
index f19700e..bf94fe0 100644
--- a/GBM/Forms/frmGameManager.Designer.vb
+++ b/GBM/Forms/frmGameManager.Designer.vb
@@ -81,7 +81,7 @@ Partial Class frmGameManager
Me.lblLocalBackupData = New System.Windows.Forms.Label()
Me.lblRestorePath = New System.Windows.Forms.Label()
Me.btnOpenRestorePath = New System.Windows.Forms.Button()
- Me.btnOpenBackupFile = New System.Windows.Forms.Button()
+ Me.btnOpenBackup = New System.Windows.Forms.Button()
Me.btnDeleteBackup = New System.Windows.Forms.Button()
Me.lblBackupFile = New System.Windows.Forms.Label()
Me.lblRemote = New System.Windows.Forms.Label()
@@ -111,6 +111,9 @@ Partial Class frmGameManager
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
Me.btnProcesses = New System.Windows.Forms.Button()
Me.ttFullPath = New System.Windows.Forms.ToolTip(Me.components)
+ Me.cmsOpenBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
+ Me.cmsOpenBackupFile = New System.Windows.Forms.ToolStripMenuItem()
+ Me.cmsOpenBackupFolder = New System.Windows.Forms.ToolStripMenuItem()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
@@ -120,6 +123,7 @@ Partial Class frmGameManager
Me.grpFilter.SuspendLayout()
Me.cmsImport.SuspendLayout()
Me.cmsDeleteBackup.SuspendLayout()
+ Me.cmsOpenBackup.SuspendLayout()
Me.SuspendLayout()
'
'btnAdd
@@ -309,9 +313,9 @@ Partial Class frmGameManager
Me.lblLimit.AutoSize = True
Me.lblLimit.Location = New System.Drawing.Point(376, 229)
Me.lblLimit.Name = "lblLimit"
- Me.lblLimit.Size = New System.Drawing.Size(68, 13)
+ Me.lblLimit.Size = New System.Drawing.Size(138, 13)
Me.lblLimit.TabIndex = 23
- Me.lblLimit.Text = "Backup Limit"
+ Me.lblLimit.Text = "Backup Limit (0 = Unlimited)"
Me.lblLimit.Visible = False
'
'nudLimit
@@ -629,7 +633,7 @@ Partial Class frmGameManager
Me.grpStats.Controls.Add(Me.lblLocalBackupData)
Me.grpStats.Controls.Add(Me.lblRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenRestorePath)
- Me.grpStats.Controls.Add(Me.btnOpenBackupFile)
+ Me.grpStats.Controls.Add(Me.btnOpenBackup)
Me.grpStats.Controls.Add(Me.btnDeleteBackup)
Me.grpStats.Controls.Add(Me.lblBackupFile)
Me.grpStats.Controls.Add(Me.lblRemote)
@@ -711,14 +715,14 @@ Partial Class frmGameManager
Me.btnOpenRestorePath.Text = "O&pen Restore Path"
Me.btnOpenRestorePath.UseVisualStyleBackColor = True
'
- 'btnOpenBackupFile
+ 'btnOpenBackup
'
- Me.btnOpenBackupFile.Location = New System.Drawing.Point(249, 125)
- Me.btnOpenBackupFile.Name = "btnOpenBackupFile"
- Me.btnOpenBackupFile.Size = New System.Drawing.Size(114, 23)
- Me.btnOpenBackupFile.TabIndex = 10
- Me.btnOpenBackupFile.Text = "&Open Backup File"
- Me.btnOpenBackupFile.UseVisualStyleBackColor = True
+ Me.btnOpenBackup.Location = New System.Drawing.Point(249, 125)
+ Me.btnOpenBackup.Name = "btnOpenBackup"
+ Me.btnOpenBackup.Size = New System.Drawing.Size(114, 23)
+ Me.btnOpenBackup.TabIndex = 10
+ Me.btnOpenBackup.Text = "&Open Backup"
+ Me.btnOpenBackup.UseVisualStyleBackColor = True
'
'btnDeleteBackup
'
@@ -972,6 +976,25 @@ Partial Class frmGameManager
Me.ttFullPath.InitialDelay = 300
Me.ttFullPath.ReshowDelay = 60
'
+ 'cmsOpenBackup
+ '
+ Me.cmsOpenBackup.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsOpenBackupFile, Me.cmsOpenBackupFolder})
+ Me.cmsOpenBackup.Name = "cmsOpenBackup"
+ Me.cmsOpenBackup.ShowImageMargin = False
+ Me.cmsOpenBackup.Size = New System.Drawing.Size(83, 48)
+ '
+ 'cmsOpenBackupFile
+ '
+ Me.cmsOpenBackupFile.Name = "cmsOpenBackupFile"
+ Me.cmsOpenBackupFile.Size = New System.Drawing.Size(82, 22)
+ Me.cmsOpenBackupFile.Text = "&File"
+ '
+ 'cmsOpenBackupFolder
+ '
+ Me.cmsOpenBackupFolder.Name = "cmsOpenBackupFolder"
+ Me.cmsOpenBackupFolder.Size = New System.Drawing.Size(82, 22)
+ Me.cmsOpenBackupFolder.Text = "F&older"
+ '
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -1017,6 +1040,7 @@ Partial Class frmGameManager
Me.grpFilter.PerformLayout()
Me.cmsImport.ResumeLayout(False)
Me.cmsDeleteBackup.ResumeLayout(False)
+ Me.cmsOpenBackup.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -1065,7 +1089,7 @@ Partial Class frmGameManager
Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button
Friend WithEvents btnRestore As System.Windows.Forms.Button
Friend WithEvents btnDeleteBackup As System.Windows.Forms.Button
- Friend WithEvents btnOpenBackupFile As System.Windows.Forms.Button
+ Friend WithEvents btnOpenBackup As System.Windows.Forms.Button
Friend WithEvents grpFilter As System.Windows.Forms.GroupBox
Friend WithEvents optPendingRestores As System.Windows.Forms.RadioButton
Friend WithEvents optAllGames As System.Windows.Forms.RadioButton
@@ -1109,4 +1133,7 @@ Partial Class frmGameManager
Friend WithEvents lblOS As Label
Friend WithEvents cboOS As ComboBox
Friend WithEvents btnWineConfig As Button
+ Friend WithEvents cmsOpenBackup As ContextMenuStrip
+ Friend WithEvents cmsOpenBackupFile As ToolStripMenuItem
+ Friend WithEvents cmsOpenBackupFolder As ToolStripMenuItem
End Class
diff --git a/GBM/Forms/frmGameManager.resx b/GBM/Forms/frmGameManager.resx
index 30ad1df..5897b7d 100644
--- a/GBM/Forms/frmGameManager.resx
+++ b/GBM/Forms/frmGameManager.resx
@@ -126,4 +126,7 @@
275, 17
+
+ 378, 17
+
\ No newline at end of file
diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb
index 5e823b3..ff8fa94 100644
--- a/GBM/Forms/frmGameManager.vb
+++ b/GBM/Forms/frmGameManager.vb
@@ -535,24 +535,15 @@ Public Class frmGameManager
End Sub
Private Sub OpenBackupFile()
- Dim sFileName As String
- Dim oProcessStartInfo As ProcessStartInfo
+ Dim sFileName As String = BackupFolder & CurrentBackupItem.FileName
- sFileName = BackupFolder & CurrentBackupItem.FileName
+ mgrCommon.OpenInOS(sFileName, frmGameManager_ErrorNoBackupFileExists)
+ End Sub
- If File.Exists(sFileName) Then
- Try
- oProcessStartInfo = New ProcessStartInfo
- oProcessStartInfo.FileName = sFileName
- oProcessStartInfo.UseShellExecute = True
- oProcessStartInfo.Verb = "open"
- Process.Start(oProcessStartInfo)
- Catch ex As Exception
- mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
- End Try
- Else
- mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation)
- End If
+ Private Sub OpenBackupFolder()
+ Dim sFileName As String = BackupFolder & Path.GetDirectoryName(CurrentBackupItem.FileName)
+
+ mgrCommon.OpenInOS(sFileName, frmGameManager_ErrorNoBackupFolderExists)
End Sub
Private Sub UpdateBuilderButtonLabel(ByVal sBuilderString As String, ByVal sLabel As String, ByVal btn As Button, ByVal bDirty As Boolean)
@@ -583,7 +574,7 @@ Public Class frmGameManager
Private Function GetBuilderRoot() As String
Dim sRoot As String = String.Empty
- Dim sPath As String = mgrPath.ValidatePathForOS(txtSavePath.Text)
+ Dim sPath As String = mgrPath.ValidatePath(txtSavePath.Text)
If Not Settings.ShowResolvedPaths Then sPath = mgrPath.ReplaceSpecialPaths(sPath)
@@ -642,7 +633,6 @@ Public Class frmGameManager
Private Sub OpenRestorePath()
Dim sPath As String = String.Empty
- Dim oProcessStartInfo As ProcessStartInfo
If CurrentBackupItem.AbsolutePath Then
sPath = CurrentBackupItem.RestorePath
@@ -652,19 +642,7 @@ Public Class frmGameManager
End If
End If
- If Directory.Exists(sPath) Then
- Try
- oProcessStartInfo = New ProcessStartInfo
- oProcessStartInfo.FileName = sPath
- oProcessStartInfo.UseShellExecute = True
- oProcessStartInfo.Verb = "open"
- Process.Start(oProcessStartInfo)
- Catch ex As Exception
- mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
- End Try
- Else
- mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation)
- End If
+ mgrCommon.OpenInOS(sPath, frmGameManager_ErrorNoRestorePathExists)
End Sub
Private Sub OpenProcesses()
@@ -822,7 +800,7 @@ Public Class frmGameManager
sFileName = BackupFolder & CurrentBackupItem.FileName
- btnOpenBackupFile.Enabled = True
+ btnOpenBackup.Enabled = True
btnOpenRestorePath.Enabled = True
btnRestore.Enabled = True
btnDeleteBackup.Enabled = True
@@ -830,7 +808,7 @@ Public Class frmGameManager
If File.Exists(sFileName) Then
lblBackupFileData.Text = Path.GetFileName(CurrentBackupItem.FileName) & " (" & mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sFileName)) & ")"
Else
- lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
+ lblBackupFileData.Text = frmGameManager_ErrorNoBackupFileExists
End If
SetBackupRestorePath(oApp)
@@ -838,7 +816,7 @@ Public Class frmGameManager
oComboItems.Add(New KeyValuePair(Of String, String)(String.Empty, frmGameManager_None))
lblBackupFileData.Text = String.Empty
lblRestorePathData.Text = String.Empty
- btnOpenBackupFile.Enabled = False
+ btnOpenBackup.Enabled = False
btnOpenRestorePath.Enabled = False
btnRestore.Enabled = False
btnDeleteBackup.Enabled = False
@@ -876,7 +854,7 @@ Public Class frmGameManager
If mgrPath.IsSupportedRegistryPath(oApp.TruePath) Then
btnImportBackup.Enabled = False
- btnOpenBackupFile.Enabled = False
+ btnOpenBackup.Enabled = False
btnOpenRestorePath.Enabled = False
End If
@@ -893,7 +871,7 @@ Public Class frmGameManager
If File.Exists(sFileName) Then
lblBackupFileData.Text = Path.GetFileName(CurrentBackupItem.FileName) & " (" & mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sFileName)) & ")"
Else
- lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
+ lblBackupFileData.Text = frmGameManager_ErrorNoBackupFileExists
End If
SetBackupRestorePath(CurrentGame)
@@ -1081,7 +1059,7 @@ Public Class frmGameManager
btnRestore.Enabled = False
btnImportBackup.Enabled = False
btnDeleteBackup.Enabled = False
- btnOpenBackupFile.Enabled = False
+ btnOpenBackup.Enabled = False
btnOpenRestorePath.Enabled = False
chkEnabled.Checked = True
chkMonitorOnly.Checked = False
@@ -1115,7 +1093,7 @@ Public Class frmGameManager
btnRestore.Enabled = False
btnImportBackup.Enabled = False
btnDeleteBackup.Enabled = False
- btnOpenBackupFile.Enabled = False
+ btnOpenBackup.Enabled = False
btnOpenRestorePath.Enabled = False
btnTags.Enabled = True
btnProcesses.Enabled = True
@@ -1257,7 +1235,6 @@ Public Class frmGameManager
btnInclude.Enabled = False
btnExclude.Enabled = False
Else
- chkFolderSave.Checked = False
chkFolderSave.Enabled = True
btnInclude.Enabled = True
btnExclude.Enabled = True
@@ -1384,7 +1361,7 @@ Public Class frmGameManager
oApp.IsRegEx = chkRegEx.Checked
If Not oApp.IsRegEx Then
- txtProcess.Text = mgrPath.ValidateFileNameForOS(txtProcess.Text)
+ txtProcess.Text = mgrPath.ValidateFileName(txtProcess.Text)
If Path.HasExtension(txtProcess.Text) Then
If txtProcess.Text.ToLower.EndsWith(".exe") Then
txtProcess.Text = Path.GetFileNameWithoutExtension(txtProcess.Text)
@@ -1395,7 +1372,7 @@ Public Class frmGameManager
oApp.ProcessName = txtProcess.Text
oApp.Parameter = txtParameter.Text
oApp.OS = CType(cboOS.SelectedValue, clsGame.eOS)
- oApp.Path = mgrPath.ValidatePathForOS(txtSavePath.Text)
+ oApp.Path = mgrPath.ValidatePath(txtSavePath.Text)
'If we have a registry path, trim any trailing backslashes because they cause export failures
If mgrPath.IsSupportedRegistryPath(oApp.Path) Then
@@ -1420,7 +1397,7 @@ Public Class frmGameManager
oApp.Comments = txtComments.Text
oApp.Enabled = chkEnabled.Checked
oApp.MonitorOnly = chkMonitorOnly.Checked
- oApp.ProcessPath = mgrPath.ValidatePathForOS(txtAppPath.Text)
+ oApp.ProcessPath = mgrPath.ValidatePath(txtAppPath.Text)
oApp.Company = txtCompany.Text
oApp.Version = txtVersion.Text
oApp.Icon = txtIcon.Text
@@ -1818,7 +1795,7 @@ Public Class frmGameManager
btnSave.Text = frmGameManager_btnSave
lblRestorePath.Text = frmGameManager_lblRestorePath
btnOpenRestorePath.Text = frmGameManager_btnOpenRestorePath
- btnOpenBackupFile.Text = frmGameManager_btnOpenBackupFile
+ btnOpenBackup.Text = frmGameManager_btnOpenBackup
btnDeleteBackup.Text = frmGameManager_btnDeleteBackup
lblBackupFile.Text = frmGameManager_lblBackupFile
lblRemote.Text = frmGameManager_lblRemote
@@ -1860,6 +1837,8 @@ Public Class frmGameManager
btnProcesses.Text = frmGameManager_btnProcesses
lblOS.Text = frmGameManager_lblOS
btnWineConfig.Text = frmGameManager_btnWineConfig
+ cmsOpenBackupFile.Text = frmGameManager_cmsOpenBackupFile
+ cmsOpenBackupFolder.Text = frmGameManager_cmsOpenBackupFolder
'Init Combos
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
@@ -1902,8 +1881,9 @@ Public Class frmGameManager
btnRestore.Visible = False
btnMarkAsRestored.Visible = False
btnDeleteBackup.Visible = False
- btnOpenBackupFile.Visible = False
+ btnOpenBackup.Visible = False
btnOpenRestorePath.Visible = False
+ btnImportBackup.Visible = False
End If
LoadBackupData()
@@ -1984,10 +1964,18 @@ Public Class frmGameManager
IconBrowse()
End Sub
- Private Sub btnOpenBackupFile_Click(sender As Object, e As EventArgs) Handles btnOpenBackupFile.Click
+ Private Sub btnOpenBackup_Click(sender As Object, e As EventArgs) Handles btnOpenBackup.Click
+ mgrCommon.OpenButtonSubMenu(cmsOpenBackup, btnOpenBackup)
+ End Sub
+
+ Private Sub cmsOpenBackupFile_Click(sender As Object, e As EventArgs) Handles cmsOpenBackupFile.Click
OpenBackupFile()
End Sub
+ Private Sub cmsOpenBackupFolder_Click(sender As Object, e As EventArgs) Handles cmsOpenBackupFolder.Click
+ OpenBackupFolder()
+ End Sub
+
Private Sub btnOpenRestorePath_Click(sender As Object, e As EventArgs) Handles btnOpenRestorePath.Click
OpenRestorePath()
End Sub
@@ -2006,7 +1994,7 @@ Public Class frmGameManager
Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click
If cboRemoteBackup.Items.Count > 1 Then
- cmsDeleteBackup.Show(btnDeleteBackup, New Drawing.Point(btnDeleteBackup.Size.Width - Math.Floor(btnDeleteBackup.Size.Width * 0.1), btnDeleteBackup.Size.Height - Math.Floor(btnDeleteBackup.Size.Height * 0.5)), ToolStripDropDownDirection.AboveRight)
+ mgrCommon.OpenButtonSubMenu(cmsDeleteBackup, btnDeleteBackup)
Else
DeleteBackup()
End If
@@ -2076,7 +2064,7 @@ Public Class frmGameManager
End Sub
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
- cmsImport.Show(btnImport, New Drawing.Point(btnImport.Size.Width - Math.Floor(btnImport.Size.Width * 0.1), btnImport.Size.Height - Math.Floor(btnImport.Size.Height * 0.5)), ToolStripDropDownDirection.AboveRight)
+ mgrCommon.OpenButtonSubMenu(cmsImport, btnImport)
End Sub
Private Sub cmsOfficialWindows_Click(sender As Object, e As EventArgs) Handles cmsOfficialWindows.Click, cmsOfficial.Click
diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb
index 1b98398..ca7b999 100644
--- a/GBM/Forms/frmMain.vb
+++ b/GBM/Forms/frmMain.vb
@@ -1008,12 +1008,9 @@ Public Class frmMain
Private Sub OpenStartupWizard()
Dim frm As New frmStartUpWizard()
- frm.Settings = oSettings
- PauseScan()
+ frm.Settings = New mgrSettings
frm.ShowDialog()
- LoadAndVerify()
bFirstRun = False
- ResumeScan()
End Sub
Private Sub OpenWebSite()
@@ -1757,8 +1754,8 @@ Public Class frmMain
Private Sub VerifyGameDataPath()
'Important: This function cannot access mgrPath for settings, as that will trigger a database creation and destroy the reason for this function
- Dim sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "/gbm"
- Dim sDBLocation As String = sSettingsRoot & "/gbm.s3db"
+ Dim sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & Path.DirectorySeparatorChar & "gbm"
+ Dim sDBLocation As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm.s3db"
If Not Directory.Exists(sSettingsRoot) Then
Try
@@ -2208,6 +2205,7 @@ Public Class frmMain
If bInitialLoad Then
Try
VerifyGameDataPath()
+ If bFirstRun Then OpenStartupWizard()
LoadAndVerify()
Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message & vbCrLf & ex.StackTrace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
@@ -2246,10 +2244,6 @@ Public Class frmMain
CheckForNewBackups()
End If
- If bFirstRun And Not bShutdown Then
- OpenStartupWizard()
- End If
-
bInitialLoad = False
Else
txtLog.Select(txtLog.TextLength, 0)
diff --git a/GBM/Forms/frmStartUpWizard.Designer.vb b/GBM/Forms/frmStartUpWizard.Designer.vb
index 94dbc46..c54c4c9 100644
--- a/GBM/Forms/frmStartUpWizard.Designer.vb
+++ b/GBM/Forms/frmStartUpWizard.Designer.vb
@@ -49,6 +49,7 @@ Partial Class frmStartUpWizard
Me.lblStep4Instructions = New System.Windows.Forms.Label()
Me.btnNext = New System.Windows.Forms.Button()
Me.btnBack = New System.Windows.Forms.Button()
+ Me.lblStep2Warning = New System.Windows.Forms.Label()
Me.tabWizard.SuspendLayout()
Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout()
@@ -125,6 +126,7 @@ Partial Class frmStartUpWizard
'tbPage2
'
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
+ Me.tbPage2.Controls.Add(Me.lblStep2Warning)
Me.tbPage2.Controls.Add(Me.chkCreateFolder)
Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
@@ -162,7 +164,7 @@ Partial Class frmStartUpWizard
'
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 103)
Me.lblStep2Instructions.Name = "lblStep2Instructions"
- Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 50)
+ Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 44)
Me.lblStep2Instructions.TabIndex = 6
Me.lblStep2Instructions.Text = "GBM will store all your backup files along with a manifest database (gbm.s3db) in" &
" this location. Any existing GBM data in this folder will be automatically impo" &
@@ -318,6 +320,15 @@ Partial Class frmStartUpWizard
Me.btnBack.TabIndex = 1
Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True
+ '
+ 'lblStep2Warning
+ '
+ Me.lblStep2Warning.Location = New System.Drawing.Point(14, 147)
+ Me.lblStep2Warning.Name = "lblStep2Warning"
+ Me.lblStep2Warning.Size = New System.Drawing.Size(335, 33)
+ Me.lblStep2Warning.TabIndex = 7
+ Me.lblStep2Warning.Text = "You cannot return to this step after clicking Next. The Backup Location can be c" &
+ "hanged any time once Setup is complete."
'
'frmStartUpWizard
'
@@ -371,4 +382,5 @@ Partial Class frmStartUpWizard
Friend WithEvents lblStep4Instructions2 As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions2 As System.Windows.Forms.Label
Friend WithEvents llbManual As System.Windows.Forms.LinkLabel
+ Friend WithEvents lblStep2Warning As Label
End Class
diff --git a/GBM/Forms/frmStartUpWizard.vb b/GBM/Forms/frmStartUpWizard.vb
index 633b305..9385f59 100644
--- a/GBM/Forms/frmStartUpWizard.vb
+++ b/GBM/Forms/frmStartUpWizard.vb
@@ -42,6 +42,7 @@ Public Class frmStartUpWizard
chkCreateFolder.Text = frmStartUpWizard_chkCreateFolder
lblStep2Title.Text = frmStartUpWizard_lblStep2Title
lblStep2Instructions.Text = frmStartUpWizard_lblStep2Instructions
+ lblStep2Warning.Text = frmStartUpWizard_lblStep2Warning
btnFolderBrowse.Text = frmStartUpWizard_btnFolderBrowse
lblStep2Intro.Text = frmStartUpWizard_lblStep2Intro
btnOpenWizard.Text = frmStartUpWizard_btnOpenWizard
@@ -55,7 +56,8 @@ Public Class frmStartUpWizard
lblStep4Instructions.Text = frmStartUpWizard_lblStep4Instructions
llbManual.Links.Add(0, 26, App_URLManual)
- LoadGameSettings()
+ txtBackupPath.Text = oSettings.BackupFolder
+
StepHandler()
End Sub
@@ -78,8 +80,6 @@ Public Class frmStartUpWizard
btnNext.Enabled = True
tabWizard.SelectTab(0)
Case eSteps.Step2
- txtBackupPath.Text = oSettings.BackupFolder
- chkCreateFolder.Checked = oSettings.CreateSubFolder
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(1)
@@ -141,18 +141,22 @@ Public Class frmStartUpWizard
Return False
End If
- If Not Directory.Exists(strPath) Then
- sErrorMessage = frmStartUpWizard_ErrorNoFolderExists
- txtBackupPath.Focus()
- Return False
- End If
-
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = frmStartUpWizard_ErrorBadFolder
txtBackupPath.Focus()
Return False
End If
+ If Not Directory.Exists(strPath) Then
+ Try
+ Directory.CreateDirectory(strPath)
+ Catch ex As Exception
+ sErrorMessage = frmStartUpWizard_ErrorNoFolderExists
+ txtBackupPath.Focus()
+ Return False
+ End Try
+ End If
+
Return True
End Function
diff --git a/GBM/License/license.txt b/GBM/License/license.txt
index d93cf8f..463387a 100644
--- a/GBM/License/license.txt
+++ b/GBM/License/license.txt
@@ -1,5 +1,5 @@
-GBM - Game Backup Monitor
-Copyright (C) 2019 Michael J. Seiferling
+Game Backup Monitor
+Copyright (C) 2014 - 2019 Michael J. Seiferling and Game Backup Monitor contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb
index 5bf0e0a..bb26c82 100644
--- a/GBM/Managers/mgrCommon.vb
+++ b/GBM/Managers/mgrCommon.vb
@@ -451,7 +451,7 @@ Public Class mgrCommon
Try
prsdf = New Process
prsdf.StartInfo.FileName = "/bin/df"
- prsdf.StartInfo.Arguments = sPath
+ prsdf.StartInfo.Arguments = """" & sPath & """"
prsdf.StartInfo.UseShellExecute = False
prsdf.StartInfo.RedirectStandardOutput = True
prsdf.StartInfo.CreateNoWindow = True
@@ -529,6 +529,29 @@ Public Class mgrCommon
End If
End Sub
+ 'Opens a file or folder in default application determined by the OS
+ Public Shared Function OpenInOS(ByVal sFileName As String, ByVal sNotFoundError As String) As Boolean
+ Dim oProcessStartInfo As ProcessStartInfo
+
+ If File.Exists(sFileName) Or Directory.Exists(sFileName) Then
+ Try
+ oProcessStartInfo = New ProcessStartInfo
+ oProcessStartInfo.FileName = sFileName
+ oProcessStartInfo.UseShellExecute = True
+ oProcessStartInfo.Verb = "open"
+ Process.Start(oProcessStartInfo)
+ Catch ex As Exception
+ mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
+ Return False
+ End Try
+ Else
+ mgrCommon.ShowMessage(sNotFoundError, MsgBoxStyle.Exclamation)
+ Return False
+ End If
+
+ Return True
+ End Function
+
'Delete a sub-folder based on the provided backup information
Public Shared Sub DeleteDirectoryByBackup(ByVal sBackupFolder As String, ByVal oBackup As clsBackup)
Dim oDir As DirectoryInfo
@@ -569,6 +592,11 @@ Public Class mgrCommon
End Try
End Sub
+ 'Open a nice button sub-menu
+ Public Shared Sub OpenButtonSubMenu(ByRef cms As ContextMenuStrip, ByRef btn As Button)
+ cms.Show(btn, New Drawing.Point(btn.Size.Width - Math.Floor(btn.Size.Width * 0.1), btn.Size.Height - Math.Floor(btn.Size.Height * 0.5)), ToolStripDropDownDirection.AboveRight)
+ End Sub
+
'Configure a fake form to trigger focus for priority messages
Private Shared Sub ConfigureFakeForm(ByRef frm As Form)
frm.FormBorderStyle = FormBorderStyle.None
diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb
index b80d245..34bb7a7 100644
--- a/GBM/Managers/mgrPath.vb
+++ b/GBM/Managers/mgrPath.vb
@@ -101,8 +101,10 @@ Public Class mgrPath
End Set
End Property
- Public Shared Function ValidatePathForOS(ByVal sCheckString As String) As String
- Dim cInvalidCharacters As Char() = Path.GetInvalidPathChars
+ Public Shared Function ValidatePath(ByVal sCheckString As String) As String
+ Dim cInvalidCharacters As Char() = {Chr(0), Chr(1), Chr(2), Chr(3), Chr(4), Chr(5), Chr(6), Chr(7), Chr(8), Chr(9), Chr(10), Chr(11), Chr(12), Chr(13), Chr(14), Chr(15),
+ Chr(16), Chr(17), Chr(18), Chr(19), Chr(20), Chr(21), Chr(22), Chr(23), Chr(24), Chr(25), Chr(26), Chr(27), Chr(28), Chr(29), Chr(30),
+ Chr(31), Chr(34), Chr(60), Chr(62), Chr(124)}
For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "")
@@ -111,15 +113,17 @@ Public Class mgrPath
Return sCheckString.Trim
End Function
- Public Shared Function ValidateFileNameForOS(ByVal sCheckString As String) As String
- Dim cInvalidCharacters As Char() = Path.GetInvalidFileNameChars
+ Public Shared Function ValidateFileName(ByVal sCheckString As String) As String
+ Dim cInvalidCharacters As Char() = {Chr(0), Chr(1), Chr(2), Chr(3), Chr(4), Chr(5), Chr(6), Chr(7), Chr(8), Chr(9), Chr(10), Chr(11), Chr(12), Chr(13), Chr(14), Chr(15),
+ Chr(16), Chr(17), Chr(18), Chr(19), Chr(20), Chr(21), Chr(22), Chr(23), Chr(24), Chr(25), Chr(26), Chr(27), Chr(28), Chr(29), Chr(30),
+ Chr(31), Chr(34), Chr(42), Chr(47), Chr(58), Chr(60), Chr(62), Chr(63), Chr(92), Chr(124)}
For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "")
Next
- If sCheckString.Length > 257 Then
- sCheckString = sCheckString.Substring(0, 257)
+ If sCheckString.Length > 255 Then
+ sCheckString = sCheckString.Substring(0, 255)
End If
Return sCheckString.Trim
diff --git a/GBM/Managers/mgrSettings.vb b/GBM/Managers/mgrSettings.vb
index 8607832..044f510 100644
--- a/GBM/Managers/mgrSettings.vb
+++ b/GBM/Managers/mgrSettings.vb
@@ -1,4 +1,5 @@
Imports System.IO
+Imports GBM.My.Resources
Public Class mgrSettings
Private bStartWithWindows As Boolean = False
@@ -18,7 +19,7 @@ Public Class mgrSettings
Private iCompressionLevel As Integer = 5
Private s7zArguments As String = String.Empty
Private s7zLocation As String = String.Empty
- Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"})
+ Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & Path.DirectorySeparatorChar & App_NameLong
Private eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None
Private eMessages As eSuppressMessages = eSuppressMessages.None
Private bAutoSaveLog As Boolean = False
diff --git a/GBM/My Project/AssemblyInfo.vb b/GBM/My Project/AssemblyInfo.vb
index 9359fb2..2e1f5a0 100644
--- a/GBM/My Project/AssemblyInfo.vb
+++ b/GBM/My Project/AssemblyInfo.vb
@@ -14,7 +14,7 @@ Imports System.Runtime.InteropServices
-
+
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
'
-
-
+
+
\ No newline at end of file
diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb
index 365f4da..50330c5 100644
--- a/GBM/My Project/Resources.Designer.vb
+++ b/GBM/My Project/Resources.Designer.vb
@@ -79,7 +79,7 @@ Namespace My.Resources
End Property
'''
- ''' Looks up a localized string similar to [PARAM] Michael J. Seiferling.
+ ''' Looks up a localized string similar to 2014 - [PARAM] Michael J. Seiferling and Game Backup Monitor contributors.
'''
Friend ReadOnly Property App_Copyright() As String
Get
@@ -547,7 +547,7 @@ Namespace My.Resources
End Property
'''
- ''' Looks up a localized string similar to Backup Limit.
+ ''' Looks up a localized string similar to Backup Limit (0 = Unlimited).
'''
Friend ReadOnly Property frmAddWizard_lblLimit() As String
Get
@@ -744,6 +744,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Unlimited.
+ '''
+ Friend ReadOnly Property frmAddWizard_Summary_NoLimit() As String
+ Get
+ Return ResourceManager.GetString("frmAddWizard_Summary_NoLimit", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to Process.
'''
@@ -1654,11 +1663,11 @@ Namespace My.Resources
End Property
'''
- ''' Looks up a localized string similar to &Open Backup File.
+ ''' Looks up a localized string similar to &Open Backup.
'''
- Friend ReadOnly Property frmGameManager_btnOpenBackupFile() As String
+ Friend ReadOnly Property frmGameManager_btnOpenBackup() As String
Get
- Return ResourceManager.GetString("frmGameManager_btnOpenBackupFile", resourceCulture)
+ Return ResourceManager.GetString("frmGameManager_btnOpenBackup", resourceCulture)
End Get
End Property
@@ -1905,6 +1914,24 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to &File.
+ '''
+ Friend ReadOnly Property frmGameManager_cmsOpenBackupFile() As String
+ Get
+ Return ResourceManager.GetString("frmGameManager_cmsOpenBackupFile", resourceCulture)
+ End Get
+ End Property
+
+ '''
+ ''' Looks up a localized string similar to F&older.
+ '''
+ Friend ReadOnly Property frmGameManager_cmsOpenBackupFolder() As String
+ Get
+ Return ResourceManager.GetString("frmGameManager_cmsOpenBackupFolder", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to Are you sure you want to run a backup for [PARAM]? This will close the form..
'''
@@ -2106,9 +2133,18 @@ Namespace My.Resources
'''
''' Looks up a localized string similar to The backup file does not exist..
'''
- Friend ReadOnly Property frmGameManager_ErrorNoBackupExists() As String
+ Friend ReadOnly Property frmGameManager_ErrorNoBackupFileExists() As String
Get
- Return ResourceManager.GetString("frmGameManager_ErrorNoBackupExists", resourceCulture)
+ Return ResourceManager.GetString("frmGameManager_ErrorNoBackupFileExists", resourceCulture)
+ End Get
+ End Property
+
+ '''
+ ''' Looks up a localized string similar to The backup folder does not exist..
+ '''
+ Friend ReadOnly Property frmGameManager_ErrorNoBackupFolderExists() As String
+ Get
+ Return ResourceManager.GetString("frmGameManager_ErrorNoBackupFolderExists", resourceCulture)
End Get
End Property
@@ -2383,7 +2419,7 @@ Namespace My.Resources
End Property
'''
- ''' Looks up a localized string similar to Backup Limit.
+ ''' Looks up a localized string similar to Backup Limit (0 = Unlimited).
'''
Friend ReadOnly Property frmGameManager_lblLimit() As String
Get
@@ -5254,7 +5290,7 @@ Namespace My.Resources
End Property
'''
- ''' Looks up a localized string similar to The folder you selected does not exist or is not a valid folder..
+ ''' Looks up a localized string similar to The selected backup location does not exist and could not be created.[BR][BR][PARAM].
'''
Friend ReadOnly Property frmStartUpWizard_ErrorNoFolderExists() As String
Get
@@ -5334,6 +5370,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to You cannot return to this step after clicking Next. The Backup Location can be changed any time once Setup is complete..
+ '''
+ Friend ReadOnly Property frmStartUpWizard_lblStep2Warning() As String
+ Get
+ Return ResourceManager.GetString("frmStartUpWizard_lblStep2Warning", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to Before you can start monitoring for games, they need to be configured so GBM knows what to look for and how to handle them. You can download pre-made configurations from the official list or add them all yourself using the tools below. You can also skip this step for now!.
'''
diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx
index 5800dac..3c929ef 100644
--- a/GBM/My Project/Resources.resx
+++ b/GBM/My Project/Resources.resx
@@ -137,7 +137,7 @@
This will rebuild all databases and shrink them to an optimal size.[BR]This should only be used if your gbm.s3db files are becoming very large.[BR][BR]Do you wish to continue?
- [PARAM] Michael J. Seiferling
+ 2014 - [PARAM] Michael J. Seiferling and Game Backup Monitor contributors
Are you sure you want to exit? Your games will no longer be monitored.
@@ -460,8 +460,8 @@
&Mark as Restored
-
- &Open Backup File
+
+ &Open Backup
O&pen Restore Path
@@ -553,7 +553,7 @@
The selected game(s) have no backup data or can't be restored with their current configuration.
-
+
The backup file does not exist.
@@ -1136,7 +1136,7 @@
You must select a backup path to continue.
- The folder you selected does not exist or is not a valid folder.
+ The selected backup location does not exist and could not be created.[BR][BR][PARAM]
Existing data was detected in the backup folder and has been imported.
@@ -1682,7 +1682,7 @@
You cannot choose a file located outside the current [PARAM] backup folder.
- Backup Limit
+ Backup Limit (0 = Unlimited)
[PARAM] was automatically removed.
@@ -1697,7 +1697,7 @@
This will delete all backup files for [PARAM]. This cannot be undone. [BR][BR]Do you want to continue?
- Backup Limit
+ Backup Limit (0 = Unlimited)
Unknown
@@ -2413,4 +2413,19 @@
..\resources\gbm.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ &File
+
+
+ F&older
+
+
+ The backup folder does not exist.
+
+
+ Unlimited
+
+
+ You cannot return to this step after clicking Next. The Backup Location can be changed any time once Setup is complete.
+
\ No newline at end of file
diff --git a/GBM/readme.txt b/GBM/readme.txt
index 80a3a5b..e7923ef 100644
--- a/GBM/readme.txt
+++ b/GBM/readme.txt
@@ -1,52 +1,28 @@
-Game Backup Monitor v1.1.8 Readme
+Game Backup Monitor v1.1.9 Readme
http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
-March 22, 2019
+June 7, 2019
-New in 1.1.8
+New in 1.1.9
All Platforms:
-- Added the ability to backup and restore saved games that are stored in the Windows registry:
- - This feature is also supported in Linux for Windows games running in Wine/Proton.
- - Please see the online manual for more details on how to use this feature.
-- On startup, GBM now waits up to one minute for the current backup location to become available before displaying an error message.
- - The error message can now be canceled to continue waiting.
- - This is useful for delayed network shares on startup or if you forgot to plug in an external backup drive.
-- The "Choose Game" window now displays tags in addition to the game name when multiple configurations are detected.
-- The "Backup Confirmation" window should now always get top focus after a gaming session ends.
- - This fix has also been applied to other important messages to make sure they don't get hidden behind other windows.
-- The Game Manager and Custom Variable Manager now use a different folder browser where applicable.
- - The new browser provides better usability for power users, other areas of the app will still use the classic folder browser.
- - The new browser allows Linux users to "Show Hidden Folders", which can't be done using the classic Folder Browser.
-- When a UNC path is used for the backup folder, the disk space check prior to backups will be automatically disabled because it cannot be done.
-- The disk space check prior to backups can now be disabled in the "Backup and Restore" settings.
-- Added "Operating System" field to game configurations:
- - "Windows" and "Linux" are the only valid choices at this time and only Linux users are allowed to change this field.
-- Changed how GBM initilizes on startup to fix some long standing issues.
-- Fixed some inconsistencies with form icons and when forms are shown in the task bar.
-- GBM no longer provides a warning about "Syncing Game IDs" when importing configurations in the Game Manager.
- - The warning was very confusing and is no longer relevant to most users.
- - The "Sync Game IDs" Tool will continue to be available for now, but the messaging has been changed warning not to use it without reading the manual first.
-
-Windows:
-
-- Updated SQLite to 3.27.2
-- Updated 7-Zip to 19.00
+- Fixed a bug on the Game Manager that caused the "Save Entire Folder" checkbox to be unchecked anytime the "Save Path" field was changed.
+- The "Add Game Wizard" now allows you to set an unlimited number of backups.
+- The "Backup Limit" label has been updated to indicate that 0 means unlimited.
+- The "Open Backup File" button on the Game Manager is now called "Open Backup". It now gives a choice between opening the backup file or the folder containing the file.
+- Set rules are now used for backup folder and file names, regardless of the operating system GBM is running on.
+ - GBM now always filters out NTFS reserved characters and allows a maximum file name length of 255.
+ - This will prevent various problems when using a backup drive with a non-standard file system in Linux or Windows.
+ - These rules will be applied to new backup files or folders, existing backups not be modified.
+- Made improvements to the Start-Up Wizard.
+ - The default backup location now includes a "Game Backup Monitor" sub-folder.
+ - The wizard will now automatically create the backup location if it doesn't exist.
+ - You can no longer attempt to Import Backup Files during the Start-Up Wizard.
Linux:
-- You can now set GBM to automatically start on log-in via the "Startup" settings.
- - This requires that GBM be installed via a package manager or the makefile, so any required files are in a known location. The option will be disabled otherwise.
-- The "Start Minimized" option is now available in "Startup" settings.
-- GBM now stores all Wine configuration data seperately from the core game configuration:
- - The core configuration is no longer altered in any way when a game is detected running in Wine or Proton.
- - The Wine configuration data is now automatically updated each time a game is detected, such as when running the game from a new prefix.
- - This data can be viewed and manually modified on the Game Manager.
-- Fixed the handling of Wine/Proton games when multiple configurations are detected.
-- Fixed a crash when using "Backup Only" and "New Backups Pending" filters on the Game Manager.
-- The Mono and GBM process will now exit cleanly if a critical error occurs during startup.
-- GBM will no longer show the exit dialog when a critical error occurs.
-
+- Fixed a bug that caused the "Available Disk Space" check to fail if the backup folder contained one or more spaces.
+
The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html
\ No newline at end of file