Merge pull request #183 from MikeMaximus/v118

V118
This commit is contained in:
MikeMaximus
2019-03-10 11:49:57 -06:00
committed by GitHub
41 changed files with 2224 additions and 588 deletions
+10
View File
@@ -14,6 +14,7 @@
Private sComments As String Private sComments As String
Private bIsRegEx As Boolean Private bIsRegEx As Boolean
Private bRecurseSubFolders As Boolean Private bRecurseSubFolders As Boolean
Private iOS As clsGame.eOS
Private oTags As List(Of Tag) Private oTags As List(Of Tag)
Property ID As String Property ID As String
@@ -151,6 +152,15 @@
End Get End Get
End Property 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) Property Tags As List(Of Tag)
Get Get
Return oTags Return oTags
+29
View File
@@ -1,4 +1,5 @@
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Xml.Serialization
<Serializable()> <Serializable()>
Public Class clsGame Public Class clsGame
@@ -24,6 +25,7 @@ Public Class clsGame
Private sComments As String = String.Empty Private sComments As String = String.Empty
Private bIsRegEx As Boolean = False Private bIsRegEx As Boolean = False
Private bRecurseSubFolders As Boolean = True Private bRecurseSubFolders As Boolean = True
Private iOS As eOS = mgrCommon.GetCurrentOS()
Private oImportTags As New List(Of Tag) Private oImportTags As New List(Of Tag)
Private bImportUpdate As Boolean = False Private bImportUpdate As Boolean = False
Private oCompiledRegEx As Regex Private oCompiledRegEx As Regex
@@ -38,6 +40,13 @@ Public Class clsGame
MonitorGame = 64 MonitorGame = 64
End Enum End Enum
Public Enum eOS
<XmlEnum("1")>
Windows = 1
<XmlEnum("2")>
Linux = 2
End Enum
Property ID As String Property ID As String
Set(value As String) Set(value As String)
If Not value Is Nothing Then If Not value Is Nothing Then
@@ -106,7 +115,12 @@ Public Class clsGame
bAbsolutePath = value bAbsolutePath = value
End Set End Set
Get Get
'This makes sure a registry key path isn't seen as a relative path.
If mgrPath.IsSupportedRegistryPath(TruePath) Then
Return True
Else
Return bAbsolutePath Return bAbsolutePath
End If
End Get End Get
End Property End Property
@@ -254,6 +268,15 @@ Public Class clsGame
End Set End Set
End Property 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 Property TruePath As String
Set(value As String) Set(value As String)
sPath = value sPath = value
@@ -367,6 +390,9 @@ Public Class clsGame
If RecurseSubFolders <> oGame.RecurseSubFolders Then If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False Return False
End If End If
If OS <> oGame.OS Then
Return False
End If
'Optional Sync Fields 'Optional Sync Fields
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
@@ -446,6 +472,9 @@ Public Class clsGame
If RecurseSubFolders <> oGame.RecurseSubFolders Then If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False Return False
End If End If
If OS <> oGame.OS Then
Return False
End If
Return True Return True
End If End If
End Function End Function
+15
View File
@@ -4,6 +4,11 @@
fString = 1 fString = 1
fNumeric = 2 fNumeric = 2
fBool = 3 fBool = 3
fEnum = 4
End Enum
Public Enum eEnumFilterField As Integer
OS = 1
End Enum End Enum
<Flags()> Public Enum eFieldStatus <Flags()> Public Enum eFieldStatus
@@ -15,6 +20,7 @@
Private sFieldName As String Private sFieldName As String
Private sFriendlyFieldName As String Private sFriendlyFieldName As String
Private eType As eDataType Private eType As eDataType
Private eEnumField As eEnumFilterField
Private eStatus As eFieldStatus Private eStatus As eFieldStatus
Public Property FieldName As String Public Property FieldName As String
@@ -44,6 +50,15 @@
End Set End Set
End Property 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. 'This is a flag property - Setting a value will toggle that flag on and off.
Public Property Status As eFieldStatus Public Property Status As eFieldStatus
Get 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
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 If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub End Sub
-45
View File
@@ -66,46 +66,6 @@ Public Class frmAdvancedImport
End If End If
End Sub 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 Private Function CheckIgnoreTags(ByVal oTags As List(Of Tag)) As Boolean
Dim oTag As Tag Dim oTag As Tag
Dim sTag As String Dim sTag As String
@@ -142,11 +102,6 @@ Public Class frmAdvancedImport
bAddItem = False bAddItem = False
oApp = DirectCast(de.Value, clsGame) oApp = DirectCast(de.Value, clsGame)
'Run any required tag mods
If ModWinConfigsForLinux Then
ModTags(oApp.ImportTags)
End If
sTags = String.Empty sTags = String.Empty
oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName) oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
For Each oTag As Tag In oApp.ImportTags For Each oTag As Tag In oApp.ImportTags
+1
View File
@@ -49,6 +49,7 @@ Partial Class frmChooseGame
'lstGameBox 'lstGameBox
' '
Me.lstGameBox.FormattingEnabled = True Me.lstGameBox.FormattingEnabled = True
Me.lstGameBox.HorizontalScrollbar = True
Me.lstGameBox.Location = New System.Drawing.Point(15, 34) Me.lstGameBox.Location = New System.Drawing.Point(15, 34)
Me.lstGameBox.Name = "lstGameBox" Me.lstGameBox.Name = "lstGameBox"
Me.lstGameBox.Size = New System.Drawing.Size(228, 95) Me.lstGameBox.Size = New System.Drawing.Size(228, 95)
+9 -1
View File
@@ -26,11 +26,19 @@ Public Class frmChooseGame
End Property End Property
Private Sub FillComboBox() Private Sub FillComboBox()
Dim sTags As String
Dim sName As String
lstGameBox.ValueMember = "Key" lstGameBox.ValueMember = "Key"
lstGameBox.DisplayMember = "Value" lstGameBox.DisplayMember = "Value"
For Each o As clsGame In Process.DuplicateList 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) oGamesHash.Add(o.ID, o)
Next Next
+10 -10
View File
@@ -40,7 +40,7 @@ Partial Class frmFilter
Me.grpGameFilter = New System.Windows.Forms.GroupBox() Me.grpGameFilter = New System.Windows.Forms.GroupBox()
Me.lblNot = New System.Windows.Forms.Label() Me.lblNot = New System.Windows.Forms.Label()
Me.chkNot = New System.Windows.Forms.CheckBox() 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.numFilter = New System.Windows.Forms.NumericUpDown()
Me.cboNumericOps = New System.Windows.Forms.ComboBox() Me.cboNumericOps = New System.Windows.Forms.ComboBox()
Me.lblCurrentFilters = New System.Windows.Forms.Label() 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.lblNot)
Me.grpGameFilter.Controls.Add(Me.chkNot) 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.numFilter)
Me.grpGameFilter.Controls.Add(Me.cboNumericOps) Me.grpGameFilter.Controls.Add(Me.cboNumericOps)
Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters) Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters)
@@ -265,14 +265,14 @@ Partial Class frmFilter
Me.chkNot.TabIndex = 10 Me.chkNot.TabIndex = 10
Me.chkNot.UseVisualStyleBackColor = True Me.chkNot.UseVisualStyleBackColor = True
' '
'cboBoolFilter 'cboListFilter
' '
Me.cboBoolFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList Me.cboListFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboBoolFilter.FormattingEnabled = True Me.cboListFilter.FormattingEnabled = True
Me.cboBoolFilter.Location = New System.Drawing.Point(187, 36) Me.cboListFilter.Location = New System.Drawing.Point(187, 36)
Me.cboBoolFilter.Name = "cboBoolFilter" Me.cboListFilter.Name = "cboListFilter"
Me.cboBoolFilter.Size = New System.Drawing.Size(136, 21) Me.cboListFilter.Size = New System.Drawing.Size(136, 21)
Me.cboBoolFilter.TabIndex = 3 Me.cboListFilter.TabIndex = 3
' '
'numFilter 'numFilter
' '
@@ -549,7 +549,7 @@ Partial Class frmFilter
Friend WithEvents lblFields As Label Friend WithEvents lblFields As Label
Friend WithEvents cboNumericOps As ComboBox Friend WithEvents cboNumericOps As ComboBox
Friend WithEvents numFilter As NumericUpDown Friend WithEvents numFilter As NumericUpDown
Friend WithEvents cboBoolFilter As ComboBox Friend WithEvents cboListFilter As ComboBox
Friend WithEvents lblSortFields As Label Friend WithEvents lblSortFields As Label
Friend WithEvents Label1 As Label Friend WithEvents Label1 As Label
Friend WithEvents grpSortOptions As GroupBox Friend WithEvents grpSortOptions As GroupBox
+50 -16
View File
@@ -242,6 +242,15 @@ Public Class frmFilter
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField) 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 'IsRegEx
oField = New clsGameFilterField oField = New clsGameFilterField
oField.FieldName = "IsRegEx" oField.FieldName = "IsRegEx"
@@ -359,7 +368,7 @@ Public Class frmFilter
sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """" sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """"
Case clsGameFilterField.eDataType.fNumeric Case clsGameFilterField.eDataType.fNumeric
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data 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 sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select End Select
@@ -413,23 +422,22 @@ Public Class frmFilter
End Sub End Sub
Private Sub ChangeFilterMode() Private Sub ChangeFilterMode()
Dim oFilterType As clsGameFilterField.eDataType = DirectCast(cboFilterField.SelectedValue, clsGameFilterField).Type Dim oFilter As clsGameFilterField = DirectCast(cboFilterField.SelectedValue, clsGameFilterField)
'Reset 'Reset
cboNumericOps.SelectedIndex = 0 cboNumericOps.SelectedIndex = 0
cboBoolFilter.SelectedIndex = 0
numFilter.Value = 0 numFilter.Value = 0
txtStringFilter.Text = String.Empty txtStringFilter.Text = String.Empty
chkNot.Checked = False chkNot.Checked = False
'Reset Visibilty 'Reset Visibilty
cboBoolFilter.Visible = False cboListFilter.Visible = False
cboNumericOps.Visible = False cboNumericOps.Visible = False
numFilter.Visible = False numFilter.Visible = False
txtStringFilter.Visible = False txtStringFilter.Visible = False
'Set Visiblity 'Set Visiblity
Select Case oFilterType Select Case oFilter.Type
Case clsGameFilterField.eDataType.fString Case clsGameFilterField.eDataType.fString
txtStringFilter.Visible = True txtStringFilter.Visible = True
Case clsGameFilterField.eDataType.fNumeric Case clsGameFilterField.eDataType.fNumeric
@@ -437,7 +445,13 @@ Public Class frmFilter
numFilter.Visible = True numFilter.Visible = True
txtStringFilter.Visible = False txtStringFilter.Visible = False
Case clsGameFilterField.eDataType.fBool 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 Select
End Sub End Sub
@@ -458,8 +472,8 @@ Public Class frmFilter
oFilter.Data = numFilter.Value oFilter.Data = numFilter.Value
oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators) oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators)
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool Case clsGameFilterField.eDataType.fBool, clsGameFilterField.eDataType.fEnum
oFilter.Data = cboBoolFilter.SelectedValue oFilter.Data = cboListFilter.SelectedValue
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select End Select
@@ -531,20 +545,40 @@ Public Class frmFilter
End Sub End Sub
Private Sub LoadCombos() Private Sub LoadComboAsBool()
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))
Dim oBoolOperators As New List(Of KeyValuePair(Of Boolean, String)) Dim oBoolOperators As New List(Of KeyValuePair(Of Boolean, String))
'cboBoolFilter 'cboListFilter (Boolean)
cboBoolFilter.ValueMember = "Key" cboListFilter.ValueMember = "Key"
cboBoolFilter.DisplayMember = "Value" cboListFilter.DisplayMember = "Value"
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(True, frmFilter_cboBoolFilterEnabled)) oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(True, frmFilter_cboBoolFilterEnabled))
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(False, frmFilter_cboBoolFilterDisabled)) 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
cboNumericOps.ValueMember = "Key" cboNumericOps.ValueMember = "Key"
+76 -39
View File
@@ -28,12 +28,16 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button() Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button() Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox() 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.btnGameID = New System.Windows.Forms.Button()
Me.chkRegEx = New System.Windows.Forms.CheckBox() Me.chkRegEx = New System.Windows.Forms.CheckBox()
Me.lblComments = New System.Windows.Forms.Label() Me.lblComments = New System.Windows.Forms.Label()
Me.txtComments = New System.Windows.Forms.TextBox()
Me.txtParameter = New System.Windows.Forms.TextBox() Me.txtParameter = New System.Windows.Forms.TextBox()
Me.lblParameter = New System.Windows.Forms.Label() Me.lblParameter = New System.Windows.Forms.Label()
Me.txtComments = New System.Windows.Forms.TextBox()
Me.chkCleanFolder = New System.Windows.Forms.CheckBox() Me.chkCleanFolder = New System.Windows.Forms.CheckBox()
Me.lblLimit = New System.Windows.Forms.Label() Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown() Me.nudLimit = New System.Windows.Forms.NumericUpDown()
@@ -107,7 +111,6 @@ Partial Class frmGameManager
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem() Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
Me.btnProcesses = New System.Windows.Forms.Button() Me.btnProcesses = New System.Windows.Forms.Button()
Me.ttFullPath = New System.Windows.Forms.ToolTip(Me.components) Me.ttFullPath = New System.Windows.Forms.ToolTip(Me.components)
Me.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.grpConfig.SuspendLayout() Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout() Me.grpExtra.SuspendLayout()
@@ -164,13 +167,16 @@ Partial Class frmGameManager
'grpConfig 'grpConfig
' '
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.chkRecurseSubFolders)
Me.grpConfig.Controls.Add(Me.btnGameID) Me.grpConfig.Controls.Add(Me.btnGameID)
Me.grpConfig.Controls.Add(Me.chkRegEx) Me.grpConfig.Controls.Add(Me.chkRegEx)
Me.grpConfig.Controls.Add(Me.lblComments) Me.grpConfig.Controls.Add(Me.lblComments)
Me.grpConfig.Controls.Add(Me.txtComments)
Me.grpConfig.Controls.Add(Me.txtParameter) Me.grpConfig.Controls.Add(Me.txtParameter)
Me.grpConfig.Controls.Add(Me.lblParameter) Me.grpConfig.Controls.Add(Me.lblParameter)
Me.grpConfig.Controls.Add(Me.txtComments)
Me.grpConfig.Controls.Add(Me.chkCleanFolder) Me.grpConfig.Controls.Add(Me.chkCleanFolder)
Me.grpConfig.Controls.Add(Me.lblLimit) Me.grpConfig.Controls.Add(Me.lblLimit)
Me.grpConfig.Controls.Add(Me.nudLimit) Me.grpConfig.Controls.Add(Me.nudLimit)
@@ -197,6 +203,44 @@ Partial Class frmGameManager
Me.grpConfig.TabStop = False Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration" 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 'btnGameID
' '
Me.btnGameID.Location = New System.Drawing.Point(402, 17) Me.btnGameID.Location = New System.Drawing.Point(402, 17)
@@ -219,21 +263,12 @@ Partial Class frmGameManager
'lblComments 'lblComments
' '
Me.lblComments.AutoSize = True 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.Name = "lblComments"
Me.lblComments.Size = New System.Drawing.Size(59, 13) Me.lblComments.Size = New System.Drawing.Size(59, 13)
Me.lblComments.TabIndex = 19 Me.lblComments.TabIndex = 12
Me.lblComments.Text = "Comments:" 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 'txtParameter
' '
Me.txtParameter.Location = New System.Drawing.Point(70, 71) Me.txtParameter.Location = New System.Drawing.Point(70, 71)
@@ -250,49 +285,58 @@ Partial Class frmGameManager
Me.lblParameter.TabIndex = 7 Me.lblParameter.TabIndex = 7
Me.lblParameter.Text = "Parameter:" 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 'chkCleanFolder
' '
Me.chkCleanFolder.AutoSize = True 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.Name = "chkCleanFolder"
Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17) 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.Text = "Delete folder on restore"
Me.chkCleanFolder.UseVisualStyleBackColor = True Me.chkCleanFolder.UseVisualStyleBackColor = True
' '
'lblLimit 'lblLimit
' '
Me.lblLimit.AutoSize = True 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.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13) Me.lblLimit.Size = New System.Drawing.Size(68, 13)
Me.lblLimit.TabIndex = 18 Me.lblLimit.TabIndex = 23
Me.lblLimit.Text = "Backup Limit" Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False Me.lblLimit.Visible = False
' '
'nudLimit '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.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20) Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 17 Me.nudLimit.TabIndex = 22
Me.nudLimit.Visible = False Me.nudLimit.Visible = False
' '
'btnExclude '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.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23) 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.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True Me.btnExclude.UseVisualStyleBackColor = True
' '
'btnInclude '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.Name = "btnInclude"
Me.btnInclude.Size = New System.Drawing.Size(175, 23) 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.Text = "Incl&ude Items..."
Me.btnInclude.UseVisualStyleBackColor = True Me.btnInclude.UseVisualStyleBackColor = True
' '
@@ -372,20 +416,20 @@ Partial Class frmGameManager
'chkTimeStamp 'chkTimeStamp
' '
Me.chkTimeStamp.AutoSize = True 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.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17) 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.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True Me.chkTimeStamp.UseVisualStyleBackColor = True
' '
'chkFolderSave 'chkFolderSave
' '
Me.chkFolderSave.AutoSize = True 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.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17) 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.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True Me.chkFolderSave.UseVisualStyleBackColor = True
' '
@@ -614,6 +658,7 @@ Partial Class frmGameManager
Me.cboRemoteBackup.Name = "cboRemoteBackup" Me.cboRemoteBackup.Name = "cboRemoteBackup"
Me.cboRemoteBackup.Size = New System.Drawing.Size(387, 21) Me.cboRemoteBackup.Size = New System.Drawing.Size(387, 21)
Me.cboRemoteBackup.TabIndex = 12 Me.cboRemoteBackup.TabIndex = 12
Me.cboRemoteBackup.Tag = "wipe"
' '
'lblRestorePathData 'lblRestorePathData
' '
@@ -927,17 +972,6 @@ Partial Class frmGameManager
Me.ttFullPath.InitialDelay = 300 Me.ttFullPath.InitialDelay = 300
Me.ttFullPath.ReshowDelay = 60 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 'frmGameManager
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -1073,4 +1107,7 @@ Partial Class frmGameManager
Friend WithEvents cmsOfficialWindows As ToolStripMenuItem Friend WithEvents cmsOfficialWindows As ToolStripMenuItem
Friend WithEvents cmsOfficialLinux As ToolStripMenuItem Friend WithEvents cmsOfficialLinux As ToolStripMenuItem
Friend WithEvents chkRecurseSubFolders As CheckBox Friend WithEvents chkRecurseSubFolders As CheckBox
Friend WithEvents lblOS As Label
Friend WithEvents cboOS As ComboBox
Friend WithEvents btnWineConfig As Button
End Class End Class
+111 -39
View File
@@ -209,6 +209,14 @@ Public Class frmGameManager
Return sPath Return sPath
End Function 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 Private Function CheckManifestandUpdate(ByVal oOriginalApp As clsGame, ByVal oNewApp As clsGame, ByVal bUseGameID As Boolean) As Boolean
Dim oBackupItems As List(Of clsBackup) Dim oBackupItems As List(Of clsBackup)
Dim sDirectory As String Dim sDirectory As String
@@ -334,7 +342,7 @@ Public Class frmGameManager
oRestoreData = mgrRestore.CompareManifests oRestoreData = mgrRestore.CompareManifests
'Only show games with data to restore '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 For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame) oGame = DirectCast(de.Value, clsGame)
If Not oRestoreData.ContainsKey(oGame.ID) Then If Not oRestoreData.ContainsKey(oGame.ID) Then
@@ -345,7 +353,7 @@ Public Class frmGameManager
Next Next
ElseIf optBackupData.Checked Then ElseIf optBackupData.Checked Then
'Only show games with backup data '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 oRestoreData = oRemoteBackupData.Clone
For Each de As DictionaryEntry In oTemporaryList For Each de As DictionaryEntry In oTemporaryList
@@ -394,14 +402,14 @@ Public Class frmGameManager
End If End If
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 If sNewPath <> String.Empty Then txtAppPath.Text = sNewPath
End Sub End Sub
Private Sub SavePathBrowse() Private Sub SavePathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 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 Dim sNewPath As String
If txtSavePath.Text <> String.Empty Then If txtSavePath.Text <> String.Empty Then
@@ -410,7 +418,7 @@ Public Class frmGameManager
End If End If
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 If sNewPath <> String.Empty Then
txtSavePath.Text = sNewPath txtSavePath.Text = sNewPath
@@ -533,11 +541,15 @@ Public Class frmGameManager
sFileName = BackupFolder & CurrentBackupItem.FileName sFileName = BackupFolder & CurrentBackupItem.FileName
If File.Exists(sFileName) Then If File.Exists(sFileName) Then
Try
oProcessStartInfo = New ProcessStartInfo oProcessStartInfo = New ProcessStartInfo
oProcessStartInfo.FileName = sFileName oProcessStartInfo.FileName = sFileName
oProcessStartInfo.UseShellExecute = True oProcessStartInfo.UseShellExecute = True
oProcessStartInfo.Verb = "open" oProcessStartInfo.Verb = "open"
Process.Start(oProcessStartInfo) Process.Start(oProcessStartInfo)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
Else Else
mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation)
End If End If
@@ -641,11 +653,15 @@ Public Class frmGameManager
End If End If
If Directory.Exists(sPath) Then If Directory.Exists(sPath) Then
Try
oProcessStartInfo = New ProcessStartInfo oProcessStartInfo = New ProcessStartInfo
oProcessStartInfo.FileName = sPath oProcessStartInfo.FileName = sPath
oProcessStartInfo.UseShellExecute = True oProcessStartInfo.UseShellExecute = True
oProcessStartInfo.Verb = "open" oProcessStartInfo.Verb = "open"
Process.Start(oProcessStartInfo) Process.Start(oProcessStartInfo)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
Else Else
mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation)
End If End If
@@ -706,13 +722,13 @@ Public Class frmGameManager
If eCurrentMode = eModes.Add Then If eCurrentMode = eModes.Add Then
oTagsToSave = frm.TagList oTagsToSave = frm.TagList
FillTagsbyList(frm.TagList) lblTags.Text = mgrGameTags.PrintTagsbyList(frm.TagList)
Else Else
'Sync 'Sync
mgrMonitorList.SyncMonitorLists(Settings) mgrMonitorList.SyncMonitorLists(Settings)
'Only update visible tags if one item is selected '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 a tag filter is enabled, reload list to reflect changes
If optCustom.Checked Then If optCustom.Checked Then
@@ -726,6 +742,13 @@ Public Class frmGameManager
End Sub 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) Public Sub VerifyBackups(ByVal oApp As clsGame)
Dim oCurrentBackup As clsBackup Dim oCurrentBackup As clsBackup
Dim oCurrentBackups As List(Of clsBackup) Dim oCurrentBackups As List(Of clsBackup)
@@ -845,6 +868,18 @@ Public Class frmGameManager
btnMarkAsRestored.Enabled = False btnMarkAsRestored.Enabled = False
End If 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 End Sub
Private Sub UpdateBackupInfo(ByVal sManifestID As String) Private Sub UpdateBackupInfo(ByVal sManifestID As String)
@@ -923,6 +958,7 @@ Public Class frmGameManager
txtProcess.Text = oApp.ProcessName txtProcess.Text = oApp.ProcessName
chkRegEx.Checked = oApp.IsRegEx chkRegEx.Checked = oApp.IsRegEx
txtParameter.Text = oApp.Parameter txtParameter.Text = oApp.Parameter
cboOS.SelectedValue = CInt(oApp.OS)
If oSettings.ShowResolvedPaths Then If oSettings.ShowResolvedPaths Then
txtSavePath.Text = oApp.Path txtSavePath.Text = oApp.Path
sttPath = oApp.TruePath sttPath = oApp.TruePath
@@ -946,6 +982,7 @@ Public Class frmGameManager
UpdateBuilderButtonLabel(oApp.FileType, frmGameManager_IncludeShortcut, btnInclude, False) UpdateBuilderButtonLabel(oApp.FileType, frmGameManager_IncludeShortcut, btnInclude, False)
UpdateBuilderButtonLabel(oApp.ExcludeList, frmGameManager_ExcludeShortcut, btnExclude, False) UpdateBuilderButtonLabel(oApp.ExcludeList, frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False) UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
HandleWineConfig()
'Extra 'Extra
txtAppPath.Text = oApp.ProcessPath txtAppPath.Text = oApp.ProcessPath
@@ -953,7 +990,7 @@ Public Class frmGameManager
txtVersion.Text = oApp.Version txtVersion.Text = oApp.Version
txtIcon.Text = oApp.Icon txtIcon.Text = oApp.Icon
FillTagsbyID(oData.Key) lblTags.Text = mgrGameTags.PrintTagsbyID(oData.Key)
'Icon 'Icon
If IO.File.Exists(oApp.Icon) Then If IO.File.Exists(oApp.Icon) Then
@@ -972,33 +1009,6 @@ Public Class frmGameManager
IsLoading = False IsLoading = False
End Sub 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) Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
If Not IsLoading And Not eCurrentMode = eModes.MultiSelect Then If Not IsLoading And Not eCurrentMode = eModes.MultiSelect Then
IsDirty = True IsDirty = True
@@ -1021,6 +1031,7 @@ Public Class frmGameManager
Private Sub AssignDirtyHandlersMisc() Private Sub AssignDirtyHandlersMisc()
AddHandler chkEnabled.CheckedChanged, AddressOf DirtyCheck_ValueChanged AddHandler chkEnabled.CheckedChanged, AddressOf DirtyCheck_ValueChanged
AddHandler chkMonitorOnly.CheckedChanged, AddressOf DirtyCheck_ValueChanged AddHandler chkMonitorOnly.CheckedChanged, AddressOf DirtyCheck_ValueChanged
AddHandler cboOS.SelectedValueChanged, AddressOf DirtyCheck_ValueChanged
End Sub End Sub
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection) Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
@@ -1034,7 +1045,7 @@ Public Class frmGameManager
ElseIf TypeOf ctl Is NumericUpDown Then ElseIf TypeOf ctl Is NumericUpDown Then
DirectCast(ctl, NumericUpDown).Value = DirectCast(ctl, NumericUpDown).Minimum DirectCast(ctl, NumericUpDown).Value = DirectCast(ctl, NumericUpDown).Minimum
ElseIf TypeOf ctl Is ComboBox Then ElseIf TypeOf ctl Is ComboBox Then
DirectCast(ctl, ComboBox).DataSource = Nothing If ctl.Tag = "wipe" Then DirectCast(ctl, ComboBox).DataSource = Nothing
End If End If
Next Next
End Sub End Sub
@@ -1083,6 +1094,8 @@ Public Class frmGameManager
btnExclude.Text = frmGameManager_btnExclude btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = False btnImport.Enabled = False
btnExport.Enabled = False btnExport.Enabled = False
cboOS.SelectedValue = CInt(mgrCommon.GetCurrentOS)
HandleWineConfig()
Case eModes.Edit Case eModes.Edit
grpFilter.Enabled = False grpFilter.Enabled = False
lstGames.Enabled = False lstGames.Enabled = False
@@ -1129,7 +1142,6 @@ Public Class frmGameManager
lblTags.Visible = True lblTags.Visible = True
btnImport.Enabled = True btnImport.Enabled = True
btnExport.Enabled = True btnExport.Enabled = True
btnImportBackup.Enabled = True
Case eModes.Disabled Case eModes.Disabled
grpFilter.Enabled = True grpFilter.Enabled = True
lstGames.Enabled = True lstGames.Enabled = True
@@ -1158,6 +1170,7 @@ Public Class frmGameManager
btnExclude.Text = frmGameManager_btnExclude btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = True btnImport.Enabled = True
btnExport.Enabled = True btnExport.Enabled = True
cboOS.SelectedValue = CInt(mgrCommon.GetCurrentOS)
UpdateGenericButtonLabel(frmGameManager_IncludeShortcut, btnInclude, False) UpdateGenericButtonLabel(frmGameManager_IncludeShortcut, btnInclude, False)
UpdateGenericButtonLabel(frmGameManager_ExcludeShortcut, btnExclude, False) UpdateGenericButtonLabel(frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False) UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
@@ -1220,6 +1233,7 @@ Public Class frmGameManager
btnInclude.Enabled = False btnInclude.Enabled = False
btnExclude.Enabled = False btnExclude.Enabled = False
chkCleanFolder.Enabled = False chkCleanFolder.Enabled = False
btnWineConfig.Enabled = False
Else Else
chkFolderSave.Enabled = True chkFolderSave.Enabled = True
chkTimeStamp.Enabled = True chkTimeStamp.Enabled = True
@@ -1230,10 +1244,26 @@ Public Class frmGameManager
btnSavePathBrowse.Enabled = True btnSavePathBrowse.Enabled = True
btnInclude.Enabled = True btnInclude.Enabled = True
btnExclude.Enabled = True btnExclude.Enabled = True
btnWineConfig.Enabled = True
FolderSaveModeChange() FolderSaveModeChange()
End If End If
End Sub 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() Private Sub TimeStampModeChange()
If chkTimeStamp.Checked Then If chkTimeStamp.Checked Then
nudLimit.Visible = True nudLimit.Visible = True
@@ -1258,7 +1288,7 @@ Public Class frmGameManager
Private Sub VerifyCleanFolder() Private Sub VerifyCleanFolder()
If Not bIsLoading Then 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 chkCleanFolder.Enabled = True
Else Else
chkCleanFolder.Checked = False chkCleanFolder.Checked = False
@@ -1364,9 +1394,22 @@ Public Class frmGameManager
oApp.ProcessName = txtProcess.Text oApp.ProcessName = txtProcess.Text
oApp.Parameter = txtParameter.Text oApp.Parameter = txtParameter.Text
oApp.OS = CType(cboOS.SelectedValue, clsGame.eOS)
oApp.Path = mgrPath.ValidatePathForOS(txtSavePath.Text) oApp.Path = mgrPath.ValidatePathForOS(txtSavePath.Text)
'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 '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) oApp.AbsolutePath = Path.IsPathRooted(oApp.Path)
End If
oApp.FileType = txtFileType.Text oApp.FileType = txtFileType.Text
oApp.ExcludeList = txtExclude.Text oApp.ExcludeList = txtExclude.Text
oApp.FolderSave = chkFolderSave.Checked oApp.FolderSave = chkFolderSave.Checked
@@ -1471,7 +1514,6 @@ Public Class frmGameManager
FillData() FillData()
ModeChange() ModeChange()
VerifyCleanFolder() VerifyCleanFolder()
VerifyImportBackup()
ElseIf lstGames.SelectedItems.Count > 1 Then ElseIf lstGames.SelectedItems.Count > 1 Then
eCurrentMode = eModes.MultiSelect eCurrentMode = eModes.MultiSelect
ModeChange() ModeChange()
@@ -1815,6 +1857,25 @@ Public Class frmGameManager
btnGameID.Text = frmGameManager_btnGameID btnGameID.Text = frmGameManager_btnGameID
btnImportBackup.Text = frmGameManager_btnImportBackup btnImportBackup.Text = frmGameManager_btnImportBackup
btnProcesses.Text = frmGameManager_btnProcesses 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 'Init Official Import Menu
If mgrCommon.IsUnix Then If mgrCommon.IsUnix Then
@@ -1938,6 +1999,10 @@ Public Class frmGameManager
OpenProcesses() OpenProcesses()
End Sub 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 Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click
If cboRemoteBackup.Items.Count > 1 Then 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) 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 If
End Sub 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 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) 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 End Sub
@@ -2054,6 +2125,7 @@ Public Class frmGameManager
Private Sub txtSavePath_TextChanged(sender As Object, e As EventArgs) Handles txtSavePath.TextChanged Private Sub txtSavePath_TextChanged(sender As Object, e As EventArgs) Handles txtSavePath.TextChanged
ttFullPath.RemoveAll() ttFullPath.RemoveAll()
RegistryModeChange()
VerifyCleanFolder() VerifyCleanFolder()
End Sub End Sub
+1 -1
View File
@@ -118,7 +118,7 @@ Public Class frmIncludeExclude
End If End If
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 If sNewPath <> String.Empty Then txtRootFolder.Text = sNewPath
End Sub End Sub
+141 -26
View File
@@ -167,11 +167,46 @@ Public Class frmMain
OperationEnded() OperationEnded()
End Sub 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) Private Sub RunRestore(ByVal oRestoreList As Hashtable)
Dim oGame As clsGame Dim oGame As clsGame
Dim oReadyList As New List(Of clsBackup) Dim oReadyList As New List(Of clsBackup)
Dim oRestoreInfo As clsBackup Dim oRestoreInfo As clsBackup
Dim bTriggerReload As Boolean = False Dim bTriggerReload As Boolean = False
Dim bOSVerified As Boolean
Dim bPathVerified As Boolean Dim bPathVerified As Boolean
eCurrentOperation = eOperation.Restore eCurrentOperation = eOperation.Restore
OperationStarted() OperationStarted()
@@ -179,16 +214,23 @@ Public Class frmMain
'Build Restore List 'Build Restore List
For Each de As DictionaryEntry In oRestoreList For Each de As DictionaryEntry In oRestoreList
bPathVerified = False bPathVerified = False
bOSVerified = False
oGame = DirectCast(de.Key, clsGame) oGame = DirectCast(de.Key, clsGame)
oRestoreInfo = DirectCast(de.Value, clsBackup) oRestoreInfo = DirectCast(de.Value, clsBackup)
bOSVerified = VerifyBackupForOS(oGame, oRestoreInfo.RestorePath)
If mgrPath.IsSupportedRegistryPath(oRestoreInfo.TruePath) Then
bPathVerified = True
Else
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
bPathVerified = True bPathVerified = True
Else Else
UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True) UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True)
End If End If
End If
If bPathVerified Then If bOSVerified And bPathVerified Then
If oRestore.CheckRestorePrereq(oRestoreInfo, oGame.CleanFolder) Then If oRestore.CheckRestorePrereq(oRestoreInfo, oGame.CleanFolder) Then
oReadyList.Add(oRestoreInfo) oReadyList.Add(oRestoreInfo)
End If End If
@@ -212,6 +254,7 @@ Public Class frmMain
Private Sub RunManualBackup(ByVal oBackupList As List(Of clsGame)) Private Sub RunManualBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame Dim oGame As clsGame
Dim bNoAuto As Boolean Dim bNoAuto As Boolean
Dim bOSVerified As Boolean
Dim bPathVerified As Boolean Dim bPathVerified As Boolean
Dim oReadyList As New List(Of clsGame) Dim oReadyList As New List(Of clsGame)
@@ -221,11 +264,14 @@ Public Class frmMain
'Build Backup List 'Build Backup List
For Each oGame In oBackupList For Each oGame In oBackupList
bNoAuto = False bNoAuto = False
bOSVerified = False
bPathVerified = False bPathVerified = False
gMonStripStatusButton.Enabled = False gMonStripStatusButton.Enabled = False
UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False) UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False)
bOSVerified = VerifyBackupForOS(oGame, oGame.Path)
If oGame.AbsolutePath = False Then If oGame.AbsolutePath = False Then
If oGame.ProcessPath = String.Empty Then If oGame.ProcessPath = String.Empty Then
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
@@ -241,7 +287,7 @@ Public Class frmMain
bPathVerified = True bPathVerified = True
End If End If
If bPathVerified Then If bOSVerified And bPathVerified Then
If oBackup.CheckBackupPrereq(oGame) Then If oBackup.CheckBackupPrereq(oGame) Then
oReadyList.Add(oGame) oReadyList.Add(oGame)
End If End If
@@ -306,7 +352,7 @@ Public Class frmMain
If oSettings.DisableConfirmation Then If oSettings.DisableConfirmation Then
bDoBackup = True bDoBackup = True
Else 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 bDoBackup = True
Else Else
bDoBackup = False bDoBackup = False
@@ -735,7 +781,7 @@ Public Class frmMain
DirectCast(hshScanList.Item(oProcess.GameInfo.ID), clsGame).Hours = oProcess.GameInfo.Hours DirectCast(hshScanList.Item(oProcess.GameInfo.ID), clsGame).Hours = oProcess.GameInfo.Hours
End If End If
mgrMonitorList.DoListUpdate(oProcess.GameInfo) mgrMonitorList.DoListFieldUpdate("Hours", oProcess.GameInfo.Hours, oProcess.GameInfo.ID)
mgrMonitorList.SyncMonitorLists(oSettings) mgrMonitorList.SyncMonitorLists(oSettings)
UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours) UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours)
@@ -969,15 +1015,27 @@ Public Class frmMain
End Sub End Sub
Private Sub OpenWebSite() Private Sub OpenWebSite()
Try
Process.Start(App_URLWebsite) Process.Start(App_URLWebsite)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub End Sub
Private Sub OpenOnlineManual() Private Sub OpenOnlineManual()
Try
Process.Start(App_URLManual) Process.Start(App_URLManual)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub End Sub
Private Sub OpenCheckforUpdates() Private Sub OpenCheckforUpdates()
Try
Process.Start(App_URLUpdates) Process.Start(App_URLUpdates)
Catch ex As Exception
mgrCommon.ShowMessage(App_ErrorLaunchExternal, ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub End Sub
Private Sub CheckForNewBackups() Private Sub CheckForNewBackups()
@@ -1126,10 +1184,17 @@ Public Class frmMain
'Verify the "Start with Windows" setting 'Verify the "Start with Windows" setting
If oSettings.StartWithWindows Then If oSettings.StartWithWindows Then
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 If Not VerifyStartWithWindows() Then
UpdateLog(frmMain_ErrorAppLocationChanged, False, ToolTipIcon.Info) UpdateLog(frmMain_ErrorAppLocationChanged, False, ToolTipIcon.Info)
End If End If
End If End If
End If
'Check for any custom 7z utility and display a warning if it's missing 'Check for any custom 7z utility and display a warning if it's missing
If oSettings.Custom7zLocation <> String.Empty Then If oSettings.Custom7zLocation <> String.Empty Then
@@ -1681,6 +1746,52 @@ Public Class frmMain
End If End If
End Sub End Sub
Private Function VerifyAutoStartLinux(ByRef sErrorMessage As String) As Boolean
Dim oProcess As Process
Dim sAutoStartFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & Path.DirectorySeparatorChar & ".config/autostart/"
'Check if the app is still properly installed
If File.Exists("/usr/share/applications/gbm.desktop") 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 /usr/share/applications/gbm.desktop " & 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 Private Function VerifyStartWithWindows() As Boolean
Dim oKey As Microsoft.Win32.RegistryKey Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName Dim sAppName As String = Application.ProductName
@@ -1898,12 +2009,11 @@ Public Class frmMain
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
Dim bNeedsPath As Boolean = False Dim bNeedsPath As Boolean = False
Dim bWineProcess As Boolean = False
Dim bContinue As Boolean = True Dim bContinue As Boolean = True
Dim iErrorCode As Integer = 0 Dim iErrorCode As Integer = 0
Dim sErrorMessage As String = String.Empty 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) PauseScan(True)
If bNeedsPath Then If bNeedsPath Then
@@ -1933,27 +2043,18 @@ Public Class frmMain
End If End If
End If End If
If bWineProcess Then 'We need to determine this Wine information and store it before the process ends.
'Attempt a path conversion if the game configuration is using an absolute windows path that we can convert If oProcess.WineProcess Then
If mgrVariables.CheckForReservedVariables(oProcess.GameInfo.TruePath) Then Dim oWineData As New clsWineData
Dim sWinePrefix As String = mgrPath.GetWinePrefix(oProcess.FoundProcess) oWineData.Prefix = mgrPath.GetWinePrefix(oProcess.FoundProcess)
Dim sWineSavePath As String oWineData.BinaryPath = Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
If Not sWinePrefix = String.Empty Then UpdateLog(mgrCommon.FormatString(frmMain_WineBinaryPath, oWineData.BinaryPath), False)
UpdateLog(mgrCommon.FormatString(frmMain_WinePrefix, New String() {oProcess.GameInfo.Name, sWinePrefix}), False) If Not oWineData.Prefix = String.Empty Then
sWineSavePath = mgrPath.GetWineSavePath(sWinePrefix, oProcess.GameInfo.TruePath) oProcess.WineData = oWineData
If Not sWineSavePath = oProcess.GameInfo.TruePath Then UpdateLog(mgrCommon.FormatString(frmMain_WinePrefix, oWineData.Prefix), False)
oProcess.GameInfo.TruePath = sWineSavePath
oProcess.GameInfo.AbsolutePath = True
UpdateLog(mgrCommon.FormatString(frmMain_WineSavePath, New String() {oProcess.GameInfo.Name, sWineSavePath}), False)
Else Else
bContinue = False bContinue = False
End If End If
Else
bContinue = False
End If
End If
'This does required mods to include/exclude data and relative paths (if required)
mgrPath.ModWinePathData(oProcess.GameInfo)
End If End If
If bContinue = True Then If bContinue = True Then
@@ -2013,7 +2114,7 @@ Public Class frmMain
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sPathDetectionError) oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sPathDetectionError)
If oProcess.GameInfo.ProcessPath <> String.Empty Then If oProcess.GameInfo.ProcessPath <> String.Empty Then
'Update and reload 'Update and reload
mgrMonitorList.DoListUpdate(oProcess.GameInfo) mgrMonitorList.DoListFieldUpdate("ProcessPath", oProcess.GameInfo.ProcessPath, oProcess.GameInfo.ID)
LoadGameSettings() LoadGameSettings()
Else Else
bContinue = False bContinue = False
@@ -2029,6 +2130,20 @@ Public Class frmMain
If bContinue Then If bContinue Then
If DoMultiGameCheck() Then If DoMultiGameCheck() Then
UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False) 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.TimeTracking Then HandleTimeSpent()
If oSettings.SessionTracking Then HandleSession() If oSettings.SessionTracking Then HandleSession()
RunBackup() RunBackup()
@@ -2080,7 +2195,7 @@ Public Class frmMain
End If End If
End If End If
Catch ex As Exception Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message, MsgBoxStyle.YesNo) = MsgBoxResult.No Then If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message & vbCrLf & ex.StackTrace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
bInitFail = True bInitFail = True
End If End If
End Try End Try
+40 -27
View File
@@ -71,9 +71,10 @@ Partial Class frmSettings
Me.pnlStartup = New System.Windows.Forms.Panel() Me.pnlStartup = New System.Windows.Forms.Panel()
Me.grpStartup = New System.Windows.Forms.GroupBox() Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkBackupOnLaunch = New System.Windows.Forms.CheckBox() Me.chkBackupOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox() Me.chkAutoStart = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox() Me.chkStartMinimized = New System.Windows.Forms.CheckBox()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox() Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkDisableDiskSpaceCheck = New System.Windows.Forms.CheckBox()
Me.grpFolderOptions.SuspendLayout() Me.grpFolderOptions.SuspendLayout()
Me.grp7zGeneral.SuspendLayout() Me.grp7zGeneral.SuspendLayout()
Me.pnlBackup.SuspendLayout() Me.pnlBackup.SuspendLayout()
@@ -318,11 +319,12 @@ Partial Class frmSettings
' '
'grpBackupConfirmations 'grpBackupConfirmations
' '
Me.grpBackupConfirmations.Controls.Add(Me.chkDisableDiskSpaceCheck)
Me.grpBackupConfirmations.Controls.Add(Me.chkBackupConfirm) Me.grpBackupConfirmations.Controls.Add(Me.chkBackupConfirm)
Me.grpBackupConfirmations.Controls.Add(Me.chkOverwriteWarning) Me.grpBackupConfirmations.Controls.Add(Me.chkOverwriteWarning)
Me.grpBackupConfirmations.Location = New System.Drawing.Point(6, 200) Me.grpBackupConfirmations.Location = New System.Drawing.Point(6, 200)
Me.grpBackupConfirmations.Name = "grpBackupConfirmations" 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.TabIndex = 2
Me.grpBackupConfirmations.TabStop = False Me.grpBackupConfirmations.TabStop = False
Me.grpBackupConfirmations.Text = "Backup Confirmations" Me.grpBackupConfirmations.Text = "Backup Confirmations"
@@ -340,10 +342,10 @@ Partial Class frmSettings
'chkOverwriteWarning 'chkOverwriteWarning
' '
Me.chkOverwriteWarning.AutoSize = True 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.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17) 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.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True Me.chkOverwriteWarning.UseVisualStyleBackColor = True
' '
@@ -560,8 +562,8 @@ Partial Class frmSettings
'grpStartup 'grpStartup
' '
Me.grpStartup.Controls.Add(Me.chkBackupOnLaunch) Me.grpStartup.Controls.Add(Me.chkBackupOnLaunch)
Me.grpStartup.Controls.Add(Me.chkStartWindows) Me.grpStartup.Controls.Add(Me.chkAutoStart)
Me.grpStartup.Controls.Add(Me.chkStartToTray) Me.grpStartup.Controls.Add(Me.chkStartMinimized)
Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup) Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.grpStartup.Location = New System.Drawing.Point(6, 12) Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.grpStartup.Name = "grpStartup" Me.grpStartup.Name = "grpStartup"
@@ -580,25 +582,25 @@ Partial Class frmSettings
Me.chkBackupOnLaunch.Text = "Backup GBM data files on launch" Me.chkBackupOnLaunch.Text = "Backup GBM data files on launch"
Me.chkBackupOnLaunch.UseVisualStyleBackColor = True Me.chkBackupOnLaunch.UseVisualStyleBackColor = True
' '
'chkStartWindows 'chkAutoStart
' '
Me.chkStartWindows.AutoSize = True Me.chkAutoStart.AutoSize = True
Me.chkStartWindows.Location = New System.Drawing.Point(6, 19) Me.chkAutoStart.Location = New System.Drawing.Point(6, 19)
Me.chkStartWindows.Name = "chkStartWindows" Me.chkAutoStart.Name = "chkAutoStart"
Me.chkStartWindows.Size = New System.Drawing.Size(117, 17) Me.chkAutoStart.Size = New System.Drawing.Size(155, 17)
Me.chkStartWindows.TabIndex = 0 Me.chkAutoStart.TabIndex = 0
Me.chkStartWindows.Text = "Start with Windows" Me.chkAutoStart.Text = "Start automatically on log-in"
Me.chkStartWindows.UseVisualStyleBackColor = True Me.chkAutoStart.UseVisualStyleBackColor = True
' '
'chkStartToTray 'chkStartMinimized
' '
Me.chkStartToTray.AutoSize = True Me.chkStartMinimized.AutoSize = True
Me.chkStartToTray.Location = New System.Drawing.Point(6, 42) Me.chkStartMinimized.Location = New System.Drawing.Point(6, 42)
Me.chkStartToTray.Name = "chkStartToTray" Me.chkStartMinimized.Name = "chkStartMinimized"
Me.chkStartToTray.Size = New System.Drawing.Size(115, 17) Me.chkStartMinimized.Size = New System.Drawing.Size(96, 17)
Me.chkStartToTray.TabIndex = 1 Me.chkStartMinimized.TabIndex = 1
Me.chkStartToTray.Text = "Start to system tray" Me.chkStartMinimized.Text = "Start minimized"
Me.chkStartToTray.UseVisualStyleBackColor = True Me.chkStartMinimized.UseVisualStyleBackColor = True
' '
'chkMonitorOnStartup 'chkMonitorOnStartup
' '
@@ -610,15 +612,25 @@ Partial Class frmSettings
Me.chkMonitorOnStartup.Text = "Start monitoring on launch" Me.chkMonitorOnStartup.Text = "Start monitoring on launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True 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 'frmSettings
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(554, 361) Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnlStartup) Me.Controls.Add(Me.pnlStartup)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.pnlBackup) Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.btnResetMessages) Me.Controls.Add(Me.btnResetMessages)
Me.Controls.Add(Me.lstSettings) Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults) Me.Controls.Add(Me.btnDefaults)
@@ -706,9 +718,10 @@ Partial Class frmSettings
Friend WithEvents pnlStartup As Panel Friend WithEvents pnlStartup As Panel
Friend WithEvents grpStartup As GroupBox Friend WithEvents grpStartup As GroupBox
Friend WithEvents chkBackupOnLaunch As CheckBox Friend WithEvents chkBackupOnLaunch As CheckBox
Friend WithEvents chkStartWindows As CheckBox Friend WithEvents chkAutoStart As CheckBox
Friend WithEvents chkStartToTray As CheckBox Friend WithEvents chkStartMinimized As CheckBox
Friend WithEvents chkMonitorOnStartup As CheckBox Friend WithEvents chkMonitorOnStartup As CheckBox
Friend WithEvents grpGameMonitoringOptions As GroupBox Friend WithEvents grpGameMonitoringOptions As GroupBox
Friend WithEvents chkShowResolvedPaths As CheckBox Friend WithEvents chkShowResolvedPaths As CheckBox
Friend WithEvents chkDisableDiskSpaceCheck As CheckBox
End Class End Class
+52 -20
View File
@@ -16,6 +16,35 @@ Public Class frmSettings
End Set End Set
End Property End Property
Private Sub HandleLinuxAutoStart(ByVal bToggle As Boolean)
Dim oProcess As Process
Dim sAutoStartFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & Path.DirectorySeparatorChar & ".config/autostart/"
If bToggle 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 /usr/share/applications/gbm.desktop " & 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) Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
Dim oKey As Microsoft.Win32.RegistryKey Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName Dim sAppName As String = Application.ProductName
@@ -35,23 +64,28 @@ Public Class frmSettings
Private Function ValidateSettings() As Boolean Private Function ValidateSettings() As Boolean
'Show Start with Windows warning if running as admin '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) mgrCommon.ShowMessage(frmSettings_WarningAdminStart, MsgBoxStyle.Exclamation)
End If End If
'Only modify registry key when the value changed 'Only modify when the value changed
If chkStartWindows.Checked <> oSettings.StartWithWindows Then If chkAutoStart.Checked <> oSettings.StartWithWindows Then
HandleRegistryUpdate(chkStartWindows.Checked) If mgrCommon.IsUnix Then
HandleLinuxAutoStart(chkAutoStart.Checked)
Else
HandleRegistryUpdate(chkAutoStart.Checked)
End If End If
oSettings.StartWithWindows = chkStartWindows.Checked End If
oSettings.StartWithWindows = chkAutoStart.Checked
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked oSettings.StartToTray = chkStartMinimized.Checked
oSettings.BackupOnLaunch = chkBackupOnLaunch.Checked oSettings.BackupOnLaunch = chkBackupOnLaunch.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.DisableSyncMessages = chkDisableSyncMessages.Checked oSettings.DisableSyncMessages = chkDisableSyncMessages.Checked
oSettings.AutoSaveLog = chkAutoSaveLog.Checked oSettings.AutoSaveLog = chkAutoSaveLog.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.DisableDiskSpaceCheck = chkDisableDiskSpaceCheck.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.UseGameID = chkUseGameID.Checked oSettings.UseGameID = chkUseGameID.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
@@ -173,14 +207,15 @@ Public Class frmSettings
End Sub End Sub
Private Sub LoadSettings() Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows chkAutoStart.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray chkStartMinimized.Checked = oSettings.StartToTray
chkBackupOnLaunch.Checked = oSettings.BackupOnLaunch chkBackupOnLaunch.Checked = oSettings.BackupOnLaunch
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkDisableSyncMessages.Checked = oSettings.DisableSyncMessages chkDisableSyncMessages.Checked = oSettings.DisableSyncMessages
chkAutoSaveLog.Checked = oSettings.AutoSaveLog chkAutoSaveLog.Checked = oSettings.AutoSaveLog
chkBackupConfirm.Checked = oSettings.DisableConfirmation chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkDisableDiskSpaceCheck.Checked = oSettings.DisableDiskSpaceCheck
chkCreateFolder.Checked = oSettings.CreateSubFolder chkCreateFolder.Checked = oSettings.CreateSubFolder
chkUseGameID.Checked = oSettings.UseGameID chkUseGameID.Checked = oSettings.UseGameID
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
@@ -199,12 +234,6 @@ Public Class frmSettings
txt7zLocation.Text = oSettings.Custom7zLocation txt7zLocation.Text = oSettings.Custom7zLocation
eCurrentSyncFields = oSettings.SyncFields eCurrentSyncFields = oSettings.SyncFields
'Unix Handler
If mgrCommon.IsUnix Then
chkStartToTray.Checked = False
chkStartWindows.Checked = False
End If
'Retrieve 7z Info 'Retrieve 7z Info
GetUtilityInfo(oSettings.Custom7zLocation) GetUtilityInfo(oSettings.Custom7zLocation)
@@ -305,10 +334,10 @@ Public Class frmSettings
grpGameData.Text = frmSettings_grpGameData grpGameData.Text = frmSettings_grpGameData
chkTimeTracking.Text = frmSettings_chkTimeTracking chkTimeTracking.Text = frmSettings_chkTimeTracking
chkSessionTracking.Text = frmSettings_chkSessionTracking chkSessionTracking.Text = frmSettings_chkSessionTracking
chkStartWindows.Text = frmSettings_chkStartWindows chkAutoStart.Text = frmSettings_chkAutoStart
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog
chkStartToTray.Text = frmSettings_chkStartToTray chkStartMinimized.Text = frmSettings_chkStartMinimized
chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup
grp7zGeneral.Text = frmSettings_grp7zGeneral grp7zGeneral.Text = frmSettings_grp7zGeneral
grp7zAdvanced.Text = frmSettings_grp7zAdvanced grp7zAdvanced.Text = frmSettings_grp7zAdvanced
@@ -325,11 +354,14 @@ Public Class frmSettings
chkDisableSyncMessages.Text = frmSettings_chkDisableSyncMessages chkDisableSyncMessages.Text = frmSettings_chkDisableSyncMessages
grpGameMonitoringOptions.Text = frmSettings_grpGameMonitoringOptions grpGameMonitoringOptions.Text = frmSettings_grpGameMonitoringOptions
chkShowResolvedPaths.Text = frmSettings_chkShowResolvedPaths chkShowResolvedPaths.Text = frmSettings_chkShowResolvedPaths
chkDisableDiskSpaceCheck.Text = frmSettings_chkDisableDiskSpaceCheck
'Unix Handler
If mgrCommon.IsUnix Then If mgrCommon.IsUnix Then
chkStartToTray.Enabled = False 'Only enable this option on Linux if GBM was installed with an official method
chkStartWindows.Enabled = False If Not File.Exists("/usr/share/applications/gbm.desktop") Then
chkAutoStart.Enabled = False
End If
chkStartMinimized.Enabled = False
End If End If
'Handle Panels 'Handle Panels
@@ -358,7 +390,7 @@ Public Class frmSettings
Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click
Dim sNewFolder As String 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 If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
End Sub End Sub
+1 -1
View File
@@ -211,7 +211,7 @@ Public Class frmStartUpWizard
End If End If
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 If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath
End Sub End Sub
+1 -1
View File
@@ -54,7 +54,7 @@ Public Class frmVariableManager
End If End If
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 If sNewPath <> String.Empty Then txtPath.Text = sNewPath
End Sub 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>
<ItemGroup> <ItemGroup>
<Compile Include="Classes\clsGameProcess.vb" /> <Compile Include="Classes\clsGameProcess.vb" />
<Compile Include="Classes\clsWineData.vb" />
<Compile Include="Classes\clsProcess.vb" /> <Compile Include="Classes\clsProcess.vb" />
<Compile Include="Classes\clsGameFilter.vb" /> <Compile Include="Classes\clsGameFilter.vb" />
<Compile Include="Classes\clsGameFilterField.vb" /> <Compile Include="Classes\clsGameFilterField.vb" />
@@ -137,6 +138,12 @@
<Compile Include="Classes\clsBackup.vb" /> <Compile Include="Classes\clsBackup.vb" />
<Compile Include="Classes\clsGame.vb" /> <Compile Include="Classes\clsGame.vb" />
<Compile Include="Classes\clsTag.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"> <Compile Include="Forms\frmAdvancedImport.Designer.vb">
<DependentUpon>frmAdvancedImport.vb</DependentUpon> <DependentUpon>frmAdvancedImport.vb</DependentUpon>
</Compile> </Compile>
@@ -247,6 +254,7 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Managers\mgrGameProcesses.vb" /> <Compile Include="Managers\mgrGameProcesses.vb" />
<Compile Include="Managers\mgrWineData.vb" />
<Compile Include="Managers\mgrProcess.vb" /> <Compile Include="Managers\mgrProcess.vb" />
<Compile Include="Managers\mgrCommon.vb" /> <Compile Include="Managers\mgrCommon.vb" />
<Compile Include="Managers\mgrGameTags.vb" /> <Compile Include="Managers\mgrGameTags.vb" />
@@ -281,6 +289,9 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Forms\frmWineConfiguration.resx">
<DependentUpon>frmWineConfiguration.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmAdvancedImport.resx"> <EmbeddedResource Include="Forms\frmAdvancedImport.resx">
<DependentUpon>frmAdvancedImport.vb</DependentUpon> <DependentUpon>frmAdvancedImport.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution 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. 7-Zip Extra files are under the GNU LGPL license.
+1 -1
View File
@@ -1,5 +1,5 @@
GBM - Game Backup Monitor 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 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 it under the terms of the GNU General Public License as published by
+147 -42
View File
@@ -120,15 +120,28 @@ Public Class mgrBackup
Dim lAvailableSpace As Long Dim lAvailableSpace As Long
Dim lFolderSize As Long = 0 Dim lFolderSize As Long = 0
Dim sDeepFolder As String Dim sDeepFolder As String
Dim bRegistry As Boolean
Dim sExtension As String
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) 'Check if this is a registry backup
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z" bRegistry = mgrPath.IsSupportedRegistryPath(oGame.TruePath)
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 'Verify saved game path
sSavePath = VerifySavePath(oGame) 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 'Calculate space
lAvailableSpace = mgrCommon.GetAvailableDiskSpace(oSettings.BackupFolder) 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 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 If Not oGame.RecurseSubFolders Then
For Each s As String In oGame.IncludeArray For Each s As String In oGame.IncludeArray
@@ -154,6 +167,17 @@ Public Class mgrBackup
Return False Return False
End If End If
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 'A manifest check is only required when "Save Multiple Backups" is disabled
If Not oGame.AppendTimeStamp Then If Not oGame.AppendTimeStamp Then
@@ -285,44 +309,80 @@ Public Class mgrBackup
Next Next
End Sub End Sub
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame)) Private Function RunRegistryBackup(ByVal oGame As clsGame, ByVal sBackupFile As String) As Boolean
Dim oGame As clsGame Dim prsReg As New Process
Dim bDoBackup As Boolean Dim sBinaryPath As String
Dim bBackupCompleted As Boolean
Dim prs7z As Process
Dim sBackupFile As String
Dim sSavePath As String
Dim dTimeStamp As DateTime
Dim sTimeStamp As String
Dim sHash As String
Dim sArguments As String Dim sArguments As String
Dim oWineData As clsWineData
Dim sWineReg As String
Dim bPathVerified As Boolean = False
Dim bBackupCompleted As Boolean = False
For Each oGame In oBackupList sArguments = "export """ & oGame.TruePath & """ """ & sBackupFile & """ /y"
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder
sSavePath = String.Empty
dTimeStamp = Date.Now
sTimeStamp = BuildFileTimeStamp(dTimeStamp)
sHash = String.Empty
bDoBackup = True
bBackupCompleted = False
CancelOperation = False
RaiseEvent UpdateBackupInfo(oGame)
If oSettings.CreateSubFolder Then If mgrCommon.IsUnix Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) oWineData = mgrWineData.DoWineDataGetbyID(oGame.ID)
bDoBackup = HandleSubFolder(oGame, sBackupFile) prsReg.StartInfo.EnvironmentVariables.Add("WINEPREFIX", oWineData.Prefix)
End If sBinaryPath = oWineData.BinaryPath & Path.DirectorySeparatorChar & "wine"
sWineReg = oWineData.Prefix & Path.DirectorySeparatorChar & "drive_c/windows/system32/reg.exe"
If oGame.AppendTimeStamp Then sArguments = """" & sWineReg & """ " & sArguments
If oGame.BackupLimit > 0 Then CheckOldBackups(oGame) If File.Exists(sBinaryPath) Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sTimeStamp & ".7z" If File.Exists(sWineReg) Then
bPathVerified = True
Else Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z" 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 End If
If bDoBackup Then 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) sSavePath = VerifySavePath(oGame)
@@ -374,25 +434,73 @@ Public Class mgrBackup
bBackupCompleted = True bBackupCompleted = True
Case 2 Case 2
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zFatalError, oGame.Name), True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zFatalError, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
Case 7 Case 7
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zCommandFailure, oGame.Name), True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zCommandFailure, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
End Select End Select
End If End If
prs7z.Dispose() prs7z.Dispose()
Else Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bBackupCompleted = False
End If End If
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True) 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 sBackupFile As String
Dim sBackupExt As String
Dim dTimeStamp As DateTime
Dim sTimeStamp As String
Dim sHash As String
Dim bBackupCompleted As Boolean
For Each oGame In oBackupList
'Init
sBackupFile = oSettings.BackupFolder
dTimeStamp = Date.Now
sTimeStamp = BuildFileTimeStamp(dTimeStamp)
sHash = String.Empty
bDoBackup = True
bBackupCompleted = False bBackupCompleted = False
CancelOperation = False
RaiseEvent UpdateBackupInfo(oGame)
If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
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 & sBackupExt
Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sBackupExt
End If
If bDoBackup Then
'Choose Backup Type
If mgrPath.IsSupportedRegistryPath(oGame.TruePath) Then
bBackupCompleted = RunRegistryBackup(oGame, sBackupFile)
Else
bBackupCompleted = Run7zBackup(oGame, sBackupFile)
End If End If
'Write Main Manifest 'Write Main Manifest
If bBackupCompleted Then If bBackupCompleted Then
'Generate checksum for new backup 'Generate checksum for new backup
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True)
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile) sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
@@ -403,12 +511,9 @@ Public Class mgrBackup
'Write the process path if we have it 'Write the process path if we have it
If oGame.AbsolutePath = False Then If oGame.AbsolutePath = False Then
mgrMonitorList.DoListUpdate(oGame) mgrMonitorList.DoListFieldUpdate("ProcessPath", oGame.ProcessPath, oGame.ID)
End If End If
End If 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 If bBackupCompleted Then
+122 -25
View File
@@ -9,8 +9,8 @@ Imports System.Runtime.Serialization.Formatters.Binary
Public Class mgrCommon Public Class mgrCommon
'These need to be updated when upgrading the packaged 7z utility 'These need to be updated when upgrading the packaged 7z utility
Private Shared sUtility64Hash As String = "8BC2A3D6C37C4DB9BD487AD35039AE0DC8A1DDF2C3B1F0B76B3E678FEBB9F223" 'v18.05 7za.exe x64 Private Shared sUtility64Hash As String = "8117E40EE7F824F63373A4F5625BB62749F69159D0C449B3CE2F35AAD3B83549" 'v19.00 7za.exe x64
Private Shared sUtility32Hash As String = "77613CCA716EDF68B9D5BAB951463ED7FADE5BC0EC465B36190A76299C50F117" 'v18.05 7za.exe x86 Private Shared sUtility32Hash As String = "EA308C76A2F927B160A143D94072B0DCE232E04B751F0C6432A94E05164E716D" 'v19.00 7za.exe x86
Public Shared ReadOnly Property UtilityHash As String Public Shared ReadOnly Property UtilityHash As String
Get Get
@@ -43,28 +43,6 @@ Public Class mgrCommon
End Get End Get
End Property 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 Public Shared Function SafeIconFromFile(ByVal sPath As String) As Image
Dim oImage As Image Dim oImage As Image
Dim oReturnImage As Image Dim oReturnImage As Image
@@ -177,6 +155,39 @@ Public Class mgrCommon
Return False Return False
End Function 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, 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 Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog Dim fbBrowser As New OpenFileDialog
@@ -205,7 +216,20 @@ Public Class mgrCommon
Return New String() {} Return New String() {}
End Function 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 Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New FolderBrowserDialog Dim fbBrowser As New FolderBrowserDialog
Dim oSavedPath As New clsSavedPath Dim oSavedPath As New clsSavedPath
@@ -259,6 +283,14 @@ Public Class mgrCommon
Return False Return False
End Function 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 Public Shared Function IsElevated() As Boolean
Dim oID As WindowsIdentity = WindowsIdentity.GetCurrent Dim oID As WindowsIdentity = WindowsIdentity.GetCurrent
Dim oPrincipal As New WindowsPrincipal(oID) Dim oPrincipal As New WindowsPrincipal(oID)
@@ -537,6 +569,20 @@ Public Class mgrCommon
End Try End Try
End Sub 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 'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult Dim oResult As MsgBoxResult
@@ -544,6 +590,23 @@ Public Class mgrCommon
Return oResult Return oResult
End Function 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 'Handles single parameter stings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParam As String, ByVal oType As MsgBoxStyle) As MsgBoxResult Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParam As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult Dim oResult As MsgBoxResult
@@ -551,6 +614,23 @@ Public Class mgrCommon
Return oResult Return oResult
End Function 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 'Handles multi-parameter strings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParams As String(), ByVal oType As MsgBoxStyle) As MsgBoxResult Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParams As String(), ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult Dim oResult As MsgBoxResult
@@ -558,6 +638,23 @@ Public Class mgrCommon
Return oResult Return oResult
End Function 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 'Handles no extra parameters
Public Shared Function FormatString(ByVal sString As String) As String Public Shared Function FormatString(ByVal sString As String) As String
sString = sString.Replace("[BR]", vbCrLf) sString = sString.Replace("[BR]", vbCrLf)
+27
View File
@@ -281,4 +281,31 @@
End Function 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 End Class
+40 -7
View File
@@ -37,6 +37,7 @@ Public Class mgrMonitorList
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments")) If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.IsRegEx = CBool(dr("IsRegEx")) oGame.IsRegEx = CBool(dr("IsRegEx"))
oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders")) oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
oGame.OS = CInt(dr("OS"))
'Compile RegEx 'Compile RegEx
If oGame.IsRegEx Then If oGame.IsRegEx Then
@@ -71,6 +72,7 @@ Public Class mgrMonitorList
hshParams.Add("Comments", oGame.Comments) hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx) hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders) hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
hshParams.Add("OS", oGame.OS)
Return hshParams Return hshParams
End Function End Function
@@ -106,7 +108,7 @@ Public Class mgrMonitorList
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, " 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 &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, "
sSQL &= "@Parameter, @Comments, @IsRegEx, @RecurseSubFolders)" sSQL &= "@Parameter, @Comments, @IsRegEx, @RecurseSubFolders, @OS)"
'Parameters 'Parameters
hshParams = SetCoreParameters(oGame) 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 = "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 &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, " 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;" sSQL &= "UPDATE gametags SET MonitorID=@ID WHERE MonitorID=@QueryID;"
If iSelectDB = mgrSQLite.Database.Local Then If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "UPDATE gameprocesses SET MonitorID=@ID WHERE MonitorID=@QueryID;" sSQL &= "UPDATE gameprocesses SET MonitorID=@ID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE sessions 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 End If
'Parameters 'Parameters
@@ -142,6 +145,20 @@ Public Class mgrMonitorList
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub 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) 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 oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
@@ -181,6 +198,8 @@ Public Class mgrMonitorList
sSQL &= "WHERE MonitorID = @MonitorID;" sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM sessions " sSQL &= "DELETE FROM sessions "
sSQL &= "WHERE MonitorID = @MonitorID;" sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM winedata "
sSQL &= "WHERE MonitorID = @MonitorID;"
End If End If
sSQL &= "DELETE FROM monitorlist " sSQL &= "DELETE FROM monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID;" sSQL &= "WHERE MonitorID = @MonitorID;"
@@ -245,6 +264,18 @@ Public Class mgrMonitorList
sSQL = sSQL.TrimEnd(",") sSQL = sSQL.TrimEnd(",")
sSQL &= ");" 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 End If
sSQL &= "DELETE FROM monitorlist " sSQL &= "DELETE FROM monitorlist "
@@ -374,11 +405,11 @@ Public Class mgrMonitorList
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)" sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
End If 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 &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
sSQL &= "@TimeStamp, @ExcludeList, " & sGamePath & ", " sSQL &= "@TimeStamp, @ExcludeList, " & sGamePath & ", "
sSQL &= sIcon & ", @Hours, " & sVersion & ", " 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 For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable hshParams = New Hashtable
@@ -401,6 +432,7 @@ Public Class mgrMonitorList
hshParams.Add("Comments", oGame.Comments) hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx) hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders) hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
hshParams.Add("OS", oGame.OS)
'Optional Parameters 'Optional Parameters
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
@@ -556,7 +588,7 @@ Public Class mgrMonitorList
ByRef hshParams As Hashtable) As String ByRef hshParams As Hashtable) As String
Dim sSQL As String = String.Empty Dim sSQL As String = String.Empty
Dim iCounter As Integer = 0 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 Dim sSort As String = " ORDER BY " & sSortField
If bSortAsc Then If bSortAsc Then
@@ -675,7 +707,7 @@ Public Class mgrMonitorList
Case clsGameFilterField.eDataType.fNumeric Case clsGameFilterField.eDataType.fNumeric
sSQL &= oFilter.Field.FieldName & " " & oFilter.NumericOperatorAsString & " @" & oFilter.ID sSQL &= oFilter.Field.FieldName & " " & oFilter.NumericOperatorAsString & " @" & oFilter.ID
hshParams.Add(oFilter.ID, oFilter.Data) hshParams.Add(oFilter.ID, oFilter.Data)
Case clsGameFilterField.eDataType.fBool Case clsGameFilterField.eDataType.fBool, clsGameFilterField.eDataType.fEnum
sSQL &= oFilter.Field.FieldName & " = @" & oFilter.ID sSQL &= oFilter.Field.FieldName & " = @" & oFilter.ID
hshParams.Add(oFilter.ID, oFilter.Data) hshParams.Add(oFilter.ID, oFilter.Data)
End Select End Select
@@ -754,6 +786,7 @@ Public Class mgrMonitorList
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments")) If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.IsRegEx = CBool(dr("IsRegEx")) oGame.IsRegEx = CBool(dr("IsRegEx"))
oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders")) oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
oGame.OS = CInt(dr("OS"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(oGame.ID) oGame.Tags = mgrGameTags.GetTagsByGameForExport(oGame.ID)
oList.Add(oGame) oList.Add(oGame)
Next Next
@@ -831,7 +864,7 @@ Public Class mgrMonitorList
Cursor.Current = Cursors.WaitCursor 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 Exit Sub
End If End If
+36 -7
View File
@@ -2,6 +2,7 @@
Imports System.IO Imports System.IO
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Reflection Imports System.Reflection
Imports System.Threading.Thread
Public Class mgrPath Public Class mgrPath
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath 'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
@@ -484,6 +485,22 @@ Public Class mgrPath
Return sValue Return sValue
End Function 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 Public Shared Function IsAbsolute(sValue As String) As Boolean
Dim hshFolders As New Hashtable Dim hshFolders As New Hashtable
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
@@ -497,6 +514,7 @@ Public Class mgrPath
'Don't use these in Unix 'Don't use these in Unix
If Not mgrCommon.IsUnix Then If Not mgrCommon.IsUnix Then
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) 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)) hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
End If End If
@@ -569,8 +587,8 @@ Public Class mgrPath
If bNoAuto Then If bNoAuto Then
sMessage = mgrCommon.FormatString(mgrPath_ConfirmManualPath, sSearchReason) sMessage = mgrCommon.FormatString(mgrPath_ConfirmManualPath, sSearchReason)
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowPriorityMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath() sFolder = SetManualGamePath()
End If End If
Return sFolder Return sFolder
@@ -578,8 +596,9 @@ Public Class mgrPath
sMessage = mgrCommon.FormatString(mgrPath_ConfirmAutoPath, sSearchReason) 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.ShowDialog()
frmFind.BringToFront()
If frmFind.FoundItem <> String.Empty Then If frmFind.FoundItem <> String.Empty Then
Return frmFind.FoundItem Return frmFind.FoundItem
@@ -594,7 +613,7 @@ Public Class mgrPath
End If End If
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath() sFolder = SetManualGamePath()
End If End If
frmFind.Dispose() frmFind.Dispose()
@@ -605,9 +624,16 @@ Public Class mgrPath
Public Shared Function VerifyBackupPath(ByRef sBackupPath As String) As Boolean Public Shared Function VerifyBackupPath(ByRef sBackupPath As String) As Boolean
Dim dBrowser As FolderBrowserDialog Dim dBrowser As FolderBrowserDialog
Dim oDialogResult As DialogResult
Dim iTotalWait As Integer
Dim iTimeOut As Integer = 60000
If Not Directory.Exists(sBackupPath) Then Do While Not (Directory.Exists(sBackupPath))
If mgrCommon.ShowMessage(mgrPath_ConfirmBackupLocation, sBackupPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Sleep(5000)
iTotalWait += 5000
If iTotalWait >= iTimeOut Then
oDialogResult = mgrCommon.ShowMessage(mgrPath_ConfirmBackupLocation, sBackupPath, MsgBoxStyle.YesNoCancel)
If oDialogResult = MsgBoxResult.Yes Then
dBrowser = New FolderBrowserDialog dBrowser = New FolderBrowserDialog
dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
If dBrowser.ShowDialog = DialogResult.OK Then If dBrowser.ShowDialog = DialogResult.OK Then
@@ -616,10 +642,13 @@ Public Class mgrPath
Else Else
Return False Return False
End If End If
Else ElseIf oDialogResult = DialogResult.No Then
Return False Return False
Else
iTotalWait = 0
End If End If
End If End If
Loop
Return True Return True
End Function End Function
+27 -6
View File
@@ -8,6 +8,8 @@ Public Class mgrProcessDetection
Private dStartTime As DateTime = Now, dEndTime As DateTime = Now Private dStartTime As DateTime = Now, dEndTime As DateTime = Now
Private lTimeSpent As Long = 0 Private lTimeSpent As Long = 0
Private oGame As clsGame Private oGame As clsGame
Private bWineProcess As Boolean = False
Private oWineData As clsWineData
Private oDuplicateGames As New ArrayList Private oDuplicateGames As New ArrayList
Private bDuplicates As Boolean Private bDuplicates As Boolean
Private bVerified As Boolean = False Private bVerified As Boolean = False
@@ -63,6 +65,24 @@ Public Class mgrProcessDetection
End Set End Set
End Property 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 Property Duplicate As Boolean
Get Get
Return bDuplicates Return bDuplicates
@@ -157,7 +177,7 @@ Public Class mgrProcessDetection
Return False Return False
End Function End Function
Private Function GetProcessPath(ByVal bWineProcess As Boolean) As String Private Function GetProcessPath() As String
Try Try
If Not bWineProcess Then If Not bWineProcess Then
Return Path.GetDirectoryName(FoundProcess.MainModule.FileName) Return Path.GetDirectoryName(FoundProcess.MainModule.FileName)
@@ -169,7 +189,7 @@ Public Class mgrProcessDetection
End Try End Try
End Function 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 bMatch As Boolean = False
Dim sFullCommand As String Dim sFullCommand As String
Dim oNotDetectedWithParameters As New ArrayList Dim oNotDetectedWithParameters As New ArrayList
@@ -185,7 +205,7 @@ Public Class mgrProcessDetection
End If End If
'Get Process Path 'Get Process Path
ProcessPath = GetProcessPath(bWineProcess) ProcessPath = GetProcessPath()
'Look for any games using parameters and any matches 'Look for any games using parameters and any matches
For Each oDetectedGame As clsGame In oDetectedGames For Each oDetectedGame As clsGame In oDetectedGames
@@ -248,7 +268,7 @@ Public Class mgrProcessDetection
End If End If
End Sub 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 prsList() As Process = Process.GetProcesses
Dim sProcessCheck As String = String.Empty Dim sProcessCheck As String = String.Empty
Dim sProcessList As String = String.Empty Dim sProcessList As String = String.Empty
@@ -257,7 +277,8 @@ Public Class mgrProcessDetection
For Each prsCurrent As Process In prsList For Each prsCurrent As Process In prsList
'This needs to be wrapped due to issues with Mono. 'This needs to be wrapped due to issues with Mono.
Try 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 'Unix Handler
'We need some special handling for Wine processes 'We need some special handling for Wine processes
@@ -292,7 +313,7 @@ Public Class mgrProcessDetection
Next Next
If oDetectedGames.Count > 0 Then If oDetectedGames.Count > 0 Then
FilterDetected(oDetectedGames, bWineProcess) FilterDetected(oDetectedGames)
End If End If
If oDetectedGames.Count > 0 Then If oDetectedGames.Count > 0 Then
+101 -21
View File
@@ -122,8 +122,19 @@ Public Class mgrRestore
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean
Dim sHash As String Dim sHash As String
Dim sExtractPath As String Dim sExtractPath As String
Dim bRegistry As Boolean
Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
'Check if this is a registry backup
bRegistry = mgrPath.IsSupportedRegistryPath(oBackupInfo.TruePath)
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 oBackupInfo.AbsolutePath Then If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath sExtractPath = oBackupInfo.RestorePath
Else Else
@@ -149,6 +160,7 @@ Public Class mgrRestore
Directory.CreateDirectory(sExtractPath) Directory.CreateDirectory(sExtractPath)
End If End If
End If End If
End If
'Check file integrity 'Check file integrity
If oBackupInfo.CheckSum <> String.Empty Then If oBackupInfo.CheckSum <> String.Empty Then
@@ -170,20 +182,71 @@ Public Class mgrRestore
Return True Return True
End Function End Function
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup)) Private Function RunRegistryRestore(ByVal oBackupInfo As clsBackup, ByVal sBackupFile As String) As Boolean
Dim prs7z As Process Dim prsReg As New Process
Dim sBackupFile As String Dim sBinaryPath As String
Dim sExtractPath As String Dim sArguments As String
Dim bRestoreCompleted As Boolean Dim oWineData As clsWineData
Dim sWineReg As String
Dim bPathVerified As Boolean
Dim bRestoreCompleted As Boolean = False
For Each oBackupInfo In oRestoreList sArguments = "import """ & sBackupFile & """"
'Init
prs7z = New Process If mgrCommon.IsUnix Then
sBackupFile = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName oWineData = mgrWineData.DoWineDataGetbyID(oBackupInfo.MonitorID)
sExtractPath = String.Empty prsReg.StartInfo.EnvironmentVariables.Add("WINEPREFIX", oWineData.Prefix)
bRestoreCompleted = False sBinaryPath = oWineData.BinaryPath & Path.DirectorySeparatorChar & "wine"
CancelOperation = False sWineReg = oWineData.Prefix & Path.DirectorySeparatorChar & "drive_c/windows/system32/reg.exe"
RaiseEvent UpdateRestoreInfo(oBackupInfo) 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 If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath sExtractPath = oBackupInfo.RestorePath
@@ -216,17 +279,40 @@ Public Class mgrRestore
bRestoreCompleted = True bRestoreCompleted = True
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True)
bRestoreCompleted = False
End If End If
End If End If
prs7z.Dispose() prs7z.Dispose()
Else Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bRestoreCompleted = False
End If End If
Else Else
RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
End If 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 sBackupFile As String
Dim sExtractPath As String
Dim bRestoreCompleted As Boolean
For Each oBackupInfo In oRestoreList
'Init
sBackupFile = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
sExtractPath = String.Empty
bRestoreCompleted = False
CancelOperation = False
RaiseEvent UpdateRestoreInfo(oBackupInfo)
If mgrPath.IsSupportedRegistryPath(oBackupInfo.TruePath) Then
bRestoreCompleted = RunRegistryRestore(oBackupInfo, sBackupFile)
Else
bRestoreCompleted = Run7zRestore(oBackupInfo, sBackupFile)
End If
If bRestoreCompleted Then If bRestoreCompleted Then
'Save Local Manifest 'Save Local Manifest
@@ -235,12 +321,6 @@ Public Class mgrRestore
Else Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If 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
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionComplete, oBackupInfo.CroppedName)) RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionComplete, oBackupInfo.CroppedName))
Else Else
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName)) 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, " & "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, " & "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, " & "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) 'Add Tables (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);"
@@ -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, " & 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, " & "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, " & "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) 'Add Tables (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); "
@@ -108,6 +109,9 @@ Public Class mgrSQLite
'Add Tables (Game Processes) 'Add Tables (Game Processes)
sSql &= "CREATE TABLE gameprocesses (ProcessID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(ProcessID, MonitorID));" 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 'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion 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, " & 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, " & "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, " & "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) 'Add Tables (Remote Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " & 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);" "DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
'Add Tables (Remote Tags) '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) '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 'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
@@ -379,7 +384,7 @@ Public Class mgrSQLite
'0.9 Upgrade '0.9 Upgrade
If GetDatabaseVersion() < 90 Then If GetDatabaseVersion() < 90 Then
BackupDB("v8") 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" sSQL &= "PRAGMA user_version=90"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
End If End If
@@ -391,25 +396,25 @@ Public Class mgrSQLite
BackupDB("v84") BackupDB("v84")
'Overhaul Monitor List Table '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 &= "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 &= "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;" sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Variables Table '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 &= "INSERT INTO variables_new (VariableID, Name, Path) SELECT VariableID, Name, Path FROM variables;"
sSQL &= "DROP TABLE variables; ALTER TABLE variables_new RENAME TO variables;" sSQL &= "DROP TABLE variables; ALTER TABLE variables_new RENAME TO variables;"
'Overhaul Manifest Table '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 &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add new settings 'Add new settings
sSQL &= "ALTER TABLE settings ADD COLUMN Sync 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 &= "ALTER TABLE settings ADD COLUMN CheckSum BOOLEAN Not NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=91" sSQL &= "PRAGMA user_version=91"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
@@ -427,13 +432,13 @@ Public Class mgrSQLite
BackupDB("v84") BackupDB("v84")
'Overhaul Monitor List Table '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 &= "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 &= "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;" sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Manifest Table '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 &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -457,7 +462,7 @@ Public Class mgrSQLite
BackupDB("v91") BackupDB("v91")
'Add new setting '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" sSQL &= "PRAGMA user_version=92"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
@@ -503,11 +508,11 @@ Public Class mgrSQLite
BackupDB("v93") BackupDB("v93")
'Add Tags Tables 'Add Tags Tables
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); "
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)); "
'Add new setting '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" sSQL &= "PRAGMA user_version=94"
@@ -518,8 +523,8 @@ Public Class mgrSQLite
BackupDB("v93") BackupDB("v93")
'Add Tags Tables 'Add Tags Tables
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); "
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)); "
sSQL &= "PRAGMA user_version=94" sSQL &= "PRAGMA user_version=94"
@@ -534,8 +539,8 @@ Public Class mgrSQLite
BackupDB("v94") BackupDB("v94")
'Add new setting 'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN SupressBackup BOOLEAN NOT NULL DEFAULT 0;" 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 SupressBackupThreshold INTEGER Not NULL DEFAULT 10;"
sSQL &= "PRAGMA user_version=95" sSQL &= "PRAGMA user_version=95"
@@ -558,7 +563,7 @@ Public Class mgrSQLite
BackupDB("v95") BackupDB("v95")
'Add new setting '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" sSQL &= "PRAGMA user_version=96"
@@ -583,8 +588,8 @@ Public Class mgrSQLite
'Add new settings 'Add new settings
sSQL = "ALTER TABLE settings ADD COLUMN Custom7zArguments TEXT;" sSQL = "ALTER TABLE settings ADD COLUMN Custom7zArguments TEXT;"
sSQL &= "ALTER TABLE settings ADD COLUMN Custom7zLocation 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 SyncFields INTEGER Not NULL DEFAULT 32;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN NOT NULL DEFAULT 0;" sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=97" sSQL &= "PRAGMA user_version=97"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
@@ -606,13 +611,13 @@ Public Class mgrSQLite
BackupDB("v97") BackupDB("v97")
'Overhaul Manifest Table '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 &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field '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" sSQL &= "PRAGMA user_version=98"
@@ -626,13 +631,13 @@ Public Class mgrSQLite
BackupDB("v97") BackupDB("v97")
'Overhaul Manifest Table '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 &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field '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" sSQL &= "PRAGMA user_version=98"
@@ -650,11 +655,11 @@ Public Class mgrSQLite
BackupDB("v98") BackupDB("v98")
'Remove checksum field '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, " & 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, " & "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, " & "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, " & "SupressBackup BOOLEAN Not NULL, SupressBackupThreshold INTEGER Not NULL, CompressionLevel INTEGER Not NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);" "Custom7zLocation TEXT, SyncFields INTEGER Not NULL, AutoSaveLog BOOLEAN Not NULL);"
sSQL &= "INSERT INTO settings_new (SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " & sSQL &= "INSERT INTO settings_new (SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " & "ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog) " & "CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog) " &
@@ -663,9 +668,9 @@ Public Class mgrSQLite
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog FROM settings;" & "CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;" "DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
'Add new field(s) '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 &= "ALTER TABLE settings ADD COLUMN AutoRestore 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 settings ADD COLUMN AutoMark BOOLEAN Not NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101" sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
@@ -675,7 +680,7 @@ Public Class mgrSQLite
BackupDB("v98") BackupDB("v98")
'Add new field(s) '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" sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
@@ -689,7 +694,7 @@ Public Class mgrSQLite
BackupDB("v101") BackupDB("v101")
'Add Table (SavedPath) '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) 'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN Parameter TEXT;" sSQL &= "ALTER TABLE monitorlist ADD COLUMN Parameter TEXT;"
@@ -718,7 +723,7 @@ Public Class mgrSQLite
BackupDB("v102") BackupDB("v102")
'Add Tables (Sessions) '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) 'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN Comments TEXT;" sSQL &= "ALTER TABLE monitorlist ADD COLUMN Comments TEXT;"
@@ -748,7 +753,7 @@ Public Class mgrSQLite
BackupDB("v105") BackupDB("v105")
'Add new field(s) '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" sSQL &= "PRAGMA user_version=108"
@@ -759,7 +764,7 @@ Public Class mgrSQLite
BackupDB("v105") BackupDB("v105")
'Add new field(s) '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" sSQL &= "PRAGMA user_version=108"
@@ -774,33 +779,33 @@ Public Class mgrSQLite
BackupDB("v108") BackupDB("v108")
'Add Tables '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 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 gameprocesses (ProcessID TEXT Not NULL, MonitorID TEXT Not NULL, PRIMARY KEY(ProcessID, MonitorID));"
'Overhaul Tables '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, " & 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, " & "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, " & "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, " & "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, " & "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);" "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, " & sSQL &= "INSERT INTO settings_new(SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, ShowOverwriteWarning, RestoreOnLaunch, " &
"BackupFolder, StartWithWindows, TimeTracking, SuppressBackup, SuppressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " & "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, " & "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, " & "BackupFolder, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " &
"AutoRestore, AutoMark, SessionTracking, 0, 1, 0, 1 FROM settings;" & "AutoRestore, AutoMark, SessionTracking, 0, 1, 0, 1 FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO 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, " & 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, " & "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, " & "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);" "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, " & 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)" & "ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " & "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist;" & "ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist;" &
"DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO 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, " & 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);" "DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " & 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;" & "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;" "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -817,10 +822,10 @@ Public Class mgrSQLite
BackupDB("v108") BackupDB("v108")
'Overhaul Tables 'Overhaul Tables
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & 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, " & "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, " & "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);" "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, " & 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)" & "ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " & "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
@@ -835,8 +840,8 @@ Public Class mgrSQLite
mgrTags.SyncTags(True) mgrTags.SyncTags(True)
mgrGameTags.SyncGameTags(True) mgrGameTags.SyncGameTags(True)
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " & 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);" "DateUpdated TEXT Not NULL, UpdatedBy TEXT Not NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " & 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;" & "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;" "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
@@ -856,7 +861,7 @@ Public Class mgrSQLite
BackupDB("v110") BackupDB("v110")
'Add new setting '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" sSQL &= "PRAGMA user_version=115"
@@ -916,6 +921,35 @@ Public Class mgrSQLite
RunParamQuery(sSQL, New Hashtable) RunParamQuery(sSQL, New Hashtable)
End If End If
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 End Sub
Public Function GetDBSize() As Long Public Function GetDBSize() As Long
+14 -1
View File
@@ -26,12 +26,14 @@ Public Class mgrSettings
Private bUseGameID As Boolean = False Private bUseGameID As Boolean = False
Private bDisableSyncMessages As Boolean = True Private bDisableSyncMessages As Boolean = True
Private bShowResolvedPaths As Boolean = True Private bShowResolvedPaths As Boolean = True
Private bDisableDiskSpaceCheck As Boolean = False
<Flags()> Public Enum eSuppressMessages <Flags()> Public Enum eSuppressMessages
None = 0 None = 0
GameIDSync = 1 GameIDSync = 1
BackupImport = 2 BackupImport = 2
WinConfigsInLinux = 4 WinConfigsInLinux = 4
WineConfig = 16
End Enum End Enum
Property StartWithWindows As Boolean Property StartWithWindows As Boolean
@@ -307,6 +309,15 @@ Public Class mgrSettings
End Set End Set
End Property End Property
Property DisableDiskSpaceCheck As Boolean
Get
Return bDisableDiskSpaceCheck
End Get
Set(value As Boolean)
bDisableDiskSpaceCheck = value
End Set
End Property
Sub New() Sub New()
'The GameIDsync message should be suppressed on all new databases 'The GameIDsync message should be suppressed on all new databases
SuppressMessages = SetMessageField(SuppressMessages, eSuppressMessages.GameIDSync) SuppressMessages = SetMessageField(SuppressMessages, eSuppressMessages.GameIDSync)
@@ -321,7 +332,7 @@ Public Class mgrSettings
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @StartWithWindows, " sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @StartWithWindows, "
sSQL &= "@TimeTracking, @SuppressBackup, @SuppressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, " sSQL &= "@TimeTracking, @SuppressBackup, @SuppressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark, @SessionTracking, @SuppressMessages, @BackupOnLaunch, @UseGameID, " sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark, @SessionTracking, @SuppressMessages, @BackupOnLaunch, @UseGameID, "
sSQL &= "@DisableSyncMessages, @ShowResolvedPaths)" sSQL &= "@DisableSyncMessages, @ShowResolvedPaths, @DisableDiskSpaceCheck)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup) hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray) hshParams.Add("StartToTray", StartToTray)
@@ -348,6 +359,7 @@ Public Class mgrSettings
hshParams.Add("UseGameID", UseGameID) hshParams.Add("UseGameID", UseGameID)
hshParams.Add("DisableSyncMessages", DisableSyncMessages) hshParams.Add("DisableSyncMessages", DisableSyncMessages)
hshParams.Add("ShowResolvedPaths", ShowResolvedPaths) hshParams.Add("ShowResolvedPaths", ShowResolvedPaths)
hshParams.Add("DisableDiskSpaceCheck", DisableDiskSpaceCheck)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
@@ -388,6 +400,7 @@ Public Class mgrSettings
UseGameID = CBool(dr("UseGameID")) UseGameID = CBool(dr("UseGameID"))
DisableSyncMessages = CBool(dr("DisableSyncMessages")) DisableSyncMessages = CBool(dr("DisableSyncMessages"))
ShowResolvedPaths = CBool(dr("ShowResolvedPaths")) ShowResolvedPaths = CBool(dr("ShowResolvedPaths"))
DisableDiskSpaceCheck = CBool(dr("DisableDiskSpaceCheck"))
Next Next
oDatabase.Disconnect() 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 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 oList As List(Of Game)
Dim hshDupeList As New Hashtable Dim hshDupeList As New Hashtable
Dim oExportData As New ExportData Dim oExportData As New ExportData
@@ -42,6 +42,15 @@ Public Class mgrXML
oGame.Comments = g.Comments oGame.Comments = g.Comments
oGame.IsRegEx = g.IsRegEx oGame.IsRegEx = g.IsRegEx
oGame.RecurseSubFolders = g.RecurseSubFolders 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 For Each t As Tag In g.Tags
oGame.ImportTags.Add(t) oGame.ImportTags.Add(t)
Next Next
+295 -16
View File
@@ -96,6 +96,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to This function is currently not available on a Unix based operating system.. ''' Looks up a localized string similar to This function is currently not available on a Unix based operating system..
'''</summary> '''</summary>
@@ -123,6 +132,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Game Backup Monitor. ''' Looks up a localized string similar to Game Backup Monitor.
'''</summary> '''</summary>
@@ -195,6 +213,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to http://regexr.com/?expression=[PARAM]&amp;text=test. ''' Looks up a localized string similar to http://regexr.com/?expression=[PARAM]&amp;text=test.
'''</summary> '''</summary>
@@ -1167,6 +1194,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Parameter. ''' Looks up a localized string similar to Parameter.
'''</summary> '''</summary>
@@ -1671,6 +1707,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Delete folder on restore. ''' Looks up a localized string similar to Delete folder on restore.
'''</summary> '''</summary>
@@ -2346,6 +2391,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Parameter:. ''' Looks up a localized string similar to Parameter:.
'''</summary> '''</summary>
@@ -2500,7 +2554,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<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> '''</summary>
Friend ReadOnly Property frmGameManager_WarningWinConfigsInLinux() As String Friend ReadOnly Property frmGameManager_WarningWinConfigsInLinux() As String
Get Get
@@ -3255,6 +3309,24 @@ Namespace My.Resources
End Get End Get
End Property 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..
'''</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> '''<summary>
''' Looks up a localized string similar to The command [PARAM] requires more parameters.. ''' Looks up a localized string similar to The command [PARAM] requires more parameters..
'''</summary> '''</summary>
@@ -3291,6 +3363,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to [PARAM] uses a relative path and has never been detected on this computer.. ''' Looks up a localized string similar to [PARAM] uses a relative path and has never been detected on this computer..
'''</summary> '''</summary>
@@ -4012,7 +4093,16 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<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> '''</summary>
Friend ReadOnly Property frmMain_WinePrefix() As String Friend ReadOnly Property frmMain_WinePrefix() As String
Get Get
@@ -4021,7 +4111,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<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> '''</summary>
Friend ReadOnly Property frmMain_WineSavePath() As String Friend ReadOnly Property frmMain_WineSavePath() As String
Get Get
@@ -4614,6 +4704,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Disable backup confirmation. ''' Looks up a localized string similar to Disable backup confirmation.
'''</summary> '''</summary>
@@ -4641,6 +4740,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Disable sync event messages. ''' Looks up a localized string similar to Disable sync event messages.
'''</summary> '''</summary>
@@ -4705,20 +4813,11 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Start to system tray. ''' Looks up a localized string similar to Start minimized.
'''</summary> '''</summary>
Friend ReadOnly Property frmSettings_chkStartToTray() As String Friend ReadOnly Property frmSettings_chkStartMinimized() As String
Get Get
Return ResourceManager.GetString("frmSettings_chkStartToTray", resourceCulture) Return ResourceManager.GetString("frmSettings_chkStartMinimized", 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)
End Get End Get
End Property End Property
@@ -4776,6 +4875,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to The custom 7-Zip location [PARAM] does not exist.. ''' Looks up a localized string similar to The custom 7-Zip location [PARAM] does not exist..
'''</summary> '''</summary>
@@ -5577,6 +5685,96 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
'''</summary> '''</summary>
@@ -5844,6 +6042,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Backup aborted due to lack of disk space.. ''' Looks up a localized string similar to Backup aborted due to lack of disk space..
'''</summary> '''</summary>
@@ -5925,6 +6132,33 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to A failure occured while creating a backup sub-folder for [PARAM].[BR][PARAM]. ''' Looks up a localized string similar to A failure occured while creating a backup sub-folder for [PARAM].[BR][PARAM].
'''</summary> '''</summary>
@@ -5934,6 +6168,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to Generating SHA-256 hash for [PARAM] backup file.. ''' Looks up a localized string similar to Generating SHA-256 hash for [PARAM] backup file..
'''</summary> '''</summary>
@@ -5997,6 +6240,15 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to [PARAM] GB. ''' Looks up a localized string similar to [PARAM] GB.
'''</summary> '''</summary>
@@ -6259,7 +6511,7 @@ Namespace My.Resources
End Property End Property
'''<summary> '''<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> '''</summary>
Friend ReadOnly Property mgrPath_ConfirmBackupLocation() As String Friend ReadOnly Property mgrPath_ConfirmBackupLocation() As String
Get Get
@@ -6438,6 +6690,33 @@ Namespace My.Resources
End Get End Get
End Property 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> '''<summary>
''' Looks up a localized string similar to [PARAM] has no stored checksum, verification has been skipped.. ''' Looks up a localized string similar to [PARAM] has no stored checksum, verification has been skipped..
'''</summary> '''</summary>
+101 -8
View File
@@ -1069,11 +1069,11 @@
<data name="frmSettings_chkShowDetectionTips" xml:space="preserve"> <data name="frmSettings_chkShowDetectionTips" xml:space="preserve">
<value>Show detection notifications</value> <value>Show detection notifications</value>
</data> </data>
<data name="frmSettings_chkStartToTray" xml:space="preserve"> <data name="frmSettings_chkStartMinimized" xml:space="preserve">
<value>Start to system tray</value> <value>Start minimized</value>
</data> </data>
<data name="frmSettings_chkStartWindows" xml:space="preserve"> <data name="frmSettings_chkAutoStart" xml:space="preserve">
<value>Start with Windows</value> <value>Start automatically on log-in</value>
</data> </data>
<data name="frmSettings_chkSuppressBackup" xml:space="preserve"> <data name="frmSettings_chkSuppressBackup" xml:space="preserve">
<value>Ignore sessions shorter than</value> <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> <value>[PARAM][BR][BR]Do you wish to automatically search for the game path? (Path will be saved)</value>
</data> </data>
<data name="mgrPath_ConfirmBackupLocation" xml:space="preserve"> <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>
<data name="mgrPath_ConfirmManualPath" xml:space="preserve"> <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> <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> <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>
<data name="frmMain_WinePrefix" xml:space="preserve"> <data name="frmMain_WinePrefix" xml:space="preserve">
<value>[PARAM] Wine Prefix: [PARAM]</value> <value>Wine Prefix: [PARAM]</value>
</data> </data>
<data name="frmMain_WineSavePath" xml:space="preserve"> <data name="frmMain_WineSavePath" xml:space="preserve">
<value>[PARAM] Converted Save Path: [PARAM]</value> <value>Wine Save Path: [PARAM]</value>
</data> </data>
<data name="mgrPath_ErrorBuildingWinePath" xml:space="preserve"> <data name="mgrPath_ErrorBuildingWinePath" xml:space="preserve">
<value>An error occured when building a Wine path.[BR][BR][PARAM]</value> <value>An error occured when building a Wine path.[BR][BR][PARAM]</value>
@@ -2264,7 +2264,7 @@
<value>&amp;Windows...</value> <value>&amp;Windows...</value>
</data> </data>
<data name="frmGameManager_WarningWinConfigsInLinux" xml:space="preserve"> <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>
<data name="frmGameManager_ConfirmBackupImportOverwriteSingle" xml:space="preserve"> <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> <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"> <data name="frmMain_ErrorInvalidMode" xml:space="preserve">
<value>Invalid mode([PARAM]) for command [PARAM].</value> <value>Invalid mode([PARAM]) for command [PARAM].</value>
</data> </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.</value>
</data>
<data name="mgrCommon_FolderSelection" xml:space="preserve">
<value>Current Folder</value>
</data>
</root> </root>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.