From 076295069ec43f27d50ff90cb54382f4cf2b667f Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sun, 24 Mar 2019 09:24:18 -0600 Subject: [PATCH 01/14] Made copyright notice more appropriate for an open source project --- GBM/License/license.txt | 4 ++-- GBM/My Project/Resources.Designer.vb | 2 +- GBM/My Project/Resources.resx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) 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/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index 3bc823a..e62c3c3 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 diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index 39523ea..5cab32a 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. From 7062f4b4eac69e5e9b9c3fc5507da9768b7ffe9a Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Sun, 7 Apr 2019 14:16:47 -0600 Subject: [PATCH 02/14] Added "Open Backup Folder" to Game Manager --- GBM/Forms/frmGameManager.Designer.vb | 46 ++++++++++++++---- GBM/Forms/frmGameManager.resx | 3 ++ GBM/Forms/frmGameManager.vb | 72 ++++++++++++---------------- GBM/Managers/mgrCommon.vb | 28 +++++++++++ GBM/My Project/Resources.Designer.vb | 37 ++++++++++++-- GBM/My Project/Resources.resx | 15 ++++-- 6 files changed, 141 insertions(+), 60 deletions(-) diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb index f19700e..fa5e066 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 @@ -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,24 @@ 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.Size = New System.Drawing.Size(108, 48) + ' + 'cmsOpenBackupFile + ' + Me.cmsOpenBackupFile.Name = "cmsOpenBackupFile" + Me.cmsOpenBackupFile.Size = New System.Drawing.Size(107, 22) + Me.cmsOpenBackupFile.Text = "&File" + ' + 'cmsOpenBackupFolder + ' + Me.cmsOpenBackupFolder.Name = "cmsOpenBackupFolder" + Me.cmsOpenBackupFolder.Size = New System.Drawing.Size(107, 22) + Me.cmsOpenBackupFolder.Text = "F&older" + ' 'frmGameManager ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -1017,6 +1039,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 +1088,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 +1132,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..9840504 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) @@ -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 @@ -1818,7 +1796,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 +1838,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,7 +1882,7 @@ Public Class frmGameManager btnRestore.Visible = False btnMarkAsRestored.Visible = False btnDeleteBackup.Visible = False - btnOpenBackupFile.Visible = False + btnOpenBackup.Visible = False btnOpenRestorePath.Visible = False End If @@ -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/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 5bf0e0a..4dfe00f 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -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/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index e62c3c3..3494233 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -1654,11 +1654,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 +1905,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 +2124,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 diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index 5cab32a..ce1e1ad 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -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. @@ -2380,4 +2380,13 @@ ..\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. + \ No newline at end of file From fa88d2b03d52cee8537064f04a05b7a80de2b743 Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Sun, 7 Apr 2019 14:19:10 -0600 Subject: [PATCH 03/14] Fixed minor GUI issue in new sub-menu --- GBM/Forms/frmGameManager.Designer.vb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb index fa5e066..c2da1dc 100644 --- a/GBM/Forms/frmGameManager.Designer.vb +++ b/GBM/Forms/frmGameManager.Designer.vb @@ -980,18 +980,19 @@ Partial Class frmGameManager ' Me.cmsOpenBackup.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsOpenBackupFile, Me.cmsOpenBackupFolder}) Me.cmsOpenBackup.Name = "cmsOpenBackup" - Me.cmsOpenBackup.Size = New System.Drawing.Size(108, 48) + Me.cmsOpenBackup.ShowImageMargin = False + Me.cmsOpenBackup.Size = New System.Drawing.Size(156, 70) ' 'cmsOpenBackupFile ' Me.cmsOpenBackupFile.Name = "cmsOpenBackupFile" - Me.cmsOpenBackupFile.Size = New System.Drawing.Size(107, 22) + Me.cmsOpenBackupFile.Size = New System.Drawing.Size(155, 22) Me.cmsOpenBackupFile.Text = "&File" ' 'cmsOpenBackupFolder ' Me.cmsOpenBackupFolder.Name = "cmsOpenBackupFolder" - Me.cmsOpenBackupFolder.Size = New System.Drawing.Size(107, 22) + Me.cmsOpenBackupFolder.Size = New System.Drawing.Size(155, 22) Me.cmsOpenBackupFolder.Text = "F&older" ' 'frmGameManager From 3a54cddf9832ed5c5ff3dbeba4a5f43d7f26e009 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 13 Apr 2019 20:06:42 -0600 Subject: [PATCH 04/14] Fix #185 --- GBM/Forms/frmGameManager.vb | 1 - 1 file changed, 1 deletion(-) diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 9840504..2846580 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -1235,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 From 9b45ae7b1cb1b5bf1861cde8653a9beb441f9641 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 27 Apr 2019 07:22:57 -0600 Subject: [PATCH 05/14] Added backup drive format property to settings --- GBM/Managers/mgrSettings.vb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/GBM/Managers/mgrSettings.vb b/GBM/Managers/mgrSettings.vb index 42e623d..02982e1 100644 --- a/GBM/Managers/mgrSettings.vb +++ b/GBM/Managers/mgrSettings.vb @@ -255,6 +255,22 @@ Public Class mgrSettings End Set End Property + ReadOnly Property BackupDriveFormat As String + Get + Dim oBackupDrive As DriveInfo + Dim sFormat As String = String.Empty + Try + If Directory.Exists(sBackupFolder) Then + oBackupDrive = New DriveInfo(Path.GetPathRoot(sBackupFolder)) + sFormat = oBackupDrive.DriveFormat + End If + Catch + 'Do Nothing + End Try + Return sFormat + End Get + End Property + Property SyncFields As clsGame.eOptionalSyncFields Get Return eSyncFields From f77a900f568aead76c1b05319473d1f49babacad Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 27 Apr 2019 09:21:45 -0600 Subject: [PATCH 06/14] Updated backup drive format property to handle Linux --- GBM/Managers/mgrCommon.vb | 41 +++++++++++++++++++++++++++++++++++++ GBM/Managers/mgrSettings.vb | 16 +++++---------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 4dfe00f..3d6ec2a 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -443,6 +443,47 @@ Public Class mgrCommon Return lSize End Function + 'Get the drive format of a location (Unix) + Public Shared Function GetBackupDriveFormatUnix(ByVal sPath As String) As String + Dim prsdf As Process + Dim sOutput As String + Dim sDriveFormat As String = String.Empty + + Try + prsdf = New Process + prsdf.StartInfo.FileName = "/bin/df" + prsdf.StartInfo.Arguments = "-T " & sPath + prsdf.StartInfo.UseShellExecute = False + prsdf.StartInfo.RedirectStandardOutput = True + prsdf.StartInfo.CreateNoWindow = True + prsdf.Start() + sOutput = prsdf.StandardOutput.ReadToEnd + 'Parse df output to grab "Type" value + sDriveFormat = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(1) + Catch + 'Do Nothing + End Try + + Return sDriveFormat + End Function + + 'Get the drive format of a location (Windows) + Public Shared Function GetBackupDriveFormatWindows(ByVal sPath As String) As String + Dim oBackupDrive As DriveInfo + Dim sFormat As String = String.Empty + + Try + If Directory.Exists(sPath) Then + oBackupDrive = New DriveInfo(Path.GetPathRoot(sPath)) + sFormat = oBackupDrive.DriveFormat + End If + Catch + 'Do Nothing + End Try + + Return sFormat + End Function + 'Get available disk space on a drive (Unix) Private Shared Function GetAvailableDiskSpaceUnix(ByVal sPath As String) As Long Dim prsdf As Process diff --git a/GBM/Managers/mgrSettings.vb b/GBM/Managers/mgrSettings.vb index 02982e1..96ca2bc 100644 --- a/GBM/Managers/mgrSettings.vb +++ b/GBM/Managers/mgrSettings.vb @@ -257,17 +257,11 @@ Public Class mgrSettings ReadOnly Property BackupDriveFormat As String Get - Dim oBackupDrive As DriveInfo - Dim sFormat As String = String.Empty - Try - If Directory.Exists(sBackupFolder) Then - oBackupDrive = New DriveInfo(Path.GetPathRoot(sBackupFolder)) - sFormat = oBackupDrive.DriveFormat - End If - Catch - 'Do Nothing - End Try - Return sFormat + If mgrCommon.IsUnix Then + Return mgrCommon.GetBackupDriveFormatUnix(sBackupFolder) + Else + Return mgrCommon.GetBackupDriveFormatWindows(sBackupFolder) + End If End Get End Property From aa37c6525d4caa198e0696cd4618b72c516d6cc5 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 27 Apr 2019 10:31:09 -0600 Subject: [PATCH 07/14] Changes for #186 --- GBM/Classes/clsBackup.vb | 2 +- GBM/Classes/clsGame.vb | 4 ++-- GBM/Forms/frmGameManager.vb | 2 +- GBM/Managers/mgrCommon.vb | 35 +++++++++++++++++++++++++---------- GBM/Managers/mgrPath.vb | 22 ++++++++++++++++++---- 5 files changed, 47 insertions(+), 18 deletions(-) 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/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 2846580..54c4a26 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -1361,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) diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 3d6ec2a..af84183 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -445,21 +445,36 @@ Public Class mgrCommon 'Get the drive format of a location (Unix) Public Shared Function GetBackupDriveFormatUnix(ByVal sPath As String) As String - Dim prsdf As Process + Dim prs As Process Dim sOutput As String + Dim sDevice As String = String.Empty Dim sDriveFormat As String = String.Empty Try - prsdf = New Process - prsdf.StartInfo.FileName = "/bin/df" - prsdf.StartInfo.Arguments = "-T " & sPath - prsdf.StartInfo.UseShellExecute = False - prsdf.StartInfo.RedirectStandardOutput = True - prsdf.StartInfo.CreateNoWindow = True - prsdf.Start() - sOutput = prsdf.StandardOutput.ReadToEnd - 'Parse df output to grab "Type" value + prs = New Process + prs.StartInfo.FileName = "/bin/df" + prs.StartInfo.Arguments = "-T " & sPath + prs.StartInfo.UseShellExecute = False + prs.StartInfo.RedirectStandardOutput = True + prs.StartInfo.CreateNoWindow = True + prs.Start() + + sOutput = prs.StandardOutput.ReadToEnd + sDevice = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0) sDriveFormat = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(1) + + 'If we are dealing with a fuseblk we have to figure out what the underlying file system is. + If sDriveFormat = "fuseblk" Then + prs = New Process + prs.StartInfo.FileName = "/bin/lsblk" + prs.StartInfo.Arguments = sDevice & " -no fstype" + prs.StartInfo.UseShellExecute = False + prs.StartInfo.RedirectStandardOutput = True + prs.StartInfo.CreateNoWindow = True + prs.Start() + + sDriveFormat = prs.StandardOutput.ReadToEnd + End If Catch 'Do Nothing End Try diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb index b80d245..a47ddb0 100644 --- a/GBM/Managers/mgrPath.vb +++ b/GBM/Managers/mgrPath.vb @@ -111,15 +111,29 @@ 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 sFormat As String + Dim oSettings As New mgrSettings + Dim cInvalidCharacters As Char() + + oSettings.LoadSettings() + sFormat = oSettings.BackupDriveFormat.ToLower + + If sFormat.Contains("fat") Or sFormat.Contains("ntfs") Then + cInvalidCharacters = {"\", "/", ":", "*", "?", """", "<", ">", "|", Convert.ToChar(0)} + ElseIf sFormat.Contains("ext") Then + cInvalidCharacters = {"/", Convert.ToChar(0)} + Else + 'When unable to determine the format, use the invalid characters provided by the OS. + cInvalidCharacters = Path.GetInvalidFileNameChars + End If 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 From b48be71accf4405ff3b46bc41799637545366b43 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 27 Apr 2019 10:57:33 -0600 Subject: [PATCH 08/14] Refined file system detection for #186 --- GBM/Managers/mgrPath.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb index a47ddb0..9385b38 100644 --- a/GBM/Managers/mgrPath.vb +++ b/GBM/Managers/mgrPath.vb @@ -119,9 +119,9 @@ Public Class mgrPath oSettings.LoadSettings() sFormat = oSettings.BackupDriveFormat.ToLower - If sFormat.Contains("fat") Or sFormat.Contains("ntfs") Then + If sFormat.StartsWith("fat") Or sFormat = "vfat" Or sFormat = "ntfs" Then cInvalidCharacters = {"\", "/", ":", "*", "?", """", "<", ">", "|", Convert.ToChar(0)} - ElseIf sFormat.Contains("ext") Then + ElseIf sFormat.StartsWith("ext") Then cInvalidCharacters = {"/", Convert.ToChar(0)} Else 'When unable to determine the format, use the invalid characters provided by the OS. From 11db38108ead5fc7d10121a5aa2ae1d734d01c3f Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sat, 27 Apr 2019 12:44:27 -0600 Subject: [PATCH 09/14] Revert prior changes and fix #186 --- GBM/Forms/frmAddWizard.vb | 4 +-- GBM/Forms/frmGameManager.vb | 6 ++-- GBM/Managers/mgrCommon.vb | 56 ------------------------------------- GBM/Managers/mgrPath.vb | 24 +++++----------- GBM/Managers/mgrSettings.vb | 10 ------- 5 files changed, 12 insertions(+), 88 deletions(-) diff --git a/GBM/Forms/frmAddWizard.vb b/GBM/Forms/frmAddWizard.vb index 29bac02..8ecc25e 100644 --- a/GBM/Forms/frmAddWizard.vb +++ b/GBM/Forms/frmAddWizard.vb @@ -208,7 +208,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 +325,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.vb b/GBM/Forms/frmGameManager.vb index 54c4a26..2072ae9 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -574,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) @@ -1372,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 @@ -1397,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 diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index af84183..4dfe00f 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -443,62 +443,6 @@ Public Class mgrCommon Return lSize End Function - 'Get the drive format of a location (Unix) - Public Shared Function GetBackupDriveFormatUnix(ByVal sPath As String) As String - Dim prs As Process - Dim sOutput As String - Dim sDevice As String = String.Empty - Dim sDriveFormat As String = String.Empty - - Try - prs = New Process - prs.StartInfo.FileName = "/bin/df" - prs.StartInfo.Arguments = "-T " & sPath - prs.StartInfo.UseShellExecute = False - prs.StartInfo.RedirectStandardOutput = True - prs.StartInfo.CreateNoWindow = True - prs.Start() - - sOutput = prs.StandardOutput.ReadToEnd - sDevice = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0) - sDriveFormat = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(1) - - 'If we are dealing with a fuseblk we have to figure out what the underlying file system is. - If sDriveFormat = "fuseblk" Then - prs = New Process - prs.StartInfo.FileName = "/bin/lsblk" - prs.StartInfo.Arguments = sDevice & " -no fstype" - prs.StartInfo.UseShellExecute = False - prs.StartInfo.RedirectStandardOutput = True - prs.StartInfo.CreateNoWindow = True - prs.Start() - - sDriveFormat = prs.StandardOutput.ReadToEnd - End If - Catch - 'Do Nothing - End Try - - Return sDriveFormat - End Function - - 'Get the drive format of a location (Windows) - Public Shared Function GetBackupDriveFormatWindows(ByVal sPath As String) As String - Dim oBackupDrive As DriveInfo - Dim sFormat As String = String.Empty - - Try - If Directory.Exists(sPath) Then - oBackupDrive = New DriveInfo(Path.GetPathRoot(sPath)) - sFormat = oBackupDrive.DriveFormat - End If - Catch - 'Do Nothing - End Try - - Return sFormat - End Function - 'Get available disk space on a drive (Unix) Private Shared Function GetAvailableDiskSpaceUnix(ByVal sPath As String) As Long Dim prsdf As Process diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb index 9385b38..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, "") @@ -112,21 +114,9 @@ Public Class mgrPath End Function Public Shared Function ValidateFileName(ByVal sCheckString As String) As String - Dim sFormat As String - Dim oSettings As New mgrSettings - Dim cInvalidCharacters As Char() - - oSettings.LoadSettings() - sFormat = oSettings.BackupDriveFormat.ToLower - - If sFormat.StartsWith("fat") Or sFormat = "vfat" Or sFormat = "ntfs" Then - cInvalidCharacters = {"\", "/", ":", "*", "?", """", "<", ">", "|", Convert.ToChar(0)} - ElseIf sFormat.StartsWith("ext") Then - cInvalidCharacters = {"/", Convert.ToChar(0)} - Else - 'When unable to determine the format, use the invalid characters provided by the OS. - cInvalidCharacters = Path.GetInvalidFileNameChars - End If + 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, "") diff --git a/GBM/Managers/mgrSettings.vb b/GBM/Managers/mgrSettings.vb index 96ca2bc..42e623d 100644 --- a/GBM/Managers/mgrSettings.vb +++ b/GBM/Managers/mgrSettings.vb @@ -255,16 +255,6 @@ Public Class mgrSettings End Set End Property - ReadOnly Property BackupDriveFormat As String - Get - If mgrCommon.IsUnix Then - Return mgrCommon.GetBackupDriveFormatUnix(sBackupFolder) - Else - Return mgrCommon.GetBackupDriveFormatWindows(sBackupFolder) - End If - End Get - End Property - Property SyncFields As clsGame.eOptionalSyncFields Get Return eSyncFields From afc89e8dfe528c4515f5185c5cb71f9b7a1b27e2 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sun, 28 Apr 2019 17:06:16 -0600 Subject: [PATCH 10/14] Updated version and readme --- GBM/My Project/AssemblyInfo.vb | 6 ++-- GBM/readme.txt | 54 +++++++--------------------------- 2 files changed, 13 insertions(+), 47 deletions(-) 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/readme.txt b/GBM/readme.txt index 80a3a5b..d2b181f 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -1,52 +1,18 @@ -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 +April 28, 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 - -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 on the Game Manager that caused the "Save Entire Folder" checkbox to be unchecked anytime the "Save Path" field was changed. +- 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. + The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html \ No newline at end of file From 8d1396d9928becf72916ac483fd14e9e7ab0bfae Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Wed, 15 May 2019 16:40:32 -0600 Subject: [PATCH 11/14] Allow unlimited backups on Add Game Wizard --- GBM/Forms/frmAddWizard.Designer.vb | 6 ++---- GBM/Forms/frmAddWizard.vb | 10 ++++++---- GBM/Forms/frmGameManager.Designer.vb | 10 +++++----- GBM/My Project/Resources.Designer.vb | 13 +++++++++++-- GBM/My Project/Resources.resx | 7 +++++-- GBM/readme.txt | 2 ++ 6 files changed, 31 insertions(+), 17 deletions(-) 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 8ecc25e..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 diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb index c2da1dc..bf94fe0 100644 --- a/GBM/Forms/frmGameManager.Designer.vb +++ b/GBM/Forms/frmGameManager.Designer.vb @@ -313,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 @@ -981,18 +981,18 @@ Partial Class frmGameManager 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(156, 70) + Me.cmsOpenBackup.Size = New System.Drawing.Size(83, 48) ' 'cmsOpenBackupFile ' Me.cmsOpenBackupFile.Name = "cmsOpenBackupFile" - Me.cmsOpenBackupFile.Size = New System.Drawing.Size(155, 22) + 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(155, 22) + Me.cmsOpenBackupFolder.Size = New System.Drawing.Size(82, 22) Me.cmsOpenBackupFolder.Text = "F&older" ' 'frmGameManager diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index 3494233..8f165b5 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -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. ''' @@ -2410,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 diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index ce1e1ad..cf5c9bf 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -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 @@ -2389,4 +2389,7 @@ The backup folder does not exist. + + Unlimited + \ No newline at end of file diff --git a/GBM/readme.txt b/GBM/readme.txt index d2b181f..fd4b7de 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -9,6 +9,8 @@ New in 1.1.9 All Platforms: - 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. From e7e2e86a8eba0cb4d7e9e32e6a43451f116872be Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Thu, 16 May 2019 15:49:58 -0600 Subject: [PATCH 12/14] Start-Up Wizard Improvements --- GBM/Forms/frmGameManager.vb | 1 + GBM/Forms/frmMain.vb | 14 ++++---------- GBM/Forms/frmStartUpWizard.Designer.vb | 14 +++++++++++++- GBM/Forms/frmStartUpWizard.vb | 22 +++++++++++++--------- GBM/Managers/mgrSettings.vb | 3 ++- GBM/My Project/Resources.Designer.vb | 11 ++++++++++- GBM/My Project/Resources.resx | 5 ++++- GBM/readme.txt | 4 ++++ 8 files changed, 51 insertions(+), 23 deletions(-) diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 2072ae9..ff8fa94 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -1883,6 +1883,7 @@ Public Class frmGameManager btnDeleteBackup.Visible = False btnOpenBackup.Visible = False btnOpenRestorePath.Visible = False + btnImportBackup.Visible = False End If LoadBackupData() diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb index db5fe46..0dd0190 100644 --- a/GBM/Forms/frmMain.vb +++ b/GBM/Forms/frmMain.vb @@ -1007,12 +1007,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() @@ -1715,8 +1712,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 @@ -2166,6 +2163,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 @@ -2204,10 +2202,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/Managers/mgrSettings.vb b/GBM/Managers/mgrSettings.vb index 42e623d..6e536a5 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/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index 8f165b5..b3d86a0 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -5263,7 +5263,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 @@ -5343,6 +5343,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 cf5c9bf..5f46d49 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -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. @@ -2392,4 +2392,7 @@ 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 fd4b7de..54d4b59 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -16,5 +16,9 @@ All Platforms: - 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. The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html \ No newline at end of file From 23102a90ebe7353f0aacb226b39c27dbecb96be8 Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Fri, 31 May 2019 19:44:55 -0600 Subject: [PATCH 13/14] Fixed a disk space check issue in Linux --- GBM/Managers/mgrCommon.vb | 2 +- GBM/readme.txt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 4dfe00f..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 diff --git a/GBM/readme.txt b/GBM/readme.txt index 54d4b59..b91b7fe 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -19,6 +19,10 @@ All Platforms: - 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. + - You can no longer attempt to Import Backup Files during the Start-Up Wizard. + +Linux: + +- 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 From b8849f8d0cbcff1ba7d62100c027f1ff8d39881e Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Fri, 7 Jun 2019 07:46:18 -0600 Subject: [PATCH 14/14] Updated readme.txt for release --- GBM/readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GBM/readme.txt b/GBM/readme.txt index b91b7fe..e7923ef 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -2,7 +2,7 @@ Game Backup Monitor v1.1.9 Readme http://mikemaximus.github.io/gbm-web/ gamebackupmonitor@gmail.com -April 28, 2019 +June 7, 2019 New in 1.1.9