This commit is contained in:
2019-03-14 12:37:38 +00:00
42 changed files with 2316 additions and 628 deletions
+10
View File
@@ -14,6 +14,7 @@
Private sComments As String
Private bIsRegEx As Boolean
Private bRecurseSubFolders As Boolean
Private iOS As clsGame.eOS
Private oTags As List(Of Tag)
Property ID As String
@@ -151,6 +152,15 @@
End Get
End Property
Property OS As clsGame.eOS
Set(value As clsGame.eOS)
iOS = value
End Set
Get
Return iOS
End Get
End Property
Property Tags As List(Of Tag)
Get
Return oTags
+30 -1
View File
@@ -1,4 +1,5 @@
Imports System.Text.RegularExpressions
Imports System.Xml.Serialization
<Serializable()>
Public Class clsGame
@@ -24,6 +25,7 @@ Public Class clsGame
Private sComments As String = String.Empty
Private bIsRegEx As Boolean = False
Private bRecurseSubFolders As Boolean = True
Private iOS As eOS = mgrCommon.GetCurrentOS()
Private oImportTags As New List(Of Tag)
Private bImportUpdate As Boolean = False
Private oCompiledRegEx As Regex
@@ -38,6 +40,13 @@ Public Class clsGame
MonitorGame = 64
End Enum
Public Enum eOS
<XmlEnum("1")>
Windows = 1
<XmlEnum("2")>
Linux = 2
End Enum
Property ID As String
Set(value As String)
If Not value Is Nothing Then
@@ -106,7 +115,12 @@ Public Class clsGame
bAbsolutePath = value
End Set
Get
Return bAbsolutePath
'This makes sure a registry key path isn't seen as a relative path.
If mgrPath.IsSupportedRegistryPath(TruePath) Then
Return True
Else
Return bAbsolutePath
End If
End Get
End Property
@@ -254,6 +268,15 @@ Public Class clsGame
End Set
End Property
Property OS As eOS
Get
Return iOS
End Get
Set(value As eOS)
iOS = value
End Set
End Property
Property TruePath As String
Set(value As String)
sPath = value
@@ -367,6 +390,9 @@ Public Class clsGame
If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False
End If
If OS <> oGame.OS Then
Return False
End If
'Optional Sync Fields
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
@@ -446,6 +472,9 @@ Public Class clsGame
If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False
End If
If OS <> oGame.OS Then
Return False
End If
Return True
End If
End Function
+15
View File
@@ -4,6 +4,11 @@
fString = 1
fNumeric = 2
fBool = 3
fEnum = 4
End Enum
Public Enum eEnumFilterField As Integer
OS = 1
End Enum
<Flags()> Public Enum eFieldStatus
@@ -15,6 +20,7 @@
Private sFieldName As String
Private sFriendlyFieldName As String
Private eType As eDataType
Private eEnumField As eEnumFilterField
Private eStatus As eFieldStatus
Public Property FieldName As String
@@ -44,6 +50,15 @@
End Set
End Property
Public Property EnumField As eEnumFilterField
Get
Return eEnumField
End Get
Set(value As eEnumFilterField)
eEnumField = value
End Set
End Property
'This is a flag property - Setting a value will toggle that flag on and off.
Public Property Status As eFieldStatus
Get
+43
View File
@@ -0,0 +1,43 @@
Public Class clsWineData
Private sMonitorID As String = String.Empty
Private sPrefix As String = String.Empty
Private sSavePath As String = String.Empty
Private sBinaryPath As String = String.Empty
Property MonitorID As String
Get
Return sMonitorID
End Get
Set(value As String)
sMonitorID = value
End Set
End Property
Property Prefix As String
Get
Return sPrefix
End Get
Set(value As String)
sPrefix = value
End Set
End Property
Property SavePath As String
Get
Return sSavePath
End Get
Set(value As String)
sSavePath = value
End Set
End Property
Property BinaryPath As String
Get
Return sBinaryPath
End Get
Set(value As String)
sBinaryPath = value
End Set
End Property
End Class
+1 -1
View File
@@ -434,7 +434,7 @@ Public Class frmAddWizard
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("Wizard_Save_Path", frmAddWizard_ChooseSavePath, sDefaultFolder, False, False)
sNewPath = mgrCommon.OpenClassicFolderBrowser("Wizard_Save_Path", frmAddWizard_ChooseSavePath, sDefaultFolder, False, False)
If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub
+1 -46
View File
@@ -51,7 +51,7 @@ Public Class frmAdvancedImport
lstGames.BeginUpdate()
bSelectAll = Not bSelectAll
For i As Integer = 0 To lstGames.Items.Count - 1
lstGames.Items(i).Checked = bSelectAll
lstGames.Items(i).Checked = bSelectAll
Next
lstGames.EndUpdate()
Cursor.Current = Cursors.Default
@@ -66,46 +66,6 @@ Public Class frmAdvancedImport
End If
End Sub
Private Sub ModTags(ByRef oTags As List(Of Tag))
Dim bExists As Boolean
Dim oTag As Tag
Dim oNewTag As Tag
Dim oRemoveTag As New Tag
Dim sTag As String
Dim sAddTags() As String = {"Wine"}
Dim sRemoveTags() As String = {"Official"}
For Each sTag In sAddTags
bExists = False
For Each oTag In oTags
If oTag.Name = sTag Then
bExists = True
Exit For
End If
Next
If Not bExists Then
oNewTag = New Tag
oNewTag.Name = sTag
oTags.Add(oNewTag)
End If
Next
For Each sTag In sRemoveTags
bExists = False
For Each oTag In oTags
If oTag.Name = sTag Then
bExists = True
oRemoveTag = oTag
Exit For
End If
Next
If bExists Then
oTags.Remove(oRemoveTag)
End If
Next
End Sub
Private Function CheckIgnoreTags(ByVal oTags As List(Of Tag)) As Boolean
Dim oTag As Tag
Dim sTag As String
@@ -142,11 +102,6 @@ Public Class frmAdvancedImport
bAddItem = False
oApp = DirectCast(de.Value, clsGame)
'Run any required tag mods
If ModWinConfigsForLinux Then
ModTags(oApp.ImportTags)
End If
sTags = String.Empty
oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
For Each oTag As Tag In oApp.ImportTags
+1
View File
@@ -49,6 +49,7 @@ Partial Class frmChooseGame
'lstGameBox
'
Me.lstGameBox.FormattingEnabled = True
Me.lstGameBox.HorizontalScrollbar = True
Me.lstGameBox.Location = New System.Drawing.Point(15, 34)
Me.lstGameBox.Name = "lstGameBox"
Me.lstGameBox.Size = New System.Drawing.Size(228, 95)
+9 -1
View File
@@ -26,11 +26,19 @@ Public Class frmChooseGame
End Property
Private Sub FillComboBox()
Dim sTags As String
Dim sName As String
lstGameBox.ValueMember = "Key"
lstGameBox.DisplayMember = "Value"
For Each o As clsGame In Process.DuplicateList
lstGameBox.Items.Add(New KeyValuePair(Of String, String)(o.ID, o.Name))
sTags = mgrGameTags.PrintTagsbyID(o.ID)
If sTags <> String.Empty Then
sName = o.Name & " (" & sTags & ")"
Else
sName = o.Name
End If
lstGameBox.Items.Add(New KeyValuePair(Of String, String)(o.ID, sName))
oGamesHash.Add(o.ID, o)
Next
+10 -10
View File
@@ -40,7 +40,7 @@ Partial Class frmFilter
Me.grpGameFilter = New System.Windows.Forms.GroupBox()
Me.lblNot = New System.Windows.Forms.Label()
Me.chkNot = New System.Windows.Forms.CheckBox()
Me.cboBoolFilter = New System.Windows.Forms.ComboBox()
Me.cboListFilter = New System.Windows.Forms.ComboBox()
Me.numFilter = New System.Windows.Forms.NumericUpDown()
Me.cboNumericOps = New System.Windows.Forms.ComboBox()
Me.lblCurrentFilters = New System.Windows.Forms.Label()
@@ -229,7 +229,7 @@ Partial Class frmFilter
'
Me.grpGameFilter.Controls.Add(Me.lblNot)
Me.grpGameFilter.Controls.Add(Me.chkNot)
Me.grpGameFilter.Controls.Add(Me.cboBoolFilter)
Me.grpGameFilter.Controls.Add(Me.cboListFilter)
Me.grpGameFilter.Controls.Add(Me.numFilter)
Me.grpGameFilter.Controls.Add(Me.cboNumericOps)
Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters)
@@ -265,14 +265,14 @@ Partial Class frmFilter
Me.chkNot.TabIndex = 10
Me.chkNot.UseVisualStyleBackColor = True
'
'cboBoolFilter
'cboListFilter
'
Me.cboBoolFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboBoolFilter.FormattingEnabled = True
Me.cboBoolFilter.Location = New System.Drawing.Point(187, 36)
Me.cboBoolFilter.Name = "cboBoolFilter"
Me.cboBoolFilter.Size = New System.Drawing.Size(136, 21)
Me.cboBoolFilter.TabIndex = 3
Me.cboListFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboListFilter.FormattingEnabled = True
Me.cboListFilter.Location = New System.Drawing.Point(187, 36)
Me.cboListFilter.Name = "cboListFilter"
Me.cboListFilter.Size = New System.Drawing.Size(136, 21)
Me.cboListFilter.TabIndex = 3
'
'numFilter
'
@@ -549,7 +549,7 @@ Partial Class frmFilter
Friend WithEvents lblFields As Label
Friend WithEvents cboNumericOps As ComboBox
Friend WithEvents numFilter As NumericUpDown
Friend WithEvents cboBoolFilter As ComboBox
Friend WithEvents cboListFilter As ComboBox
Friend WithEvents lblSortFields As Label
Friend WithEvents Label1 As Label
Friend WithEvents grpSortOptions As GroupBox
+50 -16
View File
@@ -242,6 +242,15 @@ Public Class frmFilter
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'OS
oField = New clsGameFilterField
oField.FieldName = "OS"
oField.FriendlyFieldName = frmFilter_FieldOS
oField.Type = clsGameFilterField.eDataType.fEnum
oField.EnumField = clsGameFilterField.eEnumFilterField.OS
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'IsRegEx
oField = New clsGameFilterField
oField.FieldName = "IsRegEx"
@@ -359,7 +368,7 @@ Public Class frmFilter
sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """"
Case clsGameFilterField.eDataType.fNumeric
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool
Case clsGameFilterField.eDataType.fBool, clsGameFilterField.eDataType.fEnum
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select
@@ -413,23 +422,22 @@ Public Class frmFilter
End Sub
Private Sub ChangeFilterMode()
Dim oFilterType As clsGameFilterField.eDataType = DirectCast(cboFilterField.SelectedValue, clsGameFilterField).Type
Dim oFilter As clsGameFilterField = DirectCast(cboFilterField.SelectedValue, clsGameFilterField)
'Reset
cboNumericOps.SelectedIndex = 0
cboBoolFilter.SelectedIndex = 0
numFilter.Value = 0
txtStringFilter.Text = String.Empty
chkNot.Checked = False
'Reset Visibilty
cboBoolFilter.Visible = False
cboListFilter.Visible = False
cboNumericOps.Visible = False
numFilter.Visible = False
txtStringFilter.Visible = False
'Set Visiblity
Select Case oFilterType
Select Case oFilter.Type
Case clsGameFilterField.eDataType.fString
txtStringFilter.Visible = True
Case clsGameFilterField.eDataType.fNumeric
@@ -437,7 +445,13 @@ Public Class frmFilter
numFilter.Visible = True
txtStringFilter.Visible = False
Case clsGameFilterField.eDataType.fBool
cboBoolFilter.Visible = True
LoadComboAsBool()
cboListFilter.SelectedIndex = 0
cboListFilter.Visible = True
Case clsGameFilterField.eDataType.fEnum
LoadComboAsEnum(oFilter.EnumField)
cboListFilter.SelectedIndex = 0
cboListFilter.Visible = True
End Select
End Sub
@@ -458,8 +472,8 @@ Public Class frmFilter
oFilter.Data = numFilter.Value
oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators)
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool
oFilter.Data = cboBoolFilter.SelectedValue
Case clsGameFilterField.eDataType.fBool, clsGameFilterField.eDataType.fEnum
oFilter.Data = cboListFilter.SelectedValue
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select
@@ -531,20 +545,40 @@ Public Class frmFilter
End Sub
Private Sub LoadCombos()
Dim oFilterFields As New List(Of KeyValuePair(Of clsGameFilterField, String))
Dim oSortFields As New List(Of KeyValuePair(Of String, String))
Dim oNumericOperators As New List(Of KeyValuePair(Of clsGameFilter.eNumericOperators, String))
Private Sub LoadComboAsBool()
Dim oBoolOperators As New List(Of KeyValuePair(Of Boolean, String))
'cboBoolFilter
cboBoolFilter.ValueMember = "Key"
cboBoolFilter.DisplayMember = "Value"
'cboListFilter (Boolean)
cboListFilter.ValueMember = "Key"
cboListFilter.DisplayMember = "Value"
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(True, frmFilter_cboBoolFilterEnabled))
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(False, frmFilter_cboBoolFilterDisabled))
cboBoolFilter.DataSource = oBoolOperators
cboListFilter.DataSource = oBoolOperators
End Sub
Private Sub LoadComboAsEnum(ByVal eEnum As clsGameFilterField.eEnumFilterField)
Dim oEnums As New List(Of KeyValuePair(Of Integer, String))
'cboListFilter (Enum)
cboListFilter.ValueMember = "Key"
cboListFilter.DisplayMember = "Value"
Select Case eEnum
Case clsGameFilterField.eEnumFilterField.OS
For Each v As Object In [Enum].GetValues(GetType(clsGame.eOS))
oEnums.Add(New KeyValuePair(Of Integer, String)(v, [Enum].GetName(GetType(clsGame.eOS), v)))
Next
End Select
cboListFilter.DataSource = oEnums
End Sub
Private Sub LoadCombos()
Dim oFilterFields As New List(Of KeyValuePair(Of clsGameFilterField, String))
Dim oSortFields As New List(Of KeyValuePair(Of String, String))
Dim oNumericOperators As New List(Of KeyValuePair(Of clsGameFilter.eNumericOperators, String))
'cboNumericOps
cboNumericOps.ValueMember = "Key"
+76 -39
View File
@@ -28,12 +28,16 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox()
Me.btnWineConfig = New System.Windows.Forms.Button()
Me.lblOS = New System.Windows.Forms.Label()
Me.cboOS = New System.Windows.Forms.ComboBox()
Me.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.btnGameID = New System.Windows.Forms.Button()
Me.chkRegEx = New System.Windows.Forms.CheckBox()
Me.lblComments = New System.Windows.Forms.Label()
Me.txtComments = New System.Windows.Forms.TextBox()
Me.txtParameter = New System.Windows.Forms.TextBox()
Me.lblParameter = New System.Windows.Forms.Label()
Me.txtComments = New System.Windows.Forms.TextBox()
Me.chkCleanFolder = New System.Windows.Forms.CheckBox()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
@@ -107,7 +111,6 @@ 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.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
@@ -164,13 +167,16 @@ Partial Class frmGameManager
'grpConfig
'
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.btnWineConfig)
Me.grpConfig.Controls.Add(Me.lblOS)
Me.grpConfig.Controls.Add(Me.cboOS)
Me.grpConfig.Controls.Add(Me.chkRecurseSubFolders)
Me.grpConfig.Controls.Add(Me.btnGameID)
Me.grpConfig.Controls.Add(Me.chkRegEx)
Me.grpConfig.Controls.Add(Me.lblComments)
Me.grpConfig.Controls.Add(Me.txtComments)
Me.grpConfig.Controls.Add(Me.txtParameter)
Me.grpConfig.Controls.Add(Me.lblParameter)
Me.grpConfig.Controls.Add(Me.txtComments)
Me.grpConfig.Controls.Add(Me.chkCleanFolder)
Me.grpConfig.Controls.Add(Me.lblLimit)
Me.grpConfig.Controls.Add(Me.nudLimit)
@@ -197,6 +203,44 @@ Partial Class frmGameManager
Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration"
'
'btnWineConfig
'
Me.btnWineConfig.Location = New System.Drawing.Point(191, 167)
Me.btnWineConfig.Name = "btnWineConfig"
Me.btnWineConfig.Size = New System.Drawing.Size(175, 23)
Me.btnWineConfig.TabIndex = 16
Me.btnWineConfig.Text = "&Wine Configuration..."
Me.btnWineConfig.UseVisualStyleBackColor = True
'
'lblOS
'
Me.lblOS.AutoSize = True
Me.lblOS.Location = New System.Drawing.Point(7, 172)
Me.lblOS.Name = "lblOS"
Me.lblOS.Size = New System.Drawing.Size(25, 13)
Me.lblOS.TabIndex = 14
Me.lblOS.Text = "OS:"
'
'cboOS
'
Me.cboOS.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboOS.FormattingEnabled = True
Me.cboOS.Location = New System.Drawing.Point(70, 169)
Me.cboOS.Name = "cboOS"
Me.cboOS.Size = New System.Drawing.Size(115, 21)
Me.cboOS.TabIndex = 15
'
'chkRecurseSubFolders
'
Me.chkRecurseSubFolders.AutoSize = True
Me.chkRecurseSubFolders.Location = New System.Drawing.Point(489, 206)
Me.chkRecurseSubFolders.Name = "chkRecurseSubFolders"
Me.chkRecurseSubFolders.Size = New System.Drawing.Size(15, 14)
Me.chkRecurseSubFolders.TabIndex = 0
Me.chkRecurseSubFolders.TabStop = False
Me.chkRecurseSubFolders.UseVisualStyleBackColor = True
Me.chkRecurseSubFolders.Visible = False
'
'btnGameID
'
Me.btnGameID.Location = New System.Drawing.Point(402, 17)
@@ -219,21 +263,12 @@ Partial Class frmGameManager
'lblComments
'
Me.lblComments.AutoSize = True
Me.lblComments.Location = New System.Drawing.Point(7, 181)
Me.lblComments.Location = New System.Drawing.Point(7, 128)
Me.lblComments.Name = "lblComments"
Me.lblComments.Size = New System.Drawing.Size(59, 13)
Me.lblComments.TabIndex = 19
Me.lblComments.TabIndex = 12
Me.lblComments.Text = "Comments:"
'
'txtComments
'
Me.txtComments.Location = New System.Drawing.Point(70, 181)
Me.txtComments.Multiline = True
Me.txtComments.Name = "txtComments"
Me.txtComments.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtComments.Size = New System.Drawing.Size(413, 71)
Me.txtComments.TabIndex = 20
'
'txtParameter
'
Me.txtParameter.Location = New System.Drawing.Point(70, 71)
@@ -250,49 +285,58 @@ Partial Class frmGameManager
Me.lblParameter.TabIndex = 7
Me.lblParameter.Text = "Parameter:"
'
'txtComments
'
Me.txtComments.Location = New System.Drawing.Point(70, 123)
Me.txtComments.Multiline = True
Me.txtComments.Name = "txtComments"
Me.txtComments.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtComments.Size = New System.Drawing.Size(414, 40)
Me.txtComments.TabIndex = 13
'
'chkCleanFolder
'
Me.chkCleanFolder.AutoSize = True
Me.chkCleanFolder.Location = New System.Drawing.Point(330, 127)
Me.chkCleanFolder.Location = New System.Drawing.Point(330, 200)
Me.chkCleanFolder.Name = "chkCleanFolder"
Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17)
Me.chkCleanFolder.TabIndex = 14
Me.chkCleanFolder.TabIndex = 19
Me.chkCleanFolder.Text = "Delete folder on restore"
Me.chkCleanFolder.UseVisualStyleBackColor = True
'
'lblLimit
'
Me.lblLimit.AutoSize = True
Me.lblLimit.Location = New System.Drawing.Point(376, 157)
Me.lblLimit.Location = New System.Drawing.Point(376, 229)
Me.lblLimit.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
Me.lblLimit.TabIndex = 18
Me.lblLimit.TabIndex = 23
Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False
'
'nudLimit
'
Me.nudLimit.Location = New System.Drawing.Point(330, 155)
Me.nudLimit.Location = New System.Drawing.Point(330, 227)
Me.nudLimit.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 17
Me.nudLimit.TabIndex = 22
Me.nudLimit.Visible = False
'
'btnExclude
'
Me.btnExclude.Location = New System.Drawing.Point(10, 152)
Me.btnExclude.Location = New System.Drawing.Point(10, 224)
Me.btnExclude.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23)
Me.btnExclude.TabIndex = 15
Me.btnExclude.TabIndex = 20
Me.btnExclude.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True
'
'btnInclude
'
Me.btnInclude.Location = New System.Drawing.Point(10, 123)
Me.btnInclude.Location = New System.Drawing.Point(10, 196)
Me.btnInclude.Name = "btnInclude"
Me.btnInclude.Size = New System.Drawing.Size(175, 23)
Me.btnInclude.TabIndex = 12
Me.btnInclude.TabIndex = 17
Me.btnInclude.Text = "Incl&ude Items..."
Me.btnInclude.UseVisualStyleBackColor = True
'
@@ -372,20 +416,20 @@ Partial Class frmGameManager
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(191, 156)
Me.chkTimeStamp.Location = New System.Drawing.Point(191, 228)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 16
Me.chkTimeStamp.TabIndex = 21
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
'
Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(191, 127)
Me.chkFolderSave.Location = New System.Drawing.Point(191, 200)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 13
Me.chkFolderSave.TabIndex = 18
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
@@ -614,6 +658,7 @@ Partial Class frmGameManager
Me.cboRemoteBackup.Name = "cboRemoteBackup"
Me.cboRemoteBackup.Size = New System.Drawing.Size(387, 21)
Me.cboRemoteBackup.TabIndex = 12
Me.cboRemoteBackup.Tag = "wipe"
'
'lblRestorePathData
'
@@ -927,17 +972,6 @@ Partial Class frmGameManager
Me.ttFullPath.InitialDelay = 300
Me.ttFullPath.ReshowDelay = 60
'
'chkRecurseSubFolders
'
Me.chkRecurseSubFolders.AutoSize = True
Me.chkRecurseSubFolders.Location = New System.Drawing.Point(489, 206)
Me.chkRecurseSubFolders.Name = "chkRecurseSubFolders"
Me.chkRecurseSubFolders.Size = New System.Drawing.Size(15, 14)
Me.chkRecurseSubFolders.TabIndex = 0
Me.chkRecurseSubFolders.TabStop = False
Me.chkRecurseSubFolders.UseVisualStyleBackColor = True
Me.chkRecurseSubFolders.Visible = False
'
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -1073,4 +1107,7 @@ Partial Class frmGameManager
Friend WithEvents cmsOfficialWindows As ToolStripMenuItem
Friend WithEvents cmsOfficialLinux As ToolStripMenuItem
Friend WithEvents chkRecurseSubFolders As CheckBox
Friend WithEvents lblOS As Label
Friend WithEvents cboOS As ComboBox
Friend WithEvents btnWineConfig As Button
End Class
+123 -51
View File
@@ -209,6 +209,14 @@ Public Class frmGameManager
Return sPath
End Function
Private Sub HandleWineConfig()
If mgrCommon.IsUnix And cboOS.SelectedValue = clsGame.eOS.Windows And Not eCurrentMode = eModes.Add Then
btnWineConfig.Visible = True
Else
btnWineConfig.Visible = False
End If
End Sub
Private Function CheckManifestandUpdate(ByVal oOriginalApp As clsGame, ByVal oNewApp As clsGame, ByVal bUseGameID As Boolean) As Boolean
Dim oBackupItems As List(Of clsBackup)
Dim sDirectory As String
@@ -334,7 +342,7 @@ Public Class frmGameManager
oRestoreData = mgrRestore.CompareManifests
'Only show games with data to restore
Dim oTemporaryList As OrderedDictionary = mgrCommon.GenericClone(GameData)
Dim oTemporaryList As OrderedDictionary = mgrMonitorList.ReadFilteredList(oCurrentIncludeTagFilters, oCurrentExcludeTagFilters, oCurrentFilters, eCurrentFilter, bCurrentAndOperator, bCurrentSortAsc, sCurrentSortField)
For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame)
If Not oRestoreData.ContainsKey(oGame.ID) Then
@@ -345,7 +353,7 @@ Public Class frmGameManager
Next
ElseIf optBackupData.Checked Then
'Only show games with backup data
Dim oTemporaryList As OrderedDictionary = mgrCommon.GenericClone(GameData)
Dim oTemporaryList As OrderedDictionary = mgrMonitorList.ReadFilteredList(oCurrentIncludeTagFilters, oCurrentExcludeTagFilters, oCurrentFilters, eCurrentFilter, bCurrentAndOperator, bCurrentSortAsc, sCurrentSortField)
oRestoreData = oRemoteBackupData.Clone
For Each de As DictionaryEntry In oTemporaryList
@@ -394,14 +402,14 @@ Public Class frmGameManager
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("GM_Process_Path", frmGameManager_ChooseExePath, sDefaultFolder, False, False)
sNewPath = mgrCommon.OpenFolderBrowser("GM_Process_Path", frmGameManager_ChooseExePath, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtAppPath.Text = sNewPath
End Sub
Private Sub SavePathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtSavePath.Text
Dim sCurrentPath As String = mgrPath.ReplaceSpecialPaths(txtSavePath.Text)
Dim sNewPath As String
If txtSavePath.Text <> String.Empty Then
@@ -410,7 +418,7 @@ Public Class frmGameManager
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("GM_Save_Path", frmGameManager_ChooseSaveFolder, sDefaultFolder, False, False)
sNewPath = mgrCommon.OpenFolderBrowser("GM_Save_Path", frmGameManager_ChooseSaveFolder, sDefaultFolder, False)
If sNewPath <> String.Empty Then
txtSavePath.Text = sNewPath
@@ -533,11 +541,15 @@ Public Class frmGameManager
sFileName = BackupFolder & CurrentBackupItem.FileName
If File.Exists(sFileName) Then
oProcessStartInfo = New ProcessStartInfo
oProcessStartInfo.FileName = sFileName
oProcessStartInfo.UseShellExecute = True
oProcessStartInfo.Verb = "open"
Process.Start(oProcessStartInfo)
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
@@ -641,11 +653,15 @@ Public Class frmGameManager
End If
If Directory.Exists(sPath) Then
oProcessStartInfo = New ProcessStartInfo
oProcessStartInfo.FileName = sPath
oProcessStartInfo.UseShellExecute = True
oProcessStartInfo.Verb = "open"
Process.Start(oProcessStartInfo)
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
@@ -706,13 +722,13 @@ Public Class frmGameManager
If eCurrentMode = eModes.Add Then
oTagsToSave = frm.TagList
FillTagsbyList(frm.TagList)
lblTags.Text = mgrGameTags.PrintTagsbyList(frm.TagList)
Else
'Sync
mgrMonitorList.SyncMonitorLists(Settings)
'Only update visible tags if one item is selected
If lstGames.SelectedItems.Count = 1 Then FillTagsbyID(CurrentGame.ID)
If lstGames.SelectedItems.Count = 1 Then lblTags.Text = mgrGameTags.PrintTagsbyID(CurrentGame.ID)
'If a tag filter is enabled, reload list to reflect changes
If optCustom.Checked Then
@@ -726,6 +742,13 @@ Public Class frmGameManager
End Sub
Public Sub OpenWineConfiguration()
Dim frm As New frmWineConfiguration
frm.Settings = oSettings
frm.MonitorID = oCurrentGame.ID
frm.ShowDialog()
End Sub
Public Sub VerifyBackups(ByVal oApp As clsGame)
Dim oCurrentBackup As clsBackup
Dim oCurrentBackups As List(Of clsBackup)
@@ -845,6 +868,18 @@ Public Class frmGameManager
btnMarkAsRestored.Enabled = False
End If
If chkMonitorOnly.Checked Then
btnImportBackup.Enabled = False
Else
btnImportBackup.Enabled = True
End If
If mgrPath.IsSupportedRegistryPath(oApp.TruePath) Then
btnImportBackup.Enabled = False
btnOpenBackupFile.Enabled = False
btnOpenRestorePath.Enabled = False
End If
End Sub
Private Sub UpdateBackupInfo(ByVal sManifestID As String)
@@ -923,6 +958,7 @@ Public Class frmGameManager
txtProcess.Text = oApp.ProcessName
chkRegEx.Checked = oApp.IsRegEx
txtParameter.Text = oApp.Parameter
cboOS.SelectedValue = CInt(oApp.OS)
If oSettings.ShowResolvedPaths Then
txtSavePath.Text = oApp.Path
sttPath = oApp.TruePath
@@ -946,6 +982,7 @@ Public Class frmGameManager
UpdateBuilderButtonLabel(oApp.FileType, frmGameManager_IncludeShortcut, btnInclude, False)
UpdateBuilderButtonLabel(oApp.ExcludeList, frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
HandleWineConfig()
'Extra
txtAppPath.Text = oApp.ProcessPath
@@ -953,7 +990,7 @@ Public Class frmGameManager
txtVersion.Text = oApp.Version
txtIcon.Text = oApp.Icon
FillTagsbyID(oData.Key)
lblTags.Text = mgrGameTags.PrintTagsbyID(oData.Key)
'Icon
If IO.File.Exists(oApp.Icon) Then
@@ -972,33 +1009,6 @@ Public Class frmGameManager
IsLoading = False
End Sub
Private Sub FillTagsbyID(ByVal sID As String)
Dim slTags As SortedList
Dim oTag As clsTag
Dim sTags As String = String.Empty
Dim cTrim() As Char = {",", " "}
slTags = mgrGameTags.GetTagsByGame(sID)
For Each de As DictionaryEntry In slTags
oTag = DirectCast(de.Value, clsTag)
sTags &= "#" & oTag.Name & ", "
Next
lblTags.Text = sTags.TrimEnd(cTrim)
End Sub
Private Sub FillTagsbyList(ByVal oList As List(Of KeyValuePair(Of String, String)))
Dim sTags As String = String.Empty
Dim cTrim() As Char = {",", " "}
For Each kp As KeyValuePair(Of String, String) In oList
sTags &= "#" & kp.Value & ", "
Next
lblTags.Text = sTags.TrimEnd(cTrim)
End Sub
Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
If Not IsLoading And Not eCurrentMode = eModes.MultiSelect Then
IsDirty = True
@@ -1021,6 +1031,7 @@ Public Class frmGameManager
Private Sub AssignDirtyHandlersMisc()
AddHandler chkEnabled.CheckedChanged, AddressOf DirtyCheck_ValueChanged
AddHandler chkMonitorOnly.CheckedChanged, AddressOf DirtyCheck_ValueChanged
AddHandler cboOS.SelectedValueChanged, AddressOf DirtyCheck_ValueChanged
End Sub
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
@@ -1034,7 +1045,7 @@ Public Class frmGameManager
ElseIf TypeOf ctl Is NumericUpDown Then
DirectCast(ctl, NumericUpDown).Value = DirectCast(ctl, NumericUpDown).Minimum
ElseIf TypeOf ctl Is ComboBox Then
DirectCast(ctl, ComboBox).DataSource = Nothing
If ctl.Tag = "wipe" Then DirectCast(ctl, ComboBox).DataSource = Nothing
End If
Next
End Sub
@@ -1083,6 +1094,8 @@ Public Class frmGameManager
btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = False
btnExport.Enabled = False
cboOS.SelectedValue = CInt(mgrCommon.GetCurrentOS)
HandleWineConfig()
Case eModes.Edit
grpFilter.Enabled = False
lstGames.Enabled = False
@@ -1129,7 +1142,6 @@ Public Class frmGameManager
lblTags.Visible = True
btnImport.Enabled = True
btnExport.Enabled = True
btnImportBackup.Enabled = True
Case eModes.Disabled
grpFilter.Enabled = True
lstGames.Enabled = True
@@ -1158,6 +1170,7 @@ Public Class frmGameManager
btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = True
btnExport.Enabled = True
cboOS.SelectedValue = CInt(mgrCommon.GetCurrentOS)
UpdateGenericButtonLabel(frmGameManager_IncludeShortcut, btnInclude, False)
UpdateGenericButtonLabel(frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
@@ -1220,6 +1233,7 @@ Public Class frmGameManager
btnInclude.Enabled = False
btnExclude.Enabled = False
chkCleanFolder.Enabled = False
btnWineConfig.Enabled = False
Else
chkFolderSave.Enabled = True
chkTimeStamp.Enabled = True
@@ -1230,10 +1244,26 @@ Public Class frmGameManager
btnSavePathBrowse.Enabled = True
btnInclude.Enabled = True
btnExclude.Enabled = True
btnWineConfig.Enabled = True
FolderSaveModeChange()
End If
End Sub
Private Sub RegistryModeChange()
If mgrPath.IsSupportedRegistryPath(txtSavePath.Text) Then
cboOS.SelectedValue = CInt(clsGame.eOS.Windows)
chkFolderSave.Checked = True
chkFolderSave.Enabled = False
btnInclude.Enabled = False
btnExclude.Enabled = False
Else
chkFolderSave.Checked = False
chkFolderSave.Enabled = True
btnInclude.Enabled = True
btnExclude.Enabled = True
End If
End Sub
Private Sub TimeStampModeChange()
If chkTimeStamp.Checked Then
nudLimit.Visible = True
@@ -1258,7 +1288,7 @@ Public Class frmGameManager
Private Sub VerifyCleanFolder()
If Not bIsLoading Then
If (chkFolderSave.Checked = True And txtExclude.Text = String.Empty And txtSavePath.Text <> String.Empty) And Not chkMonitorOnly.Checked Then
If (chkFolderSave.Checked = True And txtExclude.Text = String.Empty And txtSavePath.Text <> String.Empty) And Not mgrPath.IsSupportedRegistryPath(txtSavePath.Text) And Not chkMonitorOnly.Checked Then
chkCleanFolder.Enabled = True
Else
chkCleanFolder.Checked = False
@@ -1364,9 +1394,22 @@ Public Class frmGameManager
oApp.ProcessName = txtProcess.Text
oApp.Parameter = txtParameter.Text
oApp.OS = CType(cboOS.SelectedValue, clsGame.eOS)
oApp.Path = mgrPath.ValidatePathForOS(txtSavePath.Text)
'Only do a simple root check here in case the user doesn't really understand creating a proper configuration
oApp.AbsolutePath = Path.IsPathRooted(oApp.Path)
'If we have a registry path, trim any trailing backslashes because they cause export failures
If mgrPath.IsSupportedRegistryPath(oApp.Path) Then
oApp.Path = oApp.Path.TrimEnd("\")
End If
'We need to handle a special case here when working with Windows configurations in Linux
If mgrCommon.IsUnix And mgrVariables.CheckForReservedVariables(oApp.Path) And oApp.OS = clsGame.eOS.Windows Then
oApp.AbsolutePath = True
Else
'Only do a simple root check here in case the user doesn't really understand creating a proper configuration
oApp.AbsolutePath = Path.IsPathRooted(oApp.Path)
End If
oApp.FileType = txtFileType.Text
oApp.ExcludeList = txtExclude.Text
oApp.FolderSave = chkFolderSave.Checked
@@ -1471,7 +1514,6 @@ Public Class frmGameManager
FillData()
ModeChange()
VerifyCleanFolder()
VerifyImportBackup()
ElseIf lstGames.SelectedItems.Count > 1 Then
eCurrentMode = eModes.MultiSelect
ModeChange()
@@ -1815,6 +1857,25 @@ Public Class frmGameManager
btnGameID.Text = frmGameManager_btnGameID
btnImportBackup.Text = frmGameManager_btnImportBackup
btnProcesses.Text = frmGameManager_btnProcesses
lblOS.Text = frmGameManager_lblOS
btnWineConfig.Text = frmGameManager_btnWineConfig
'Init Combos
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
'cboOS
cboOS.ValueMember = "Key"
cboOS.DisplayMember = "Value"
oComboItems.Add(New KeyValuePair(Of Integer, String)(clsGame.eOS.Windows, App_WindowsOS))
oComboItems.Add(New KeyValuePair(Of Integer, String)(clsGame.eOS.Linux, App_LinuxOS))
cboOS.DataSource = oComboItems
If Not mgrCommon.IsUnix Then
cboOS.Enabled = False
btnWineConfig.Visible = False
End If
'Init Official Import Menu
If mgrCommon.IsUnix Then
@@ -1938,6 +1999,10 @@ Public Class frmGameManager
OpenProcesses()
End Sub
Private Sub btnWineConfig_Click(sender As Object, e As EventArgs) Handles btnWineConfig.Click
OpenWineConfiguration()
End Sub
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)
@@ -2003,6 +2068,12 @@ Public Class frmGameManager
End If
End Sub
Private Sub cboOS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboOS.SelectedIndexChanged
If Not bIsLoading And Not eCurrentMode = eModes.Add Then
HandleWineConfig()
End If
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)
End Sub
@@ -2054,6 +2125,7 @@ Public Class frmGameManager
Private Sub txtSavePath_TextChanged(sender As Object, e As EventArgs) Handles txtSavePath.TextChanged
ttFullPath.RemoveAll()
RegistryModeChange()
VerifyCleanFolder()
End Sub
+1 -1
View File
@@ -118,7 +118,7 @@ Public Class frmIncludeExclude
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("IE_Save_Path", frmIncludeExclude_BrowseSaveFolder, sDefaultFolder, False, False)
sNewPath = mgrCommon.OpenFolderBrowser("IE_Save_Path", frmIncludeExclude_BrowseSaveFolder, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtRootFolder.Text = sNewPath
End Sub
+190 -69
View File
@@ -30,6 +30,7 @@ Public Class frmMain
Private bMenuEnabled As Boolean = True
Private bLockdown As Boolean = True
Private bFirstRun As Boolean = False
Private bInitialLoad As Boolean = True
Private bProcessIsAdmin As Boolean = False
Private bLogToggle As Boolean = False
Private bShowToggle As Boolean = True
@@ -167,11 +168,46 @@ Public Class frmMain
OperationEnded()
End Sub
Private Function VerifyBackupForOS(ByRef oGame As clsGame, ByRef sPath As String) As Boolean
Dim bOSVerified As Boolean
'Handle Windows configurations in Linux
If mgrCommon.IsUnix Then
If oGame.OS = clsGame.eOS.Windows Then
If mgrVariables.CheckForReservedVariables(oGame.TruePath) Then
'Absolute Path
Dim oWineData As clsWineData = mgrWineData.DoWineDataGetbyID(oGame.ID)
If oWineData.SavePath <> String.Empty Then
sPath = oWineData.SavePath
bOSVerified = True
UpdateLog(mgrCommon.FormatString(frmMain_WineSavePath, oWineData.SavePath), False)
Else
bOSVerified = False
UpdateLog(mgrCommon.FormatString(frmMain_ErrorNoWineSavePath, oGame.Name), True, ToolTipIcon.Error, True)
End If
Else
'Relative Path
bOSVerified = True
End If
mgrPath.ModWinePathData(oGame)
Else
'Linux Configuration
bOSVerified = True
End If
Else
'Windows
bOSVerified = True
End If
Return bOSVerified
End Function
Private Sub RunRestore(ByVal oRestoreList As Hashtable)
Dim oGame As clsGame
Dim oReadyList As New List(Of clsBackup)
Dim oRestoreInfo As clsBackup
Dim bTriggerReload As Boolean = False
Dim bOSVerified As Boolean
Dim bPathVerified As Boolean
eCurrentOperation = eOperation.Restore
OperationStarted()
@@ -179,16 +215,23 @@ Public Class frmMain
'Build Restore List
For Each de As DictionaryEntry In oRestoreList
bPathVerified = False
bOSVerified = False
oGame = DirectCast(de.Key, clsGame)
oRestoreInfo = DirectCast(de.Value, clsBackup)
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
bOSVerified = VerifyBackupForOS(oGame, oRestoreInfo.RestorePath)
If mgrPath.IsSupportedRegistryPath(oRestoreInfo.TruePath) Then
bPathVerified = True
Else
UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True)
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
bPathVerified = True
Else
UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True)
End If
End If
If bPathVerified Then
If bOSVerified And bPathVerified Then
If oRestore.CheckRestorePrereq(oRestoreInfo, oGame.CleanFolder) Then
oReadyList.Add(oRestoreInfo)
End If
@@ -212,6 +255,7 @@ Public Class frmMain
Private Sub RunManualBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame
Dim bNoAuto As Boolean
Dim bOSVerified As Boolean
Dim bPathVerified As Boolean
Dim oReadyList As New List(Of clsGame)
@@ -221,11 +265,14 @@ Public Class frmMain
'Build Backup List
For Each oGame In oBackupList
bNoAuto = False
bOSVerified = False
bPathVerified = False
gMonStripStatusButton.Enabled = False
UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False)
bOSVerified = VerifyBackupForOS(oGame, oGame.Path)
If oGame.AbsolutePath = False Then
If oGame.ProcessPath = String.Empty Then
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
@@ -241,7 +288,7 @@ Public Class frmMain
bPathVerified = True
End If
If bPathVerified Then
If bOSVerified And bPathVerified Then
If oBackup.CheckBackupPrereq(oGame) Then
oReadyList.Add(oGame)
End If
@@ -306,7 +353,7 @@ Public Class frmMain
If oSettings.DisableConfirmation Then
bDoBackup = True
Else
If mgrCommon.ShowMessage(frmMain_ConfirmBackup, oProcess.GameInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrCommon.ShowPriorityMessage(frmMain_ConfirmBackup, oProcess.GameInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
bDoBackup = True
Else
bDoBackup = False
@@ -735,7 +782,7 @@ Public Class frmMain
DirectCast(hshScanList.Item(oProcess.GameInfo.ID), clsGame).Hours = oProcess.GameInfo.Hours
End If
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
mgrMonitorList.DoListFieldUpdate("Hours", oProcess.GameInfo.Hours, oProcess.GameInfo.ID)
mgrMonitorList.SyncMonitorLists(oSettings)
UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours)
@@ -969,15 +1016,27 @@ Public Class frmMain
End Sub
Private Sub OpenWebSite()
Process.Start(App_URLWebsite)
Try
Process.Start(App_URLWebsite)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub OpenOnlineManual()
Process.Start(App_URLManual)
Try
Process.Start(App_URLManual)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub OpenCheckforUpdates()
Process.Start(App_URLUpdates)
Try
Process.Start(App_URLUpdates)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub CheckForNewBackups()
@@ -1126,8 +1185,15 @@ Public Class frmMain
'Verify the "Start with Windows" setting
If oSettings.StartWithWindows Then
If Not VerifyStartWithWindows() Then
UpdateLog(frmMain_ErrorAppLocationChanged, False, ToolTipIcon.Info)
If mgrCommon.IsUnix Then
Dim sVerifyError As String = String.Empty
If Not VerifyAutoStartLinux(sVerifyError) Then
UpdateLog(sVerifyError, False, ToolTipIcon.Info)
End If
Else
If Not VerifyStartWithWindows() Then
UpdateLog(frmMain_ErrorAppLocationChanged, False, ToolTipIcon.Info)
End If
End If
End If
@@ -1681,6 +1747,53 @@ Public Class frmMain
End If
End Sub
Private Function VerifyAutoStartLinux(ByRef sErrorMessage As String) As Boolean
Dim oProcess As Process
Dim sDesktopFile As String = String.Empty
Dim sAutoStartFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & Path.DirectorySeparatorChar & ".config/autostart/"
'Check if the app is still properly installed
If mgrPath.VerifyLinuxDesktopFileLocation(sDesktopFile) Then
If File.Exists(sAutoStartFolder & Path.DirectorySeparatorChar & "gbm.desktop") Then
Return True
Else
'Create the autostart folder if it doesn't exist yet
If Not Directory.Exists(sAutoStartFolder) Then
Directory.CreateDirectory(sAutoStartFolder)
End If
'Create link
Try
oProcess = New Process
oProcess.StartInfo.FileName = "/bin/ln"
oProcess.StartInfo.Arguments = "-s " & sDesktopFile & " " & sAutoStartFolder
oProcess.StartInfo.UseShellExecute = False
oProcess.StartInfo.RedirectStandardOutput = True
oProcess.StartInfo.CreateNoWindow = True
oProcess.Start()
Catch ex As Exception
mgrCommon.ShowMessage(frmSettings_ErrorLinuxAutoStart, ex.Message, MsgBoxStyle.Exclamation)
End Try
sErrorMessage = frmMain_ErrorLinuxAutoStartMissing
Return False
End If
Else
'If the app is no longer properly installed, disable autostart and the setting.
Try
oSettings.StartWithWindows = False
oSettings.SaveSettings()
If File.Exists(sAutoStartFolder & Path.DirectorySeparatorChar & "gbm.desktop") Then
File.Delete(sAutoStartFolder & Path.DirectorySeparatorChar & "gbm.desktop")
End If
Catch ex As Exception
mgrCommon.ShowMessage(frmSettings_ErrorLinuxAutoStart, ex.Message, MsgBoxStyle.Exclamation)
End Try
sErrorMessage = frmMain_ErrorLinuxAutoStartLinkMissing
Return False
End If
End Function
Private Function VerifyStartWithWindows() As Boolean
Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName
@@ -1861,11 +1974,6 @@ Public Class frmMain
RestartAsAdmin()
End Sub
Private Sub frmMain_Activated(sender As System.Object, e As System.EventArgs) Handles MyBase.Activated
txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret()
End Sub
Private Sub Main_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
'Unix Handler
If mgrCommon.IsUnix And Not bShutdown Then
@@ -1898,12 +2006,11 @@ Public Class frmMain
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
Dim bNeedsPath As Boolean = False
Dim bWineProcess As Boolean = False
Dim bContinue As Boolean = True
Dim iErrorCode As Integer = 0
Dim sErrorMessage As String = String.Empty
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, bWineProcess, iErrorCode, bProcessDebugMode) Then
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode, bProcessDebugMode) Then
PauseScan(True)
If bNeedsPath Then
@@ -1933,27 +2040,18 @@ Public Class frmMain
End If
End If
If bWineProcess Then
'Attempt a path conversion if the game configuration is using an absolute windows path that we can convert
If mgrVariables.CheckForReservedVariables(oProcess.GameInfo.TruePath) Then
Dim sWinePrefix As String = mgrPath.GetWinePrefix(oProcess.FoundProcess)
Dim sWineSavePath As String
If Not sWinePrefix = String.Empty Then
UpdateLog(mgrCommon.FormatString(frmMain_WinePrefix, New String() {oProcess.GameInfo.Name, sWinePrefix}), False)
sWineSavePath = mgrPath.GetWineSavePath(sWinePrefix, oProcess.GameInfo.TruePath)
If Not sWineSavePath = oProcess.GameInfo.TruePath Then
oProcess.GameInfo.TruePath = sWineSavePath
oProcess.GameInfo.AbsolutePath = True
UpdateLog(mgrCommon.FormatString(frmMain_WineSavePath, New String() {oProcess.GameInfo.Name, sWineSavePath}), False)
Else
bContinue = False
End If
Else
bContinue = False
End If
'We need to determine this Wine information and store it before the process ends.
If oProcess.WineProcess Then
Dim oWineData As New clsWineData
oWineData.Prefix = mgrPath.GetWinePrefix(oProcess.FoundProcess)
oWineData.BinaryPath = Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
UpdateLog(mgrCommon.FormatString(frmMain_WineBinaryPath, oWineData.BinaryPath), False)
If Not oWineData.Prefix = String.Empty Then
oProcess.WineData = oWineData
UpdateLog(mgrCommon.FormatString(frmMain_WinePrefix, oWineData.Prefix), False)
Else
bContinue = False
End If
'This does required mods to include/exclude data and relative paths (if required)
mgrPath.ModWinePathData(oProcess.GameInfo)
End If
If bContinue = True Then
@@ -2013,7 +2111,7 @@ Public Class frmMain
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sPathDetectionError)
If oProcess.GameInfo.ProcessPath <> String.Empty Then
'Update and reload
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
mgrMonitorList.DoListFieldUpdate("ProcessPath", oProcess.GameInfo.ProcessPath, oProcess.GameInfo.ID)
LoadGameSettings()
Else
bContinue = False
@@ -2029,6 +2127,20 @@ Public Class frmMain
If bContinue Then
If DoMultiGameCheck() Then
UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False)
If oProcess.WineProcess Then
oProcess.WineData.MonitorID = oProcess.GameInfo.ID
'Attempt a path conversion if the game configuration is using an absolute windows path that we can convert
If mgrVariables.CheckForReservedVariables(oProcess.GameInfo.TruePath) Then
oProcess.WineData.SavePath = mgrPath.GetWineSavePath(oProcess.WineData.Prefix, oProcess.GameInfo.TruePath)
If Not oProcess.WineData.SavePath = oProcess.GameInfo.TruePath Then
oProcess.GameInfo.TruePath = oProcess.WineData.SavePath
UpdateLog(mgrCommon.FormatString(frmMain_WineSavePath, oProcess.WineData.SavePath), False)
End If
End If
mgrWineData.DoWineDataAddUpdate(oProcess.WineData)
'This does required mods to include/exclude data and relative paths (if required)
mgrPath.ModWinePathData(oProcess.GameInfo)
End If
If oSettings.TimeTracking Then HandleTimeSpent()
If oSettings.SessionTracking Then HandleSession()
RunBackup()
@@ -2048,19 +2160,41 @@ Public Class frmMain
oProcess.StartTime = Now : oProcess.EndTime = Now
End Sub
Private Sub Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SetForm()
End Sub
Private Sub frmMain_Activated(sender As System.Object, e As System.EventArgs) Handles MyBase.Activated
'Init
Try
SetForm()
VerifyGameDataPath()
LoadAndVerify()
If Not bInitFail Then
If bInitialLoad Then
Try
VerifyGameDataPath()
LoadAndVerify()
Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message & vbCrLf & ex.StackTrace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
bInitFail = True
End If
End Try
If bInitFail Then
bShutdown = True
Me.Close()
Else
VerifyCustomPathVariables()
If oSettings.StartToTray And Not mgrCommon.IsUnix Then
bShowToggle = False
Me.Visible = False
Me.ShowInTaskbar = False
'Windows and Linux require different settings for the system tray
If mgrCommon.IsUnix Then
Me.MinimizeBox = True
If oSettings.StartToTray Then
Me.WindowState = FormWindowState.Minimized
End If
Else
Me.gMonTray.Visible = True
If oSettings.StartToTray Then
bShowToggle = False
Me.Visible = False
Me.ShowInTaskbar = False
End If
End If
If oSettings.MonitorOnStartup Then
@@ -2071,29 +2205,16 @@ Public Class frmMain
HandleScan()
CheckForNewBackups()
'Unix Handler
If mgrCommon.IsUnix Then
Me.MinimizeBox = True
Else
Me.gMonTray.Visible = True
End If
End If
Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
bInitFail = True
If bFirstRun And Not bShutdown Then
OpenStartupWizard()
End If
End Try
End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
If bInitFail Then
bShutdown = True
Me.Close()
End If
If bFirstRun And Not bShutdown Then
OpenStartupWizard()
bInitialLoad = False
Else
txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret()
End If
End Sub
+40 -27
View File
@@ -71,9 +71,10 @@ Partial Class frmSettings
Me.pnlStartup = New System.Windows.Forms.Panel()
Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkBackupOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
Me.chkAutoStart = New System.Windows.Forms.CheckBox()
Me.chkStartMinimized = New System.Windows.Forms.CheckBox()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkDisableDiskSpaceCheck = New System.Windows.Forms.CheckBox()
Me.grpFolderOptions.SuspendLayout()
Me.grp7zGeneral.SuspendLayout()
Me.pnlBackup.SuspendLayout()
@@ -318,11 +319,12 @@ Partial Class frmSettings
'
'grpBackupConfirmations
'
Me.grpBackupConfirmations.Controls.Add(Me.chkDisableDiskSpaceCheck)
Me.grpBackupConfirmations.Controls.Add(Me.chkBackupConfirm)
Me.grpBackupConfirmations.Controls.Add(Me.chkOverwriteWarning)
Me.grpBackupConfirmations.Location = New System.Drawing.Point(6, 200)
Me.grpBackupConfirmations.Name = "grpBackupConfirmations"
Me.grpBackupConfirmations.Size = New System.Drawing.Size(354, 65)
Me.grpBackupConfirmations.Size = New System.Drawing.Size(354, 90)
Me.grpBackupConfirmations.TabIndex = 2
Me.grpBackupConfirmations.TabStop = False
Me.grpBackupConfirmations.Text = "Backup Confirmations"
@@ -340,10 +342,10 @@ Partial Class frmSettings
'chkOverwriteWarning
'
Me.chkOverwriteWarning.AutoSize = True
Me.chkOverwriteWarning.Location = New System.Drawing.Point(9, 41)
Me.chkOverwriteWarning.Location = New System.Drawing.Point(9, 64)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 1
Me.chkOverwriteWarning.TabIndex = 2
Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
'
@@ -560,8 +562,8 @@ Partial Class frmSettings
'grpStartup
'
Me.grpStartup.Controls.Add(Me.chkBackupOnLaunch)
Me.grpStartup.Controls.Add(Me.chkStartWindows)
Me.grpStartup.Controls.Add(Me.chkStartToTray)
Me.grpStartup.Controls.Add(Me.chkAutoStart)
Me.grpStartup.Controls.Add(Me.chkStartMinimized)
Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.grpStartup.Name = "grpStartup"
@@ -580,25 +582,25 @@ Partial Class frmSettings
Me.chkBackupOnLaunch.Text = "Backup GBM data files on launch"
Me.chkBackupOnLaunch.UseVisualStyleBackColor = True
'
'chkStartWindows
'chkAutoStart
'
Me.chkStartWindows.AutoSize = True
Me.chkStartWindows.Location = New System.Drawing.Point(6, 19)
Me.chkStartWindows.Name = "chkStartWindows"
Me.chkStartWindows.Size = New System.Drawing.Size(117, 17)
Me.chkStartWindows.TabIndex = 0
Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True
Me.chkAutoStart.AutoSize = True
Me.chkAutoStart.Location = New System.Drawing.Point(6, 19)
Me.chkAutoStart.Name = "chkAutoStart"
Me.chkAutoStart.Size = New System.Drawing.Size(155, 17)
Me.chkAutoStart.TabIndex = 0
Me.chkAutoStart.Text = "Start automatically on log-in"
Me.chkAutoStart.UseVisualStyleBackColor = True
'
'chkStartToTray
'chkStartMinimized
'
Me.chkStartToTray.AutoSize = True
Me.chkStartToTray.Location = New System.Drawing.Point(6, 42)
Me.chkStartToTray.Name = "chkStartToTray"
Me.chkStartToTray.Size = New System.Drawing.Size(115, 17)
Me.chkStartToTray.TabIndex = 1
Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True
Me.chkStartMinimized.AutoSize = True
Me.chkStartMinimized.Location = New System.Drawing.Point(6, 42)
Me.chkStartMinimized.Name = "chkStartMinimized"
Me.chkStartMinimized.Size = New System.Drawing.Size(96, 17)
Me.chkStartMinimized.TabIndex = 1
Me.chkStartMinimized.Text = "Start minimized"
Me.chkStartMinimized.UseVisualStyleBackColor = True
'
'chkMonitorOnStartup
'
@@ -610,15 +612,25 @@ Partial Class frmSettings
Me.chkMonitorOnStartup.Text = "Start monitoring on launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
'
'chkDisableDiskSpaceCheck
'
Me.chkDisableDiskSpaceCheck.AutoSize = True
Me.chkDisableDiskSpaceCheck.Location = New System.Drawing.Point(9, 41)
Me.chkDisableDiskSpaceCheck.Name = "chkDisableDiskSpaceCheck"
Me.chkDisableDiskSpaceCheck.Size = New System.Drawing.Size(222, 17)
Me.chkDisableDiskSpaceCheck.TabIndex = 1
Me.chkDisableDiskSpaceCheck.Text = "Disable disk space check prior to backup"
Me.chkDisableDiskSpaceCheck.UseVisualStyleBackColor = True
'
'frmSettings
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnlStartup)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.btnResetMessages)
Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults)
@@ -706,9 +718,10 @@ Partial Class frmSettings
Friend WithEvents pnlStartup As Panel
Friend WithEvents grpStartup As GroupBox
Friend WithEvents chkBackupOnLaunch As CheckBox
Friend WithEvents chkStartWindows As CheckBox
Friend WithEvents chkStartToTray As CheckBox
Friend WithEvents chkAutoStart As CheckBox
Friend WithEvents chkStartMinimized As CheckBox
Friend WithEvents chkMonitorOnStartup As CheckBox
Friend WithEvents grpGameMonitoringOptions As GroupBox
Friend WithEvents chkShowResolvedPaths As CheckBox
Friend WithEvents chkDisableDiskSpaceCheck As CheckBox
End Class
+52 -20
View File
@@ -16,6 +16,36 @@ Public Class frmSettings
End Set
End Property
Private Sub HandleLinuxAutoStart(ByVal bToggle As Boolean)
Dim oProcess As Process
Dim sDesktopFile = String.Empty
Dim sAutoStartFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & Path.DirectorySeparatorChar & ".config/autostart/"
If bToggle And mgrPath.VerifyLinuxDesktopFileLocation(sDesktopFile) Then
'Create the autostart folder if it doesn't exist yet
If Not Directory.Exists(sAutoStartFolder) Then
Directory.CreateDirectory(sAutoStartFolder)
End If
'Create link
Try
oProcess = New Process
oProcess.StartInfo.FileName = "/bin/ln"
oProcess.StartInfo.Arguments = "-s " & sDesktopFile & " " & sAutoStartFolder
oProcess.StartInfo.UseShellExecute = False
oProcess.StartInfo.RedirectStandardOutput = True
oProcess.StartInfo.CreateNoWindow = True
oProcess.Start()
Catch ex As Exception
mgrCommon.ShowMessage(frmSettings_ErrorLinuxAutoStart, ex.Message, MsgBoxStyle.Exclamation)
End Try
Else
'Delete link
If File.Exists(sAutoStartFolder & Path.DirectorySeparatorChar & "gbm.desktop") Then
File.Delete(sAutoStartFolder & Path.DirectorySeparatorChar & "gbm.desktop")
End If
End If
End Sub
Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName
@@ -35,23 +65,28 @@ Public Class frmSettings
Private Function ValidateSettings() As Boolean
'Show Start with Windows warning if running as admin
If chkStartWindows.Checked And mgrCommon.IsElevated Then
If Not mgrCommon.IsUnix And chkAutoStart.Checked And mgrCommon.IsElevated Then
mgrCommon.ShowMessage(frmSettings_WarningAdminStart, MsgBoxStyle.Exclamation)
End If
'Only modify registry key when the value changed
If chkStartWindows.Checked <> oSettings.StartWithWindows Then
HandleRegistryUpdate(chkStartWindows.Checked)
'Only modify when the value changed
If chkAutoStart.Checked <> oSettings.StartWithWindows Then
If mgrCommon.IsUnix Then
HandleLinuxAutoStart(chkAutoStart.Checked)
Else
HandleRegistryUpdate(chkAutoStart.Checked)
End If
End If
oSettings.StartWithWindows = chkStartWindows.Checked
oSettings.StartWithWindows = chkAutoStart.Checked
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked
oSettings.StartToTray = chkStartMinimized.Checked
oSettings.BackupOnLaunch = chkBackupOnLaunch.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.DisableSyncMessages = chkDisableSyncMessages.Checked
oSettings.AutoSaveLog = chkAutoSaveLog.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.DisableDiskSpaceCheck = chkDisableDiskSpaceCheck.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.UseGameID = chkUseGameID.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
@@ -173,14 +208,15 @@ Public Class frmSettings
End Sub
Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows
chkAutoStart.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray
chkStartMinimized.Checked = oSettings.StartToTray
chkBackupOnLaunch.Checked = oSettings.BackupOnLaunch
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkDisableSyncMessages.Checked = oSettings.DisableSyncMessages
chkAutoSaveLog.Checked = oSettings.AutoSaveLog
chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkDisableDiskSpaceCheck.Checked = oSettings.DisableDiskSpaceCheck
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkUseGameID.Checked = oSettings.UseGameID
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
@@ -199,12 +235,6 @@ Public Class frmSettings
txt7zLocation.Text = oSettings.Custom7zLocation
eCurrentSyncFields = oSettings.SyncFields
'Unix Handler
If mgrCommon.IsUnix Then
chkStartToTray.Checked = False
chkStartWindows.Checked = False
End If
'Retrieve 7z Info
GetUtilityInfo(oSettings.Custom7zLocation)
@@ -305,10 +335,10 @@ Public Class frmSettings
grpGameData.Text = frmSettings_grpGameData
chkTimeTracking.Text = frmSettings_chkTimeTracking
chkSessionTracking.Text = frmSettings_chkSessionTracking
chkStartWindows.Text = frmSettings_chkStartWindows
chkAutoStart.Text = frmSettings_chkAutoStart
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog
chkStartToTray.Text = frmSettings_chkStartToTray
chkStartMinimized.Text = frmSettings_chkStartMinimized
chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup
grp7zGeneral.Text = frmSettings_grp7zGeneral
grp7zAdvanced.Text = frmSettings_grp7zAdvanced
@@ -325,11 +355,13 @@ Public Class frmSettings
chkDisableSyncMessages.Text = frmSettings_chkDisableSyncMessages
grpGameMonitoringOptions.Text = frmSettings_grpGameMonitoringOptions
chkShowResolvedPaths.Text = frmSettings_chkShowResolvedPaths
chkDisableDiskSpaceCheck.Text = frmSettings_chkDisableDiskSpaceCheck
'Unix Handler
If mgrCommon.IsUnix Then
chkStartToTray.Enabled = False
chkStartWindows.Enabled = False
'Only enable this option on Linux if GBM was installed with an official method
If Not mgrPath.VerifyLinuxDesktopFileLocation() Then
chkAutoStart.Enabled = False
End If
End If
'Handle Panels
@@ -358,7 +390,7 @@ Public Class frmSettings
Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click
Dim sNewFolder As String
sNewFolder = mgrCommon.OpenFolderBrowser("Settings_Backup_Path", frmSettings_BrowseFolder, oSettings.BackupFolder, True, False)
sNewFolder = mgrCommon.OpenClassicFolderBrowser("Settings_Backup_Path", frmSettings_BrowseFolder, oSettings.BackupFolder, True, False)
If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
End Sub
+1 -1
View File
@@ -211,7 +211,7 @@ Public Class frmStartUpWizard
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("Wizard_Backup_Path", frmStartUpWizard_BrowseFolder, sDefaultFolder, True, False)
sNewPath = mgrCommon.OpenClassicFolderBrowser("Wizard_Backup_Path", frmStartUpWizard_BrowseFolder, sDefaultFolder, True, False)
If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath
End Sub
+1 -1
View File
@@ -54,7 +54,7 @@ Public Class frmVariableManager
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("VM_Path", frmVariableManager_PathBrowse, sDefaultFolder, False, False)
sNewPath = mgrCommon.OpenFolderBrowser("VM_Path", frmVariableManager_PathBrowse, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtPath.Text = sNewPath
End Sub
+148
View File
@@ -0,0 +1,148 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmWineConfiguration
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.grpWineConfig = New System.Windows.Forms.GroupBox()
Me.txtWineSavePath = New System.Windows.Forms.TextBox()
Me.txtWinePrefix = New System.Windows.Forms.TextBox()
Me.txtWineBinaryPath = New System.Windows.Forms.TextBox()
Me.lblWinePrefix = New System.Windows.Forms.Label()
Me.lblWineSavePath = New System.Windows.Forms.Label()
Me.lblWineBinaryPath = New System.Windows.Forms.Label()
Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.grpWineConfig.SuspendLayout()
Me.SuspendLayout()
'
'grpWineConfig
'
Me.grpWineConfig.Controls.Add(Me.txtWineSavePath)
Me.grpWineConfig.Controls.Add(Me.txtWinePrefix)
Me.grpWineConfig.Controls.Add(Me.txtWineBinaryPath)
Me.grpWineConfig.Controls.Add(Me.lblWinePrefix)
Me.grpWineConfig.Controls.Add(Me.lblWineSavePath)
Me.grpWineConfig.Controls.Add(Me.lblWineBinaryPath)
Me.grpWineConfig.Location = New System.Drawing.Point(12, 12)
Me.grpWineConfig.Name = "grpWineConfig"
Me.grpWineConfig.Size = New System.Drawing.Size(460, 107)
Me.grpWineConfig.TabIndex = 0
Me.grpWineConfig.TabStop = False
Me.grpWineConfig.Text = "Configuration"
'
'txtWineSavePath
'
Me.txtWineSavePath.Location = New System.Drawing.Point(76, 75)
Me.txtWineSavePath.Name = "txtWineSavePath"
Me.txtWineSavePath.Size = New System.Drawing.Size(367, 20)
Me.txtWineSavePath.TabIndex = 5
'
'txtWinePrefix
'
Me.txtWinePrefix.Location = New System.Drawing.Point(76, 49)
Me.txtWinePrefix.Name = "txtWinePrefix"
Me.txtWinePrefix.Size = New System.Drawing.Size(367, 20)
Me.txtWinePrefix.TabIndex = 3
'
'txtWineBinaryPath
'
Me.txtWineBinaryPath.Location = New System.Drawing.Point(76, 23)
Me.txtWineBinaryPath.Name = "txtWineBinaryPath"
Me.txtWineBinaryPath.Size = New System.Drawing.Size(367, 20)
Me.txtWineBinaryPath.TabIndex = 1
'
'lblWinePrefix
'
Me.lblWinePrefix.AutoSize = True
Me.lblWinePrefix.Location = New System.Drawing.Point(6, 52)
Me.lblWinePrefix.Name = "lblWinePrefix"
Me.lblWinePrefix.Size = New System.Drawing.Size(36, 13)
Me.lblWinePrefix.TabIndex = 2
Me.lblWinePrefix.Text = "Prefix:"
'
'lblWineSavePath
'
Me.lblWineSavePath.AutoSize = True
Me.lblWineSavePath.Location = New System.Drawing.Point(6, 78)
Me.lblWineSavePath.Name = "lblWineSavePath"
Me.lblWineSavePath.Size = New System.Drawing.Size(60, 13)
Me.lblWineSavePath.TabIndex = 4
Me.lblWineSavePath.Text = "Save Path:"
'
'lblWineBinaryPath
'
Me.lblWineBinaryPath.AutoSize = True
Me.lblWineBinaryPath.Location = New System.Drawing.Point(6, 26)
Me.lblWineBinaryPath.Name = "lblWineBinaryPath"
Me.lblWineBinaryPath.Size = New System.Drawing.Size(64, 13)
Me.lblWineBinaryPath.TabIndex = 0
Me.lblWineBinaryPath.Text = "Binary Path:"
'
'btnSave
'
Me.btnSave.Location = New System.Drawing.Point(316, 125)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 1
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(397, 125)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'frmWineConfiguration
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(484, 161)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpWineConfig)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmWineConfiguration"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Wine Configuration"
Me.grpWineConfig.ResumeLayout(False)
Me.grpWineConfig.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents grpWineConfig As GroupBox
Friend WithEvents txtWineSavePath As TextBox
Friend WithEvents txtWinePrefix As TextBox
Friend WithEvents txtWineBinaryPath As TextBox
Friend WithEvents lblWinePrefix As Label
Friend WithEvents lblWineSavePath As Label
Friend WithEvents lblWineBinaryPath As Label
Friend WithEvents btnSave As Button
Friend WithEvents btnCancel As Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+100
View File
@@ -0,0 +1,100 @@
Imports GBM.My.Resources
Public Class frmWineConfiguration
Private oSettings As mgrSettings
Private sMonitorID As String
Property Settings As mgrSettings
Get
Return oSettings
End Get
Set(value As mgrSettings)
oSettings = value
End Set
End Property
Property MonitorID As String
Get
Return sMonitorID
End Get
Set(value As String)
sMonitorID = value
End Set
End Property
Private Sub SetForm()
'Set Form Name
Me.Text = frmWineConfiguration_FormName
'Set Form Text
grpWineConfig.Text = frmWineConfiguration_grpWineConfig
lblWineBinaryPath.Text = frmWineConfiguration_lblWineBinaryPath
lblWinePrefix.Text = frmWineConfiguration_lblWinePrefix
lblWineSavePath.Text = frmWineConfiguration_lblWineSavePath
btnSave.Text = frmWineConfiguration_btnSave
btnCancel.Text = frmWineConfiguration_btnCancel
End Sub
Private Sub LoadData()
Dim oWineData As New clsWineData
oWineData = mgrWineData.DoWineDataGetbyID(sMonitorID)
txtWineBinaryPath.Text = oWineData.BinaryPath
txtWinePrefix.Text = oWineData.Prefix
txtWineSavePath.Text = oWineData.SavePath
End Sub
Private Sub HandleWarning()
If Not (oSettings.SuppressMessages And mgrSettings.eSuppressMessages.WineConfig) = mgrSettings.eSuppressMessages.WineConfig Then
mgrCommon.ShowMessage(frmWineConfiguration_WarningSingle, MsgBoxStyle.Information)
oSettings.SuppressMessages = oSettings.SetMessageField(oSettings.SuppressMessages, mgrSettings.eSuppressMessages.WineConfig)
oSettings.SaveSettings()
End If
End Sub
Private Function ValidateData() As Boolean
If txtWineBinaryPath.Text = String.Empty Then
mgrCommon.ShowMessage(frmWineConfiguration_ErrorValidationBinaryPath, MsgBoxStyle.Exclamation)
Return False
End If
If txtWinePrefix.Text = String.Empty Then
mgrCommon.ShowMessage(frmWineConfiguration_ErrorValidationPrefix, MsgBoxStyle.Exclamation)
Return False
End If
Return True
End Function
Private Sub SaveData()
Dim oWineData As clsWineData
If txtWineBinaryPath.Text = String.Empty And txtWinePrefix.Text = String.Empty And txtWineSavePath.Text = String.Empty Then
mgrWineData.DoWineDataDelete(sMonitorID)
Me.DialogResult = DialogResult.OK
Else
If ValidateData() Then
oWineData = New clsWineData
oWineData.MonitorID = sMonitorID
oWineData.BinaryPath = txtWineBinaryPath.Text
oWineData.Prefix = txtWinePrefix.Text
oWineData.SavePath = txtWineSavePath.Text
mgrWineData.DoWineDataAddUpdate(oWineData)
Me.DialogResult = DialogResult.OK
End If
End If
End Sub
Private Sub frmAdvancedConfiguration_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
LoadData()
HandleWarning()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
SaveData()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.DialogResult = DialogResult.Cancel
End Sub
End Class
+11
View File
@@ -123,6 +123,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\clsGameProcess.vb" />
<Compile Include="Classes\clsWineData.vb" />
<Compile Include="Classes\clsProcess.vb" />
<Compile Include="Classes\clsGameFilter.vb" />
<Compile Include="Classes\clsGameFilterField.vb" />
@@ -137,6 +138,12 @@
<Compile Include="Classes\clsBackup.vb" />
<Compile Include="Classes\clsGame.vb" />
<Compile Include="Classes\clsTag.vb" />
<Compile Include="Forms\frmWineConfiguration.Designer.vb">
<DependentUpon>frmWineConfiguration.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmWineConfiguration.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmAdvancedImport.Designer.vb">
<DependentUpon>frmAdvancedImport.vb</DependentUpon>
</Compile>
@@ -247,6 +254,7 @@
<SubType>Form</SubType>
</Compile>
<Compile Include="Managers\mgrGameProcesses.vb" />
<Compile Include="Managers\mgrWineData.vb" />
<Compile Include="Managers\mgrProcess.vb" />
<Compile Include="Managers\mgrCommon.vb" />
<Compile Include="Managers\mgrGameTags.vb" />
@@ -281,6 +289,9 @@
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Forms\frmWineConfiguration.resx">
<DependentUpon>frmWineConfiguration.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmAdvancedImport.resx">
<DependentUpon>frmAdvancedImport.vb</DependentUpon>
</EmbeddedResource>
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2018 Igor Pavlov.
Copyright (C) 1999-2019 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license.
+1 -1
View File
@@ -1,5 +1,5 @@
GBM - Game Backup Monitor
Copyright (C) 2016 Michael J. Seiferling
Copyright (C) 2019 Michael J. Seiferling
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
+222 -117
View File
@@ -120,41 +120,65 @@ Public Class mgrBackup
Dim lAvailableSpace As Long
Dim lFolderSize As Long = 0
Dim sDeepFolder As String
Dim bRegistry As Boolean
Dim sExtension As String
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z"
'Check if this is a registry backup
bRegistry = mgrPath.IsSupportedRegistryPath(oGame.TruePath)
'Verify saved game path
sSavePath = VerifySavePath(oGame)
'Calculate space
lAvailableSpace = mgrCommon.GetAvailableDiskSpace(oSettings.BackupFolder)
'If any includes are using a deep path and we aren't using recursion, we need to go directly to folders to do file size calculations or they will be missed.
If Not oGame.RecurseSubFolders Then
For Each s As String In oGame.IncludeArray
If s.Contains(Path.DirectorySeparatorChar) Then
sDeepFolder = Path.GetDirectoryName(sSavePath & Path.DirectorySeparatorChar & s)
If Directory.Exists(sDeepFolder) Then
lFolderSize += mgrCommon.GetFolderSize(sDeepFolder, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
End If
End If
Next
End If
lFolderSize += mgrCommon.GetFolderSize(sSavePath, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
'Show Available Space
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_AvailableDiskSpace, mgrCommon.FormatDiskSpace(lAvailableSpace)), False, ToolTipIcon.Info, True)
'Show Save Folder Size
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_SavedGameFolderSize, New String() {oGame.Name, mgrCommon.FormatDiskSpace(lFolderSize)}), False, ToolTipIcon.Info, True)
If lFolderSize >= lAvailableSpace Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmDiskSpace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorDiskSpace, False, ToolTipIcon.Error, True)
If bRegistry Then
'If this is a registry backup, we need to have elevated permissions in Windows to use reg.exe
If Not mgrCommon.IsUnix And Not mgrCommon.IsElevated Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorRegBackupElevation, oGame.Name), False, ToolTipIcon.Info, True)
Return False
End If
sExtension = ".reg"
Else
'Verify saved game path
sSavePath = VerifySavePath(oGame)
'Check if disk space check should be disabled (UNC path or Setting)
If Not mgrPath.IsPathUNC(oSettings.BackupFolder) And Not Settings.DisableDiskSpaceCheck Then
'Calculate space
lAvailableSpace = mgrCommon.GetAvailableDiskSpace(oSettings.BackupFolder)
'If any includes are using a deep path and we aren't using recursion, we need to go directly to folders to do file size calculations or they will be missed.
If Not oGame.RecurseSubFolders Then
For Each s As String In oGame.IncludeArray
If s.Contains(Path.DirectorySeparatorChar) Then
sDeepFolder = Path.GetDirectoryName(sSavePath & Path.DirectorySeparatorChar & s)
If Directory.Exists(sDeepFolder) Then
lFolderSize += mgrCommon.GetFolderSize(sDeepFolder, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
End If
End If
Next
End If
lFolderSize += mgrCommon.GetFolderSize(sSavePath, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
'Show Available Space
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_AvailableDiskSpace, mgrCommon.FormatDiskSpace(lAvailableSpace)), False, ToolTipIcon.Info, True)
'Show Save Folder Size
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_SavedGameFolderSize, New String() {oGame.Name, mgrCommon.FormatDiskSpace(lFolderSize)}), False, ToolTipIcon.Info, True)
If lFolderSize >= lAvailableSpace Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmDiskSpace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorDiskSpace, False, ToolTipIcon.Error, True)
Return False
End If
End If
Else
'Show that disk space check was skipped due to UNC path
If Not Settings.DisableDiskSpaceCheck Then RaiseEvent UpdateLog(mgrBackup_ErrorBackupPathIsUNC, False, ToolTipIcon.Info, True)
End If
sExtension = ".7z"
End If
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sExtension
'A manifest check is only required when "Save Multiple Backups" is disabled
If Not oGame.AppendTimeStamp Then
If mgrRestore.CheckManifest(oGame.ID) Then
@@ -178,7 +202,7 @@ Public Class mgrBackup
End If
End If
Return True
Return True
End Function
Private Sub CheckOldBackups(ByVal oGame As clsGame)
@@ -285,23 +309,162 @@ Public Class mgrBackup
Next
End Sub
Private Function RunRegistryBackup(ByVal oGame As clsGame, ByVal sBackupFile As String) As Boolean
Dim prsReg As New Process
Dim sBinaryPath As String
Dim sArguments As String
Dim oWineData As clsWineData
Dim sWineReg As String
Dim bPathVerified As Boolean = False
Dim bBackupCompleted As Boolean = False
sArguments = "export """ & oGame.TruePath & """ """ & sBackupFile & """ /y"
If mgrCommon.IsUnix Then
oWineData = mgrWineData.DoWineDataGetbyID(oGame.ID)
prsReg.StartInfo.EnvironmentVariables.Add("WINEPREFIX", oWineData.Prefix)
sBinaryPath = oWineData.BinaryPath & Path.DirectorySeparatorChar & "wine"
sWineReg = oWineData.Prefix & Path.DirectorySeparatorChar & "drive_c/windows/system32/reg.exe"
sArguments = """" & sWineReg & """ " & sArguments
If File.Exists(sBinaryPath) Then
If File.Exists(sWineReg) Then
bPathVerified = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorRegNotFound, sWineReg), False, ToolTipIcon.Error, True)
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorWineNotFound, sBinaryPath), False, ToolTipIcon.Error, True)
End If
Else
sBinaryPath = Environment.GetFolderPath(Environment.SpecialFolder.Windows) & Path.DirectorySeparatorChar & "system32\reg.exe"
If File.Exists(sBinaryPath) Then
bPathVerified = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorRegNotFound, sBinaryPath), False, ToolTipIcon.Error, True)
End If
End If
If bPathVerified Then
Try
prsReg.StartInfo.Arguments = sArguments
prsReg.StartInfo.FileName = sBinaryPath
prsReg.StartInfo.UseShellExecute = False
prsReg.StartInfo.RedirectStandardOutput = True
prsReg.StartInfo.CreateNoWindow = True
prsReg.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupInProgress, oGame.TruePath), False, ToolTipIcon.Info, True)
While Not prsReg.StandardOutput.EndOfStream
If CancelOperation Then
prsReg.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorFullAbort, oGame.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prsReg.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prsReg.WaitForExit()
Select Case prsReg.ExitCode
Case 0
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sBackupFile))}), False, ToolTipIcon.Info, True)
bBackupCompleted = True
Case Else
RaiseEvent UpdateLog(mgrBackup_ErrorRegBackupFailed, False, ToolTipIcon.Info, True)
End Select
prsReg.Dispose()
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOtherFailure, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
End Try
End If
Return bBackupCompleted
End Function
Private Function Run7zBackup(ByVal oGame As clsGame, ByVal sBackupFile As String) As Boolean
Dim prs7z As New Process
Dim sSavePath As String
Dim sArguments As String
Dim bBackupCompleted As Boolean = False
sSavePath = VerifySavePath(oGame)
If oGame.FolderSave = True Then
BuildFileList("*", mgrPath.IncludeFileLocation)
Else
BuildFileList(oGame.FileType, mgrPath.IncludeFileLocation)
End If
BuildFileList(oGame.ExcludeList, mgrPath.ExcludeFileLocation)
sArguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """"
If oGame.RecurseSubFolders Then sArguments &= " -r"
Try
If Directory.Exists(sSavePath) Then
If Settings.Is7zUtilityValid Then
'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
If File.Exists(sBackupFile) Then
File.Delete(sBackupFile)
End If
prs7z.StartInfo.Arguments = sArguments
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.WorkingDirectory = sSavePath
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupInProgress, sSavePath), False, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorFullAbort, oGame.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
Select Case prs7z.ExitCode
Case 0
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sBackupFile))}), False, ToolTipIcon.Info, True)
bBackupCompleted = True
Case 1
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
bBackupCompleted = True
Case 2
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zFatalError, oGame.Name), True, ToolTipIcon.Error, True)
Case 7
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zCommandFailure, oGame.Name), True, ToolTipIcon.Error, True)
End Select
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True)
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOtherFailure, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
End Try
Return bBackupCompleted
End Function
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame
Dim bDoBackup As Boolean
Dim bBackupCompleted As Boolean
Dim prs7z As Process
Dim sBackupFile As String
Dim sSavePath As String
Dim sBackupExt As String
Dim dTimeStamp As DateTime
Dim sTimeStamp As String
Dim sHash As String
Dim sArguments As String
Dim bBackupCompleted As Boolean
For Each oGame In oBackupList
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder
sSavePath = String.Empty
dTimeStamp = Date.Now
sTimeStamp = BuildFileTimeStamp(dTimeStamp)
sHash = String.Empty
@@ -315,100 +478,42 @@ Public Class mgrBackup
bDoBackup = HandleSubFolder(oGame, sBackupFile)
End If
If mgrPath.IsSupportedRegistryPath(oGame.TruePath) Then
sBackupExt = ".reg"
Else
sBackupExt = ".7z"
End If
If oGame.AppendTimeStamp Then
If oGame.BackupLimit > 0 Then CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sTimeStamp & ".7z"
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sTimeStamp & sBackupExt
Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z"
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sBackupExt
End If
If bDoBackup Then
sSavePath = VerifySavePath(oGame)
If oGame.FolderSave = True Then
BuildFileList("*", mgrPath.IncludeFileLocation)
'Choose Backup Type
If mgrPath.IsSupportedRegistryPath(oGame.TruePath) Then
bBackupCompleted = RunRegistryBackup(oGame, sBackupFile)
Else
BuildFileList(oGame.FileType, mgrPath.IncludeFileLocation)
bBackupCompleted = Run7zBackup(oGame, sBackupFile)
End If
BuildFileList(oGame.ExcludeList, mgrPath.ExcludeFileLocation)
'Write Main Manifest
If bBackupCompleted Then
'Generate checksum for new backup
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True)
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
sArguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """"
If oGame.RecurseSubFolders Then sArguments &= " -r"
Try
If Directory.Exists(sSavePath) Then
If Settings.Is7zUtilityValid Then
'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
If File.Exists(sBackupFile) Then
File.Delete(sBackupFile)
End If
prs7z.StartInfo.Arguments = sArguments
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.WorkingDirectory = sSavePath
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupInProgress, sSavePath), False, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorFullAbort, oGame.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
Select Case prs7z.ExitCode
Case 0
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sBackupFile))}), False, ToolTipIcon.Info, True)
bBackupCompleted = True
Case 1
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
bBackupCompleted = True
Case 2
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zFatalError, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
Case 7
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zCommandFailure, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
End Select
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bBackupCompleted = False
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorManifestFailure, oGame.Name), True, ToolTipIcon.Error, True)
End If
'Write Main Manifest
If bBackupCompleted Then
'Generate checksum for new backup
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True)
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorManifestFailure, oGame.Name), True, ToolTipIcon.Error, True)
End If
'Write the process path if we have it
If oGame.AbsolutePath = False Then
mgrMonitorList.DoListUpdate(oGame)
End If
'Write the process path if we have it
If oGame.AbsolutePath = False Then
mgrMonitorList.DoListFieldUpdate("ProcessPath", oGame.ProcessPath, oGame.ID)
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOtherFailure, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
End Try
End If
End If
If bBackupCompleted Then
+124 -27
View File
@@ -9,8 +9,8 @@ Imports System.Runtime.Serialization.Formatters.Binary
Public Class mgrCommon
'These need to be updated when upgrading the packaged 7z utility
Private Shared sUtility64Hash As String = "8BC2A3D6C37C4DB9BD487AD35039AE0DC8A1DDF2C3B1F0B76B3E678FEBB9F223" 'v18.05 7za.exe x64
Private Shared sUtility32Hash As String = "77613CCA716EDF68B9D5BAB951463ED7FADE5BC0EC465B36190A76299C50F117" 'v18.05 7za.exe x86
Private Shared sUtility64Hash As String = "8117E40EE7F824F63373A4F5625BB62749F69159D0C449B3CE2F35AAD3B83549" 'v19.00 7za.exe x64
Private Shared sUtility32Hash As String = "EA308C76A2F927B160A143D94072B0DCE232E04B751F0C6432A94E05164E716D" 'v19.00 7za.exe x86
Public Shared ReadOnly Property UtilityHash As String
Get
@@ -43,28 +43,6 @@ Public Class mgrCommon
End Get
End Property
'Source - https://stackoverflow.com/questions/18873152/deep-copy-of-ordereddictionary
Public Shared Function GenericClone(ByVal oOriginal As Object) As Object
'Construct a temporary memory stream
Dim oStream As MemoryStream = New MemoryStream()
'Construct a serialization formatter that does all the hard work
Dim oFormatter As BinaryFormatter = New BinaryFormatter()
'This line Is explained in the "Streaming Contexts" section
oFormatter.Context = New StreamingContext(StreamingContextStates.Clone)
'Serialize the object graph into the memory stream
oFormatter.Serialize(oStream, oOriginal)
'Seek back to the start of the memory stream before deserializing
oStream.Position = 0
'Deserialize the graph into a New set of objects
'Return the root of the graph (deep copy) to the caller
Return oFormatter.Deserialize(oStream)
End Function
Public Shared Function SafeIconFromFile(ByVal sPath As String) As Image
Dim oImage As Image
Dim oReturnImage As Image
@@ -139,9 +117,9 @@ Public Class mgrCommon
End If
Return fbBrowser.FileName
End If
End If
Return String.Empty
Return String.Empty
End Function
Private Shared Function BuildFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
@@ -177,6 +155,39 @@ Public Class mgrCommon
Return False
End Function
Private Shared Function BuildFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, ByRef fbBrowser As OpenFileDialog, Optional ByVal bSavedPath As Boolean = True) As Boolean
Dim oSavedPath As New clsSavedPath
fbBrowser.Title = sTitle
fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.ValidateNames = False
fbBrowser.CheckFileExists = False
fbBrowser.CheckPathExists = True
fbBrowser.FileName = mgrCommon_FolderSelection
If bSavedPath Then
oSavedPath = mgrSavedPath.GetPathByName(sName)
If oSavedPath.Path <> String.Empty Then
If Directory.Exists(oSavedPath.Path) Then
fbBrowser.InitialDirectory = oSavedPath.Path
End If
End If
End If
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
If bSavedPath Then
oSavedPath.PathName = sName
oSavedPath.Path = Path.GetDirectoryName(fbBrowser.FileName)
mgrSavedPath.AddUpdatePath(oSavedPath)
End If
Return True
End If
Return False
End Function
Public Shared Function OpenFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog
@@ -205,7 +216,20 @@ Public Class mgrCommon
Return New String() {}
End Function
Public Shared Function OpenFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean,
Public Shared Function OpenFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog
Dim bResult As Boolean
bResult = BuildFolderBrowser(sName, sTitle, sDefaultFolder, fbBrowser, bSavedPath)
If bResult Then
Return Path.GetDirectoryName(fbBrowser.FileName)
End If
Return String.Empty
End Function
Public Shared Function OpenClassicFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean,
Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New FolderBrowserDialog
Dim oSavedPath As New clsSavedPath
@@ -259,6 +283,14 @@ Public Class mgrCommon
Return False
End Function
Public Shared Function GetCurrentOS() As clsGame.eOS
If IsUnix() Then
Return clsGame.eOS.Linux
Else
Return clsGame.eOS.Windows
End If
End Function
Public Shared Function IsElevated() As Boolean
Dim oID As WindowsIdentity = WindowsIdentity.GetCurrent
Dim oPrincipal As New WindowsPrincipal(oID)
@@ -537,6 +569,20 @@ Public Class mgrCommon
End Try
End Sub
'Configure a fake form to trigger focus for priority messages
Private Shared Sub ConfigureFakeForm(ByRef frm As Form)
frm.FormBorderStyle = FormBorderStyle.None
frm.ShowInTaskbar = False
frm.Size = New Size(0, 0)
'We need to display it off-screen to hide it, setting the visiblity to false doesn't work in Mono.
frm.StartPosition = FormStartPosition.Manual
frm.Location = New Point(-100, -100)
frm.Show()
frm.Focus()
frm.BringToFront()
frm.TopMost = True
End Sub
'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
@@ -544,6 +590,23 @@ Public Class mgrCommon
Return oResult
End Function
'Handles no extra parameters
Public Shared Function ShowPriorityMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim frmFake As Form
'Create a fake mostly invisible form to get top focus
frmFake = New Form
ConfigureFakeForm(frmFake)
Dim oResult As MsgBoxResult
oResult = ShowMessage(sMsg, oType)
frmFake.TopMost = False
frmFake.Dispose()
Return oResult
End Function
'Handles single parameter stings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParam As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
@@ -551,6 +614,23 @@ Public Class mgrCommon
Return oResult
End Function
'Handles single parameter stings
Public Shared Function ShowPriorityMessage(ByVal sMsg As String, ByVal sParam As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim frmFake As Form
'Create a fake mostly invisible form to get top focus
frmFake = New Form
ConfigureFakeForm(frmFake)
Dim oResult As MsgBoxResult
oResult = ShowMessage(sMsg, sParam, oType)
frmFake.TopMost = False
frmFake.Dispose()
Return oResult
End Function
'Handles multi-parameter strings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParams As String(), ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
@@ -558,6 +638,23 @@ Public Class mgrCommon
Return oResult
End Function
'Handles multi-parameter strings
Public Shared Function ShowPriorityMessage(ByVal sMsg As String, ByVal sParams As String(), ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim frmFake As Form
'Create a fake mostly invisible form to get top focus
frmFake = New Form
ConfigureFakeForm(frmFake)
Dim oResult As MsgBoxResult
oResult = ShowMessage(sMsg, sParams, oType)
frmFake.TopMost = False
frmFake.Dispose()
Return oResult
End Function
'Handles no extra parameters
Public Shared Function FormatString(ByVal sString As String) As String
sString = sString.Replace("[BR]", vbCrLf)
+27
View File
@@ -281,4 +281,31 @@
End Function
Public Shared Function PrintTagsbyID(ByVal sID As String) As String
Dim slTags As SortedList
Dim oTag As clsTag
Dim sTags As String = String.Empty
Dim cTrim() As Char = {",", " "}
slTags = mgrGameTags.GetTagsByGame(sID)
For Each de As DictionaryEntry In slTags
oTag = DirectCast(de.Value, clsTag)
sTags &= "#" & oTag.Name & ", "
Next
Return sTags.TrimEnd(cTrim)
End Function
Public Shared Function PrintTagsbyList(ByVal oList As List(Of KeyValuePair(Of String, String))) As String
Dim sTags As String = String.Empty
Dim cTrim() As Char = {",", " "}
For Each kp As KeyValuePair(Of String, String) In oList
sTags &= "#" & kp.Value & ", "
Next
Return sTags.TrimEnd(cTrim)
End Function
End Class
+41 -8
View File
@@ -37,6 +37,7 @@ Public Class mgrMonitorList
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.IsRegEx = CBool(dr("IsRegEx"))
oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
oGame.OS = CInt(dr("OS"))
'Compile RegEx
If oGame.IsRegEx Then
@@ -71,6 +72,7 @@ Public Class mgrMonitorList
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
hshParams.Add("OS", oGame.OS)
Return hshParams
End Function
@@ -106,7 +108,7 @@ Public Class mgrMonitorList
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, "
sSQL &= "@Parameter, @Comments, @IsRegEx, @RecurseSubFolders)"
sSQL &= "@Parameter, @Comments, @IsRegEx, @RecurseSubFolders, @OS)"
'Parameters
hshParams = SetCoreParameters(oGame)
@@ -123,12 +125,13 @@ Public Class mgrMonitorList
sSQL = "UPDATE monitorlist SET MonitorID=@ID, Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, "
sSQL &= "CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments, IsRegEx=@IsRegEx, RecurseSubFolders=@RecurseSubFolders WHERE MonitorID=@QueryID;"
sSQL &= "CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments, IsRegEx=@IsRegEx, RecurseSubFolders=@RecurseSubFolders, OS=@OS WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE gametags SET MonitorID=@ID WHERE MonitorID=@QueryID;"
If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "UPDATE gameprocesses SET MonitorID=@ID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE sessions SET MonitorID=@ID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE winedata SET MonitorID=@ID WHERE MonitorID=@QueryID"
End If
'Parameters
@@ -142,6 +145,20 @@ Public Class mgrMonitorList
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
'Do NOT change MonitorID with this function
Public Shared Sub DoListFieldUpdate(ByVal sFieldName As String, ByVal oValue As Object, ByVal sQueryID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE monitorlist SET " & sFieldName & "=@" & sFieldName & " WHERE MonitorID=@QueryID;"
'Parameters
hshParams.Add(sFieldName, oValue)
hshParams.Add("QueryID", sQueryID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListUpdateMulti(ByVal sMonitorIDs As List(Of String), ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
@@ -181,6 +198,8 @@ Public Class mgrMonitorList
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM sessions "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM winedata "
sSQL &= "WHERE MonitorID = @MonitorID;"
End If
sSQL &= "DELETE FROM monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID;"
@@ -245,6 +264,18 @@ Public Class mgrMonitorList
sSQL = sSQL.TrimEnd(",")
sSQL &= ");"
sSQL &= "DELETE FROM winedata "
sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ");"
End If
sSQL &= "DELETE FROM monitorlist "
@@ -374,11 +405,11 @@ Public Class mgrMonitorList
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
End If
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx, RecurseSubFolders) "
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx, RecurseSubFolders, OS) "
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
sSQL &= "@TimeStamp, @ExcludeList, " & sGamePath & ", "
sSQL &= sIcon & ", @Hours, " & sVersion & ", "
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments, @IsRegEx, @RecurseSubFolders);"
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments, @IsRegEx, @RecurseSubFolders, @OS);"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
@@ -401,6 +432,7 @@ Public Class mgrMonitorList
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
hshParams.Add("OS", oGame.OS)
'Optional Parameters
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
@@ -556,7 +588,7 @@ Public Class mgrMonitorList
ByRef hshParams As Hashtable) As String
Dim sSQL As String = String.Empty
Dim iCounter As Integer = 0
Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx, RecurseSubFolders FROM monitorlist"
Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx, RecurseSubFolders, OS FROM monitorlist"
Dim sSort As String = " ORDER BY " & sSortField
If bSortAsc Then
@@ -675,7 +707,7 @@ Public Class mgrMonitorList
Case clsGameFilterField.eDataType.fNumeric
sSQL &= oFilter.Field.FieldName & " " & oFilter.NumericOperatorAsString & " @" & oFilter.ID
hshParams.Add(oFilter.ID, oFilter.Data)
Case clsGameFilterField.eDataType.fBool
Case clsGameFilterField.eDataType.fBool, clsGameFilterField.eDataType.fEnum
sSQL &= oFilter.Field.FieldName & " = @" & oFilter.ID
hshParams.Add(oFilter.ID, oFilter.Data)
End Select
@@ -754,6 +786,7 @@ Public Class mgrMonitorList
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.IsRegEx = CBool(dr("IsRegEx"))
oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
oGame.OS = CInt(dr("OS"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(oGame.ID)
oList.Add(oGame)
Next
@@ -831,7 +864,7 @@ Public Class mgrMonitorList
Cursor.Current = Cursors.WaitCursor
If Not mgrXML.ReadMonitorList(sLocation, oExportInfo, hshCompareFrom, bWebRead) Then
If Not mgrXML.ReadMonitorList(sLocation, oExportInfo, hshCompareFrom, bWebRead, bWinConfigsInLinux) Then
Exit Sub
End If
@@ -996,7 +1029,7 @@ Public Class mgrMonitorList
'If the remote database actually contains a list, then ask what to do
If iGameCount > 0 Then
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrCommon.ShowPriorityMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.SyncMonitorLists(oSettings)
Else
mgrMonitorList.SyncMonitorLists(oSettings, False)
+57 -15
View File
@@ -2,6 +2,7 @@
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Reflection
Imports System.Threading.Thread
Public Class mgrPath
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
@@ -484,6 +485,22 @@ Public Class mgrPath
Return sValue
End Function
Public Shared Function IsSupportedRegistryPath(ByVal sPath As String) As Boolean
If sPath.StartsWith("HKEY_CURRENT_USER") Then
Return True
ElseIf sPath.StartsWith("HKEY_LOCAL_MACHINE") Then
Return True
End If
Return False
End Function
Public Shared Function IsPathUNC(sPath As String) As Boolean
Dim sPrefix As String = Path.DirectorySeparatorChar & Path.DirectorySeparatorChar
If sPath.StartsWith(sPrefix) Then Return True
Return False
End Function
Public Shared Function IsAbsolute(sValue As String) As Boolean
Dim hshFolders As New Hashtable
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
@@ -497,6 +514,7 @@ Public Class mgrPath
'Don't use these in Unix
If Not mgrCommon.IsUnix Then
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
End If
@@ -569,8 +587,8 @@ Public Class mgrPath
If bNoAuto Then
sMessage = mgrCommon.FormatString(mgrPath_ConfirmManualPath, sSearchReason)
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath()
If mgrCommon.ShowPriorityMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualGamePath()
End If
Return sFolder
@@ -578,8 +596,9 @@ Public Class mgrPath
sMessage = mgrCommon.FormatString(mgrPath_ConfirmAutoPath, sSearchReason)
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrCommon.ShowPriorityMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
frmFind.ShowDialog()
frmFind.BringToFront()
If frmFind.FoundItem <> String.Empty Then
Return frmFind.FoundItem
@@ -594,7 +613,7 @@ Public Class mgrPath
End If
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath()
sFolder = SetManualGamePath()
End If
frmFind.Dispose()
@@ -605,22 +624,45 @@ Public Class mgrPath
Public Shared Function VerifyBackupPath(ByRef sBackupPath As String) As Boolean
Dim dBrowser As FolderBrowserDialog
Dim oDialogResult As DialogResult
Dim iTotalWait As Integer
Dim iTimeOut As Integer = 60000
If Not Directory.Exists(sBackupPath) Then
If mgrCommon.ShowMessage(mgrPath_ConfirmBackupLocation, sBackupPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
dBrowser = New FolderBrowserDialog
dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
If dBrowser.ShowDialog = DialogResult.OK Then
sBackupPath = dBrowser.SelectedPath
Return True
Else
Do While Not (Directory.Exists(sBackupPath))
Sleep(5000)
iTotalWait += 5000
If iTotalWait >= iTimeOut Then
oDialogResult = mgrCommon.ShowPriorityMessage(mgrPath_ConfirmBackupLocation, sBackupPath, MsgBoxStyle.YesNoCancel)
If oDialogResult = MsgBoxResult.Yes Then
dBrowser = New FolderBrowserDialog
dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
If dBrowser.ShowDialog = DialogResult.OK Then
sBackupPath = dBrowser.SelectedPath
Return True
Else
Return False
End If
ElseIf oDialogResult = DialogResult.No Then
Return False
Else
iTotalWait = 0
End If
Else
Return False
End If
End If
Loop
Return True
End Function
Public Shared Function VerifyLinuxDesktopFileLocation(Optional ByRef sFoundPath As String = "") As Boolean
Dim sLocations As String() = New String() {"/usr/share/applications/gbm.desktop", "/usr/local/share/applications/gbm.desktop"}
For Each s As String In sLocations
If File.Exists(s) Then
sFoundPath = s
Return True
End If
Next
Return False
End Function
End Class
+27 -6
View File
@@ -8,6 +8,8 @@ Public Class mgrProcessDetection
Private dStartTime As DateTime = Now, dEndTime As DateTime = Now
Private lTimeSpent As Long = 0
Private oGame As clsGame
Private bWineProcess As Boolean = False
Private oWineData As clsWineData
Private oDuplicateGames As New ArrayList
Private bDuplicates As Boolean
Private bVerified As Boolean = False
@@ -63,6 +65,24 @@ Public Class mgrProcessDetection
End Set
End Property
Property WineProcess As Boolean
Get
Return bWineProcess
End Get
Set(value As Boolean)
bWineProcess = value
End Set
End Property
Property WineData As clsWineData
Get
Return oWineData
End Get
Set(value As clsWineData)
oWineData = value
End Set
End Property
Property Duplicate As Boolean
Get
Return bDuplicates
@@ -157,7 +177,7 @@ Public Class mgrProcessDetection
Return False
End Function
Private Function GetProcessPath(ByVal bWineProcess As Boolean) As String
Private Function GetProcessPath() As String
Try
If Not bWineProcess Then
Return Path.GetDirectoryName(FoundProcess.MainModule.FileName)
@@ -169,7 +189,7 @@ Public Class mgrProcessDetection
End Try
End Function
Private Sub FilterDetected(ByVal oDetectedGames As ArrayList, ByVal bWineProcess As Boolean)
Private Sub FilterDetected(ByVal oDetectedGames As ArrayList)
Dim bMatch As Boolean = False
Dim sFullCommand As String
Dim oNotDetectedWithParameters As New ArrayList
@@ -185,7 +205,7 @@ Public Class mgrProcessDetection
End If
'Get Process Path
ProcessPath = GetProcessPath(bWineProcess)
ProcessPath = GetProcessPath()
'Look for any games using parameters and any matches
For Each oDetectedGame As clsGame In oDetectedGames
@@ -248,7 +268,7 @@ Public Class mgrProcessDetection
End If
End Sub
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef bWineProcess As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Dim prsList() As Process = Process.GetProcesses
Dim sProcessCheck As String = String.Empty
Dim sProcessList As String = String.Empty
@@ -257,7 +277,8 @@ Public Class mgrProcessDetection
For Each prsCurrent As Process In prsList
'This needs to be wrapped due to issues with Mono.
Try
sProcessCheck = prsCurrent.ProcessName
'Some processes may return the ProcessName as a full path instead of the executable name.
sProcessCheck = Path.GetFileName(prsCurrent.ProcessName)
'Unix Handler
'We need some special handling for Wine processes
@@ -292,7 +313,7 @@ Public Class mgrProcessDetection
Next
If oDetectedGames.Count > 0 Then
FilterDetected(oDetectedGames, bWineProcess)
FilterDetected(oDetectedGames)
End If
If oDetectedGames.Count > 0 Then
+153 -73
View File
@@ -122,31 +122,43 @@ Public Class mgrRestore
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean
Dim sHash As String
Dim sExtractPath As String
Dim bRegistry As Boolean
Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
Else
sExtractPath = oBackupInfo.RelativeRestorePath
End If
'Check if this is a registry backup
bRegistry = mgrPath.IsSupportedRegistryPath(oBackupInfo.TruePath)
'Check if restore location exists, prompt to create if it doesn't.
If Not Directory.Exists(sExtractPath) Then
If mgrCommon.ShowMessage(mgrRestore_ConfirmCreatePath, sExtractPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Try
Directory.CreateDirectory(sExtractPath)
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True)
Return False
End Try
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
If bRegistry Then
'If this is a registry backup, we need to have elevated permissions in Windows to use reg.exe
If Not mgrCommon.IsUnix And Not mgrCommon.IsElevated Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorRegBackupElevation, oBackupInfo.Name), False, ToolTipIcon.Info, True)
Return False
End If
Else
If bCleanFolder Then
mgrCommon.DeleteDirectory(sExtractPath, True)
Directory.CreateDirectory(sExtractPath)
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
Else
sExtractPath = oBackupInfo.RelativeRestorePath
End If
'Check if restore location exists, prompt to create if it doesn't.
If Not Directory.Exists(sExtractPath) Then
If mgrCommon.ShowMessage(mgrRestore_ConfirmCreatePath, sExtractPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Try
Directory.CreateDirectory(sExtractPath)
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True)
Return False
End Try
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
Return False
End If
Else
If bCleanFolder Then
mgrCommon.DeleteDirectory(sExtractPath, True)
Directory.CreateDirectory(sExtractPath)
End If
End If
End If
@@ -170,77 +182,145 @@ Public Class mgrRestore
Return True
End Function
Private Function RunRegistryRestore(ByVal oBackupInfo As clsBackup, ByVal sBackupFile As String) As Boolean
Dim prsReg As New Process
Dim sBinaryPath As String
Dim sArguments As String
Dim oWineData As clsWineData
Dim sWineReg As String
Dim bPathVerified As Boolean
Dim bRestoreCompleted As Boolean = False
sArguments = "import """ & sBackupFile & """"
If mgrCommon.IsUnix Then
oWineData = mgrWineData.DoWineDataGetbyID(oBackupInfo.MonitorID)
prsReg.StartInfo.EnvironmentVariables.Add("WINEPREFIX", oWineData.Prefix)
sBinaryPath = oWineData.BinaryPath & Path.DirectorySeparatorChar & "wine"
sWineReg = oWineData.Prefix & Path.DirectorySeparatorChar & "drive_c/windows/system32/reg.exe"
sArguments = """" & sWineReg & """ " & sArguments
If File.Exists(sBinaryPath) Then
If File.Exists(sWineReg) Then
bPathVerified = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorRegNotFound, sWineReg), False, ToolTipIcon.Error, True)
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorWineNotFound, sBinaryPath), False, ToolTipIcon.Error, True)
End If
Else
sBinaryPath = Environment.GetFolderPath(Environment.SpecialFolder.Windows) & Path.DirectorySeparatorChar & "system32\reg.exe"
If File.Exists(sBinaryPath) Then
bPathVerified = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorRegNotFound, sBinaryPath), False, ToolTipIcon.Error, True)
End If
End If
If bPathVerified Then
Try
prsReg.StartInfo.Arguments = sArguments
prsReg.StartInfo.FileName = sBinaryPath
prsReg.StartInfo.UseShellExecute = False
prsReg.StartInfo.RedirectStandardOutput = True
prsReg.StartInfo.CreateNoWindow = True
prsReg.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreInProgress, oBackupInfo.TruePath), False, ToolTipIcon.Info, True)
prsReg.WaitForExit()
Select Case prsReg.ExitCode
Case 0
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreComplete, oBackupInfo.Name), False, ToolTipIcon.Info, True)
bRestoreCompleted = True
Case Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True)
End Select
prsReg.Dispose()
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorOtherFailure, ex.Message), False, ToolTipIcon.Error, True)
End Try
End If
Return bRestoreCompleted
End Function
Private Function Run7zRestore(ByVal oBackupInfo As clsBackup, ByVal sBackupFile As String) As Boolean
Dim prs7z As New Process
Dim sExtractPath As String
Dim bRestoreCompleted As Boolean = False
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
Else
sExtractPath = oBackupInfo.RelativeRestorePath
End If
Try
If File.Exists(sBackupFile) Then
If Settings.Is7zUtilityValid Then
prs7z.StartInfo.Arguments = "x" & oSettings.Prepared7zArguments & """" & sBackupFile & """ -o""" & sExtractPath & Path.DirectorySeparatorChar & """ -aoa -r"
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreInProgress, sExtractPath), False, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFullAbort, oBackupInfo.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreComplete, oBackupInfo.Name), False, ToolTipIcon.Info, True)
bRestoreCompleted = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True)
End If
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
End If
Else
RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorOtherFailure, ex.Message), False, ToolTipIcon.Error, True)
End Try
Return bRestoreCompleted
End Function
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup))
Dim prs7z As Process
Dim sBackupFile As String
Dim sExtractPath As String
Dim bRestoreCompleted As Boolean
For Each oBackupInfo In oRestoreList
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
sExtractPath = String.Empty
bRestoreCompleted = False
CancelOperation = False
RaiseEvent UpdateRestoreInfo(oBackupInfo)
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
If mgrPath.IsSupportedRegistryPath(oBackupInfo.TruePath) Then
bRestoreCompleted = RunRegistryRestore(oBackupInfo, sBackupFile)
Else
sExtractPath = oBackupInfo.RelativeRestorePath
bRestoreCompleted = Run7zRestore(oBackupInfo, sBackupFile)
End If
Try
If File.Exists(sBackupFile) Then
If Settings.Is7zUtilityValid Then
prs7z.StartInfo.Arguments = "x" & oSettings.Prepared7zArguments & """" & sBackupFile & """ -o""" & sExtractPath & Path.DirectorySeparatorChar & """ -aoa -r"
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreInProgress, sExtractPath), False, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFullAbort, oBackupInfo.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreComplete, oBackupInfo.Name), False, ToolTipIcon.Info, True)
bRestoreCompleted = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True)
bRestoreCompleted = False
End If
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bRestoreCompleted = False
End If
Else
RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
End If
If bRestoreCompleted Then
'Save Local Manifest
If mgrManifest.DoManifestCheck(oBackupInfo.MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorOtherFailure, ex.Message), False, ToolTipIcon.Error, True)
End Try
If bRestoreCompleted Then
'Save Local Manifest
If mgrManifest.DoManifestCheck(oBackupInfo.MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionComplete, oBackupInfo.CroppedName))
Else
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName))
+99 -65
View File
@@ -75,8 +75,8 @@ Public Class mgrSQLite
"BackupFolder TEXT NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SuppressBackup BOOLEAN NOT NULL, SuppressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL, SessionTracking BOOLEAN NOT NULL, " &
"SuppressMessages INTEGER NOT NULL, BackupOnLaunch BOOLEAN NOT NULL, UseGameID BOOLEAN NOT NULL, DisableSyncMessages BOOLEAN NOT NULL, ShowResolvedPaths BOOLEAN NOT NULL);"
"SuppressMessages INTEGER NOT NULL, BackupOnLaunch BOOLEAN NOT NULL, UseGameID BOOLEAN NOT NULL, DisableSyncMessages BOOLEAN NOT NULL, ShowResolvedPaths BOOLEAN NOT NULL, " &
"DisableDiskSpaceCheck BOOLEAN NOT NULL);"
'Add Tables (SavedPath)
sSql &= "CREATE TABLE savedpath (PathName TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
@@ -84,7 +84,8 @@ Public Class mgrSQLite
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, RecurseSubFolders NOT NULL);"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, RecurseSubFolders NOT NULL, " &
"OS INTEGER NOT NULL);"
'Add Tables (Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
@@ -108,6 +109,9 @@ Public Class mgrSQLite
'Add Tables (Game Processes)
sSql &= "CREATE TABLE gameprocesses (ProcessID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(ProcessID, MonitorID));"
'Add Tables (Wine Data)
sSql &= "CREATE TABLE winedata (MonitorID TEXT NOT NULL PRIMARY KEY, Prefix TEXT NOT NULL, SavePath TEXT NOT NULL, BinaryPath TEXT NOT NULL);"
'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
@@ -130,17 +134,18 @@ Public Class mgrSQLite
sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, RecurseSubFolders NOT NULL);"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, RecurseSubFolders NOT NULL, " &
"OS INTEGER NOT NULL);"
'Add Tables (Remote Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSql &= "CREATE TABLE manifest (ManifestID TEXT Not NULL PRIMARY KEY, MonitorID TEXT Not NULL, FileName TEXT Not NULL, " &
"DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
'Add Tables (Remote Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
sSql &= "CREATE TABLE tags (TagID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY); "
'Add Tables (Remote Game Tags)
sSql &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
sSql &= "CREATE TABLE gametags (TagID TEXT Not NULL, MonitorID TEXT Not NULL, PRIMARY KEY(TagID, MonitorID)); "
'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
@@ -379,7 +384,7 @@ Public Class mgrSQLite
'0.9 Upgrade
If GetDatabaseVersion() < 90 Then
BackupDB("v8")
sSQL = "ALTER TABLE monitorlist ADD COLUMN MonitorOnly BOOLEAN NOT NULL DEFAULT 0;"
sSQL = "ALTER TABLE monitorlist ADD COLUMN MonitorOnly BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=90"
RunParamQuery(sSQL, New Hashtable)
End If
@@ -391,25 +396,25 @@ Public Class mgrSQLite
BackupDB("v84")
'Overhaul Monitor List Table
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT Not NULL UNIQUE, Name TEXT Not NULL, Process TEXT Not NULL, Path TEXT, AbsolutePath BOOLEAN Not NULL, FolderSave BOOLEAN Not NULL, FileType TEXT, TimeStamp BOOLEAN Not NULL, ExcludeList TEXT Not NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN Not NULL, MonitorOnly BOOLEAN Not NULL, PRIMARY KEY(Name, Process));"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly) "
sSQL &= "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist;"
sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Variables Table
sSQL &= "CREATE TABLE variables_new (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
sSQL &= "CREATE TABLE variables_new (VariableID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY, Path TEXT Not NULL);"
sSQL &= "INSERT INTO variables_new (VariableID, Name, Path) SELECT VariableID, Name, Path FROM variables;"
sSQL &= "DROP TABLE variables; ALTER TABLE variables_new RENAME TO variables;"
'Overhaul Manifest Table
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY, FileName TEXT Not NULL, RestorePath TEXT Not NULL, AbsolutePath BOOLEAN Not NULL, DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add new settings
sSQL &= "ALTER TABLE settings ADD COLUMN Sync BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "ALTER TABLE settings ADD COLUMN CheckSum BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "ALTER TABLE settings ADD COLUMN Sync BOOLEAN Not NULL DEFAULT 1;"
sSQL &= "ALTER TABLE settings ADD COLUMN CheckSum BOOLEAN Not NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=91"
RunParamQuery(sSQL, New Hashtable)
@@ -427,13 +432,13 @@ Public Class mgrSQLite
BackupDB("v84")
'Overhaul Monitor List Table
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT Not NULL UNIQUE, Name TEXT Not NULL, Process TEXT Not NULL, Path TEXT, AbsolutePath BOOLEAN Not NULL, FolderSave BOOLEAN Not NULL, FileType TEXT, TimeStamp BOOLEAN Not NULL, ExcludeList TEXT Not NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN Not NULL, MonitorOnly BOOLEAN Not NULL, PRIMARY KEY(Name, Process));"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly) "
sSQL &= "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist;"
sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Manifest Table
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY, FileName TEXT Not NULL, RestorePath TEXT Not NULL, AbsolutePath BOOLEAN Not NULL, DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -457,7 +462,7 @@ Public Class mgrSQLite
BackupDB("v91")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN StartWithWindows BOOLEAN NOT NULL DEFAULT 0;"
sSQL = "ALTER TABLE settings ADD COLUMN StartWithWindows BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=92"
RunParamQuery(sSQL, New Hashtable)
@@ -503,11 +508,11 @@ Public Class mgrSQLite
BackupDB("v93")
'Add Tags Tables
sSQL = "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
sSQL = "CREATE TABLE tags (TagID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT Not NULL, MonitorID TEXT Not NULL, PRIMARY KEY(TagID, MonitorID)); "
'Add new setting
sSQL &= "ALTER TABLE settings ADD COLUMN TimeTracking BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "ALTER TABLE settings ADD COLUMN TimeTracking BOOLEAN Not NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=94"
@@ -518,8 +523,8 @@ Public Class mgrSQLite
BackupDB("v93")
'Add Tags Tables
sSQL = "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
sSQL = "CREATE TABLE tags (TagID TEXT Not NULL UNIQUE, Name TEXT Not NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT Not NULL, MonitorID TEXT Not NULL, PRIMARY KEY(TagID, MonitorID)); "
sSQL &= "PRAGMA user_version=94"
@@ -534,8 +539,8 @@ Public Class mgrSQLite
BackupDB("v94")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN SupressBackup BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN SupressBackupThreshold INTEGER NOT NULL DEFAULT 10;"
sSQL = "ALTER TABLE settings ADD COLUMN SupressBackup BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN SupressBackupThreshold INTEGER Not NULL DEFAULT 10;"
sSQL &= "PRAGMA user_version=95"
@@ -558,7 +563,7 @@ Public Class mgrSQLite
BackupDB("v95")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN CompressionLevel INTEGER NOT NULL DEFAULT 5;"
sSQL = "ALTER TABLE settings ADD COLUMN CompressionLevel INTEGER Not NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=96"
@@ -583,8 +588,8 @@ Public Class mgrSQLite
'Add new settings
sSQL = "ALTER TABLE settings ADD COLUMN Custom7zArguments TEXT;"
sSQL &= "ALTER TABLE settings ADD COLUMN Custom7zLocation TEXT;"
sSQL &= "ALTER TABLE settings ADD COLUMN SyncFields INTEGER NOT NULL DEFAULT 32;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN SyncFields INTEGER Not NULL DEFAULT 32;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=97"
RunParamQuery(sSQL, New Hashtable)
@@ -606,13 +611,13 @@ Public Class mgrSQLite
BackupDB("v97")
'Overhaul Manifest Table
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT Not NULL PRIMARY KEY, Name TEXT Not NULL, FileName TEXT Not NULL, RestorePath TEXT Not NULL, AbsolutePath BOOLEAN Not NULL, DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER Not NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=98"
@@ -626,13 +631,13 @@ Public Class mgrSQLite
BackupDB("v97")
'Overhaul Manifest Table
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT Not NULL PRIMARY KEY, Name TEXT Not NULL, FileName TEXT Not NULL, RestorePath TEXT Not NULL, AbsolutePath BOOLEAN Not NULL, DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER Not NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=98"
@@ -650,11 +655,11 @@ Public Class mgrSQLite
BackupDB("v98")
'Remove checksum field
sSQL = "CREATE TABLE settings_new (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);"
sSQL = "CREATE TABLE settings_new (SettingsID INTEGER Not NULL PRIMARY KEY, MonitorOnStartup BOOLEAN Not NULL, StartToTray BOOLEAN Not NULL, ShowDetectionToolTips BOOLEAN Not NULL, " &
"DisableConfirmation BOOLEAN Not NULL, CreateSubFolder BOOLEAN Not NULL, ShowOverwriteWarning BOOLEAN Not NULL, RestoreOnLaunch BOOLEAN Not NULL, " &
"BackupFolder TEXT Not NULL, Sync BOOLEAN Not NULL, StartWithWindows BOOLEAN Not NULL, TimeTracking BOOLEAN Not NULL, " &
"SupressBackup BOOLEAN Not NULL, SupressBackupThreshold INTEGER Not NULL, CompressionLevel INTEGER Not NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER Not NULL, AutoSaveLog BOOLEAN Not NULL);"
sSQL &= "INSERT INTO settings_new (SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog) " &
@@ -663,9 +668,9 @@ Public Class mgrSQLite
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoRestore BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoMark BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoRestore BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoMark BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
@@ -675,7 +680,7 @@ Public Class mgrSQLite
BackupDB("v98")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL = "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
@@ -689,7 +694,7 @@ Public Class mgrSQLite
BackupDB("v101")
'Add Table (SavedPath)
sSQL = "CREATE TABLE savedpath (PathName TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
sSQL = "CREATE TABLE savedpath (PathName TEXT Not NULL PRIMARY KEY, Path TEXT Not NULL);"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN Parameter TEXT;"
@@ -718,7 +723,7 @@ Public Class mgrSQLite
BackupDB("v102")
'Add Tables (Sessions)
sSQL = "CREATE TABLE sessions (MonitorID TEXT NOT NULL, Start INTEGER NOT NULL, End INTEGER NOT NULL, PRIMARY KEY(MonitorID, Start));"
sSQL = "CREATE TABLE sessions (MonitorID TEXT Not NULL, Start INTEGER Not NULL, End INTEGER Not NULL, PRIMARY KEY(MonitorID, Start));"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN Comments TEXT;"
@@ -748,7 +753,7 @@ Public Class mgrSQLite
BackupDB("v105")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;"
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=108"
@@ -759,7 +764,7 @@ Public Class mgrSQLite
BackupDB("v105")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;"
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=108"
@@ -774,33 +779,33 @@ Public Class mgrSQLite
BackupDB("v108")
'Add Tables
sSQL = "CREATE TABLE processes (ProcessID TEXT NOT NULL PRIMARY KEY, Name Text NOT NULL, Path TEXT NOT NULL, Args TEXT, Kill BOOLEAN NOT NULL);"
sSQL &= "CREATE TABLE gameprocesses (ProcessID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(ProcessID, MonitorID));"
sSQL = "CREATE TABLE processes (ProcessID TEXT Not NULL PRIMARY KEY, Name Text Not NULL, Path TEXT Not NULL, Args TEXT, Kill BOOLEAN Not NULL);"
sSQL &= "CREATE TABLE gameprocesses (ProcessID TEXT Not NULL, MonitorID TEXT Not NULL, PRIMARY KEY(ProcessID, MonitorID));"
'Overhaul Tables
sSQL &= "CREATE TABLE settings_new (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SuppressBackup BOOLEAN NOT NULL, SuppressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL, SessionTracking BOOLEAN NOT NULL, " &
"SuppressMessages INTEGER NOT NULL, BackupOnLaunch BOOLEAN NOT NULL, UseGameID BOOLEAN NOT NULL, DisableSyncMessages BOOLEAN NOT NULL);"
sSQL &= "CREATE TABLE settings_new (SettingsID INTEGER Not NULL PRIMARY KEY, MonitorOnStartup BOOLEAN Not NULL, StartToTray BOOLEAN Not NULL, ShowDetectionToolTips BOOLEAN Not NULL, " &
"DisableConfirmation BOOLEAN Not NULL, CreateSubFolder BOOLEAN Not NULL, ShowOverwriteWarning BOOLEAN Not NULL, RestoreOnLaunch BOOLEAN Not NULL, " &
"BackupFolder TEXT Not NULL, StartWithWindows BOOLEAN Not NULL, TimeTracking BOOLEAN Not NULL, " &
"SuppressBackup BOOLEAN Not NULL, SuppressBackupThreshold INTEGER Not NULL, CompressionLevel INTEGER Not NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER Not NULL, AutoSaveLog BOOLEAN Not NULL, AutoRestore BOOLEAN Not NULL, AutoMark BOOLEAN Not NULL, SessionTracking BOOLEAN Not NULL, " &
"SuppressMessages INTEGER Not NULL, BackupOnLaunch BOOLEAN Not NULL, UseGameID BOOLEAN Not NULL, DisableSyncMessages BOOLEAN Not NULL);"
sSQL &= "INSERT INTO settings_new(SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, ShowOverwriteWarning, RestoreOnLaunch, " &
"BackupFolder, StartWithWindows, TimeTracking, SuppressBackup, SuppressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " &
"AutoRestore, AutoMark, SessionTracking, SuppressMessages, BackupOnLaunch, UseGameID, DisableSyncMessages) SELECT SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, ShowOverwriteWarning, RestoreOnLaunch, " &
"BackupFolder, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " &
"AutoRestore, AutoMark, SessionTracking, 0, 1, 0, 1 FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
sSQL &= "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
sSQL &= "CREATE TABLE monitorlist_new (MonitorID TEXT Not NULL PRIMARY KEY, Name TEXT Not NULL, Process TEXT Not NULL, Path TEXT, " &
"AbsolutePath BOOLEAN Not NULL, FolderSave BOOLEAN Not NULL, FileType TEXT, TimeStamp BOOLEAN Not NULL, ExcludeList TEXT Not NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN Not NULL, MonitorOnly BOOLEAN Not NULL, " &
"BackupLimit INTEGER Not NULL, CleanFolder BOOLEAN Not NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN Not NULL);"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist;" &
"DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT Not NULL PRIMARY KEY, MonitorID TEXT Not NULL, FileName TEXT Not NULL, " &
"DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " &
"SELECT ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum FROM manifest NATURAL JOIN monitorlist GROUP BY ManifestID;" &
"DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -817,10 +822,10 @@ Public Class mgrSQLite
BackupDB("v108")
'Overhaul Tables
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT Not NULL PRIMARY KEY, Name TEXT Not NULL, Process TEXT Not NULL, Path TEXT, " &
"AbsolutePath BOOLEAN Not NULL, FolderSave BOOLEAN Not NULL, FileType TEXT, TimeStamp BOOLEAN Not NULL, ExcludeList TEXT Not NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN Not NULL, MonitorOnly BOOLEAN Not NULL, " &
"BackupLimit INTEGER Not NULL, CleanFolder BOOLEAN Not NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN Not NULL);"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
@@ -835,8 +840,8 @@ Public Class mgrSQLite
mgrTags.SyncTags(True)
mgrGameTags.SyncGameTags(True)
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT Not NULL PRIMARY KEY, MonitorID TEXT Not NULL, FileName TEXT Not NULL, " &
"DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " &
"SELECT ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum FROM manifest NATURAL JOIN monitorlist GROUP BY ManifestID;" &
"DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -856,7 +861,7 @@ Public Class mgrSQLite
BackupDB("v110")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN ShowResolvedPaths BOOLEAN NOT NULL DEFAULT 1;"
sSQL = "ALTER TABLE settings ADD COLUMN ShowResolvedPaths BOOLEAN Not NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=115"
@@ -916,6 +921,35 @@ Public Class mgrSQLite
RunParamQuery(sSQL, New Hashtable)
End If
End If
'1.18 Upgrade
If GetDatabaseVersion() < 118 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v116")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN OS INTEGER NOT NULL DEFAULT " & mgrCommon.GetCurrentOS & ";"
sSQL &= "ALTER TABLE settings ADD COLUMN DisableDiskSpaceCheck BOOLEAN NOT NULL DEFAULT 0;"
'Add Tables (Wine Data)
sSQL &= "CREATE TABLE winedata (MonitorID TEXT NOT NULL PRIMARY KEY, Prefix TEXT NOT NULL, SavePath TEXT NOT NULL, BinaryPath TEXT NOT NULL);"
sSQL &= "PRAGMA user_version=118"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v116")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN OS INTEGER NOT NULL DEFAULT " & mgrCommon.GetCurrentOS & ";"
sSQL &= "PRAGMA user_version=118"
RunParamQuery(sSQL, New Hashtable)
End If
End If
End Sub
Public Function GetDBSize() As Long
+14 -1
View File
@@ -26,12 +26,14 @@ Public Class mgrSettings
Private bUseGameID As Boolean = False
Private bDisableSyncMessages As Boolean = True
Private bShowResolvedPaths As Boolean = True
Private bDisableDiskSpaceCheck As Boolean = False
<Flags()> Public Enum eSuppressMessages
None = 0
GameIDSync = 1
BackupImport = 2
WinConfigsInLinux = 4
WineConfig = 16
End Enum
Property StartWithWindows As Boolean
@@ -307,6 +309,15 @@ Public Class mgrSettings
End Set
End Property
Property DisableDiskSpaceCheck As Boolean
Get
Return bDisableDiskSpaceCheck
End Get
Set(value As Boolean)
bDisableDiskSpaceCheck = value
End Set
End Property
Sub New()
'The GameIDsync message should be suppressed on all new databases
SuppressMessages = SetMessageField(SuppressMessages, eSuppressMessages.GameIDSync)
@@ -321,7 +332,7 @@ Public Class mgrSettings
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @StartWithWindows, "
sSQL &= "@TimeTracking, @SuppressBackup, @SuppressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark, @SessionTracking, @SuppressMessages, @BackupOnLaunch, @UseGameID, "
sSQL &= "@DisableSyncMessages, @ShowResolvedPaths)"
sSQL &= "@DisableSyncMessages, @ShowResolvedPaths, @DisableDiskSpaceCheck)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray)
@@ -348,6 +359,7 @@ Public Class mgrSettings
hshParams.Add("UseGameID", UseGameID)
hshParams.Add("DisableSyncMessages", DisableSyncMessages)
hshParams.Add("ShowResolvedPaths", ShowResolvedPaths)
hshParams.Add("DisableDiskSpaceCheck", DisableDiskSpaceCheck)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
@@ -388,6 +400,7 @@ Public Class mgrSettings
UseGameID = CBool(dr("UseGameID"))
DisableSyncMessages = CBool(dr("DisableSyncMessages"))
ShowResolvedPaths = CBool(dr("ShowResolvedPaths"))
DisableDiskSpaceCheck = CBool(dr("DisableDiskSpaceCheck"))
Next
oDatabase.Disconnect()
+73
View File
@@ -0,0 +1,73 @@
Public Class mgrWineData
Private Shared Function MapToObject(ByVal dr As DataRow) As clsWineData
Dim oWineGame As New clsWineData
oWineGame.MonitorID = CStr(dr("MonitorID"))
If Not IsDBNull(dr("Prefix")) Then oWineGame.Prefix = CStr(dr("Prefix"))
If Not IsDBNull(dr("SavePath")) Then oWineGame.SavePath = CStr(dr("SavePath"))
If Not IsDBNull(dr("BinaryPath")) Then oWineGame.BinaryPath = CStr(dr("BinaryPath"))
Return oWineGame
End Function
Private Shared Function SetCoreParameters(ByVal oWineGame As clsWineData) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("MonitorID", oWineGame.MonitorID)
hshParams.Add("Prefix", oWineGame.Prefix)
hshParams.Add("SavePath", oWineGame.SavePath)
hshParams.Add("BinaryPath", oWineGame.BinaryPath)
Return hshParams
End Function
Public Shared Sub DoWineDataAddUpdate(ByVal oWineGame As clsWineData)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "INSERT OR REPLACE INTO winedata VALUES (@MonitorID, @Prefix, @SavePath, @BinaryPath)"
'Parameters
hshParams = SetCoreParameters(oWineGame)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoWineDataDelete(ByVal sMonitorID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM winedata "
sSQL &= "WHERE MonitorID = @MonitorID;"
hshParams.Add("MonitorID", sMonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function DoWineDataGetbyID(ByVal sMonitorID As String) As clsWineData
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oWineData As New clsWineData
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM winedata "
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("MonitorID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oWineData = MapToObject(dr)
Next
Return oWineData
End Function
End Class
+10 -1
View File
@@ -6,7 +6,7 @@ Imports System.Net
Public Class mgrXML
Public Shared Function ReadMonitorList(ByVal sLocation As String, ByRef oExportInfo As ExportData, ByRef hshList As Hashtable, Optional ByVal bWebRead As Boolean = False) As Boolean
Public Shared Function ReadMonitorList(ByVal sLocation As String, ByRef oExportInfo As ExportData, ByRef hshList As Hashtable, Optional ByVal bWebRead As Boolean = False, Optional ByVal bWinConfigsInLinux As Boolean = False) As Boolean
Dim oList As List(Of Game)
Dim hshDupeList As New Hashtable
Dim oExportData As New ExportData
@@ -42,6 +42,15 @@ Public Class mgrXML
oGame.Comments = g.Comments
oGame.IsRegEx = g.IsRegEx
oGame.RecurseSubFolders = g.RecurseSubFolders
oGame.OS = g.OS
'Retain compatability when the OS value is not set
If oGame.OS = 0 Then
If bWinConfigsInLinux Then
oGame.OS = clsGame.eOS.Windows
Else
oGame.OS = mgrCommon.GetCurrentOS
End If
End If
For Each t As Tag In g.Tags
oGame.ImportTags.Add(t)
Next
+295 -16
View File
@@ -96,6 +96,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to An error occured attempting to launch the application:[BR][BR][PARAM].
'''</summary>
Friend ReadOnly Property App_ErrorLaunchExternal() As String
Get
Return ResourceManager.GetString("App_ErrorLaunchExternal", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to This function is currently not available on a Unix based operating system..
'''</summary>
@@ -123,6 +132,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Linux.
'''</summary>
Friend ReadOnly Property App_LinuxOS() As String
Get
Return ResourceManager.GetString("App_LinuxOS", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Game Backup Monitor.
'''</summary>
@@ -195,6 +213,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Windows.
'''</summary>
Friend ReadOnly Property App_WindowsOS() As String
Get
Return ResourceManager.GetString("App_WindowsOS", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to http://regexr.com/?expression=[PARAM]&amp;text=test.
'''</summary>
@@ -1167,6 +1194,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to OS.
'''</summary>
Friend ReadOnly Property frmFilter_FieldOS() As String
Get
Return ResourceManager.GetString("frmFilter_FieldOS", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Parameter.
'''</summary>
@@ -1671,6 +1707,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Wine Configuration....
'''</summary>
Friend ReadOnly Property frmGameManager_btnWineConfig() As String
Get
Return ResourceManager.GetString("frmGameManager_btnWineConfig", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Delete folder on restore.
'''</summary>
@@ -2346,6 +2391,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to OS:.
'''</summary>
Friend ReadOnly Property frmGameManager_lblOS() As String
Get
Return ResourceManager.GetString("frmGameManager_lblOS", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Parameter:.
'''</summary>
@@ -2500,7 +2554,7 @@ Namespace My.Resources
End Property
'''<summary>
''' Looks up a localized string similar to Official Windows configurations can be used in Linux for games running in Wine or Proton.[BR][BR]You do not need to modify these configurations, GBM will automatically do any required path conversions the first time the game is detected.[BR][BR]This message will only be shown once..
''' Looks up a localized string similar to Official Windows configurations can be used in Linux for games running in Wine or Proton.[BR][BR]You do not need to modify these configurations, GBM will automatically do any required path conversions when the game is detected.[BR][BR]This message will only be shown once..
'''</summary>
Friend ReadOnly Property frmGameManager_WarningWinConfigsInLinux() As String
Get
@@ -3255,6 +3309,24 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to GBM is set to start automatically, but the desktop link is missing. Automatic start has been disabled, please re-install GBM using a package manager or the makefile..
'''</summary>
Friend ReadOnly Property frmMain_ErrorLinuxAutoStartLinkMissing() As String
Get
Return ResourceManager.GetString("frmMain_ErrorLinuxAutoStartLinkMissing", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to GBM is set to start automatically, but the autostart link is missing. The autostart link has been re-created..
'''</summary>
Friend ReadOnly Property frmMain_ErrorLinuxAutoStartMissing() As String
Get
Return ResourceManager.GetString("frmMain_ErrorLinuxAutoStartMissing", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The command [PARAM] requires more parameters..
'''</summary>
@@ -3291,6 +3363,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] uses a Windows configuration and requires a Wine save path to perform this operation..
'''</summary>
Friend ReadOnly Property frmMain_ErrorNoWineSavePath() As String
Get
Return ResourceManager.GetString("frmMain_ErrorNoWineSavePath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] uses a relative path and has never been detected on this computer..
'''</summary>
@@ -4012,7 +4093,16 @@ Namespace My.Resources
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] Wine Prefix: [PARAM].
''' Looks up a localized string similar to Wine Binary Path: [PARAM].
'''</summary>
Friend ReadOnly Property frmMain_WineBinaryPath() As String
Get
Return ResourceManager.GetString("frmMain_WineBinaryPath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Wine Prefix: [PARAM].
'''</summary>
Friend ReadOnly Property frmMain_WinePrefix() As String
Get
@@ -4021,7 +4111,7 @@ Namespace My.Resources
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] Converted Save Path: [PARAM].
''' Looks up a localized string similar to Wine Save Path: [PARAM].
'''</summary>
Friend ReadOnly Property frmMain_WineSavePath() As String
Get
@@ -4614,6 +4704,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Start automatically on log-in.
'''</summary>
Friend ReadOnly Property frmSettings_chkAutoStart() As String
Get
Return ResourceManager.GetString("frmSettings_chkAutoStart", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Disable backup confirmation.
'''</summary>
@@ -4641,6 +4740,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Disable disk space check prior to backup.
'''</summary>
Friend ReadOnly Property frmSettings_chkDisableDiskSpaceCheck() As String
Get
Return ResourceManager.GetString("frmSettings_chkDisableDiskSpaceCheck", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Disable sync event messages.
'''</summary>
@@ -4705,20 +4813,11 @@ Namespace My.Resources
End Property
'''<summary>
''' Looks up a localized string similar to Start to system tray.
''' Looks up a localized string similar to Start minimized.
'''</summary>
Friend ReadOnly Property frmSettings_chkStartToTray() As String
Friend ReadOnly Property frmSettings_chkStartMinimized() As String
Get
Return ResourceManager.GetString("frmSettings_chkStartToTray", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Start with Windows.
'''</summary>
Friend ReadOnly Property frmSettings_chkStartWindows() As String
Get
Return ResourceManager.GetString("frmSettings_chkStartWindows", resourceCulture)
Return ResourceManager.GetString("frmSettings_chkStartMinimized", resourceCulture)
End Get
End Property
@@ -4776,6 +4875,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to An error occured while configuring autostart:[BR][BR][PARAM].
'''</summary>
Friend ReadOnly Property frmSettings_ErrorLinuxAutoStart() As String
Get
Return ResourceManager.GetString("frmSettings_ErrorLinuxAutoStart", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The custom 7-Zip location [PARAM] does not exist..
'''</summary>
@@ -5577,6 +5685,96 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Cancel.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_btnCancel() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_btnCancel", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Save.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_btnSave() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_btnSave", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The Wine binary path is required.[BR][BR]Clear all fields and save to remove all Wine data for this game..
'''</summary>
Friend ReadOnly Property frmWineConfiguration_ErrorValidationBinaryPath() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_ErrorValidationBinaryPath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The Wine Prefix is required.[BR][BR]Clear all fields and save to remove all Wine data for this game..
'''</summary>
Friend ReadOnly Property frmWineConfiguration_ErrorValidationPrefix() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_ErrorValidationPrefix", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Wine Configuration.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_FormName() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_FormName", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Configuration.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_grpWineConfig() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_grpWineConfig", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Binary Path:.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_lblWineBinaryPath() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_lblWineBinaryPath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Prefix:.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_lblWinePrefix() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_lblWinePrefix", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Save Path:.
'''</summary>
Friend ReadOnly Property frmWineConfiguration_lblWineSavePath() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_lblWineSavePath", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Game Backup Monitor automatically updates the Wine configuration for a game each time it is detected. Modifying any of these fields manually is not recommended in most cases.[BR][BR]This warning will only be displayed once..
'''</summary>
Friend ReadOnly Property frmWineConfiguration_WarningSingle() As String
Get
Return ResourceManager.GetString("frmWineConfiguration_WarningSingle", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
'''</summary>
@@ -5844,6 +6042,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The backup folder is a UNC path. The disk space check has been skipped..
'''</summary>
Friend ReadOnly Property mgrBackup_ErrorBackupPathIsUNC() As String
Get
Return ResourceManager.GetString("mgrBackup_ErrorBackupPathIsUNC", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Backup aborted due to lack of disk space..
'''</summary>
@@ -5925,6 +6132,33 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] stores saved games in the Windows registry, accessing the registry requires elevated permissions. Please restart GBM as Administrator to perform this backup..
'''</summary>
Friend ReadOnly Property mgrBackup_ErrorRegBackupElevation() As String
Get
Return ResourceManager.GetString("mgrBackup_ErrorRegBackupElevation", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The backup has failed, please ensure the registry path is correct..
'''</summary>
Friend ReadOnly Property mgrBackup_ErrorRegBackupFailed() As String
Get
Return ResourceManager.GetString("mgrBackup_ErrorRegBackupFailed", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The utility reg.exe could not be located at [PARAM]. The backup cannot continue..
'''</summary>
Friend ReadOnly Property mgrBackup_ErrorRegNotFound() As String
Get
Return ResourceManager.GetString("mgrBackup_ErrorRegNotFound", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to A failure occured while creating a backup sub-folder for [PARAM].[BR][PARAM].
'''</summary>
@@ -5934,6 +6168,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The wine binary could not be located at [PARAM]. The backup cannot continue..
'''</summary>
Friend ReadOnly Property mgrBackup_ErrorWineNotFound() As String
Get
Return ResourceManager.GetString("mgrBackup_ErrorWineNotFound", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Generating SHA-256 hash for [PARAM] backup file..
'''</summary>
@@ -5997,6 +6240,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Current Folder.
'''</summary>
Friend ReadOnly Property mgrCommon_FolderSelection() As String
Get
Return ResourceManager.GetString("mgrCommon_FolderSelection", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] GB.
'''</summary>
@@ -6259,7 +6511,7 @@ Namespace My.Resources
End Property
'''<summary>
''' Looks up a localized string similar to The backup location [PARAM] is not available.[BR]It may be on an external or network drive that isn&apos;t connected.[BR][BR]Do you want to select another backup location and continue?.
''' Looks up a localized string similar to The backup location [PARAM] is not available.[BR]It may be on an external or network drive that isn&apos;t connected.[BR][BR]Do you want to select another backup location?[BR][BR]Select &quot;No&quot; to quit or &quot;Cancel&quot; to continue waiting for the location to become available..
'''</summary>
Friend ReadOnly Property mgrPath_ConfirmBackupLocation() As String
Get
@@ -6438,6 +6690,33 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] stores saved games in the Windows registry, accessing the registry requires elevated permissions. Please restart GBM as Administrator to restore this backup..
'''</summary>
Friend ReadOnly Property mgrRestore_ErrorRegBackupElevation() As String
Get
Return ResourceManager.GetString("mgrRestore_ErrorRegBackupElevation", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The utility reg.exe could not be located at [PARAM]. The restore cannot continue..
'''</summary>
Friend ReadOnly Property mgrRestore_ErrorRegNotFound() As String
Get
Return ResourceManager.GetString("mgrRestore_ErrorRegNotFound", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The wine binary could not be located at [PARAM]. The restore cannot continue..
'''</summary>
Friend ReadOnly Property mgrRestore_ErrorWineNotFound() As String
Get
Return ResourceManager.GetString("mgrRestore_ErrorWineNotFound", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to [PARAM] has no stored checksum, verification has been skipped..
'''</summary>
+101 -8
View File
@@ -1069,11 +1069,11 @@
<data name="frmSettings_chkShowDetectionTips" xml:space="preserve">
<value>Show detection notifications</value>
</data>
<data name="frmSettings_chkStartToTray" xml:space="preserve">
<value>Start to system tray</value>
<data name="frmSettings_chkStartMinimized" xml:space="preserve">
<value>Start minimized</value>
</data>
<data name="frmSettings_chkStartWindows" xml:space="preserve">
<value>Start with Windows</value>
<data name="frmSettings_chkAutoStart" xml:space="preserve">
<value>Start automatically on log-in</value>
</data>
<data name="frmSettings_chkSuppressBackup" xml:space="preserve">
<value>Ignore sessions shorter than</value>
@@ -1361,7 +1361,7 @@
<value>[PARAM][BR][BR]Do you wish to automatically search for the game path? (Path will be saved)</value>
</data>
<data name="mgrPath_ConfirmBackupLocation" xml:space="preserve">
<value>The backup location [PARAM] is not available.[BR]It may be on an external or network drive that isn't connected.[BR][BR]Do you want to select another backup location and continue?</value>
<value>The backup location [PARAM] is not available.[BR]It may be on an external or network drive that isn't connected.[BR][BR]Do you want to select another backup location?[BR][BR]Select "No" to quit or "Cancel" to continue waiting for the location to become available.</value>
</data>
<data name="mgrPath_ConfirmManualPath" xml:space="preserve">
<value>[PARAM][BR][BR]Do you wish to manually set the game path? (Path will be saved)</value>
@@ -2204,10 +2204,10 @@
<value>The backup folder [PARAM] cannot be renamed to [PARAM] because a folder with that name already exists.[BR][BR]Do you want to continue and remove the existing folder?</value>
</data>
<data name="frmMain_WinePrefix" xml:space="preserve">
<value>[PARAM] Wine Prefix: [PARAM]</value>
<value>Wine Prefix: [PARAM]</value>
</data>
<data name="frmMain_WineSavePath" xml:space="preserve">
<value>[PARAM] Converted Save Path: [PARAM]</value>
<value>Wine Save Path: [PARAM]</value>
</data>
<data name="mgrPath_ErrorBuildingWinePath" xml:space="preserve">
<value>An error occured when building a Wine path.[BR][BR][PARAM]</value>
@@ -2264,7 +2264,7 @@
<value>&amp;Windows...</value>
</data>
<data name="frmGameManager_WarningWinConfigsInLinux" xml:space="preserve">
<value>Official Windows configurations can be used in Linux for games running in Wine or Proton.[BR][BR]You do not need to modify these configurations, GBM will automatically do any required path conversions the first time the game is detected.[BR][BR]This message will only be shown once.</value>
<value>Official Windows configurations can be used in Linux for games running in Wine or Proton.[BR][BR]You do not need to modify these configurations, GBM will automatically do any required path conversions when the game is detected.[BR][BR]This message will only be shown once.</value>
</data>
<data name="frmGameManager_ConfirmBackupImportOverwriteSingle" xml:space="preserve">
<value>Importing this backup file will overwrite the current backup file for [PARAM].[BR][BR]Do you want to continue? This will close the form.</value>
@@ -2281,4 +2281,97 @@
<data name="frmMain_ErrorInvalidMode" xml:space="preserve">
<value>Invalid mode([PARAM]) for command [PARAM].</value>
</data>
<data name="App_LinuxOS" xml:space="preserve">
<value>Linux</value>
</data>
<data name="App_WindowsOS" xml:space="preserve">
<value>Windows</value>
</data>
<data name="frmGameManager_lblOS" xml:space="preserve">
<value>OS:</value>
</data>
<data name="frmGameManager_btnWineConfig" xml:space="preserve">
<value>&amp;Wine Configuration...</value>
</data>
<data name="frmFilter_FieldOS" xml:space="preserve">
<value>OS</value>
</data>
<data name="frmMain_WineBinaryPath" xml:space="preserve">
<value>Wine Binary Path: [PARAM]</value>
</data>
<data name="frmMain_ErrorNoWineSavePath" xml:space="preserve">
<value>[PARAM] uses a Windows configuration and requires a Wine save path to perform this operation.</value>
</data>
<data name="frmWineConfiguration_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="frmWineConfiguration_btnSave" xml:space="preserve">
<value>&amp;Save</value>
</data>
<data name="frmWineConfiguration_ErrorValidationBinaryPath" xml:space="preserve">
<value>The Wine binary path is required.[BR][BR]Clear all fields and save to remove all Wine data for this game.</value>
</data>
<data name="frmWineConfiguration_ErrorValidationPrefix" xml:space="preserve">
<value>The Wine Prefix is required.[BR][BR]Clear all fields and save to remove all Wine data for this game.</value>
</data>
<data name="frmWineConfiguration_FormName" xml:space="preserve">
<value>Wine Configuration</value>
</data>
<data name="frmWineConfiguration_grpWineConfig" xml:space="preserve">
<value>Configuration</value>
</data>
<data name="frmWineConfiguration_lblWineBinaryPath" xml:space="preserve">
<value>Binary Path:</value>
</data>
<data name="frmWineConfiguration_lblWinePrefix" xml:space="preserve">
<value>Prefix:</value>
</data>
<data name="frmWineConfiguration_lblWineSavePath" xml:space="preserve">
<value>Save Path:</value>
</data>
<data name="frmWineConfiguration_WarningSingle" xml:space="preserve">
<value>Game Backup Monitor automatically updates the Wine configuration for a game each time it is detected. Modifying any of these fields manually is not recommended in most cases.[BR][BR]This warning will only be displayed once.</value>
</data>
<data name="App_ErrorLaunchExternal" xml:space="preserve">
<value>An error occured attempting to launch the application:[BR][BR][PARAM]</value>
</data>
<data name="mgrBackup_ErrorBackupPathIsUNC" xml:space="preserve">
<value>The backup folder is a UNC path. The disk space check has been skipped.</value>
</data>
<data name="frmSettings_chkDisableDiskSpaceCheck" xml:space="preserve">
<value>Disable disk space check prior to backup</value>
</data>
<data name="frmMain_ErrorLinuxAutoStartMissing" xml:space="preserve">
<value>GBM is set to start automatically, but the autostart link is missing. The autostart link has been re-created.</value>
</data>
<data name="frmSettings_ErrorLinuxAutoStart" xml:space="preserve">
<value>An error occured while configuring autostart:[BR][BR][PARAM]</value>
</data>
<data name="mgrBackup_ErrorRegBackupElevation" xml:space="preserve">
<value>[PARAM] stores saved games in the Windows registry, accessing the registry requires elevated permissions. Please restart GBM as Administrator to perform this backup.</value>
</data>
<data name="mgrBackup_ErrorRegBackupFailed" xml:space="preserve">
<value>The backup has failed, please ensure the registry path is correct.</value>
</data>
<data name="mgrBackup_ErrorRegNotFound" xml:space="preserve">
<value>The utility reg.exe could not be located at [PARAM]. The backup cannot continue.</value>
</data>
<data name="mgrBackup_ErrorWineNotFound" xml:space="preserve">
<value>The wine binary could not be located at [PARAM]. The backup cannot continue.</value>
</data>
<data name="mgrRestore_ErrorRegNotFound" xml:space="preserve">
<value>The utility reg.exe could not be located at [PARAM]. The restore cannot continue.</value>
</data>
<data name="mgrRestore_ErrorWineNotFound" xml:space="preserve">
<value>The wine binary could not be located at [PARAM]. The restore cannot continue.</value>
</data>
<data name="mgrRestore_ErrorRegBackupElevation" xml:space="preserve">
<value>[PARAM] stores saved games in the Windows registry, accessing the registry requires elevated permissions. Please restart GBM as Administrator to restore this backup.</value>
</data>
<data name="frmMain_ErrorLinuxAutoStartLinkMissing" xml:space="preserve">
<value>GBM is set to start automatically, but the desktop link is missing. Automatic start has been disabled, please re-install GBM using a package manager or the makefile.</value>
</data>
<data name="mgrCommon_FolderSelection" xml:space="preserve">
<value>Current Folder</value>
</data>
</root>
Binary file not shown.
Binary file not shown.
+38 -5
View File
@@ -1,14 +1,47 @@
Game Backup Monitor v1.1.7 Readme
Game Backup Monitor v1.1.8 Readme
http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
December 18, 2018
March 10, 2019
New in 1.1.7
New in 1.1.8
All Platforms:
- Fixed an issue that caused the include/exclude builder to crash GBM when a save path contained illegal characters.
- Fixed an issue that prevented GBM from recording the correct time spent playing a game, when that game was played over consecutive sessions.
- 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.
- Re-designed how GBM initilizes on startup.
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 failure occurs during startup.
The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html
Binary file not shown.
Binary file not shown.