Compare commits
104 Commits
v0.95-beta
...
v0.98
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d0db7c075 | ||
|
|
e3f5c7e3c0 | ||
|
|
ba1fc76ebe | ||
|
|
6de58dc977 | ||
|
|
5e0e1a543f | ||
|
|
7254b6b501 | ||
|
|
f117e7fbaa | ||
|
|
d46bc38bdc | ||
|
|
a092c1b44f | ||
|
|
77b5efbe02 | ||
|
|
7a93fd799b | ||
|
|
4108ec36d7 | ||
|
|
87f93ed4f5 | ||
|
|
18befc19b3 | ||
|
|
bfe2346e8a | ||
|
|
9cbc2b3240 | ||
|
|
1fab0e0cf4 | ||
|
|
588f51d496 | ||
|
|
77eb164a62 | ||
|
|
58ec4564ae | ||
|
|
8c1f3144f8 | ||
|
|
507984bdf8 | ||
|
|
378377a1a9 | ||
|
|
86ffc75666 | ||
|
|
f312e315b9 | ||
|
|
e567638c0e | ||
|
|
1f9fcca024 | ||
|
|
b68646c97e | ||
|
|
896c77fe11 | ||
|
|
e288c77ba8 | ||
|
|
8b779f6d66 | ||
|
|
ef6e608d30 | ||
|
|
7b524e42fc | ||
|
|
2beff1b46d | ||
|
|
0ad4fd890d | ||
|
|
761fed64cc | ||
|
|
f839793071 | ||
|
|
b8b4c63910 | ||
|
|
ef70c08469 | ||
|
|
45e59f8ae6 | ||
|
|
cb9bab9892 | ||
|
|
7f19ae6345 | ||
|
|
ab240b610c | ||
|
|
6c80094848 | ||
|
|
16649238f0 | ||
|
|
39460f57d5 | ||
|
|
d788c751f7 | ||
|
|
3acb790822 | ||
|
|
0e4f357c01 | ||
|
|
58684bf9a5 | ||
|
|
1d19a49b0e | ||
|
|
94bb4e70ef | ||
|
|
1c493f1d4e | ||
|
|
970b1f4e58 | ||
|
|
911b3bdfc4 | ||
|
|
ce759fe87f | ||
|
|
d1ca0a150e | ||
|
|
b149a19a8b | ||
|
|
b458b89b46 | ||
|
|
83df2edc90 | ||
|
|
31b72488b2 | ||
|
|
3dbf5d0e62 | ||
|
|
2eb6693275 | ||
|
|
d1e292d4bf | ||
|
|
640690514b | ||
|
|
aade2dcee9 | ||
|
|
76ffc79a6b | ||
|
|
a6341ffa76 | ||
|
|
09c7bf8f05 | ||
|
|
039f47fccd | ||
|
|
164bb4255e | ||
|
|
df5e8f2d2a | ||
|
|
7766a07cf3 | ||
|
|
e71b2f4064 | ||
|
|
be2335b61e | ||
|
|
ca9fef33ea | ||
|
|
93c9b1a5ee | ||
|
|
730305b694 | ||
|
|
8880373f34 | ||
|
|
321c72b6bf | ||
|
|
163b6cd3a0 | ||
|
|
44c2d98f25 | ||
|
|
f050061b76 | ||
|
|
0cafd00bf3 | ||
|
|
feb8a9d0b2 | ||
|
|
d46360b244 | ||
|
|
ca8798a460 | ||
|
|
da16a89baa | ||
|
|
b03545d86f | ||
|
|
430e1171fb | ||
|
|
e531ec5701 | ||
|
|
7a7fa65ce6 | ||
|
|
4c7d36baef | ||
|
|
de7a993abe | ||
|
|
ec47697434 | ||
|
|
a7b97912f2 | ||
|
|
8222f518f6 | ||
|
|
0a564ca510 | ||
|
|
85d9cc0c5f | ||
|
|
abbc6a4a70 | ||
|
|
5947b7d0b2 | ||
|
|
2fb18c5f19 | ||
|
|
47f4b0774d | ||
|
|
70be04b750 |
@@ -41,7 +41,11 @@
|
||||
|
||||
Property FileName As String
|
||||
Get
|
||||
Return sFileName
|
||||
If mgrCommon.IsUnix Then
|
||||
Return sFileName.Replace("\", "/")
|
||||
Else
|
||||
Return sFileName.Replace("/", "\")
|
||||
End If
|
||||
End Get
|
||||
Set(value As String)
|
||||
sFileName = value
|
||||
|
||||
+60
-3
@@ -7,6 +7,7 @@
|
||||
Private bFolderSave As Boolean = False
|
||||
Private sFileType As String = String.Empty
|
||||
Private bAppendTimeStamp As Boolean = False
|
||||
Private iBackupLimit As Integer = 2
|
||||
Private sExcludeList As String = String.Empty
|
||||
Private sProcessPath As String = String.Empty
|
||||
Private sIcon As String = String.Empty
|
||||
@@ -19,6 +20,16 @@
|
||||
Private bTempGame As Boolean = False
|
||||
Private oImportTags As New List(Of Tag)
|
||||
|
||||
<Flags()> Public Enum eOptionalSyncFields
|
||||
None = 0
|
||||
GamePath = 1
|
||||
Company = 2
|
||||
Version = 4
|
||||
Icon = 16
|
||||
TimeStamp = 32
|
||||
MonitorGame = 64
|
||||
End Enum
|
||||
|
||||
Property ID As String
|
||||
Set(value As String)
|
||||
sGameID = value
|
||||
@@ -44,7 +55,6 @@
|
||||
End Get
|
||||
End Property
|
||||
|
||||
|
||||
Property Name As String
|
||||
Set(value As String)
|
||||
sGameName = value
|
||||
@@ -108,6 +118,15 @@
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property BackupLimit As Integer
|
||||
Get
|
||||
Return iBackupLimit
|
||||
End Get
|
||||
Set(value As Integer)
|
||||
iBackupLimit = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property ExcludeList As String
|
||||
Set(value As String)
|
||||
sExcludeList = value
|
||||
@@ -219,15 +238,15 @@
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Function SyncEquals(obj As Object) As Boolean
|
||||
Public Function SyncEquals(obj As Object, eSyncFields As eOptionalSyncFields) As Boolean
|
||||
Dim oGame As clsGame = TryCast(obj, clsGame)
|
||||
If oGame Is Nothing Then
|
||||
Return False
|
||||
Else
|
||||
'Core Sync Fields
|
||||
If ID <> oGame.ID Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
If Name <> oGame.Name Then
|
||||
Return False
|
||||
End If
|
||||
@@ -255,6 +274,44 @@
|
||||
If Hours <> oGame.Hours Then
|
||||
Return False
|
||||
End If
|
||||
If MonitorOnly <> oGame.MonitorOnly Then
|
||||
Return False
|
||||
End If
|
||||
|
||||
'Optional Sync Fields
|
||||
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
|
||||
If Company <> oGame.Company Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If (eSyncFields And eOptionalSyncFields.GamePath) = eOptionalSyncFields.GamePath Then
|
||||
If ProcessPath <> oGame.ProcessPath Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If (eSyncFields And eOptionalSyncFields.Icon) = eOptionalSyncFields.Icon Then
|
||||
If Icon <> oGame.Icon Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If (eSyncFields And eOptionalSyncFields.MonitorGame) = eOptionalSyncFields.MonitorGame Then
|
||||
If Enabled <> oGame.Enabled Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If (eSyncFields And eOptionalSyncFields.TimeStamp) = eOptionalSyncFields.TimeStamp Then
|
||||
If AppendTimeStamp <> oGame.AppendTimeStamp Then
|
||||
Return False
|
||||
End If
|
||||
If BackupLimit <> oGame.BackupLimit Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If (eSyncFields And eOptionalSyncFields.Version) = eOptionalSyncFields.Version Then
|
||||
If Version <> oGame.Version Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
Return True
|
||||
End If
|
||||
End Function
|
||||
|
||||
Generated
+49
-43
@@ -22,21 +22,22 @@ Partial Class frmAddWizard
|
||||
'Do not modify it using the code editor.
|
||||
<System.Diagnostics.DebuggerStepThrough()> _
|
||||
Private Sub InitializeComponent()
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAddWizard))
|
||||
Me.tabWizard = New System.Windows.Forms.TabControl()
|
||||
Me.tbPage1 = New System.Windows.Forms.TabPage()
|
||||
Me.lblStep1Title = New System.Windows.Forms.Label()
|
||||
Me.lblDrag1 = New System.Windows.Forms.Label()
|
||||
Me.lblStep1Instructions = New System.Windows.Forms.Label()
|
||||
Me.txtName = New System.Windows.Forms.TextBox()
|
||||
Me.lblStep1Intro = New System.Windows.Forms.Label()
|
||||
Me.tbPage2 = New System.Windows.Forms.TabPage()
|
||||
Me.lblStep2Title = New System.Windows.Forms.Label()
|
||||
Me.lblStep2Instructions = New System.Windows.Forms.Label()
|
||||
Me.lblDrag2 = New System.Windows.Forms.Label()
|
||||
Me.btnProcessBrowse = New System.Windows.Forms.Button()
|
||||
Me.txtProcessPath = New System.Windows.Forms.TextBox()
|
||||
Me.lblStep2Intro = New System.Windows.Forms.Label()
|
||||
Me.tbPage3 = New System.Windows.Forms.TabPage()
|
||||
Me.lblLimit = New System.Windows.Forms.Label()
|
||||
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
|
||||
Me.lblStep3Title = New System.Windows.Forms.Label()
|
||||
Me.lblStep3Instructions = New System.Windows.Forms.Label()
|
||||
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
|
||||
@@ -71,6 +72,7 @@ Partial Class frmAddWizard
|
||||
Me.tbPage1.SuspendLayout()
|
||||
Me.tbPage2.SuspendLayout()
|
||||
Me.tbPage3.SuspendLayout()
|
||||
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.tbPage3a.SuspendLayout()
|
||||
Me.tbPage4.SuspendLayout()
|
||||
Me.tbPage5.SuspendLayout()
|
||||
@@ -95,7 +97,6 @@ Partial Class frmAddWizard
|
||||
'
|
||||
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
|
||||
Me.tbPage1.Controls.Add(Me.lblStep1Title)
|
||||
Me.tbPage1.Controls.Add(Me.lblDrag1)
|
||||
Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
|
||||
Me.tbPage1.Controls.Add(Me.txtName)
|
||||
Me.tbPage1.Controls.Add(Me.lblStep1Intro)
|
||||
@@ -116,23 +117,16 @@ Partial Class frmAddWizard
|
||||
Me.lblStep1Title.TabIndex = 8
|
||||
Me.lblStep1Title.Text = "Game Name"
|
||||
'
|
||||
'lblDrag1
|
||||
'
|
||||
Me.lblDrag1.AllowDrop = True
|
||||
Me.lblDrag1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblDrag1.Location = New System.Drawing.Point(14, 135)
|
||||
Me.lblDrag1.Name = "lblDrag1"
|
||||
Me.lblDrag1.Size = New System.Drawing.Size(303, 49)
|
||||
Me.lblDrag1.TabIndex = 7
|
||||
Me.lblDrag1.Text = "Drag a shortcut here to complete this step."
|
||||
'
|
||||
'lblStep1Instructions
|
||||
'
|
||||
Me.lblStep1Instructions.AllowDrop = True
|
||||
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93)
|
||||
Me.lblStep1Instructions.Name = "lblStep1Instructions"
|
||||
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 30)
|
||||
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 85)
|
||||
Me.lblStep1Instructions.TabIndex = 6
|
||||
Me.lblStep1Instructions.Text = "The name will be automatically filtered for length and invalid characters. "
|
||||
Me.lblStep1Instructions.Text = "The name will be automatically filtered for length and invalid characters. You m" &
|
||||
"ay drag and drop a shortcut here to complete this step, only Windows shortcuts a" &
|
||||
"re currently supported."
|
||||
'
|
||||
'txtName
|
||||
'
|
||||
@@ -156,7 +150,6 @@ Partial Class frmAddWizard
|
||||
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
|
||||
Me.tbPage2.Controls.Add(Me.lblStep2Title)
|
||||
Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
|
||||
Me.tbPage2.Controls.Add(Me.lblDrag2)
|
||||
Me.tbPage2.Controls.Add(Me.btnProcessBrowse)
|
||||
Me.tbPage2.Controls.Add(Me.txtProcessPath)
|
||||
Me.tbPage2.Controls.Add(Me.lblStep2Intro)
|
||||
@@ -179,22 +172,12 @@ Partial Class frmAddWizard
|
||||
'
|
||||
'lblStep2Instructions
|
||||
'
|
||||
Me.lblStep2Instructions.AllowDrop = True
|
||||
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93)
|
||||
Me.lblStep2Instructions.Name = "lblStep2Instructions"
|
||||
Me.lblStep2Instructions.Size = New System.Drawing.Size(303, 29)
|
||||
Me.lblStep2Instructions.Size = New System.Drawing.Size(303, 85)
|
||||
Me.lblStep2Instructions.TabIndex = 10
|
||||
Me.lblStep2Instructions.Text = "Some games use launchers. Do not monitor launchers, be sure to choose the game'" & _
|
||||
"s actual exe file."
|
||||
'
|
||||
'lblDrag2
|
||||
'
|
||||
Me.lblDrag2.AllowDrop = True
|
||||
Me.lblDrag2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblDrag2.Location = New System.Drawing.Point(14, 135)
|
||||
Me.lblDrag2.Name = "lblDrag2"
|
||||
Me.lblDrag2.Size = New System.Drawing.Size(336, 44)
|
||||
Me.lblDrag2.TabIndex = 9
|
||||
Me.lblDrag2.Text = "Drag a shortcut here to complete this step."
|
||||
Me.lblStep2Instructions.Text = resources.GetString("lblStep2Instructions.Text")
|
||||
'
|
||||
'btnProcessBrowse
|
||||
'
|
||||
@@ -225,6 +208,8 @@ Partial Class frmAddWizard
|
||||
'tbPage3
|
||||
'
|
||||
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control
|
||||
Me.tbPage3.Controls.Add(Me.lblLimit)
|
||||
Me.tbPage3.Controls.Add(Me.nudLimit)
|
||||
Me.tbPage3.Controls.Add(Me.lblStep3Title)
|
||||
Me.tbPage3.Controls.Add(Me.lblStep3Instructions)
|
||||
Me.tbPage3.Controls.Add(Me.chkTimeStamp)
|
||||
@@ -238,6 +223,26 @@ Partial Class frmAddWizard
|
||||
Me.tbPage3.TabIndex = 2
|
||||
Me.tbPage3.Text = "TabPage3"
|
||||
'
|
||||
'lblLimit
|
||||
'
|
||||
Me.lblLimit.AutoSize = True
|
||||
Me.lblLimit.Location = New System.Drawing.Point(203, 109)
|
||||
Me.lblLimit.Name = "lblLimit"
|
||||
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
|
||||
Me.lblLimit.TabIndex = 15
|
||||
Me.lblLimit.Text = "Backup Limit"
|
||||
Me.lblLimit.Visible = False
|
||||
'
|
||||
'nudLimit
|
||||
'
|
||||
Me.nudLimit.Location = New System.Drawing.Point(157, 107)
|
||||
Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
|
||||
Me.nudLimit.Name = "nudLimit"
|
||||
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
|
||||
Me.nudLimit.TabIndex = 14
|
||||
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
|
||||
Me.nudLimit.Visible = False
|
||||
'
|
||||
'lblStep3Title
|
||||
'
|
||||
Me.lblStep3Title.AutoSize = True
|
||||
@@ -250,32 +255,32 @@ Partial Class frmAddWizard
|
||||
'
|
||||
'lblStep3Instructions
|
||||
'
|
||||
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 116)
|
||||
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 139)
|
||||
Me.lblStep3Instructions.Name = "lblStep3Instructions"
|
||||
Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42)
|
||||
Me.lblStep3Instructions.TabIndex = 9
|
||||
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save Entire Folder " & _
|
||||
"is checked. You can also time stamp your backup files to make incremental backu" & _
|
||||
"ps."
|
||||
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save entire folder " &
|
||||
"is checked. You can also choose to save multiple backups and set a limit on how" &
|
||||
" many to keep."
|
||||
'
|
||||
'chkTimeStamp
|
||||
'
|
||||
Me.chkTimeStamp.AutoSize = True
|
||||
Me.chkTimeStamp.Location = New System.Drawing.Point(139, 87)
|
||||
Me.chkTimeStamp.Location = New System.Drawing.Point(18, 108)
|
||||
Me.chkTimeStamp.Name = "chkTimeStamp"
|
||||
Me.chkTimeStamp.Size = New System.Drawing.Size(122, 17)
|
||||
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
|
||||
Me.chkTimeStamp.TabIndex = 8
|
||||
Me.chkTimeStamp.Text = "Time Stamp Backup"
|
||||
Me.chkTimeStamp.Text = "Save multiple backups"
|
||||
Me.chkTimeStamp.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkFolderSave
|
||||
'
|
||||
Me.chkFolderSave.AutoSize = True
|
||||
Me.chkFolderSave.Location = New System.Drawing.Point(17, 87)
|
||||
Me.chkFolderSave.Location = New System.Drawing.Point(18, 87)
|
||||
Me.chkFolderSave.Name = "chkFolderSave"
|
||||
Me.chkFolderSave.Size = New System.Drawing.Size(113, 17)
|
||||
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
|
||||
Me.chkFolderSave.TabIndex = 7
|
||||
Me.chkFolderSave.Text = "Save Entire Folder"
|
||||
Me.chkFolderSave.Text = "Save entire folder"
|
||||
Me.chkFolderSave.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnSaveBrowse
|
||||
@@ -372,7 +377,7 @@ Partial Class frmAddWizard
|
||||
Me.lblStep3aInstructions.Name = "lblStep3aInstructions"
|
||||
Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56)
|
||||
Me.lblStep3aInstructions.TabIndex = 5
|
||||
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" & _
|
||||
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" &
|
||||
"up. If you're unsure, go back a step and choose to save the entire folder. "
|
||||
'
|
||||
'txtFileTypes
|
||||
@@ -454,7 +459,7 @@ Partial Class frmAddWizard
|
||||
Me.lblStep4Instructions.Name = "lblStep4Instructions"
|
||||
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59)
|
||||
Me.lblStep4Instructions.TabIndex = 5
|
||||
Me.lblStep4Instructions.Text = "Choose any file types, specific files or folders you wish to exclude from the ba" & _
|
||||
Me.lblStep4Instructions.Text = "Choose any file types, specific files or folders you wish to exclude from the ba" &
|
||||
"ckup. You may choose multiple items to exclude. This step can be skipped."
|
||||
'
|
||||
'txtExcludeList
|
||||
@@ -559,6 +564,7 @@ Partial Class frmAddWizard
|
||||
Me.tbPage2.PerformLayout()
|
||||
Me.tbPage3.ResumeLayout(False)
|
||||
Me.tbPage3.PerformLayout()
|
||||
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.tbPage3a.ResumeLayout(False)
|
||||
Me.tbPage3a.PerformLayout()
|
||||
Me.tbPage4.ResumeLayout(False)
|
||||
@@ -578,12 +584,10 @@ Partial Class frmAddWizard
|
||||
Friend WithEvents tbPage3a As System.Windows.Forms.TabPage
|
||||
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
|
||||
Friend WithEvents tbPage5 As System.Windows.Forms.TabPage
|
||||
Friend WithEvents lblDrag1 As System.Windows.Forms.Label
|
||||
Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label
|
||||
Friend WithEvents txtName As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
|
||||
Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label
|
||||
Friend WithEvents lblDrag2 As System.Windows.Forms.Label
|
||||
Friend WithEvents btnProcessBrowse As System.Windows.Forms.Button
|
||||
Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblStep2Intro As System.Windows.Forms.Label
|
||||
@@ -613,4 +617,6 @@ Partial Class frmAddWizard
|
||||
Friend WithEvents lblExcludePath As Label
|
||||
Friend WithEvents lblIncludePathTitle As Label
|
||||
Friend WithEvents lblExcludePathTitle As Label
|
||||
Friend WithEvents lblLimit As Label
|
||||
Friend WithEvents nudLimit As NumericUpDown
|
||||
End Class
|
||||
|
||||
@@ -117,4 +117,7 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="lblStep2Instructions.Text" xml:space="preserve">
|
||||
<value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual exe file. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -36,18 +36,17 @@ Public Class frmAddWizard
|
||||
btnNext.Text = frmAddWizard_btnNext
|
||||
btnBack.Text = frmAddWizard_btnBack
|
||||
lblStep1Title.Text = frmAddWizard_lblStep1Title
|
||||
lblDrag1.Text = frmAddWizard_lblDrag1
|
||||
lblStep1Instructions.Text = frmAddWizard_lblStep1Instructions
|
||||
lblStep1Intro.Text = frmAddWizard_lblStep1Intro
|
||||
lblStep2Title.Text = frmAddWizard_lblStep2Title
|
||||
lblStep2Instructions.Text = frmAddWizard_lblStep2Instructions
|
||||
lblDrag2.Text = frmAddWizard_lblDrag2
|
||||
btnProcessBrowse.Text = frmAddWizard_btnProcessBrowse
|
||||
lblStep2Intro.Text = frmAddWizard_lblStep2Intro
|
||||
lblStep3Title.Text = frmAddWizard_lblStep3Title
|
||||
lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions
|
||||
chkTimeStamp.Text = frmAddWizard_chkTimeStamp
|
||||
chkFolderSave.Text = frmAddWizard_chkFolderSave
|
||||
lblLimit.Text = frmAddWizard_lblLimit
|
||||
btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse
|
||||
lblStep3Intro.Text = frmAddWizard_lblStep3Intro
|
||||
lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle
|
||||
@@ -70,6 +69,28 @@ Public Class frmAddWizard
|
||||
StepHandler()
|
||||
End Sub
|
||||
|
||||
Private Sub ShowHideLimit()
|
||||
If chkTimeStamp.Checked Then
|
||||
nudLimit.Visible = True
|
||||
lblLimit.Visible = True
|
||||
nudLimit.Value = 5
|
||||
Else
|
||||
nudLimit.Visible = False
|
||||
nudLimit.Value = nudLimit.Minimum
|
||||
lblLimit.Visible = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function ShowSummaryLimit(ByVal bTimeStamp As Boolean, ByVal iLimit As Integer) As String
|
||||
Dim sLimit As String = String.Empty
|
||||
|
||||
If bTimeStamp Then
|
||||
Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & iLimit & ")"
|
||||
Else
|
||||
Return mgrCommon.BooleanYesNo(bTimeStamp)
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Function StringEmptyText(ByVal sString As String) As String
|
||||
If sString = String.Empty Then
|
||||
Return frmAddWizard_None
|
||||
@@ -83,19 +104,31 @@ Public Class frmAddWizard
|
||||
Dim sName As String = txtName.Text
|
||||
Dim sProcessFullPath As String = txtProcessPath.Text
|
||||
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
|
||||
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
|
||||
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
|
||||
Dim sSavePath As String = txtSavePath.Text
|
||||
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
|
||||
Dim bFolderBackup As Boolean = chkFolderSave.Checked
|
||||
Dim bTimeStamp As Boolean = chkTimeStamp.Checked
|
||||
Dim iLimit As Integer = nudLimit.Value
|
||||
Dim sFileType As String = txtFileTypes.Text
|
||||
Dim sExcludeList As String = txtExcludeList.Text
|
||||
Dim sProcess As String
|
||||
Dim sItem As String()
|
||||
Dim sItems As String()
|
||||
Dim sValues As String()
|
||||
Dim lstItem As ListViewItem
|
||||
|
||||
'Handle Process
|
||||
If Path.HasExtension(sProcessFullPath) Then
|
||||
If sProcessFullPath.ToLower.EndsWith(".exe") Then
|
||||
sProcess = Path.GetFileNameWithoutExtension(sProcessFullPath)
|
||||
Else
|
||||
sProcess = Path.GetFileName(sProcessFullPath)
|
||||
End If
|
||||
Else
|
||||
sProcess = Path.GetFileName(sProcessFullPath)
|
||||
End If
|
||||
|
||||
If Not bIsAbsolute Then
|
||||
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
|
||||
End If
|
||||
@@ -108,7 +141,7 @@ Public Class frmAddWizard
|
||||
lstSummary.Columns(1).Width = 210
|
||||
|
||||
sItems = {frmAddWizard_Summary_Name, frmAddWizard_Summary_Process, frmAddWizard_Summary_AbsolutePath, frmAddWizard_Summary_SavePath, frmAddWizard_Summary_FolderSave, frmAddWizard_Summary_Timestamp, frmAddWizard_Summary_Include, frmAddWizard_Summary_Exclude}
|
||||
sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), mgrCommon.BooleanYesNo(bTimeStamp), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
|
||||
sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), ShowSummaryLimit(bTimeStamp, iLimit), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
|
||||
|
||||
For i = 0 To sItems.Length - 1
|
||||
sItem = {sItems(i), sValues(i)}
|
||||
@@ -124,7 +157,9 @@ Public Class frmAddWizard
|
||||
oGame.FolderSave = bFolderBackup
|
||||
oGame.FileType = sFileType
|
||||
oGame.AppendTimeStamp = bTimeStamp
|
||||
oGame.BackupLimit = iLimit
|
||||
oGame.ExcludeList = sExcludeList
|
||||
oGame.ProcessPath = sProcessPath
|
||||
|
||||
Return oGame
|
||||
End Function
|
||||
@@ -178,7 +213,7 @@ Public Class frmAddWizard
|
||||
Return False
|
||||
End If
|
||||
|
||||
If Path.GetExtension(strPath.ToLower) <> ".exe" Then
|
||||
If Path.GetExtension(strPath.ToLower) <> ".exe" And Not mgrCommon.IsUnix Then
|
||||
sErrorMessage = frmAddWizard_ErrorNotAProcess
|
||||
txtProcessPath.Focus()
|
||||
Return False
|
||||
@@ -459,13 +494,13 @@ Public Class frmAddWizard
|
||||
SetForm()
|
||||
End Sub
|
||||
|
||||
Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles lblDrag1.DragEnter, lblDrag2.DragEnter, txtName.DragEnter, txtProcessPath.DragEnter
|
||||
Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles txtName.DragEnter, txtProcessPath.DragEnter, lblStep1Instructions.DragEnter, lblStep2Instructions.DragEnter
|
||||
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
|
||||
e.Effect = DragDropEffects.Copy
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles lblDrag1.DragDrop, lblDrag2.DragDrop, txtName.DragDrop, txtProcessPath.DragDrop
|
||||
Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles txtName.DragDrop, txtProcessPath.DragDrop, lblStep1Instructions.DragDrop, lblStep2Instructions.DragDrop
|
||||
Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop)
|
||||
For Each sPath In oFiles
|
||||
ReadShortcut(sPath)
|
||||
@@ -492,6 +527,10 @@ Public Class frmAddWizard
|
||||
txtFileTypes.Clear()
|
||||
End Sub
|
||||
|
||||
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
|
||||
ShowHideLimit()
|
||||
End Sub
|
||||
|
||||
Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
|
||||
OpenBuilder(frmAddWizard_Include, txtFileTypes)
|
||||
UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes)
|
||||
@@ -501,4 +540,6 @@ Public Class frmAddWizard
|
||||
OpenBuilder(frmAddWizard_Exclude, txtExcludeList)
|
||||
UpdateBuilderLabel(txtExcludeList.Text, lblExclude)
|
||||
End Sub
|
||||
|
||||
|
||||
End Class
|
||||
Generated
+47
-23
@@ -22,47 +22,40 @@ Partial Class frmAdvancedImport
|
||||
'Do not modify it using the code editor.
|
||||
<System.Diagnostics.DebuggerStepThrough()> _
|
||||
Private Sub InitializeComponent()
|
||||
Me.lstGames = New System.Windows.Forms.CheckedListBox()
|
||||
Me.btnImport = New System.Windows.Forms.Button()
|
||||
Me.chkSelectAll = New System.Windows.Forms.CheckBox()
|
||||
Me.lblGames = New System.Windows.Forms.Label()
|
||||
Me.lblSelected = New System.Windows.Forms.Label()
|
||||
Me.btnCancel = New System.Windows.Forms.Button()
|
||||
Me.lstGames = New System.Windows.Forms.ListView()
|
||||
Me.txtFilter = New System.Windows.Forms.TextBox()
|
||||
Me.lblFilter = New System.Windows.Forms.Label()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'lstGames
|
||||
'
|
||||
Me.lstGames.CheckOnClick = True
|
||||
Me.lstGames.FormattingEnabled = True
|
||||
Me.lstGames.Location = New System.Drawing.Point(12, 30)
|
||||
Me.lstGames.Name = "lstGames"
|
||||
Me.lstGames.Size = New System.Drawing.Size(335, 334)
|
||||
Me.lstGames.Sorted = True
|
||||
Me.lstGames.TabIndex = 1
|
||||
'
|
||||
'btnImport
|
||||
'
|
||||
Me.btnImport.Location = New System.Drawing.Point(191, 370)
|
||||
Me.btnImport.Location = New System.Drawing.Point(416, 375)
|
||||
Me.btnImport.Name = "btnImport"
|
||||
Me.btnImport.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnImport.TabIndex = 2
|
||||
Me.btnImport.TabIndex = 3
|
||||
Me.btnImport.Text = "&Import"
|
||||
Me.btnImport.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkSelectAll
|
||||
'
|
||||
Me.chkSelectAll.AutoSize = True
|
||||
Me.chkSelectAll.Location = New System.Drawing.Point(15, 12)
|
||||
Me.chkSelectAll.Location = New System.Drawing.Point(12, 12)
|
||||
Me.chkSelectAll.Name = "chkSelectAll"
|
||||
Me.chkSelectAll.Size = New System.Drawing.Size(15, 14)
|
||||
Me.chkSelectAll.Size = New System.Drawing.Size(70, 17)
|
||||
Me.chkSelectAll.TabIndex = 0
|
||||
Me.chkSelectAll.Text = "Select All"
|
||||
Me.chkSelectAll.UseVisualStyleBackColor = True
|
||||
'
|
||||
'lblGames
|
||||
'
|
||||
Me.lblGames.Location = New System.Drawing.Point(12, 12)
|
||||
Me.lblGames.Location = New System.Drawing.Point(12, 380)
|
||||
Me.lblGames.Name = "lblGames"
|
||||
Me.lblGames.Size = New System.Drawing.Size(335, 14)
|
||||
Me.lblGames.Size = New System.Drawing.Size(560, 14)
|
||||
Me.lblGames.TabIndex = 0
|
||||
Me.lblGames.Text = "Games"
|
||||
Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter
|
||||
@@ -70,7 +63,7 @@ Partial Class frmAdvancedImport
|
||||
'lblSelected
|
||||
'
|
||||
Me.lblSelected.AutoSize = True
|
||||
Me.lblSelected.Location = New System.Drawing.Point(9, 375)
|
||||
Me.lblSelected.Location = New System.Drawing.Point(9, 380)
|
||||
Me.lblSelected.Name = "lblSelected"
|
||||
Me.lblSelected.Size = New System.Drawing.Size(77, 13)
|
||||
Me.lblSelected.TabIndex = 0
|
||||
@@ -78,23 +71,52 @@ Partial Class frmAdvancedImport
|
||||
'
|
||||
'btnCancel
|
||||
'
|
||||
Me.btnCancel.Location = New System.Drawing.Point(272, 370)
|
||||
Me.btnCancel.Location = New System.Drawing.Point(497, 375)
|
||||
Me.btnCancel.Name = "btnCancel"
|
||||
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnCancel.TabIndex = 3
|
||||
Me.btnCancel.TabIndex = 4
|
||||
Me.btnCancel.Text = "&Cancel"
|
||||
Me.btnCancel.UseVisualStyleBackColor = True
|
||||
'
|
||||
'lstGames
|
||||
'
|
||||
Me.lstGames.CheckBoxes = True
|
||||
Me.lstGames.FullRowSelect = True
|
||||
Me.lstGames.Location = New System.Drawing.Point(12, 35)
|
||||
Me.lstGames.Name = "lstGames"
|
||||
Me.lstGames.Size = New System.Drawing.Size(560, 329)
|
||||
Me.lstGames.TabIndex = 2
|
||||
Me.lstGames.UseCompatibleStateImageBehavior = False
|
||||
Me.lstGames.View = System.Windows.Forms.View.Details
|
||||
'
|
||||
'txtFilter
|
||||
'
|
||||
Me.txtFilter.Location = New System.Drawing.Point(416, 9)
|
||||
Me.txtFilter.Name = "txtFilter"
|
||||
Me.txtFilter.Size = New System.Drawing.Size(156, 20)
|
||||
Me.txtFilter.TabIndex = 1
|
||||
'
|
||||
'lblFilter
|
||||
'
|
||||
Me.lblFilter.Location = New System.Drawing.Point(307, 12)
|
||||
Me.lblFilter.Name = "lblFilter"
|
||||
Me.lblFilter.Size = New System.Drawing.Size(103, 14)
|
||||
Me.lblFilter.TabIndex = 0
|
||||
Me.lblFilter.Text = "Filter:"
|
||||
Me.lblFilter.TextAlign = System.Drawing.ContentAlignment.TopRight
|
||||
'
|
||||
'frmAdvancedImport
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(359, 402)
|
||||
Me.ClientSize = New System.Drawing.Size(584, 411)
|
||||
Me.Controls.Add(Me.lblFilter)
|
||||
Me.Controls.Add(Me.txtFilter)
|
||||
Me.Controls.Add(Me.lstGames)
|
||||
Me.Controls.Add(Me.btnCancel)
|
||||
Me.Controls.Add(Me.lblSelected)
|
||||
Me.Controls.Add(Me.chkSelectAll)
|
||||
Me.Controls.Add(Me.btnImport)
|
||||
Me.Controls.Add(Me.lstGames)
|
||||
Me.Controls.Add(Me.lblGames)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.MaximizeBox = False
|
||||
@@ -107,10 +129,12 @@ Partial Class frmAdvancedImport
|
||||
Me.PerformLayout()
|
||||
|
||||
End Sub
|
||||
Friend WithEvents lstGames As System.Windows.Forms.CheckedListBox
|
||||
Friend WithEvents btnImport As System.Windows.Forms.Button
|
||||
Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents lblGames As System.Windows.Forms.Label
|
||||
Friend WithEvents lblSelected As System.Windows.Forms.Label
|
||||
Friend WithEvents btnCancel As System.Windows.Forms.Button
|
||||
Friend WithEvents lstGames As System.Windows.Forms.ListView
|
||||
Friend WithEvents txtFilter As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblFilter As System.Windows.Forms.Label
|
||||
End Class
|
||||
|
||||
+138
-24
@@ -3,8 +3,11 @@
|
||||
Public Class frmAdvancedImport
|
||||
|
||||
Private hshImportData As Hashtable
|
||||
Private hshFinalData As New Hashtable
|
||||
Private bSelectAll As Boolean = False
|
||||
Private bIsLoading As Boolean = False
|
||||
Private iCurrentSort As Integer = 0
|
||||
Private WithEvents tmFilterTimer As Timer
|
||||
|
||||
Public Property ImportData As Hashtable
|
||||
Set(value As Hashtable)
|
||||
@@ -15,26 +18,103 @@ Public Class frmAdvancedImport
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property FinalData As Hashtable
|
||||
Get
|
||||
Return hshFinalData
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private Sub SelectToggle()
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
lstGames.BeginUpdate()
|
||||
bSelectAll = Not bSelectAll
|
||||
For i As Integer = 0 To lstGames.Items.Count - 1
|
||||
lstGames.SetItemChecked(i, bSelectAll)
|
||||
lstGames.Items(i).Checked = bSelectAll
|
||||
Next
|
||||
lstGames.EndUpdate()
|
||||
Cursor.Current = Cursors.Default
|
||||
UpdateSelected()
|
||||
End Sub
|
||||
|
||||
Private Sub LoadData()
|
||||
Dim oApp As clsGame
|
||||
Dim oData As KeyValuePair(Of String, String)
|
||||
Private Sub SaveChecked(ByVal oItem As ListViewItem)
|
||||
If oItem.Checked Then
|
||||
FinalData.Add(oItem.Tag, ImportData(oItem.Tag))
|
||||
Else
|
||||
FinalData.Remove(oItem.Tag)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
lstGames.ValueMember = "Key"
|
||||
lstGames.DisplayMember = "Value"
|
||||
Private Sub LoadData(Optional ByVal sFilter As String = "")
|
||||
Dim oApp As clsGame
|
||||
Dim oListViewItem As ListViewItem
|
||||
Dim sTags As String
|
||||
Dim bAddItem As Boolean
|
||||
Dim bResetSelectAll As Boolean = False
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
lstGames.BeginUpdate()
|
||||
|
||||
lstGames.Clear()
|
||||
|
||||
lstGames.Columns.Add(frmAdvancedImport_ColumnName, 215)
|
||||
lstGames.Columns.Add(frmAdvancedImport_ColumnProcess, 130)
|
||||
lstGames.Columns.Add(frmAdvancedImport_ColumnTags, 190)
|
||||
|
||||
For Each de As DictionaryEntry In ImportData
|
||||
bAddItem = False
|
||||
oApp = DirectCast(de.Value, clsGame)
|
||||
oData = New KeyValuePair(Of String, String)(oApp.CompoundKey, oApp.Name & " (" & oApp.TrueProcess & ")")
|
||||
lstGames.Items.Add(oData)
|
||||
sTags = String.Empty
|
||||
oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
|
||||
For Each oTag As Tag In oApp.ImportTags
|
||||
sTags &= oTag.Name & ", "
|
||||
Next
|
||||
sTags = sTags.TrimEnd(New Char() {",", " "})
|
||||
|
||||
oListViewItem = New ListViewItem(New String() {oApp.Name, oApp.TrueProcess, sTags})
|
||||
oListViewItem.Tag = oApp.CompoundKey
|
||||
|
||||
If FinalData.ContainsKey(oApp.CompoundKey) Then
|
||||
oListViewItem.Checked = True
|
||||
Else
|
||||
oListViewItem.Checked = False
|
||||
End If
|
||||
|
||||
If sFilter = String.Empty Then
|
||||
bAddItem = True
|
||||
Else
|
||||
If oApp.Name.ToLower.Contains(sFilter.ToLower) Or oApp.TrueProcess.ToLower.Contains(sFilter.ToLower) Or sTags.ToLower.Contains(sFilter.ToLower) Then
|
||||
bAddItem = True
|
||||
End If
|
||||
End If
|
||||
|
||||
If bAddItem Then
|
||||
If oListViewItem.Checked Then bResetSelectAll = True
|
||||
lstGames.Items.Add(oListViewItem)
|
||||
End If
|
||||
Next
|
||||
|
||||
'Change the status of the "Select All" checkbox depending on the status of the items filter results. Set loading flag so we don't trigger any events
|
||||
bIsLoading = True
|
||||
If Not bResetSelectAll And bSelectAll Then
|
||||
bSelectAll = False
|
||||
chkSelectAll.Checked = False
|
||||
ElseIf bResetSelectAll And Not bSelectAll Then
|
||||
bSelectAll = True
|
||||
chkSelectAll.Checked = True
|
||||
End If
|
||||
bIsLoading = False
|
||||
|
||||
lstGames.ListViewItemSorter = New ListViewItemComparer(iCurrentSort)
|
||||
lstGames.EndUpdate()
|
||||
UpdateSelected()
|
||||
|
||||
If txtFilter.Text = String.Empty Then
|
||||
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_Configs, lstGames.Items.Count)
|
||||
Else
|
||||
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_Configs, lstGames.Items.Count) & " " & frmAdvancedImport_Filtered
|
||||
End If
|
||||
|
||||
Cursor.Current = Cursors.Default
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
@@ -42,26 +122,21 @@ Public Class frmAdvancedImport
|
||||
Me.Text = frmAdvancedImport_FormName
|
||||
|
||||
'Set Form Text
|
||||
lblFilter.Text = frmAdvancedImport_lblFilter
|
||||
btnCancel.Text = frmAdvancedImport_btnCancel
|
||||
btnImport.Text = frmAdvancedImport_btnImport
|
||||
chkSelectAll.Text = frmAdvancedImport_chkSelectAll
|
||||
|
||||
chkSelectAll.Checked = True
|
||||
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_NewConfigs, ImportData.Count)
|
||||
End Sub
|
||||
|
||||
Private Sub BuildList()
|
||||
Dim oData As KeyValuePair(Of String, String)
|
||||
|
||||
For i As Integer = 0 To lstGames.Items.Count - 1
|
||||
If Not lstGames.GetItemChecked(i) Then
|
||||
oData = lstGames.Items(i)
|
||||
ImportData.Remove(oData.Key)
|
||||
End If
|
||||
Next
|
||||
'Init Filter Timer
|
||||
tmFilterTimer = New Timer()
|
||||
tmFilterTimer.Interval = 1000
|
||||
tmFilterTimer.Enabled = False
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateSelected()
|
||||
lblSelected.Text = mgrCommon.FormatString(frmAdvancedImport_Selected, lstGames.CheckedItems.Count)
|
||||
lblSelected.Text = mgrCommon.FormatString(frmAdvancedImport_Selected, FinalData.Count)
|
||||
End Sub
|
||||
|
||||
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
@@ -76,8 +151,11 @@ Public Class frmAdvancedImport
|
||||
If Not bIsLoading Then SelectToggle()
|
||||
End Sub
|
||||
|
||||
Private Sub lstGames_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedValueChanged
|
||||
If Not bIsLoading Then UpdateSelected()
|
||||
Private Sub lstGames_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lstGames.ItemChecked
|
||||
SaveChecked(e.Item)
|
||||
If Not bIsLoading Then
|
||||
UpdateSelected()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
|
||||
@@ -85,8 +163,44 @@ Public Class frmAdvancedImport
|
||||
End Sub
|
||||
|
||||
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
|
||||
BuildList()
|
||||
If ImportData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
|
||||
If FinalData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
|
||||
Me.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub lstGames_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles lstGames.ColumnClick
|
||||
iCurrentSort = e.Column
|
||||
lstGames.ListViewItemSorter = New ListViewItemComparer(e.Column)
|
||||
End Sub
|
||||
|
||||
Private Sub txtFilter_TextChanged(sender As Object, e As EventArgs) Handles txtFilter.TextChanged
|
||||
If Not tmFilterTimer.Enabled Then
|
||||
tmFilterTimer.Enabled = True
|
||||
tmFilterTimer.Start()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub tmFilterTimer_Tick(sender As Object, ByVal e As EventArgs) Handles tmFilterTimer.Tick
|
||||
LoadData(txtFilter.Text)
|
||||
tmFilterTimer.Stop()
|
||||
tmFilterTimer.Enabled = False
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
' Column Sorter
|
||||
Class ListViewItemComparer
|
||||
Implements IComparer
|
||||
|
||||
Private col As Integer
|
||||
|
||||
Public Sub New()
|
||||
col = 0
|
||||
End Sub
|
||||
|
||||
Public Sub New(ByVal column As Integer)
|
||||
col = column
|
||||
End Sub
|
||||
|
||||
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
|
||||
Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
|
||||
End Function
|
||||
End Class
|
||||
@@ -65,11 +65,6 @@ Public Class frmChooseGame
|
||||
SetForm()
|
||||
FillComboBox()
|
||||
Me.Focus()
|
||||
|
||||
Dim sResource As String = String.Empty
|
||||
Dim sCode As String = String.Empty
|
||||
mgrCommon.GetAllStrings(Me, sResource, sCode, "frmChooseGame")
|
||||
Clipboard.SetText(sResource & vbCrLf & vbCrLf & sCode)
|
||||
End Sub
|
||||
|
||||
Private Sub btnChoose_Click(sender As System.Object, e As System.EventArgs) Handles btnChoose.Click
|
||||
|
||||
+52
-16
@@ -22,35 +22,30 @@ Partial Class frmFileFolderSearch
|
||||
'Do not modify it using the code editor.
|
||||
<System.Diagnostics.DebuggerStepThrough()> _
|
||||
Private Sub InitializeComponent()
|
||||
Me.pgbProgress = New System.Windows.Forms.ProgressBar()
|
||||
Me.txtCurrentLocation = New System.Windows.Forms.TextBox()
|
||||
Me.btnCancel = New System.Windows.Forms.Button()
|
||||
Me.bwSearch = New System.ComponentModel.BackgroundWorker()
|
||||
Me.lstResults = New System.Windows.Forms.ListBox()
|
||||
Me.btnOk = New System.Windows.Forms.Button()
|
||||
Me.lblResults = New System.Windows.Forms.Label()
|
||||
Me.cboDrive = New System.Windows.Forms.ComboBox()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'pgbProgress
|
||||
'
|
||||
Me.pgbProgress.Location = New System.Drawing.Point(12, 12)
|
||||
Me.pgbProgress.MarqueeAnimationSpeed = 0
|
||||
Me.pgbProgress.Name = "pgbProgress"
|
||||
Me.pgbProgress.Size = New System.Drawing.Size(460, 23)
|
||||
Me.pgbProgress.TabIndex = 0
|
||||
'
|
||||
'txtCurrentLocation
|
||||
'
|
||||
Me.txtCurrentLocation.Location = New System.Drawing.Point(12, 43)
|
||||
Me.txtCurrentLocation.Location = New System.Drawing.Point(102, 13)
|
||||
Me.txtCurrentLocation.Name = "txtCurrentLocation"
|
||||
Me.txtCurrentLocation.ReadOnly = True
|
||||
Me.txtCurrentLocation.Size = New System.Drawing.Size(379, 20)
|
||||
Me.txtCurrentLocation.Size = New System.Drawing.Size(370, 20)
|
||||
Me.txtCurrentLocation.TabIndex = 0
|
||||
Me.txtCurrentLocation.TabStop = False
|
||||
'
|
||||
'btnCancel
|
||||
'
|
||||
Me.btnCancel.Location = New System.Drawing.Point(397, 41)
|
||||
Me.btnCancel.Location = New System.Drawing.Point(397, 146)
|
||||
Me.btnCancel.Name = "btnCancel"
|
||||
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnCancel.TabIndex = 0
|
||||
Me.btnCancel.TabIndex = 4
|
||||
Me.btnCancel.Text = "&Cancel"
|
||||
Me.btnCancel.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -58,14 +53,52 @@ Partial Class frmFileFolderSearch
|
||||
'
|
||||
Me.bwSearch.WorkerSupportsCancellation = True
|
||||
'
|
||||
'lstResults
|
||||
'
|
||||
Me.lstResults.FormattingEnabled = True
|
||||
Me.lstResults.Location = New System.Drawing.Point(12, 58)
|
||||
Me.lstResults.Name = "lstResults"
|
||||
Me.lstResults.Size = New System.Drawing.Size(460, 82)
|
||||
Me.lstResults.TabIndex = 2
|
||||
'
|
||||
'btnOk
|
||||
'
|
||||
Me.btnOk.Location = New System.Drawing.Point(316, 146)
|
||||
Me.btnOk.Name = "btnOk"
|
||||
Me.btnOk.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnOk.TabIndex = 3
|
||||
Me.btnOk.Text = "&OK"
|
||||
Me.btnOk.UseVisualStyleBackColor = True
|
||||
'
|
||||
'lblResults
|
||||
'
|
||||
Me.lblResults.Location = New System.Drawing.Point(9, 42)
|
||||
Me.lblResults.Name = "lblResults"
|
||||
Me.lblResults.Size = New System.Drawing.Size(463, 13)
|
||||
Me.lblResults.TabIndex = 1
|
||||
Me.lblResults.Text = "Search Results"
|
||||
Me.lblResults.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
|
||||
'
|
||||
'cboDrive
|
||||
'
|
||||
Me.cboDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
|
||||
Me.cboDrive.FormattingEnabled = True
|
||||
Me.cboDrive.Location = New System.Drawing.Point(12, 13)
|
||||
Me.cboDrive.Name = "cboDrive"
|
||||
Me.cboDrive.Size = New System.Drawing.Size(85, 21)
|
||||
Me.cboDrive.TabIndex = 5
|
||||
'
|
||||
'frmFileFolderSearch
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(484, 77)
|
||||
Me.ClientSize = New System.Drawing.Size(484, 181)
|
||||
Me.Controls.Add(Me.cboDrive)
|
||||
Me.Controls.Add(Me.lblResults)
|
||||
Me.Controls.Add(Me.btnOk)
|
||||
Me.Controls.Add(Me.lstResults)
|
||||
Me.Controls.Add(Me.btnCancel)
|
||||
Me.Controls.Add(Me.txtCurrentLocation)
|
||||
Me.Controls.Add(Me.pgbProgress)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.MaximizeBox = False
|
||||
Me.MinimizeBox = False
|
||||
@@ -77,8 +110,11 @@ Partial Class frmFileFolderSearch
|
||||
Me.PerformLayout()
|
||||
|
||||
End Sub
|
||||
Friend WithEvents pgbProgress As System.Windows.Forms.ProgressBar
|
||||
Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox
|
||||
Friend WithEvents btnCancel As System.Windows.Forms.Button
|
||||
Friend WithEvents bwSearch As System.ComponentModel.BackgroundWorker
|
||||
Friend WithEvents lstResults As System.Windows.Forms.ListBox
|
||||
Friend WithEvents btnOk As System.Windows.Forms.Button
|
||||
Friend WithEvents lblResults As System.Windows.Forms.Label
|
||||
Friend WithEvents cboDrive As System.Windows.Forms.ComboBox
|
||||
End Class
|
||||
|
||||
@@ -3,14 +3,34 @@ Imports System.IO
|
||||
|
||||
Public Class frmFileFolderSearch
|
||||
Private sSearchItem As String
|
||||
Private sGameName As String = String.Empty
|
||||
Private bIsLoading As Boolean
|
||||
Private bIsFolder As Boolean
|
||||
Private sFoundItem As String
|
||||
Private oDrives As List(Of DriveInfo)
|
||||
Private iCurrentDrive As Integer
|
||||
Private oSearchDrive As DirectoryInfo
|
||||
Dim bShutdown As Boolean = False
|
||||
|
||||
Private Enum eStopStatus As Integer
|
||||
Cancel = 1
|
||||
ChangeDrive = 2
|
||||
FoundResult = 3
|
||||
FinishedDrive = 4
|
||||
End Enum
|
||||
|
||||
Private iStopStatus As eStopStatus
|
||||
|
||||
Delegate Sub UpdateInfoCallBack(ByVal sCurrentFolder As String)
|
||||
Delegate Sub UpdateResultsCallBack(ByVal sItem As String)
|
||||
|
||||
Public Property GameName As String
|
||||
Get
|
||||
Return sGameName
|
||||
End Get
|
||||
Set(value As String)
|
||||
sGameName = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property SearchItem As String
|
||||
Get
|
||||
@@ -48,19 +68,38 @@ Public Class frmFileFolderSearch
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateResults(ByVal sItem As String)
|
||||
If lstResults.InvokeRequired = True Then
|
||||
Dim d As New UpdateInfoCallBack(AddressOf UpdateResults)
|
||||
Me.Invoke(d, New Object() {sItem})
|
||||
Else
|
||||
'It's possible the same location will be searched twice when using Linux. Filter out duplicate results
|
||||
If Not lstResults.Items.Contains(sItem) Then
|
||||
lstResults.Items.Add(sItem)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function SearchDirectory(ByVal dir As DirectoryInfo, ByVal sDirectoryName As String) As String
|
||||
Dim sSubSearch As String = String.Empty
|
||||
Dim sFoundItem As String = String.Empty
|
||||
|
||||
If bwSearch.CancellationPending Then
|
||||
Return "Cancel"
|
||||
End If
|
||||
|
||||
'Ignore Symlinks
|
||||
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
|
||||
Return String.Empty
|
||||
End If
|
||||
|
||||
UpdateInfo(dir.FullName)
|
||||
|
||||
Try
|
||||
'Search Current Directory
|
||||
If dir.GetDirectories(sDirectoryName).Length > 0 Then
|
||||
Return dir.FullName & "\" & sDirectoryName
|
||||
sFoundItem = dir.FullName & Path.DirectorySeparatorChar & sDirectoryName
|
||||
UpdateResults(sFoundItem)
|
||||
End If
|
||||
|
||||
'Search Sub Directory
|
||||
@@ -82,23 +121,31 @@ Public Class frmFileFolderSearch
|
||||
|
||||
Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String
|
||||
Dim sSubSearch As String = String.Empty
|
||||
Dim sFoundItem As String = String.Empty
|
||||
|
||||
If bwSearch.CancellationPending Then
|
||||
Return "Cancel"
|
||||
End If
|
||||
|
||||
'Ignore Symlinks
|
||||
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
|
||||
Return String.Empty
|
||||
End If
|
||||
|
||||
UpdateInfo(dir.FullName)
|
||||
|
||||
Try
|
||||
'Search Current Directory
|
||||
If dir.GetFiles(sFileName).Length > 0 Then
|
||||
Return dir.FullName & "\" & sFileName
|
||||
sFoundItem = Path.GetDirectoryName(dir.FullName & Path.DirectorySeparatorChar & sFileName)
|
||||
UpdateResults(sFoundItem)
|
||||
End If
|
||||
|
||||
'Search Sub Directory
|
||||
Dim subdirs() As DirectoryInfo = dir.GetDirectories("*")
|
||||
For Each newDir As DirectoryInfo In subdirs
|
||||
sSubSearch = SearchFile(newDir, sFileName)
|
||||
|
||||
If sSubSearch <> String.Empty Then
|
||||
Return sSubSearch
|
||||
End If
|
||||
@@ -113,39 +160,60 @@ Public Class frmFileFolderSearch
|
||||
End Function
|
||||
|
||||
Private Sub GetDrives()
|
||||
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
|
||||
Dim iCount As Integer = 0
|
||||
|
||||
'cboDrive
|
||||
cboDrive.ValueMember = "Key"
|
||||
cboDrive.DisplayMember = "Value"
|
||||
|
||||
oDrives = New List(Of DriveInfo)
|
||||
For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives
|
||||
If oDrive.DriveType = IO.DriveType.Fixed Then
|
||||
oDrives.Add(oDrive)
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(iCount, oDrive.RootDirectory.ToString))
|
||||
iCount += 1
|
||||
End If
|
||||
Next
|
||||
cboDrive.DataSource = oComboItems
|
||||
End Sub
|
||||
|
||||
Private Sub Search(ByVal oDrive As DriveInfo)
|
||||
pgbProgress.Style = ProgressBarStyle.Marquee
|
||||
pgbProgress.MarqueeAnimationSpeed = 5
|
||||
iStopStatus = eStopStatus.FinishedDrive
|
||||
oSearchDrive = oDrive.RootDirectory
|
||||
bwSearch.RunWorkerAsync()
|
||||
iCurrentDrive += 1
|
||||
End Sub
|
||||
|
||||
Private Sub EndSearch()
|
||||
Dim oResult As MsgBoxResult
|
||||
pgbProgress.MarqueeAnimationSpeed = 0
|
||||
|
||||
If FoundItem = "Cancel" Then FoundItem = String.Empty
|
||||
|
||||
If oDrives.Count > iCurrentDrive And FoundItem = String.Empty Then
|
||||
oResult = mgrCommon.ShowMessage(frmFileFolderSearch_SwitchDrives, New String() {oSearchDrive.Root.ToString, oDrives(iCurrentDrive).RootDirectory.ToString}, MsgBoxStyle.YesNo)
|
||||
If oResult = MsgBoxResult.Yes Then
|
||||
Search(oDrives(iCurrentDrive))
|
||||
Select Case iStopStatus
|
||||
Case eStopStatus.Cancel
|
||||
SearchComplete(frmFileFolderSearch_SearchCancel)
|
||||
Case eStopStatus.ChangeDrive
|
||||
Search(oDrives(cboDrive.SelectedValue))
|
||||
Case eStopStatus.FinishedDrive
|
||||
'Attempt to move onto the next drive it one exists and there's been no results
|
||||
If oDrives.Count > 1 And lstResults.Items.Count = 0 Then
|
||||
If cboDrive.SelectedIndex = (cboDrive.Items.Count - 1) Then
|
||||
cboDrive.SelectedIndex = 0
|
||||
Else
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
cboDrive.SelectedIndex = cboDrive.SelectedIndex + 1
|
||||
End If
|
||||
Else
|
||||
SearchComplete(frmFileFolderSearch_SearchComplete)
|
||||
End If
|
||||
Case eStopStatus.FoundResult
|
||||
FoundItem = lstResults.SelectedItem.ToString
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
Private Sub SearchComplete(ByVal sStopMessage As String)
|
||||
txtCurrentLocation.Text = sStopMessage
|
||||
If lstResults.Items.Count > 0 Then
|
||||
lstResults.SelectedIndex = 0
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -154,13 +222,17 @@ Public Class frmFileFolderSearch
|
||||
Me.Text = frmFileFolderSearch_FormName
|
||||
|
||||
'Set Form Text
|
||||
lblResults.Text = frmFileFolderSearch_lblResults
|
||||
btnOk.Text = frmFileFolderSearch_btnOk
|
||||
btnCancel.Text = frmFileFolderSearch_btnCancel
|
||||
End Sub
|
||||
|
||||
Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
bIsLoading = True
|
||||
SetForm()
|
||||
GetDrives()
|
||||
Search(oDrives(iCurrentDrive))
|
||||
bIsLoading = False
|
||||
Search(oDrives(0))
|
||||
End Sub
|
||||
|
||||
Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork
|
||||
@@ -176,11 +248,54 @@ Public Class frmFileFolderSearch
|
||||
End Sub
|
||||
|
||||
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
|
||||
If bwSearch.IsBusy Then
|
||||
iStopStatus = eStopStatus.Cancel
|
||||
bwSearch.CancelAsync()
|
||||
Else
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
|
||||
bwSearch.CancelAsync()
|
||||
If Not bShutdown Then e.Cancel = True
|
||||
End Sub
|
||||
|
||||
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
|
||||
Dim sItem As String
|
||||
|
||||
If lstResults.SelectedItems.Count = 1 Then
|
||||
sItem = lstResults.SelectedItem.ToString
|
||||
If mgrCommon.ShowMessage(mgrPath_ConfirmPathCorrect, New String() {GameName, sItem}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
If bwSearch.IsBusy Then
|
||||
iStopStatus = eStopStatus.FoundResult
|
||||
bwSearch.CancelAsync()
|
||||
Else
|
||||
FoundItem = sItem
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub cboDrive_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboDrive.SelectedIndexChanged
|
||||
If Not bIsLoading Then
|
||||
Dim oResult As MsgBoxResult
|
||||
|
||||
oResult = mgrCommon.ShowMessage(frmFileFolderSearch_SwitchDrives, New String() {oDrives(cboDrive.SelectedValue).RootDirectory.ToString}, MsgBoxStyle.YesNo)
|
||||
|
||||
If oResult = MsgBoxResult.Yes Then
|
||||
If bwSearch.IsBusy Then
|
||||
iStopStatus = eStopStatus.ChangeDrive
|
||||
bwSearch.CancelAsync()
|
||||
Else
|
||||
Search(oDrives(cboDrive.SelectedValue))
|
||||
End If
|
||||
Else
|
||||
iStopStatus = eStopStatus.FinishedDrive
|
||||
SearchComplete(frmFileFolderSearch_SearchCancel)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
Generated
-6
@@ -99,7 +99,6 @@ Partial Class frmFilter
|
||||
'
|
||||
'optAll
|
||||
'
|
||||
Me.optAll.AutoSize = True
|
||||
Me.optAll.Location = New System.Drawing.Point(77, 19)
|
||||
Me.optAll.Name = "optAll"
|
||||
Me.optAll.Size = New System.Drawing.Size(63, 17)
|
||||
@@ -110,7 +109,6 @@ Partial Class frmFilter
|
||||
'
|
||||
'optAny
|
||||
'
|
||||
Me.optAny.AutoSize = True
|
||||
Me.optAny.Checked = True
|
||||
Me.optAny.Location = New System.Drawing.Point(6, 19)
|
||||
Me.optAny.Name = "optAny"
|
||||
@@ -213,7 +211,6 @@ Partial Class frmFilter
|
||||
'
|
||||
'optOr
|
||||
'
|
||||
Me.optOr.AutoSize = True
|
||||
Me.optOr.Location = New System.Drawing.Point(56, 19)
|
||||
Me.optOr.Name = "optOr"
|
||||
Me.optOr.Size = New System.Drawing.Size(36, 17)
|
||||
@@ -224,7 +221,6 @@ Partial Class frmFilter
|
||||
'
|
||||
'optAnd
|
||||
'
|
||||
Me.optAnd.AutoSize = True
|
||||
Me.optAnd.Checked = True
|
||||
Me.optAnd.Location = New System.Drawing.Point(6, 19)
|
||||
Me.optAnd.Name = "optAnd"
|
||||
@@ -302,11 +298,9 @@ Partial Class frmFilter
|
||||
Me.grpTagFilter.ResumeLayout(False)
|
||||
Me.grpTagFilter.PerformLayout()
|
||||
Me.grpTagOptions.ResumeLayout(False)
|
||||
Me.grpTagOptions.PerformLayout()
|
||||
Me.grpGameFilter.ResumeLayout(False)
|
||||
Me.grpGameFilter.PerformLayout()
|
||||
Me.grpGameInfoOptions.ResumeLayout(False)
|
||||
Me.grpGameInfoOptions.PerformLayout()
|
||||
Me.ResumeLayout(False)
|
||||
Me.PerformLayout()
|
||||
|
||||
|
||||
Generated
+208
-138
@@ -28,6 +28,8 @@ Partial Class frmGameManager
|
||||
Me.btnBackup = New System.Windows.Forms.Button()
|
||||
Me.btnClose = New System.Windows.Forms.Button()
|
||||
Me.grpConfig = New System.Windows.Forms.GroupBox()
|
||||
Me.lblLimit = New System.Windows.Forms.Label()
|
||||
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
|
||||
Me.btnExclude = New System.Windows.Forms.Button()
|
||||
Me.btnInclude = New System.Windows.Forms.Button()
|
||||
Me.txtID = New System.Windows.Forms.TextBox()
|
||||
@@ -61,18 +63,17 @@ Partial Class frmGameManager
|
||||
Me.lblHours = New System.Windows.Forms.Label()
|
||||
Me.btnTags = New System.Windows.Forms.Button()
|
||||
Me.grpStats = New System.Windows.Forms.GroupBox()
|
||||
Me.cboRemoteBackup = New System.Windows.Forms.ComboBox()
|
||||
Me.lblRestorePathData = New System.Windows.Forms.Label()
|
||||
Me.lblBackupFileData = New System.Windows.Forms.Label()
|
||||
Me.lblLocalBackupData = New System.Windows.Forms.Label()
|
||||
Me.lblRestorePath = New System.Windows.Forms.Label()
|
||||
Me.txtRestorePath = New System.Windows.Forms.TextBox()
|
||||
Me.btnOpenRestorePath = New System.Windows.Forms.Button()
|
||||
Me.btnOpenBackupFile = New System.Windows.Forms.Button()
|
||||
Me.txtFileSize = New System.Windows.Forms.TextBox()
|
||||
Me.btnDeleteBackup = New System.Windows.Forms.Button()
|
||||
Me.lblFileSize = New System.Windows.Forms.Label()
|
||||
Me.lblSync = New System.Windows.Forms.Label()
|
||||
Me.txtCurrentBackup = New System.Windows.Forms.TextBox()
|
||||
Me.lblCurrentBackup = New System.Windows.Forms.Label()
|
||||
Me.txtLocalBackup = New System.Windows.Forms.TextBox()
|
||||
Me.lblLastBackup = New System.Windows.Forms.Label()
|
||||
Me.lblBackupFile = New System.Windows.Forms.Label()
|
||||
Me.lblRemote = New System.Windows.Forms.Label()
|
||||
Me.lblLocalData = New System.Windows.Forms.Label()
|
||||
Me.btnMarkAsRestored = New System.Windows.Forms.Button()
|
||||
Me.btnRestore = New System.Windows.Forms.Button()
|
||||
Me.btnSave = New System.Windows.Forms.Button()
|
||||
@@ -89,13 +90,20 @@ Partial Class frmGameManager
|
||||
Me.cmsImport = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||
Me.cmsOfficial = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.cmsFile = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.txtQuickFilter = New System.Windows.Forms.TextBox()
|
||||
Me.lblQuickFilter = New System.Windows.Forms.Label()
|
||||
Me.cmsDeleteBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||
Me.cmsDeleteOne = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.grpConfig.SuspendLayout()
|
||||
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.grpExtra.SuspendLayout()
|
||||
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.nudHours, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.grpStats.SuspendLayout()
|
||||
Me.grpFilter.SuspendLayout()
|
||||
Me.cmsImport.SuspendLayout()
|
||||
Me.cmsDeleteBackup.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'btnAdd
|
||||
@@ -105,7 +113,7 @@ Partial Class frmGameManager
|
||||
Me.btnAdd.Location = New System.Drawing.Point(12, 526)
|
||||
Me.btnAdd.Name = "btnAdd"
|
||||
Me.btnAdd.Size = New System.Drawing.Size(30, 23)
|
||||
Me.btnAdd.TabIndex = 2
|
||||
Me.btnAdd.TabIndex = 4
|
||||
Me.btnAdd.Text = "+"
|
||||
Me.btnAdd.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -116,33 +124,35 @@ Partial Class frmGameManager
|
||||
Me.btnDelete.Location = New System.Drawing.Point(48, 526)
|
||||
Me.btnDelete.Name = "btnDelete"
|
||||
Me.btnDelete.Size = New System.Drawing.Size(30, 23)
|
||||
Me.btnDelete.TabIndex = 3
|
||||
Me.btnDelete.TabIndex = 5
|
||||
Me.btnDelete.Text = "-"
|
||||
Me.btnDelete.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnBackup
|
||||
'
|
||||
Me.btnBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnBackup.Location = New System.Drawing.Point(616, 525)
|
||||
Me.btnBackup.Location = New System.Drawing.Point(616, 526)
|
||||
Me.btnBackup.Name = "btnBackup"
|
||||
Me.btnBackup.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnBackup.TabIndex = 16
|
||||
Me.btnBackup.TabIndex = 19
|
||||
Me.btnBackup.Text = "&Backup"
|
||||
Me.btnBackup.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnClose
|
||||
'
|
||||
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnClose.Location = New System.Drawing.Point(697, 525)
|
||||
Me.btnClose.Location = New System.Drawing.Point(697, 526)
|
||||
Me.btnClose.Name = "btnClose"
|
||||
Me.btnClose.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnClose.TabIndex = 17
|
||||
Me.btnClose.TabIndex = 20
|
||||
Me.btnClose.Text = "C&lose"
|
||||
Me.btnClose.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpConfig
|
||||
'
|
||||
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.grpConfig.Controls.Add(Me.lblLimit)
|
||||
Me.grpConfig.Controls.Add(Me.nudLimit)
|
||||
Me.grpConfig.Controls.Add(Me.btnExclude)
|
||||
Me.grpConfig.Controls.Add(Me.btnInclude)
|
||||
Me.grpConfig.Controls.Add(Me.txtID)
|
||||
@@ -162,16 +172,36 @@ Partial Class frmGameManager
|
||||
Me.grpConfig.Location = New System.Drawing.Point(247, 12)
|
||||
Me.grpConfig.Name = "grpConfig"
|
||||
Me.grpConfig.Size = New System.Drawing.Size(525, 157)
|
||||
Me.grpConfig.TabIndex = 6
|
||||
Me.grpConfig.TabIndex = 8
|
||||
Me.grpConfig.TabStop = False
|
||||
Me.grpConfig.Text = "Configuration"
|
||||
'
|
||||
'lblLimit
|
||||
'
|
||||
Me.lblLimit.AutoSize = True
|
||||
Me.lblLimit.Location = New System.Drawing.Point(375, 130)
|
||||
Me.lblLimit.Name = "lblLimit"
|
||||
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
|
||||
Me.lblLimit.TabIndex = 13
|
||||
Me.lblLimit.Text = "Backup Limit"
|
||||
Me.lblLimit.Visible = False
|
||||
'
|
||||
'nudLimit
|
||||
'
|
||||
Me.nudLimit.Location = New System.Drawing.Point(329, 128)
|
||||
Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
|
||||
Me.nudLimit.Name = "nudLimit"
|
||||
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
|
||||
Me.nudLimit.TabIndex = 12
|
||||
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
|
||||
Me.nudLimit.Visible = False
|
||||
'
|
||||
'btnExclude
|
||||
'
|
||||
Me.btnExclude.Location = New System.Drawing.Point(9, 125)
|
||||
Me.btnExclude.Name = "btnExclude"
|
||||
Me.btnExclude.Size = New System.Drawing.Size(175, 23)
|
||||
Me.btnExclude.TabIndex = 13
|
||||
Me.btnExclude.TabIndex = 9
|
||||
Me.btnExclude.Text = "E&xclude Items..."
|
||||
Me.btnExclude.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -180,7 +210,7 @@ Partial Class frmGameManager
|
||||
Me.btnInclude.Location = New System.Drawing.Point(9, 97)
|
||||
Me.btnInclude.Name = "btnInclude"
|
||||
Me.btnInclude.Size = New System.Drawing.Size(175, 23)
|
||||
Me.btnInclude.TabIndex = 10
|
||||
Me.btnInclude.TabIndex = 8
|
||||
Me.btnInclude.Text = "In&clude Items..."
|
||||
Me.btnInclude.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -190,7 +220,7 @@ Partial Class frmGameManager
|
||||
Me.txtID.Location = New System.Drawing.Point(489, 19)
|
||||
Me.txtID.Name = "txtID"
|
||||
Me.txtID.Size = New System.Drawing.Size(30, 20)
|
||||
Me.txtID.TabIndex = 16
|
||||
Me.txtID.TabIndex = 0
|
||||
Me.txtID.TabStop = False
|
||||
Me.txtID.Visible = False
|
||||
'
|
||||
@@ -199,7 +229,7 @@ Partial Class frmGameManager
|
||||
Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71)
|
||||
Me.btnSavePathBrowse.Name = "btnSavePathBrowse"
|
||||
Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20)
|
||||
Me.btnSavePathBrowse.TabIndex = 9
|
||||
Me.btnSavePathBrowse.TabIndex = 7
|
||||
Me.btnSavePathBrowse.Text = "..."
|
||||
Me.btnSavePathBrowse.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -208,7 +238,7 @@ Partial Class frmGameManager
|
||||
Me.btnProcessBrowse.Location = New System.Drawing.Point(489, 45)
|
||||
Me.btnProcessBrowse.Name = "btnProcessBrowse"
|
||||
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
|
||||
Me.btnProcessBrowse.TabIndex = 7
|
||||
Me.btnProcessBrowse.TabIndex = 5
|
||||
Me.btnProcessBrowse.Text = "..."
|
||||
Me.btnProcessBrowse.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -241,18 +271,18 @@ Partial Class frmGameManager
|
||||
'
|
||||
'txtExclude
|
||||
'
|
||||
Me.txtExclude.Location = New System.Drawing.Point(363, 128)
|
||||
Me.txtExclude.Location = New System.Drawing.Point(489, 122)
|
||||
Me.txtExclude.Name = "txtExclude"
|
||||
Me.txtExclude.Size = New System.Drawing.Size(156, 20)
|
||||
Me.txtExclude.Size = New System.Drawing.Size(30, 20)
|
||||
Me.txtExclude.TabIndex = 0
|
||||
Me.txtExclude.TabStop = False
|
||||
Me.txtExclude.Visible = False
|
||||
'
|
||||
'txtFileType
|
||||
'
|
||||
Me.txtFileType.Location = New System.Drawing.Point(363, 99)
|
||||
Me.txtFileType.Location = New System.Drawing.Point(489, 99)
|
||||
Me.txtFileType.Name = "txtFileType"
|
||||
Me.txtFileType.Size = New System.Drawing.Size(156, 20)
|
||||
Me.txtFileType.Size = New System.Drawing.Size(30, 20)
|
||||
Me.txtFileType.TabIndex = 0
|
||||
Me.txtFileType.TabStop = False
|
||||
Me.txtFileType.Visible = False
|
||||
@@ -262,9 +292,9 @@ Partial Class frmGameManager
|
||||
Me.chkTimeStamp.AutoSize = True
|
||||
Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129)
|
||||
Me.chkTimeStamp.Name = "chkTimeStamp"
|
||||
Me.chkTimeStamp.Size = New System.Drawing.Size(146, 17)
|
||||
Me.chkTimeStamp.TabIndex = 14
|
||||
Me.chkTimeStamp.Text = "Time stamp each backup"
|
||||
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
|
||||
Me.chkTimeStamp.TabIndex = 11
|
||||
Me.chkTimeStamp.Text = "Save multiple backups"
|
||||
Me.chkTimeStamp.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkFolderSave
|
||||
@@ -273,7 +303,7 @@ Partial Class frmGameManager
|
||||
Me.chkFolderSave.Location = New System.Drawing.Point(190, 101)
|
||||
Me.chkFolderSave.Name = "chkFolderSave"
|
||||
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
|
||||
Me.chkFolderSave.TabIndex = 11
|
||||
Me.chkFolderSave.TabIndex = 10
|
||||
Me.chkFolderSave.Text = "Save entire folder"
|
||||
Me.chkFolderSave.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -282,30 +312,30 @@ Partial Class frmGameManager
|
||||
Me.txtSavePath.Location = New System.Drawing.Point(69, 71)
|
||||
Me.txtSavePath.Name = "txtSavePath"
|
||||
Me.txtSavePath.Size = New System.Drawing.Size(414, 20)
|
||||
Me.txtSavePath.TabIndex = 8
|
||||
Me.txtSavePath.TabIndex = 6
|
||||
'
|
||||
'txtProcess
|
||||
'
|
||||
Me.txtProcess.Location = New System.Drawing.Point(69, 45)
|
||||
Me.txtProcess.Name = "txtProcess"
|
||||
Me.txtProcess.Size = New System.Drawing.Size(414, 20)
|
||||
Me.txtProcess.TabIndex = 6
|
||||
Me.txtProcess.TabIndex = 4
|
||||
'
|
||||
'txtName
|
||||
'
|
||||
Me.txtName.Location = New System.Drawing.Point(69, 19)
|
||||
Me.txtName.Name = "txtName"
|
||||
Me.txtName.Size = New System.Drawing.Size(414, 20)
|
||||
Me.txtName.TabIndex = 5
|
||||
Me.txtName.TabIndex = 3
|
||||
'
|
||||
'chkMonitorOnly
|
||||
'
|
||||
Me.chkMonitorOnly.AutoSize = True
|
||||
Me.chkMonitorOnly.Location = New System.Drawing.Point(362, 340)
|
||||
Me.chkMonitorOnly.Name = "chkMonitorOnly"
|
||||
Me.chkMonitorOnly.Size = New System.Drawing.Size(145, 17)
|
||||
Me.chkMonitorOnly.TabIndex = 9
|
||||
Me.chkMonitorOnly.Text = "Monitor only (No backup)"
|
||||
Me.chkMonitorOnly.Size = New System.Drawing.Size(83, 17)
|
||||
Me.chkMonitorOnly.TabIndex = 11
|
||||
Me.chkMonitorOnly.Text = "Monitor only"
|
||||
Me.chkMonitorOnly.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpExtra
|
||||
@@ -328,7 +358,7 @@ Partial Class frmGameManager
|
||||
Me.grpExtra.Location = New System.Drawing.Point(247, 175)
|
||||
Me.grpExtra.Name = "grpExtra"
|
||||
Me.grpExtra.Size = New System.Drawing.Size(525, 155)
|
||||
Me.grpExtra.TabIndex = 7
|
||||
Me.grpExtra.TabIndex = 9
|
||||
Me.grpExtra.TabStop = False
|
||||
Me.grpExtra.Text = "Game Information"
|
||||
'
|
||||
@@ -459,32 +489,73 @@ Partial Class frmGameManager
|
||||
Me.btnTags.Location = New System.Drawing.Point(535, 336)
|
||||
Me.btnTags.Name = "btnTags"
|
||||
Me.btnTags.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnTags.TabIndex = 10
|
||||
Me.btnTags.TabIndex = 12
|
||||
Me.btnTags.Text = "Tags..."
|
||||
Me.btnTags.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpStats
|
||||
'
|
||||
Me.grpStats.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.grpStats.Controls.Add(Me.cboRemoteBackup)
|
||||
Me.grpStats.Controls.Add(Me.lblRestorePathData)
|
||||
Me.grpStats.Controls.Add(Me.lblBackupFileData)
|
||||
Me.grpStats.Controls.Add(Me.lblLocalBackupData)
|
||||
Me.grpStats.Controls.Add(Me.lblRestorePath)
|
||||
Me.grpStats.Controls.Add(Me.txtRestorePath)
|
||||
Me.grpStats.Controls.Add(Me.btnOpenRestorePath)
|
||||
Me.grpStats.Controls.Add(Me.btnOpenBackupFile)
|
||||
Me.grpStats.Controls.Add(Me.txtFileSize)
|
||||
Me.grpStats.Controls.Add(Me.btnDeleteBackup)
|
||||
Me.grpStats.Controls.Add(Me.lblFileSize)
|
||||
Me.grpStats.Controls.Add(Me.lblSync)
|
||||
Me.grpStats.Controls.Add(Me.txtCurrentBackup)
|
||||
Me.grpStats.Controls.Add(Me.lblCurrentBackup)
|
||||
Me.grpStats.Controls.Add(Me.txtLocalBackup)
|
||||
Me.grpStats.Controls.Add(Me.lblLastBackup)
|
||||
Me.grpStats.Controls.Add(Me.lblBackupFile)
|
||||
Me.grpStats.Controls.Add(Me.lblRemote)
|
||||
Me.grpStats.Controls.Add(Me.lblLocalData)
|
||||
Me.grpStats.Location = New System.Drawing.Point(247, 365)
|
||||
Me.grpStats.Name = "grpStats"
|
||||
Me.grpStats.Size = New System.Drawing.Size(525, 154)
|
||||
Me.grpStats.TabIndex = 13
|
||||
Me.grpStats.TabIndex = 15
|
||||
Me.grpStats.TabStop = False
|
||||
Me.grpStats.Text = "Backup Information"
|
||||
'
|
||||
'cboRemoteBackup
|
||||
'
|
||||
Me.cboRemoteBackup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
|
||||
Me.cboRemoteBackup.FormattingEnabled = True
|
||||
Me.cboRemoteBackup.Location = New System.Drawing.Point(96, 24)
|
||||
Me.cboRemoteBackup.Name = "cboRemoteBackup"
|
||||
Me.cboRemoteBackup.Size = New System.Drawing.Size(387, 21)
|
||||
Me.cboRemoteBackup.TabIndex = 12
|
||||
'
|
||||
'lblRestorePathData
|
||||
'
|
||||
Me.lblRestorePathData.AutoEllipsis = True
|
||||
Me.lblRestorePathData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
|
||||
Me.lblRestorePathData.Location = New System.Drawing.Point(96, 98)
|
||||
Me.lblRestorePathData.Name = "lblRestorePathData"
|
||||
Me.lblRestorePathData.Size = New System.Drawing.Size(387, 20)
|
||||
Me.lblRestorePathData.TabIndex = 7
|
||||
Me.lblRestorePathData.Tag = "wipe"
|
||||
Me.lblRestorePathData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblBackupFileData
|
||||
'
|
||||
Me.lblBackupFileData.AutoEllipsis = True
|
||||
Me.lblBackupFileData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
|
||||
Me.lblBackupFileData.Location = New System.Drawing.Point(96, 73)
|
||||
Me.lblBackupFileData.Name = "lblBackupFileData"
|
||||
Me.lblBackupFileData.Size = New System.Drawing.Size(387, 20)
|
||||
Me.lblBackupFileData.TabIndex = 6
|
||||
Me.lblBackupFileData.Tag = "wipe"
|
||||
Me.lblBackupFileData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblLocalBackupData
|
||||
'
|
||||
Me.lblLocalBackupData.AutoEllipsis = True
|
||||
Me.lblLocalBackupData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
|
||||
Me.lblLocalBackupData.Location = New System.Drawing.Point(96, 49)
|
||||
Me.lblLocalBackupData.Name = "lblLocalBackupData"
|
||||
Me.lblLocalBackupData.Size = New System.Drawing.Size(387, 20)
|
||||
Me.lblLocalBackupData.TabIndex = 5
|
||||
Me.lblLocalBackupData.Tag = "wipe"
|
||||
Me.lblLocalBackupData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblRestorePath
|
||||
'
|
||||
Me.lblRestorePath.AutoSize = True
|
||||
@@ -494,122 +565,77 @@ Partial Class frmGameManager
|
||||
Me.lblRestorePath.TabIndex = 3
|
||||
Me.lblRestorePath.Text = "Restore Path:"
|
||||
'
|
||||
'txtRestorePath
|
||||
'
|
||||
Me.txtRestorePath.Location = New System.Drawing.Point(96, 99)
|
||||
Me.txtRestorePath.Name = "txtRestorePath"
|
||||
Me.txtRestorePath.ReadOnly = True
|
||||
Me.txtRestorePath.Size = New System.Drawing.Size(387, 20)
|
||||
Me.txtRestorePath.TabIndex = 8
|
||||
'
|
||||
'btnOpenRestorePath
|
||||
'
|
||||
Me.btnOpenRestorePath.Location = New System.Drawing.Point(339, 125)
|
||||
Me.btnOpenRestorePath.Location = New System.Drawing.Point(369, 125)
|
||||
Me.btnOpenRestorePath.Name = "btnOpenRestorePath"
|
||||
Me.btnOpenRestorePath.Size = New System.Drawing.Size(114, 23)
|
||||
Me.btnOpenRestorePath.TabIndex = 12
|
||||
Me.btnOpenRestorePath.TabIndex = 11
|
||||
Me.btnOpenRestorePath.Text = "O&pen Restore Path"
|
||||
Me.btnOpenRestorePath.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnOpenBackupFile
|
||||
'
|
||||
Me.btnOpenBackupFile.Location = New System.Drawing.Point(216, 125)
|
||||
Me.btnOpenBackupFile.Location = New System.Drawing.Point(249, 125)
|
||||
Me.btnOpenBackupFile.Name = "btnOpenBackupFile"
|
||||
Me.btnOpenBackupFile.Size = New System.Drawing.Size(114, 23)
|
||||
Me.btnOpenBackupFile.TabIndex = 11
|
||||
Me.btnOpenBackupFile.TabIndex = 10
|
||||
Me.btnOpenBackupFile.Text = "&Open Backup File"
|
||||
Me.btnOpenBackupFile.UseVisualStyleBackColor = True
|
||||
'
|
||||
'txtFileSize
|
||||
'
|
||||
Me.txtFileSize.Location = New System.Drawing.Point(96, 74)
|
||||
Me.txtFileSize.Name = "txtFileSize"
|
||||
Me.txtFileSize.ReadOnly = True
|
||||
Me.txtFileSize.Size = New System.Drawing.Size(387, 20)
|
||||
Me.txtFileSize.TabIndex = 7
|
||||
Me.txtFileSize.TabStop = False
|
||||
'
|
||||
'btnDeleteBackup
|
||||
'
|
||||
Me.btnDeleteBackup.Location = New System.Drawing.Point(96, 125)
|
||||
Me.btnDeleteBackup.Location = New System.Drawing.Point(129, 125)
|
||||
Me.btnDeleteBackup.Name = "btnDeleteBackup"
|
||||
Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23)
|
||||
Me.btnDeleteBackup.TabIndex = 10
|
||||
Me.btnDeleteBackup.TabIndex = 8
|
||||
Me.btnDeleteBackup.Text = "&Delete Backup"
|
||||
Me.btnDeleteBackup.UseVisualStyleBackColor = True
|
||||
'
|
||||
'lblFileSize
|
||||
'lblBackupFile
|
||||
'
|
||||
Me.lblFileSize.AutoSize = True
|
||||
Me.lblFileSize.Location = New System.Drawing.Point(6, 77)
|
||||
Me.lblFileSize.Name = "lblFileSize"
|
||||
Me.lblFileSize.Size = New System.Drawing.Size(70, 13)
|
||||
Me.lblFileSize.TabIndex = 2
|
||||
Me.lblFileSize.Text = "Backup Size:"
|
||||
Me.lblBackupFile.AutoSize = True
|
||||
Me.lblBackupFile.Location = New System.Drawing.Point(6, 77)
|
||||
Me.lblBackupFile.Name = "lblBackupFile"
|
||||
Me.lblBackupFile.Size = New System.Drawing.Size(66, 13)
|
||||
Me.lblBackupFile.TabIndex = 2
|
||||
Me.lblBackupFile.Text = "Backup File:"
|
||||
'
|
||||
'lblSync
|
||||
'lblRemote
|
||||
'
|
||||
Me.lblSync.AutoSize = True
|
||||
Me.lblSync.Location = New System.Drawing.Point(6, 130)
|
||||
Me.lblSync.Name = "lblSync"
|
||||
Me.lblSync.Size = New System.Drawing.Size(62, 13)
|
||||
Me.lblSync.TabIndex = 4
|
||||
Me.lblSync.Text = "Up to Date!"
|
||||
Me.lblSync.Visible = False
|
||||
Me.lblRemote.AutoSize = True
|
||||
Me.lblRemote.Location = New System.Drawing.Point(6, 27)
|
||||
Me.lblRemote.Name = "lblRemote"
|
||||
Me.lblRemote.Size = New System.Drawing.Size(73, 13)
|
||||
Me.lblRemote.TabIndex = 0
|
||||
Me.lblRemote.Text = "Backup Data:"
|
||||
'
|
||||
'txtCurrentBackup
|
||||
'lblLocalData
|
||||
'
|
||||
Me.txtCurrentBackup.Location = New System.Drawing.Point(96, 24)
|
||||
Me.txtCurrentBackup.Name = "txtCurrentBackup"
|
||||
Me.txtCurrentBackup.ReadOnly = True
|
||||
Me.txtCurrentBackup.Size = New System.Drawing.Size(387, 20)
|
||||
Me.txtCurrentBackup.TabIndex = 5
|
||||
Me.txtCurrentBackup.TabStop = False
|
||||
'
|
||||
'lblCurrentBackup
|
||||
'
|
||||
Me.lblCurrentBackup.AutoSize = True
|
||||
Me.lblCurrentBackup.Location = New System.Drawing.Point(6, 27)
|
||||
Me.lblCurrentBackup.Name = "lblCurrentBackup"
|
||||
Me.lblCurrentBackup.Size = New System.Drawing.Size(84, 13)
|
||||
Me.lblCurrentBackup.TabIndex = 0
|
||||
Me.lblCurrentBackup.Text = "Current Backup:"
|
||||
'
|
||||
'txtLocalBackup
|
||||
'
|
||||
Me.txtLocalBackup.Location = New System.Drawing.Point(96, 50)
|
||||
Me.txtLocalBackup.Name = "txtLocalBackup"
|
||||
Me.txtLocalBackup.ReadOnly = True
|
||||
Me.txtLocalBackup.Size = New System.Drawing.Size(387, 20)
|
||||
Me.txtLocalBackup.TabIndex = 6
|
||||
Me.txtLocalBackup.TabStop = False
|
||||
'
|
||||
'lblLastBackup
|
||||
'
|
||||
Me.lblLastBackup.AutoSize = True
|
||||
Me.lblLastBackup.Location = New System.Drawing.Point(6, 53)
|
||||
Me.lblLastBackup.Name = "lblLastBackup"
|
||||
Me.lblLastBackup.Size = New System.Drawing.Size(76, 13)
|
||||
Me.lblLastBackup.TabIndex = 1
|
||||
Me.lblLastBackup.Text = "Local Backup:"
|
||||
Me.lblLocalData.AutoSize = True
|
||||
Me.lblLocalData.Location = New System.Drawing.Point(6, 53)
|
||||
Me.lblLocalData.Name = "lblLocalData"
|
||||
Me.lblLocalData.Size = New System.Drawing.Size(62, 13)
|
||||
Me.lblLocalData.TabIndex = 1
|
||||
Me.lblLocalData.Text = "Local Data:"
|
||||
'
|
||||
'btnMarkAsRestored
|
||||
'
|
||||
Me.btnMarkAsRestored.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 525)
|
||||
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 526)
|
||||
Me.btnMarkAsRestored.Name = "btnMarkAsRestored"
|
||||
Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23)
|
||||
Me.btnMarkAsRestored.TabIndex = 14
|
||||
Me.btnMarkAsRestored.TabIndex = 17
|
||||
Me.btnMarkAsRestored.Text = "&Mark as Restored"
|
||||
Me.btnMarkAsRestored.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnRestore
|
||||
'
|
||||
Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnRestore.Location = New System.Drawing.Point(535, 525)
|
||||
Me.btnRestore.Location = New System.Drawing.Point(535, 526)
|
||||
Me.btnRestore.Name = "btnRestore"
|
||||
Me.btnRestore.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnRestore.TabIndex = 15
|
||||
Me.btnRestore.TabIndex = 18
|
||||
Me.btnRestore.Text = "&Restore"
|
||||
Me.btnRestore.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -619,19 +645,18 @@ Partial Class frmGameManager
|
||||
Me.btnSave.Location = New System.Drawing.Point(616, 336)
|
||||
Me.btnSave.Name = "btnSave"
|
||||
Me.btnSave.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnSave.TabIndex = 11
|
||||
Me.btnSave.TabIndex = 13
|
||||
Me.btnSave.Text = "&Save"
|
||||
Me.btnSave.UseVisualStyleBackColor = True
|
||||
'
|
||||
'lstGames
|
||||
'
|
||||
Me.lstGames.FormattingEnabled = True
|
||||
Me.lstGames.Location = New System.Drawing.Point(12, 138)
|
||||
Me.lstGames.Location = New System.Drawing.Point(12, 160)
|
||||
Me.lstGames.Name = "lstGames"
|
||||
Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
|
||||
Me.lstGames.Size = New System.Drawing.Size(228, 381)
|
||||
Me.lstGames.Sorted = True
|
||||
Me.lstGames.TabIndex = 1
|
||||
Me.lstGames.Size = New System.Drawing.Size(228, 355)
|
||||
Me.lstGames.TabIndex = 3
|
||||
'
|
||||
'btnCancel
|
||||
'
|
||||
@@ -639,7 +664,7 @@ Partial Class frmGameManager
|
||||
Me.btnCancel.Location = New System.Drawing.Point(697, 336)
|
||||
Me.btnCancel.Name = "btnCancel"
|
||||
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnCancel.TabIndex = 12
|
||||
Me.btnCancel.TabIndex = 14
|
||||
Me.btnCancel.Text = "&Cancel"
|
||||
Me.btnCancel.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -649,7 +674,7 @@ Partial Class frmGameManager
|
||||
Me.chkEnabled.Location = New System.Drawing.Point(247, 340)
|
||||
Me.chkEnabled.Name = "chkEnabled"
|
||||
Me.chkEnabled.Size = New System.Drawing.Size(109, 17)
|
||||
Me.chkEnabled.TabIndex = 8
|
||||
Me.chkEnabled.TabIndex = 10
|
||||
Me.chkEnabled.Text = "Monitor this game"
|
||||
Me.chkEnabled.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -715,7 +740,7 @@ Partial Class frmGameManager
|
||||
Me.btnImport.Location = New System.Drawing.Point(84, 526)
|
||||
Me.btnImport.Name = "btnImport"
|
||||
Me.btnImport.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnImport.TabIndex = 4
|
||||
Me.btnImport.TabIndex = 6
|
||||
Me.btnImport.Text = "&Import"
|
||||
Me.btnImport.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -724,7 +749,7 @@ Partial Class frmGameManager
|
||||
Me.btnExport.Location = New System.Drawing.Point(165, 526)
|
||||
Me.btnExport.Name = "btnExport"
|
||||
Me.btnExport.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnExport.TabIndex = 5
|
||||
Me.btnExport.TabIndex = 7
|
||||
Me.btnExport.Text = "&Export"
|
||||
Me.btnExport.UseVisualStyleBackColor = True
|
||||
'
|
||||
@@ -747,11 +772,48 @@ Partial Class frmGameManager
|
||||
Me.cmsFile.Size = New System.Drawing.Size(117, 22)
|
||||
Me.cmsFile.Text = "&File..."
|
||||
'
|
||||
'txtQuickFilter
|
||||
'
|
||||
Me.txtQuickFilter.Location = New System.Drawing.Point(80, 134)
|
||||
Me.txtQuickFilter.Name = "txtQuickFilter"
|
||||
Me.txtQuickFilter.Size = New System.Drawing.Size(160, 20)
|
||||
Me.txtQuickFilter.TabIndex = 2
|
||||
'
|
||||
'lblQuickFilter
|
||||
'
|
||||
Me.lblQuickFilter.AutoSize = True
|
||||
Me.lblQuickFilter.Location = New System.Drawing.Point(12, 137)
|
||||
Me.lblQuickFilter.Name = "lblQuickFilter"
|
||||
Me.lblQuickFilter.Size = New System.Drawing.Size(63, 13)
|
||||
Me.lblQuickFilter.TabIndex = 1
|
||||
Me.lblQuickFilter.Text = "Quick Filter:"
|
||||
'
|
||||
'cmsDeleteBackup
|
||||
'
|
||||
Me.cmsDeleteBackup.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsDeleteOne, Me.cmsDeleteAll})
|
||||
Me.cmsDeleteBackup.Name = "cmsDeleteBackup"
|
||||
Me.cmsDeleteBackup.ShowImageMargin = False
|
||||
Me.cmsDeleteBackup.Size = New System.Drawing.Size(115, 48)
|
||||
'
|
||||
'cmsDeleteOne
|
||||
'
|
||||
Me.cmsDeleteOne.Name = "cmsDeleteOne"
|
||||
Me.cmsDeleteOne.Size = New System.Drawing.Size(114, 22)
|
||||
Me.cmsDeleteOne.Text = "&Selected File"
|
||||
'
|
||||
'cmsDeleteAll
|
||||
'
|
||||
Me.cmsDeleteAll.Name = "cmsDeleteAll"
|
||||
Me.cmsDeleteAll.Size = New System.Drawing.Size(114, 22)
|
||||
Me.cmsDeleteAll.Text = "&All Files"
|
||||
'
|
||||
'frmGameManager
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(784, 561)
|
||||
Me.Controls.Add(Me.lblQuickFilter)
|
||||
Me.Controls.Add(Me.txtQuickFilter)
|
||||
Me.Controls.Add(Me.btnExport)
|
||||
Me.Controls.Add(Me.btnImport)
|
||||
Me.Controls.Add(Me.grpFilter)
|
||||
@@ -779,6 +841,7 @@ Partial Class frmGameManager
|
||||
Me.Text = "Game Manager"
|
||||
Me.grpConfig.ResumeLayout(False)
|
||||
Me.grpConfig.PerformLayout()
|
||||
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.grpExtra.ResumeLayout(False)
|
||||
Me.grpExtra.PerformLayout()
|
||||
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
@@ -788,6 +851,7 @@ Partial Class frmGameManager
|
||||
Me.grpFilter.ResumeLayout(False)
|
||||
Me.grpFilter.PerformLayout()
|
||||
Me.cmsImport.ResumeLayout(False)
|
||||
Me.cmsDeleteBackup.ResumeLayout(False)
|
||||
Me.ResumeLayout(False)
|
||||
Me.PerformLayout()
|
||||
|
||||
@@ -829,14 +893,10 @@ Partial Class frmGameManager
|
||||
Friend WithEvents btnIconBrowse As System.Windows.Forms.Button
|
||||
Friend WithEvents txtIcon As System.Windows.Forms.TextBox
|
||||
Friend WithEvents txtID As System.Windows.Forms.TextBox
|
||||
Friend WithEvents txtCurrentBackup As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblCurrentBackup As System.Windows.Forms.Label
|
||||
Friend WithEvents txtLocalBackup As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblLastBackup As System.Windows.Forms.Label
|
||||
Friend WithEvents lblSync As System.Windows.Forms.Label
|
||||
Friend WithEvents lblRemote As System.Windows.Forms.Label
|
||||
Friend WithEvents lblLocalData As System.Windows.Forms.Label
|
||||
Friend WithEvents chkEnabled As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents txtFileSize As System.Windows.Forms.TextBox
|
||||
Friend WithEvents lblFileSize As System.Windows.Forms.Label
|
||||
Friend WithEvents lblBackupFile As System.Windows.Forms.Label
|
||||
Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button
|
||||
Friend WithEvents btnRestore As System.Windows.Forms.Button
|
||||
Friend WithEvents btnDeleteBackup As System.Windows.Forms.Button
|
||||
@@ -852,10 +912,20 @@ Partial Class frmGameManager
|
||||
Friend WithEvents btnInclude As System.Windows.Forms.Button
|
||||
Friend WithEvents btnExclude As System.Windows.Forms.Button
|
||||
Friend WithEvents lblRestorePath As Label
|
||||
Friend WithEvents txtRestorePath As TextBox
|
||||
Friend WithEvents btnImport As System.Windows.Forms.Button
|
||||
Friend WithEvents btnExport As System.Windows.Forms.Button
|
||||
Friend WithEvents cmsImport As System.Windows.Forms.ContextMenuStrip
|
||||
Friend WithEvents cmsOfficial As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents cmsFile As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents txtQuickFilter As TextBox
|
||||
Friend WithEvents lblQuickFilter As Label
|
||||
Friend WithEvents lblLocalBackupData As Label
|
||||
Friend WithEvents lblRestorePathData As Label
|
||||
Friend WithEvents lblBackupFileData As Label
|
||||
Friend WithEvents lblLimit As Label
|
||||
Friend WithEvents nudLimit As NumericUpDown
|
||||
Friend WithEvents cboRemoteBackup As ComboBox
|
||||
Friend WithEvents cmsDeleteBackup As ContextMenuStrip
|
||||
Friend WithEvents cmsDeleteOne As ToolStripMenuItem
|
||||
Friend WithEvents cmsDeleteAll As ToolStripMenuItem
|
||||
End Class
|
||||
|
||||
@@ -120,4 +120,7 @@
|
||||
<metadata name="cmsImport.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="cmsDeleteBackup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>127, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
+316
-127
@@ -11,7 +11,7 @@ Public Class frmGameManager
|
||||
Private bTriggerBackup As Boolean = False
|
||||
Private bTriggerRestore As Boolean = False
|
||||
Private oBackupList As New List(Of clsGame)
|
||||
Private oRestoreList As New List(Of clsGame)
|
||||
Private oRestoreList As New Hashtable
|
||||
Private oAppData As Hashtable
|
||||
Private oLocalBackupData As SortedList
|
||||
Private oRemoteBackupData As SortedList
|
||||
@@ -20,6 +20,7 @@ Public Class frmGameManager
|
||||
Private oCurrentTagFilters As New List(Of clsTag)
|
||||
Private oCurrentStringFilters As New Hashtable
|
||||
Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
|
||||
Private WithEvents tmFilterTimer As Timer
|
||||
|
||||
Private Enum eModes As Integer
|
||||
View = 1
|
||||
@@ -34,7 +35,7 @@ Public Class frmGameManager
|
||||
|
||||
Property BackupFolder As String
|
||||
Get
|
||||
Return sBackupFolder & "\"
|
||||
Return sBackupFolder & Path.DirectorySeparatorChar
|
||||
End Get
|
||||
Set(value As String)
|
||||
sBackupFolder = value
|
||||
@@ -113,11 +114,11 @@ Public Class frmGameManager
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property RestoreList As List(Of clsGame)
|
||||
Property RestoreList As Hashtable
|
||||
Get
|
||||
Return oRestoreList
|
||||
End Get
|
||||
Set(value As List(Of clsGame))
|
||||
Set(value As Hashtable)
|
||||
oRestoreList = value
|
||||
End Set
|
||||
End Property
|
||||
@@ -141,8 +142,8 @@ Public Class frmGameManager
|
||||
End Property
|
||||
|
||||
Private Sub LoadBackupData()
|
||||
oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
|
||||
oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
|
||||
oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
|
||||
End Sub
|
||||
|
||||
Private Function ConvertToRelativePath(ByVal sSavePath As String, ByVal sAppPath As String) As String
|
||||
@@ -159,7 +160,7 @@ Public Class frmGameManager
|
||||
End Function
|
||||
|
||||
Private Sub CheckManifestandUpdate(ByVal oOriginalApp As clsGame, ByVal oNewApp As clsGame)
|
||||
Dim oBackupItem As clsBackup
|
||||
Dim oBackupItems As List(Of clsBackup)
|
||||
Dim sDirectory As String
|
||||
Dim sNewDirectory As String
|
||||
Dim sFileName As String
|
||||
@@ -168,14 +169,15 @@ Public Class frmGameManager
|
||||
'If there is a name change, check and update the manifest
|
||||
If oNewApp.Name <> oOriginalApp.Name Then
|
||||
'Local
|
||||
If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then
|
||||
oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local)
|
||||
|
||||
If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then
|
||||
oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local)
|
||||
'The local manifest will only have one entry per game, therefore this runs only once
|
||||
For Each oBackupItem As clsBackup In oBackupItems
|
||||
'Rename Current Backup File & Folder
|
||||
sFileName = BackupFolder & oBackupItem.FileName
|
||||
|
||||
'Rename Backup File
|
||||
sNewFileName = Path.GetDirectoryName(sFileName) & "\" & Path.GetFileName(sFileName).Replace(oOriginalApp.Name, oNewApp.Name)
|
||||
sNewFileName = Path.GetDirectoryName(sFileName) & Path.DirectorySeparatorChar & Path.GetFileName(sFileName).Replace(oOriginalApp.Name, oNewApp.Name)
|
||||
If File.Exists(sFileName) Then
|
||||
FileSystem.Rename(sFileName, sNewFileName)
|
||||
End If
|
||||
@@ -191,16 +193,21 @@ Public Class frmGameManager
|
||||
|
||||
oBackupItem.Name = oNewApp.Name
|
||||
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
|
||||
mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Local)
|
||||
oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
|
||||
mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Local)
|
||||
Next
|
||||
oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
'Remote
|
||||
If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then
|
||||
oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote)
|
||||
If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then
|
||||
oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote)
|
||||
|
||||
For Each oBackupItem As clsBackup In oBackupItems
|
||||
oBackupItem.Name = oNewApp.Name
|
||||
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
|
||||
mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Remote)
|
||||
oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Remote)
|
||||
Next
|
||||
oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
@@ -265,7 +272,7 @@ Public Class frmGameManager
|
||||
Next
|
||||
End If
|
||||
|
||||
lstGames.Items.Clear()
|
||||
lstGames.DataSource = Nothing
|
||||
FormatAndFillList()
|
||||
End Sub
|
||||
|
||||
@@ -280,7 +287,7 @@ Public Class frmGameManager
|
||||
End If
|
||||
End If
|
||||
|
||||
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseExe, "exe", _
|
||||
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseExe, "exe",
|
||||
frmGameManager_Executable, sDefaultFolder, False)
|
||||
|
||||
If sNewPath <> String.Empty Then
|
||||
@@ -336,8 +343,14 @@ Public Class frmGameManager
|
||||
End If
|
||||
End If
|
||||
|
||||
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseCustomIcon, "ico", _
|
||||
'Unix Handler
|
||||
If Not mgrCommon.IsUnix Then
|
||||
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseCustomIcon, "ico",
|
||||
frmGameManager_Icon, sDefaultFolder, False)
|
||||
Else
|
||||
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseCustomIcon, "png",
|
||||
"PNG", sDefaultFolder, False)
|
||||
End If
|
||||
|
||||
If sNewPath <> String.Empty Then
|
||||
txtIcon.Text = sNewPath
|
||||
@@ -370,33 +383,48 @@ Public Class frmGameManager
|
||||
|
||||
Dim oApp As clsGame
|
||||
Dim oData As KeyValuePair(Of String, String)
|
||||
|
||||
lstGames.ValueMember = "Key"
|
||||
lstGames.DisplayMember = "Value"
|
||||
|
||||
lstGames.BeginUpdate()
|
||||
Dim oList As New List(Of KeyValuePair(Of String, String))
|
||||
Dim sFilter As String = txtQuickFilter.Text
|
||||
|
||||
For Each de As DictionaryEntry In AppData
|
||||
oApp = DirectCast(de.Value, clsGame)
|
||||
oData = New KeyValuePair(Of String, String)(oApp.ID, oApp.Name)
|
||||
lstGames.Items.Add(oData)
|
||||
'Apply the quick filter if applicable
|
||||
If sFilter = String.Empty Then
|
||||
oList.Add(oData)
|
||||
Else
|
||||
If oApp.Name.ToLower.Contains(sFilter.ToLower) Then
|
||||
oList.Add(oData)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
lstGames.EndUpdate()
|
||||
oList.Sort(AddressOf mgrCommon.CompareByListBoxItemByValue)
|
||||
|
||||
lstGames.BeginUpdate()
|
||||
lstGames.DataSource = oList
|
||||
lstGames.ValueMember = "Key"
|
||||
lstGames.DisplayMember = "Value"
|
||||
lstGames.EndUpdate()
|
||||
lstGames.ClearSelected()
|
||||
IsLoading = False
|
||||
End Sub
|
||||
|
||||
Private Sub OpenBackupFile()
|
||||
Dim sFileName As String
|
||||
Dim oProcessStartInfo As ProcessStartInfo
|
||||
|
||||
sFileName = BackupFolder & CurrentBackupItem.FileName
|
||||
|
||||
If File.Exists(sFileName) Then
|
||||
Process.Start("explorer.exe", "/select," & sFileName)
|
||||
oProcessStartInfo = New ProcessStartInfo
|
||||
oProcessStartInfo.FileName = sFileName
|
||||
oProcessStartInfo.UseShellExecute = True
|
||||
oProcessStartInfo.Verb = "open"
|
||||
Process.Start(oProcessStartInfo)
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateBuilderButtonLabel(ByVal sBuilderString As String, ByVal sLabel As String, ByVal btn As Button, ByVal bDirty As Boolean)
|
||||
@@ -424,8 +452,8 @@ Public Class frmGameManager
|
||||
End If
|
||||
Else
|
||||
If txtAppPath.Text <> String.Empty Then
|
||||
If Directory.Exists(txtAppPath.Text & "\" & txtSavePath.Text) Then
|
||||
sRoot = txtAppPath.Text & "\" & txtSavePath.Text
|
||||
If Directory.Exists(txtAppPath.Text & Path.DirectorySeparatorChar & txtSavePath.Text) Then
|
||||
sRoot = txtAppPath.Text & Path.DirectorySeparatorChar & txtSavePath.Text
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
@@ -451,14 +479,14 @@ Public Class frmGameManager
|
||||
|
||||
If Not CurrentBackupItem.AbsolutePath Then
|
||||
If CurrentGame.ProcessPath <> String.Empty Then
|
||||
CurrentBackupItem.RelativeRestorePath = CurrentGame.ProcessPath & "\" & CurrentBackupItem.RestorePath
|
||||
CurrentBackupItem.RelativeRestorePath = CurrentGame.ProcessPath & Path.DirectorySeparatorChar & CurrentBackupItem.RestorePath
|
||||
Else
|
||||
sProcess = CurrentGame.TrueProcess
|
||||
If mgrCommon.IsProcessNotSearchable(CurrentGame) Then bNoAuto = True
|
||||
sRestorePath = mgrPath.ProcessPathSearch(CurrentBackupItem.Name, sProcess, mgrCommon.FormatString(frmGameManager_ErrorPathNotSet, CurrentBackupItem.Name), bNoAuto)
|
||||
|
||||
If sRestorePath <> String.Empty Then
|
||||
CurrentBackupItem.RelativeRestorePath = sRestorePath & "\" & CurrentBackupItem.RestorePath
|
||||
CurrentBackupItem.RelativeRestorePath = sRestorePath & Path.DirectorySeparatorChar & CurrentBackupItem.RestorePath
|
||||
txtAppPath.Text = sRestorePath
|
||||
Else
|
||||
Return False
|
||||
@@ -471,6 +499,7 @@ Public Class frmGameManager
|
||||
|
||||
Private Sub OpenRestorePath()
|
||||
Dim sPath As String = String.Empty
|
||||
Dim oProcessStartInfo As ProcessStartInfo
|
||||
|
||||
If CurrentBackupItem.AbsolutePath Then
|
||||
sPath = CurrentBackupItem.RestorePath
|
||||
@@ -481,11 +510,14 @@ Public Class frmGameManager
|
||||
End If
|
||||
|
||||
If Directory.Exists(sPath) Then
|
||||
Process.Start("explorer.exe", sPath)
|
||||
oProcessStartInfo = New ProcessStartInfo
|
||||
oProcessStartInfo.FileName = sPath
|
||||
oProcessStartInfo.UseShellExecute = True
|
||||
oProcessStartInfo.Verb = "open"
|
||||
Process.Start(oProcessStartInfo)
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub OpenTags()
|
||||
@@ -515,15 +547,49 @@ Public Class frmGameManager
|
||||
ModeChange()
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateBackupInfo(ByVal sManifestID As String)
|
||||
Dim sFileName As String
|
||||
|
||||
If sManifestID <> String.Empty Then
|
||||
CurrentBackupItem = mgrManifest.DoManifestGetByID(sManifestID, mgrSQLite.Database.Remote)
|
||||
|
||||
sFileName = BackupFolder & CurrentBackupItem.FileName
|
||||
|
||||
If File.Exists(sFileName) Then
|
||||
lblBackupFileData.Text = Path.GetFileName(CurrentBackupItem.FileName) & " (" & mgrCommon.GetFileSize(sFileName) & ")"
|
||||
Else
|
||||
lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
|
||||
End If
|
||||
|
||||
mgrRestore.DoPathOverride(CurrentBackupItem, CurrentGame)
|
||||
lblRestorePathData.Text = CurrentBackupItem.RestorePath
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub GetBackupInfo(ByVal oApp As clsGame)
|
||||
Dim oBackupInfo As clsBackup
|
||||
Dim oCurrentBackup As clsBackup
|
||||
Dim oCurrentBackups As List(Of clsBackup)
|
||||
Dim sFileName As String
|
||||
Dim oFileInfo As FileInfo
|
||||
Dim dFileSize As Double
|
||||
Dim oComboItems As New List(Of KeyValuePair(Of String, String))
|
||||
Dim bLocalData As Boolean = False
|
||||
Dim bRemoteData As Boolean = False
|
||||
|
||||
'cboRemoteBackup
|
||||
cboRemoteBackup.ValueMember = "Key"
|
||||
cboRemoteBackup.DisplayMember = "Value"
|
||||
|
||||
If oRemoteBackupData.Contains(oApp.Name) Then
|
||||
bRemoteData = True
|
||||
oCurrentBackups = mgrManifest.DoManifestGetByName(oApp.Name, mgrSQLite.Database.Remote)
|
||||
|
||||
For Each oCurrentBackup In oCurrentBackups
|
||||
oComboItems.Add(New KeyValuePair(Of String, String)(oCurrentBackup.ID, mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oCurrentBackup.DateUpdated, oCurrentBackup.UpdatedBy})))
|
||||
Next
|
||||
|
||||
CurrentBackupItem = DirectCast(oRemoteBackupData(oApp.Name), clsBackup)
|
||||
txtCurrentBackup.Text = mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {CurrentBackupItem.DateUpdated, CurrentBackupItem.UpdatedBy})
|
||||
|
||||
sFileName = BackupFolder & CurrentBackupItem.FileName
|
||||
|
||||
btnOpenBackupFile.Enabled = True
|
||||
@@ -532,84 +598,95 @@ Public Class frmGameManager
|
||||
btnDeleteBackup.Enabled = True
|
||||
|
||||
If File.Exists(sFileName) Then
|
||||
oFileInfo = New FileInfo(sFileName)
|
||||
dFileSize = oFileInfo.Length
|
||||
If dFileSize > 1048576 Then
|
||||
txtFileSize.Text = mgrCommon.FormatString(App_MB, Math.Round(dFileSize / 1048576, 2).ToString)
|
||||
lblBackupFileData.Text = Path.GetFileName(CurrentBackupItem.FileName) & " (" & mgrCommon.GetFileSize(sFileName) & ")"
|
||||
Else
|
||||
txtFileSize.Text = mgrCommon.FormatString(App_KB, Math.Round(dFileSize / 1024, 2).ToString)
|
||||
lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
|
||||
End If
|
||||
|
||||
mgrRestore.DoPathOverride(CurrentBackupItem, oApp)
|
||||
lblRestorePathData.Text = CurrentBackupItem.RestorePath
|
||||
Else
|
||||
txtFileSize.Text = frmGameManager_ErrorNoBackupExists
|
||||
End If
|
||||
txtRestorePath.Text = CurrentBackupItem.RestorePath
|
||||
Else
|
||||
txtCurrentBackup.Text = frmGameManager_Never
|
||||
txtFileSize.Text = String.Empty
|
||||
txtRestorePath.Text = String.Empty
|
||||
oComboItems.Add(New KeyValuePair(Of String, String)(String.Empty, frmGameManager_None))
|
||||
lblBackupFileData.Text = String.Empty
|
||||
lblRestorePathData.Text = String.Empty
|
||||
btnOpenBackupFile.Enabled = False
|
||||
btnOpenRestorePath.Enabled = False
|
||||
btnRestore.Enabled = False
|
||||
btnDeleteBackup.Enabled = False
|
||||
End If
|
||||
|
||||
cboRemoteBackup.DataSource = oComboItems
|
||||
|
||||
If oLocalBackupData.Contains(oApp.Name) Then
|
||||
bLocalData = True
|
||||
oBackupInfo = DirectCast(oLocalBackupData(oApp.Name), clsBackup)
|
||||
txtLocalBackup.Text = mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oBackupInfo.DateUpdated, oBackupInfo.UpdatedBy})
|
||||
lblLocalBackupData.Text = mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oBackupInfo.DateUpdated, oBackupInfo.UpdatedBy})
|
||||
Else
|
||||
txtLocalBackup.Text = frmGameManager_Never
|
||||
lblLocalBackupData.Text = frmGameManager_Unknown
|
||||
End If
|
||||
|
||||
If txtCurrentBackup.Text = frmGameManager_Never And txtLocalBackup.Text = frmGameManager_Never Then
|
||||
lblSync.Visible = False
|
||||
If Not bRemoteData And Not bLocalData Then
|
||||
btnMarkAsRestored.Enabled = False
|
||||
ElseIf txtCurrentBackup.Text = frmGameManager_Never And txtLocalBackup.Text <> frmGameManager_Never Then
|
||||
lblSync.Visible = False
|
||||
lblLocalBackupData.ForeColor = Color.Black
|
||||
ElseIf Not bRemoteData And bLocalData Then
|
||||
btnMarkAsRestored.Enabled = False
|
||||
ElseIf txtCurrentBackup.Text <> txtLocalBackup.Text Then
|
||||
lblSync.ForeColor = Color.Red
|
||||
lblSync.Text = frmGameManager_OutofSync
|
||||
lblSync.Visible = True
|
||||
lblLocalBackupData.ForeColor = Color.Black
|
||||
ElseIf oComboItems(0).Value <> lblLocalBackupData.Text Then
|
||||
lblLocalBackupData.ForeColor = Color.Red
|
||||
btnMarkAsRestored.Enabled = True
|
||||
Else
|
||||
lblSync.ForeColor = Color.Green
|
||||
lblSync.Text = frmGameManager_UpToDate
|
||||
lblSync.Visible = True
|
||||
lblLocalBackupData.ForeColor = Color.Green
|
||||
btnMarkAsRestored.Enabled = False
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub DeleteBackup()
|
||||
Dim oDir As DirectoryInfo
|
||||
Dim sSubDir As String
|
||||
Private Sub DeleteAllBackups()
|
||||
Dim oBackupData As List(Of clsBackup)
|
||||
Dim oBackup As clsBackup
|
||||
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDelete, CurrentBackupItem.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
mgrManifest.DoManifestDelete(CurrentBackupItem, mgrSQLite.Database.Local)
|
||||
mgrManifest.DoManifestDelete(CurrentBackupItem, mgrSQLite.Database.Remote)
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDeleteAll, CurrentGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
oBackupData = mgrManifest.DoManifestGetByName(CurrentGame.Name, mgrSQLite.Database.Remote)
|
||||
|
||||
For Each oBackup In oBackupData
|
||||
'Delete the specific remote manifest entry
|
||||
mgrManifest.DoManifestDeletebyID(oBackup, mgrSQLite.Database.Remote)
|
||||
'Delete referenced backup file from the backup folder
|
||||
mgrCommon.DeleteFile(BackupFolder & oBackup.FileName)
|
||||
'Check for sub-directory and delete if empty (we need to do this every pass just in case the user had a mix of settings at one point)
|
||||
mgrCommon.DeleteDirectoryByBackup(BackupFolder, oBackup)
|
||||
Next
|
||||
|
||||
'Delete local manifest entry
|
||||
mgrManifest.DoManifestDeletebyName(CurrentBackupItem, mgrSQLite.Database.Local)
|
||||
|
||||
LoadBackupData()
|
||||
|
||||
If oCurrentGame.Temporary Then
|
||||
LoadData()
|
||||
eCurrentMode = eModes.Disabled
|
||||
ModeChange()
|
||||
Else
|
||||
FillData()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub DeleteBackup()
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDelete, Path.GetFileName(CurrentBackupItem.FileName), MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
'Delete the specific remote manifest entry
|
||||
mgrManifest.DoManifestDeletebyID(CurrentBackupItem, mgrSQLite.Database.Remote)
|
||||
|
||||
'If a remote manifest entry no longer exists for this game, delete the local entry
|
||||
If Not mgrManifest.DoGlobalManifestCheck(CurrentBackupItem.Name, mgrSQLite.Database.Remote) Then
|
||||
mgrManifest.DoManifestDeletebyName(CurrentBackupItem, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
'Delete referenced backup file from the backup folder
|
||||
If File.Exists(BackupFolder & CurrentBackupItem.FileName) Then File.Delete(BackupFolder & CurrentBackupItem.FileName)
|
||||
mgrCommon.DeleteFile(BackupFolder & CurrentBackupItem.FileName)
|
||||
|
||||
'Check if using backup sub-directories (Probably not the best way to check for this)
|
||||
If CurrentBackupItem.FileName.StartsWith(CurrentBackupItem.Name & "\") Then
|
||||
'Build sub-dir backup path
|
||||
sSubDir = BackupFolder & CurrentBackupItem.Name
|
||||
|
||||
If Directory.Exists(sSubDir) Then
|
||||
'Check if there's any sub-directories or files remaining
|
||||
oDir = New DirectoryInfo(sSubDir)
|
||||
If oDir.GetDirectories.Length > 0 Or oDir.GetFiles.Length > 0 Then
|
||||
'Confirm
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupFolderDelete, New String() {sSubDir, oDir.GetDirectories.Length, oDir.GetFiles.Length}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
If Directory.Exists(sSubDir) Then Directory.Delete(sSubDir, True)
|
||||
End If
|
||||
Else
|
||||
'Folder is empty, delete the empty sub-folder
|
||||
If Directory.Exists(sSubDir) Then Directory.Delete(sSubDir)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
'Check for sub-directory and delete if empty
|
||||
mgrCommon.DeleteDirectoryByBackup(BackupFolder, CurrentBackupItem)
|
||||
|
||||
LoadBackupData()
|
||||
|
||||
@@ -638,6 +715,7 @@ Public Class frmGameManager
|
||||
txtExclude.Text = oApp.ExcludeList
|
||||
chkFolderSave.Checked = oApp.FolderSave
|
||||
chkTimeStamp.Checked = oApp.AppendTimeStamp
|
||||
nudLimit.Value = oApp.BackupLimit
|
||||
chkEnabled.Checked = oApp.Enabled
|
||||
chkMonitorOnly.Checked = oApp.MonitorOnly
|
||||
|
||||
@@ -709,9 +787,6 @@ Public Class frmGameManager
|
||||
AddHandler DirectCast(ctl, NumericUpDown).ValueChanged, AddressOf DirtyCheck_ValueChanged
|
||||
End If
|
||||
Next
|
||||
|
||||
'Exemptions
|
||||
RemoveHandler txtRestorePath.TextChanged, AddressOf DirtyCheck_ValueChanged
|
||||
End Sub
|
||||
|
||||
Private Sub AssignDirtyHandlersMisc()
|
||||
@@ -725,8 +800,12 @@ Public Class frmGameManager
|
||||
DirectCast(ctl, TextBox).Text = String.Empty
|
||||
ElseIf TypeOf ctl Is CheckBox Then
|
||||
DirectCast(ctl, CheckBox).Checked = False
|
||||
ElseIf TypeOf ctl Is Label Then
|
||||
If ctl.Tag = "wipe" Then DirectCast(ctl, Label).Text = String.Empty
|
||||
ElseIf TypeOf ctl Is NumericUpDown Then
|
||||
DirectCast(ctl, NumericUpDown).Value = 0
|
||||
DirectCast(ctl, NumericUpDown).Value = DirectCast(ctl, NumericUpDown).Minimum
|
||||
ElseIf TypeOf ctl Is ComboBox Then
|
||||
DirectCast(ctl, ComboBox).DataSource = Nothing
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
@@ -738,6 +817,8 @@ Public Class frmGameManager
|
||||
Case eModes.Add
|
||||
grpFilter.Enabled = False
|
||||
lstGames.Enabled = False
|
||||
lblQuickFilter.Enabled = False
|
||||
txtQuickFilter.Enabled = False
|
||||
grpConfig.Enabled = True
|
||||
chkMonitorOnly.Enabled = True
|
||||
grpExtra.Enabled = True
|
||||
@@ -758,7 +839,6 @@ Public Class frmGameManager
|
||||
btnDeleteBackup.Enabled = False
|
||||
btnOpenBackupFile.Enabled = False
|
||||
btnOpenRestorePath.Enabled = False
|
||||
lblSync.Visible = False
|
||||
chkEnabled.Checked = True
|
||||
chkMonitorOnly.Checked = False
|
||||
btnTags.Enabled = False
|
||||
@@ -770,6 +850,8 @@ Public Class frmGameManager
|
||||
Case eModes.Edit
|
||||
grpFilter.Enabled = False
|
||||
lstGames.Enabled = False
|
||||
lblQuickFilter.Enabled = False
|
||||
txtQuickFilter.Enabled = False
|
||||
grpConfig.Enabled = True
|
||||
chkEnabled.Enabled = True
|
||||
chkMonitorOnly.Enabled = True
|
||||
@@ -792,6 +874,8 @@ Public Class frmGameManager
|
||||
Case eModes.View
|
||||
grpFilter.Enabled = True
|
||||
lstGames.Enabled = True
|
||||
lblQuickFilter.Enabled = True
|
||||
txtQuickFilter.Enabled = True
|
||||
grpConfig.Enabled = True
|
||||
chkEnabled.Enabled = True
|
||||
chkMonitorOnly.Enabled = True
|
||||
@@ -809,6 +893,8 @@ Public Class frmGameManager
|
||||
Case eModes.ViewTemp
|
||||
grpFilter.Enabled = True
|
||||
lstGames.Enabled = True
|
||||
lblQuickFilter.Enabled = True
|
||||
txtQuickFilter.Enabled = True
|
||||
grpConfig.Enabled = False
|
||||
chkEnabled.Enabled = False
|
||||
chkMonitorOnly.Enabled = False
|
||||
@@ -819,6 +905,7 @@ Public Class frmGameManager
|
||||
btnAdd.Enabled = True
|
||||
btnDelete.Enabled = False
|
||||
btnBackup.Enabled = False
|
||||
btnOpenRestorePath.Enabled = False
|
||||
btnTags.Enabled = False
|
||||
lblTags.Visible = False
|
||||
btnInclude.Text = frmGameManager_btnInclude
|
||||
@@ -828,11 +915,12 @@ Public Class frmGameManager
|
||||
Case eModes.Disabled
|
||||
grpFilter.Enabled = True
|
||||
lstGames.Enabled = True
|
||||
lblQuickFilter.Enabled = True
|
||||
txtQuickFilter.Enabled = True
|
||||
WipeControls(grpConfig.Controls)
|
||||
WipeControls(grpExtra.Controls)
|
||||
WipeControls(grpStats.Controls)
|
||||
pbIcon.Image = Icon_Unknown
|
||||
lblSync.Visible = False
|
||||
btnSave.Enabled = False
|
||||
btnCancel.Enabled = False
|
||||
grpConfig.Enabled = False
|
||||
@@ -853,11 +941,12 @@ Public Class frmGameManager
|
||||
btnExport.Enabled = True
|
||||
Case eModes.MultiSelect
|
||||
lstGames.Enabled = True
|
||||
lblQuickFilter.Enabled = False
|
||||
txtQuickFilter.Enabled = False
|
||||
WipeControls(grpConfig.Controls)
|
||||
WipeControls(grpExtra.Controls)
|
||||
WipeControls(grpStats.Controls)
|
||||
pbIcon.Image = Icon_Unknown
|
||||
lblSync.Visible = False
|
||||
btnSave.Enabled = True
|
||||
btnCancel.Enabled = False
|
||||
grpConfig.Enabled = False
|
||||
@@ -883,6 +972,30 @@ Public Class frmGameManager
|
||||
IsLoading = False
|
||||
End Sub
|
||||
|
||||
Private Sub FolderSaveModeChange()
|
||||
If chkFolderSave.Checked Then
|
||||
btnInclude.Enabled = False
|
||||
If txtFileType.Text <> String.Empty Then
|
||||
txtFileType.Text = String.Empty
|
||||
UpdateBuilderButtonLabel(txtFileType.Text, frmGameManager_IncludeShortcut, btnInclude, False)
|
||||
End If
|
||||
Else
|
||||
btnInclude.Enabled = True
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub TimeStampModeChange()
|
||||
If chkTimeStamp.Checked Then
|
||||
nudLimit.Visible = True
|
||||
lblLimit.Visible = True
|
||||
nudLimit.Value = 5
|
||||
Else
|
||||
nudLimit.Visible = False
|
||||
nudLimit.Value = nudLimit.Minimum
|
||||
lblLimit.Visible = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub EditApp()
|
||||
eCurrentMode = eModes.Edit
|
||||
ModeChange()
|
||||
@@ -950,6 +1063,7 @@ Public Class frmGameManager
|
||||
oApp.ExcludeList = txtExclude.Text
|
||||
oApp.FolderSave = chkFolderSave.Checked
|
||||
oApp.AppendTimeStamp = chkTimeStamp.Checked
|
||||
oApp.BackupLimit = nudLimit.Value
|
||||
oApp.Enabled = chkEnabled.Checked
|
||||
oApp.MonitorOnly = chkMonitorOnly.Checked
|
||||
oApp.ProcessPath = txtAppPath.Text
|
||||
@@ -975,7 +1089,7 @@ Public Class frmGameManager
|
||||
Case eModes.MultiSelect
|
||||
Dim sMonitorIDs As New List(Of String)
|
||||
For Each oData In lstGames.SelectedItems
|
||||
sMonitorIDs.Add(AppData(oData.Key))
|
||||
sMonitorIDs.Add(oData.Key)
|
||||
Next
|
||||
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiSave, New String() {sMonitorIDs.Count, mgrCommon.BooleanYesNo(oApp.Enabled), mgrCommon.BooleanYesNo(oApp.MonitorOnly)}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
@@ -986,13 +1100,10 @@ Public Class frmGameManager
|
||||
End Select
|
||||
|
||||
If bSuccess Then
|
||||
Dim iSelected As Integer
|
||||
IsDirty = False
|
||||
LoadData()
|
||||
iSelected = lstGames.Items.IndexOf(New KeyValuePair(Of String, String)(oApp.ID, oApp.Name))
|
||||
If iSelected = -1 Then eCurrentMode = eModes.Disabled
|
||||
ModeChange()
|
||||
If eCurrentMode = eModes.View Then lstGames.SelectedIndex = iSelected
|
||||
If eCurrentMode = eModes.View Then lstGames.SelectedValue = oApp.ID
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -1028,6 +1139,7 @@ Public Class frmGameManager
|
||||
End Sub
|
||||
|
||||
Private Sub SwitchApp()
|
||||
If Not bIsLoading Then
|
||||
If lstGames.SelectedItems.Count = 1 Then
|
||||
eCurrentMode = eModes.View
|
||||
FillData()
|
||||
@@ -1036,6 +1148,7 @@ Public Class frmGameManager
|
||||
eCurrentMode = eModes.MultiSelect
|
||||
ModeChange()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function CoreValidatation(ByVal oApp As clsGame) As Boolean
|
||||
@@ -1083,8 +1196,8 @@ Public Class frmGameManager
|
||||
If oMarkList.Count = 1 Then
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmMark, oMarkList(0).Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
bWasUpdated = True
|
||||
If mgrManifest.DoManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdate(oMarkList(0), mgrSQLite.Database.Local)
|
||||
If mgrManifest.DoGlobalManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdateByName(oMarkList(0), mgrSQLite.Database.Local)
|
||||
Else
|
||||
mgrManifest.DoManifestAdd(oMarkList(0), mgrSQLite.Database.Local)
|
||||
End If
|
||||
@@ -1093,8 +1206,8 @@ Public Class frmGameManager
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiMark, oMarkList.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
bWasUpdated = True
|
||||
For Each oGameBackup In oMarkList
|
||||
If mgrManifest.DoManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdate(oGameBackup, mgrSQLite.Database.Local)
|
||||
If mgrManifest.DoGlobalManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdateByName(oGameBackup, mgrSQLite.Database.Local)
|
||||
Else
|
||||
mgrManifest.DoManifestAdd(oGameBackup, mgrSQLite.Database.Local)
|
||||
End If
|
||||
@@ -1121,10 +1234,11 @@ Public Class frmGameManager
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub TriggerSelectedBackup()
|
||||
Private Sub TriggerSelectedBackup(Optional ByVal bPrompt As Boolean = True)
|
||||
Dim oData As KeyValuePair(Of String, String)
|
||||
Dim sMsg As String = String.Empty
|
||||
Dim oGame As clsGame
|
||||
Dim bDoBackup As Boolean = False
|
||||
|
||||
If lstGames.SelectedItems.Count > 0 Then
|
||||
BackupList.Clear()
|
||||
@@ -1135,41 +1249,61 @@ Public Class frmGameManager
|
||||
Next
|
||||
|
||||
If BackupList.Count = 1 Then
|
||||
bDoBackup = True
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmBackup, BackupList(0).Name)
|
||||
ElseIf BackupList.Count > 1 Then
|
||||
bDoBackup = True
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmMultiBackup, BackupList.Count)
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmGameManager_ErrorNoValidBackup, MsgBoxStyle.Information)
|
||||
End If
|
||||
|
||||
If bDoBackup Then
|
||||
If bPrompt Then
|
||||
If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
TriggerBackup = True
|
||||
Me.Close()
|
||||
End If
|
||||
Else
|
||||
TriggerBackup = True
|
||||
Me.Close()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub TriggerSelectedRestore()
|
||||
Private Sub TriggerSelectedRestore(Optional ByVal bPrompt As Boolean = True)
|
||||
Dim oData As KeyValuePair(Of String, String)
|
||||
Dim sMsg As String = String.Empty
|
||||
Dim oGame As clsGame
|
||||
Dim oBackup As clsBackup
|
||||
Dim bDoRestore As Boolean = False
|
||||
|
||||
If lstGames.SelectedItems.Count > 0 Then
|
||||
RestoreList.Clear()
|
||||
|
||||
If lstGames.SelectedItems.Count = 1 Then
|
||||
RestoreList.Add(CurrentGame, CurrentBackupItem)
|
||||
Else
|
||||
For Each oData In lstGames.SelectedItems
|
||||
If oRemoteBackupData.Contains(oData.Value) Then
|
||||
oGame = DirectCast(AppData(oData.Key), clsGame)
|
||||
RestoreList.Add(oGame)
|
||||
oBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup)
|
||||
RestoreList.Add(oGame, oBackup)
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
|
||||
If RestoreList.Count = 1 Then
|
||||
bDoRestore = True
|
||||
If Not mgrRestore.CheckManifest(RestoreList(0).Name) Then
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestoreAnyway, RestoreList(0).Name)
|
||||
oGame = New clsGame
|
||||
For Each de As DictionaryEntry In RestoreList
|
||||
oGame = DirectCast(de.Key, clsGame)
|
||||
Next
|
||||
If Not mgrRestore.CheckManifest(oGame.Name) Then
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestoreAnyway, oGame.Name)
|
||||
Else
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestore, RestoreList(0).Name)
|
||||
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestore, oGame.Name)
|
||||
End If
|
||||
ElseIf RestoreList.Count > 1 Then
|
||||
bDoRestore = True
|
||||
@@ -1178,12 +1312,16 @@ Public Class frmGameManager
|
||||
mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupData, MsgBoxStyle.Information)
|
||||
End If
|
||||
|
||||
'We need this check in case a bunch of games with no backups are multi-selected
|
||||
If bDoRestore Then
|
||||
If bPrompt Then
|
||||
If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
TriggerRestore = True
|
||||
Me.Close()
|
||||
End If
|
||||
Else
|
||||
TriggerRestore = True
|
||||
Me.Close()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
@@ -1204,7 +1342,7 @@ Public Class frmGameManager
|
||||
Private Sub ExportGameList()
|
||||
Dim sLocation As String
|
||||
|
||||
sLocation = mgrCommon.SaveFileBrowser(frmGameManager_ChooseExportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Game Backup Monitor Export " & Date.Now.ToString("dd-MMM-yyyy"))
|
||||
sLocation = mgrCommon.SaveFileBrowser(frmGameManager_ChooseExportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmGameManager_DefaultExportFileName & " " & Date.Now.ToString("dd-MMM-yyyy"))
|
||||
|
||||
If sLocation <> String.Empty Then
|
||||
mgrMonitorList.ExportMonitorList(sLocation)
|
||||
@@ -1213,13 +1351,19 @@ Public Class frmGameManager
|
||||
End Sub
|
||||
|
||||
Private Sub ImportOfficialGameList()
|
||||
Dim sImportURL As String
|
||||
|
||||
If mgrCommon.IsUnix Then
|
||||
sImportURL = App_URLImportLinux
|
||||
Else
|
||||
sImportURL = App_URLImport
|
||||
End If
|
||||
|
||||
If mgrCommon.ShowMessage(frmGameManager_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
If mgrMonitorList.DoImport(App_URLImport) Then
|
||||
If mgrMonitorList.DoImport(sImportURL) Then
|
||||
LoadData()
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
@@ -1248,9 +1392,9 @@ Public Class frmGameManager
|
||||
btnOpenRestorePath.Text = frmGameManager_btnOpenRestorePath
|
||||
btnOpenBackupFile.Text = frmGameManager_btnOpenBackupFile
|
||||
btnDeleteBackup.Text = frmGameManager_btnDeleteBackup
|
||||
lblFileSize.Text = frmGameManager_lblFileSize
|
||||
lblCurrentBackup.Text = frmGameManager_lblCurrentBackup
|
||||
lblLastBackup.Text = frmGameManager_lblLastBackup
|
||||
lblBackupFile.Text = frmGameManager_lblBackupFile
|
||||
lblRemote.Text = frmGameManager_lblRemote
|
||||
lblLocalData.Text = frmGameManager_lblLocalData
|
||||
btnIconBrowse.Text = frmGameManager_btnIconBrowse
|
||||
lblVersion.Text = frmGameManager_lblVersion
|
||||
lblCompany.Text = frmGameManager_lblCompany
|
||||
@@ -1273,6 +1417,15 @@ Public Class frmGameManager
|
||||
btnAdd.Text = frmGameManager_btnAdd
|
||||
cmsOfficial.Text = frmGameManager_cmsOfficial
|
||||
cmsFile.Text = frmGameManager_cmsFile
|
||||
lblQuickFilter.Text = frmGameManager_lblQuickFilter
|
||||
lblLimit.Text = frmGameManager_lblLimit
|
||||
cmsDeleteOne.Text = frmGameManager_cmsDeleteOne
|
||||
cmsDeleteAll.Text = frmGameManager_cmsDeleteAll
|
||||
|
||||
'Init Filter Timer
|
||||
tmFilterTimer = New Timer()
|
||||
tmFilterTimer.Interval = 1000
|
||||
tmFilterTimer.Enabled = False
|
||||
End Sub
|
||||
|
||||
Private Sub frmGameManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
@@ -1300,6 +1453,9 @@ Public Class frmGameManager
|
||||
AssignDirtyHandlers(grpExtra.Controls)
|
||||
AssignDirtyHandlers(grpStats.Controls)
|
||||
AssignDirtyHandlersMisc()
|
||||
|
||||
LoadData(False)
|
||||
ModeChange()
|
||||
End Sub
|
||||
|
||||
Private Sub lstGames_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedIndexChanged
|
||||
@@ -1372,7 +1528,19 @@ Public Class frmGameManager
|
||||
End Sub
|
||||
|
||||
Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click
|
||||
If cboRemoteBackup.Items.Count > 1 Then
|
||||
cmsDeleteBackup.Show(btnDeleteBackup, New Drawing.Point(109, 11), ToolStripDropDownDirection.AboveRight)
|
||||
Else
|
||||
DeleteBackup()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub cmsDeleteOne_Click(sender As Object, e As EventArgs) Handles cmsDeleteOne.Click
|
||||
DeleteBackup()
|
||||
End Sub
|
||||
|
||||
Private Sub cmsDeleteAll_Click(sender As Object, e As EventArgs) Handles cmsDeleteAll.Click
|
||||
DeleteAllBackups()
|
||||
End Sub
|
||||
|
||||
Private Sub btnMarkAsRestored_Click(sender As Object, e As EventArgs) Handles btnMarkAsRestored.Click
|
||||
@@ -1403,14 +1571,16 @@ Public Class frmGameManager
|
||||
End Sub
|
||||
|
||||
Private Sub chkFolderSave_CheckedChanged(sender As Object, e As EventArgs) Handles chkFolderSave.CheckedChanged
|
||||
If chkFolderSave.Checked Then
|
||||
btnInclude.Enabled = False
|
||||
If txtFileType.Text <> String.Empty Then
|
||||
txtFileType.Text = String.Empty
|
||||
UpdateBuilderButtonLabel(txtFileType.Text, frmGameManager_IncludeShortcut, btnInclude, False)
|
||||
End If
|
||||
Else
|
||||
btnInclude.Enabled = True
|
||||
FolderSaveModeChange()
|
||||
End Sub
|
||||
|
||||
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
|
||||
TimeStampModeChange()
|
||||
End Sub
|
||||
|
||||
Private Sub cboRemoteBackup_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRemoteBackup.SelectedIndexChanged
|
||||
If Not bIsLoading Then
|
||||
UpdateBackupInfo(DirectCast(cboRemoteBackup.SelectedItem, KeyValuePair(Of String, String)).Key)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -1429,4 +1599,23 @@ Public Class frmGameManager
|
||||
Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
|
||||
ExportGameList()
|
||||
End Sub
|
||||
|
||||
Private Sub txtQuickFilter_TextChanged(sender As Object, e As EventArgs) Handles txtQuickFilter.TextChanged
|
||||
If Not tmFilterTimer.Enabled Then
|
||||
tmFilterTimer.Enabled = True
|
||||
tmFilterTimer.Start()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub tmFilterTimer_Tick(sender As Object, ByVal e As EventArgs) Handles tmFilterTimer.Tick
|
||||
lstGames.DataSource = Nothing
|
||||
FormatAndFillList()
|
||||
tmFilterTimer.Stop()
|
||||
tmFilterTimer.Enabled = False
|
||||
End Sub
|
||||
|
||||
Private Sub frmGameManager_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
|
||||
txtQuickFilter.Focus()
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
Generated
-3
@@ -170,7 +170,6 @@ Partial Class frmIncludeExclude
|
||||
'
|
||||
'optFileTypes
|
||||
'
|
||||
Me.optFileTypes.AutoSize = True
|
||||
Me.optFileTypes.Location = New System.Drawing.Point(6, 19)
|
||||
Me.optFileTypes.Name = "optFileTypes"
|
||||
Me.optFileTypes.Size = New System.Drawing.Size(73, 17)
|
||||
@@ -181,7 +180,6 @@ Partial Class frmIncludeExclude
|
||||
'
|
||||
'optIndividualFiles
|
||||
'
|
||||
Me.optIndividualFiles.AutoSize = True
|
||||
Me.optIndividualFiles.Location = New System.Drawing.Point(85, 19)
|
||||
Me.optIndividualFiles.Name = "optIndividualFiles"
|
||||
Me.optIndividualFiles.Size = New System.Drawing.Size(94, 17)
|
||||
@@ -250,7 +248,6 @@ Partial Class frmIncludeExclude
|
||||
Me.Text = "Include / Exclude Builder"
|
||||
Me.cmsItems.ResumeLayout(False)
|
||||
Me.grpFileOptions.ResumeLayout(False)
|
||||
Me.grpFileOptions.PerformLayout()
|
||||
Me.ResumeLayout(False)
|
||||
Me.PerformLayout()
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
|
||||
CQAAAk1TRnQBSQFMAgEBAwEAAbABAAGwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
CQAAAk1TRnQBSQFMAgEBAwEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
|
||||
@@ -30,7 +30,7 @@ Public Class frmIncludeExclude
|
||||
Return sRootFolder
|
||||
End Get
|
||||
Set(value As String)
|
||||
sRootFolder = value.TrimEnd("\")
|
||||
sRootFolder = value.TrimEnd(Path.DirectorySeparatorChar)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
@@ -52,7 +52,7 @@ Public Class frmIncludeExclude
|
||||
|
||||
If sFolders.Length <> 0 Then
|
||||
For Each sFolder As String In sFolders
|
||||
oChild = New TreeNode(sFolder.Replace(sDirectory, String.Empty).TrimStart("\"), 0, 0)
|
||||
oChild = New TreeNode(sFolder.Replace(sDirectory, String.Empty).TrimStart(Path.DirectorySeparatorChar), 0, 0)
|
||||
oChild.Name = sFolder
|
||||
oChild.Tag = 0
|
||||
oNode.Nodes.Add(oChild)
|
||||
@@ -64,7 +64,7 @@ Public Class frmIncludeExclude
|
||||
|
||||
If sFiles.Length <> 0 Then
|
||||
For Each sFile As String In sFiles
|
||||
oChild = New TreeNode(sFile.Replace(sDirectory, String.Empty).TrimStart("\"), 1, 1)
|
||||
oChild = New TreeNode(sFile.Replace(sDirectory, String.Empty).TrimStart(Path.DirectorySeparatorChar), 1, 1)
|
||||
oChild.Tag = 1
|
||||
oNode.Nodes.Add(oChild)
|
||||
Next
|
||||
@@ -195,7 +195,7 @@ Public Class frmIncludeExclude
|
||||
If Path.GetFileName(txtRootFolder.Text) = sNewLabel Then
|
||||
sFolderCheck = txtRootFolder.Text
|
||||
Else
|
||||
sFolderCheck = txtRootFolder.Text & "\" & sNewLabel
|
||||
sFolderCheck = txtRootFolder.Text & Path.DirectorySeparatorChar & sNewLabel
|
||||
End If
|
||||
If Directory.Exists(sFolderCheck) Then
|
||||
iType = 0
|
||||
@@ -335,10 +335,15 @@ Public Class frmIncludeExclude
|
||||
|
||||
Private Sub lstBuilder_AfterLabelEdit(sender As Object, e As LabelEditEventArgs) Handles lstBuilder.AfterLabelEdit
|
||||
If Not e.Label Is Nothing Then
|
||||
If e.Label = String.Empty Then
|
||||
e.CancelEdit = True
|
||||
End If
|
||||
|
||||
If lstBuilder.Items.ContainsKey(e.Label) Then
|
||||
e.CancelEdit = True
|
||||
Else
|
||||
IdentifyEntry(lstBuilder.Items(e.Item), e.Label)
|
||||
'Unix Handler - Mono is unable to modify list items during an edit event without crashing
|
||||
If Not mgrCommon.IsUnix Then IdentifyEntry(lstBuilder.Items(e.Item), e.Label)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Generated
+65
-22
@@ -39,14 +39,17 @@ Partial Class frmMain
|
||||
Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTrayToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTrayToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTrayToolsLog = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTrayLogClear = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTrayLogSave = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator()
|
||||
Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.bwMonitor = New System.ComponentModel.BackgroundWorker()
|
||||
Me.txtLog = New System.Windows.Forms.TextBox()
|
||||
Me.gMonStatusStrip = New System.Windows.Forms.StatusStrip()
|
||||
Me.gMonStripAdminButton = New System.Windows.Forms.ToolStripSplitButton()
|
||||
Me.gMonStripAdminButton = New System.Windows.Forms.ToolStripStatusLabel()
|
||||
Me.gMonStripTxtStatus = New System.Windows.Forms.ToolStripStatusLabel()
|
||||
Me.gMonStripStatusButton = New System.Windows.Forms.ToolStripSplitButton()
|
||||
Me.gMonStripStatusButton = New System.Windows.Forms.ToolStripStatusLabel()
|
||||
Me.gMonMainMenu = New System.Windows.Forms.MenuStrip()
|
||||
Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonFileMonitor = New System.Windows.Forms.ToolStripMenuItem()
|
||||
@@ -62,6 +65,9 @@ Partial Class frmMain
|
||||
Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonToolsLog = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonLogClear = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonLogSave = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem()
|
||||
@@ -93,7 +99,6 @@ Partial Class frmMain
|
||||
Me.gMonTray.ContextMenuStrip = Me.gMonTrayMenu
|
||||
Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon)
|
||||
Me.gMonTray.Text = "GBM"
|
||||
Me.gMonTray.Visible = True
|
||||
'
|
||||
'gMonTrayMenu
|
||||
'
|
||||
@@ -164,7 +169,7 @@ Partial Class frmMain
|
||||
'
|
||||
'gMonTrayTools
|
||||
'
|
||||
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact})
|
||||
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog})
|
||||
Me.gMonTrayTools.Name = "gMonTrayTools"
|
||||
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
|
||||
Me.gMonTrayTools.Text = "&Tools"
|
||||
@@ -181,6 +186,25 @@ Partial Class frmMain
|
||||
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(184, 22)
|
||||
Me.gMonTrayToolsCompact.Text = "&Compact Databases"
|
||||
'
|
||||
'gMonTrayToolsLog
|
||||
'
|
||||
Me.gMonTrayToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayLogClear, Me.gMonTrayLogSave})
|
||||
Me.gMonTrayToolsLog.Name = "gMonTrayToolsLog"
|
||||
Me.gMonTrayToolsLog.Size = New System.Drawing.Size(184, 22)
|
||||
Me.gMonTrayToolsLog.Text = "&Log"
|
||||
'
|
||||
'gMonTrayLogClear
|
||||
'
|
||||
Me.gMonTrayLogClear.Name = "gMonTrayLogClear"
|
||||
Me.gMonTrayLogClear.Size = New System.Drawing.Size(101, 22)
|
||||
Me.gMonTrayLogClear.Text = "&Clear"
|
||||
'
|
||||
'gMonTrayLogSave
|
||||
'
|
||||
Me.gMonTrayLogSave.Name = "gMonTrayLogSave"
|
||||
Me.gMonTrayLogSave.Size = New System.Drawing.Size(101, 22)
|
||||
Me.gMonTrayLogSave.Text = "&Save"
|
||||
'
|
||||
'gMonTraySep1
|
||||
'
|
||||
Me.gMonTraySep1.Name = "gMonTraySep1"
|
||||
@@ -200,7 +224,7 @@ Partial Class frmMain
|
||||
'
|
||||
Me.txtLog.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.txtLog.Location = New System.Drawing.Point(12, 184)
|
||||
Me.txtLog.MaxLength = 16777216
|
||||
Me.txtLog.MaxLength = 524288
|
||||
Me.txtLog.Multiline = True
|
||||
Me.txtLog.Name = "txtLog"
|
||||
Me.txtLog.ReadOnly = True
|
||||
@@ -213,7 +237,7 @@ Partial Class frmMain
|
||||
'
|
||||
Me.gMonStatusStrip.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.gMonStatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonStripAdminButton, Me.gMonStripTxtStatus, Me.gMonStripStatusButton})
|
||||
Me.gMonStatusStrip.Location = New System.Drawing.Point(0, 364)
|
||||
Me.gMonStatusStrip.Location = New System.Drawing.Point(0, 379)
|
||||
Me.gMonStatusStrip.Name = "gMonStatusStrip"
|
||||
Me.gMonStatusStrip.ShowItemToolTips = True
|
||||
Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22)
|
||||
@@ -223,33 +247,26 @@ Partial Class frmMain
|
||||
'gMonStripAdminButton
|
||||
'
|
||||
Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
||||
Me.gMonStripAdminButton.DropDownButtonWidth = 0
|
||||
Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.Icon_User
|
||||
Me.gMonStripAdminButton.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
Me.gMonStripAdminButton.Name = "gMonStripAdminButton"
|
||||
Me.gMonStripAdminButton.Size = New System.Drawing.Size(21, 20)
|
||||
Me.gMonStripAdminButton.Text = "Elevation"
|
||||
Me.gMonStripAdminButton.ToolTipText = "Elevation"
|
||||
Me.gMonStripAdminButton.Size = New System.Drawing.Size(16, 17)
|
||||
Me.gMonStripAdminButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
|
||||
'
|
||||
'gMonStripTxtStatus
|
||||
'
|
||||
Me.gMonStripTxtStatus.Margin = New System.Windows.Forms.Padding(5, 0, 0, 0)
|
||||
Me.gMonStripTxtStatus.Name = "gMonStripTxtStatus"
|
||||
Me.gMonStripTxtStatus.Size = New System.Drawing.Size(395, 17)
|
||||
Me.gMonStripTxtStatus.Size = New System.Drawing.Size(400, 22)
|
||||
Me.gMonStripTxtStatus.Spring = True
|
||||
Me.gMonStripTxtStatus.Text = "Monitor Status"
|
||||
Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'gMonStripStatusButton
|
||||
'
|
||||
Me.gMonStripStatusButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
|
||||
Me.gMonStripStatusButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
|
||||
Me.gMonStripStatusButton.DropDownButtonWidth = 0
|
||||
Me.gMonStripStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
Me.gMonStripStatusButton.Name = "gMonStripStatusButton"
|
||||
Me.gMonStripStatusButton.Size = New System.Drawing.Size(93, 20)
|
||||
Me.gMonStripStatusButton.Size = New System.Drawing.Size(88, 17)
|
||||
Me.gMonStripStatusButton.Text = "Monitor Status:"
|
||||
Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
|
||||
Me.gMonStripStatusButton.ToolTipText = "Click to toggle monitoring on or off."
|
||||
'
|
||||
'gMonMainMenu
|
||||
'
|
||||
@@ -329,7 +346,7 @@ Partial Class frmMain
|
||||
'
|
||||
'gMonTools
|
||||
'
|
||||
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact})
|
||||
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog})
|
||||
Me.gMonTools.Name = "gMonTools"
|
||||
Me.gMonTools.Size = New System.Drawing.Size(47, 20)
|
||||
Me.gMonTools.Text = "&Tools"
|
||||
@@ -346,6 +363,25 @@ Partial Class frmMain
|
||||
Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22)
|
||||
Me.gMonToolsCompact.Text = "&Compact Databases"
|
||||
'
|
||||
'gMonToolsLog
|
||||
'
|
||||
Me.gMonToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonLogClear, Me.gMonLogSave})
|
||||
Me.gMonToolsLog.Name = "gMonToolsLog"
|
||||
Me.gMonToolsLog.Size = New System.Drawing.Size(184, 22)
|
||||
Me.gMonToolsLog.Text = "&Log"
|
||||
'
|
||||
'gMonLogClear
|
||||
'
|
||||
Me.gMonLogClear.Name = "gMonLogClear"
|
||||
Me.gMonLogClear.Size = New System.Drawing.Size(101, 22)
|
||||
Me.gMonLogClear.Text = "&Clear"
|
||||
'
|
||||
'gMonLogSave
|
||||
'
|
||||
Me.gMonLogSave.Name = "gMonLogSave"
|
||||
Me.gMonLogSave.Size = New System.Drawing.Size(101, 22)
|
||||
Me.gMonLogSave.Text = "&Save"
|
||||
'
|
||||
'gMonHelp
|
||||
'
|
||||
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout})
|
||||
@@ -487,7 +523,7 @@ Partial Class frmMain
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(524, 386)
|
||||
Me.ClientSize = New System.Drawing.Size(524, 401)
|
||||
Me.Controls.Add(Me.pbTime)
|
||||
Me.Controls.Add(Me.lblStatus3)
|
||||
Me.Controls.Add(Me.lblStatus2)
|
||||
@@ -505,6 +541,7 @@ Partial Class frmMain
|
||||
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.KeyPreview = True
|
||||
Me.MainMenuStrip = Me.gMonMainMenu
|
||||
Me.MaximizeBox = False
|
||||
Me.MinimizeBox = False
|
||||
@@ -548,7 +585,6 @@ Partial Class frmMain
|
||||
Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonTraySetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripSplitButton
|
||||
Friend WithEvents pbIcon As System.Windows.Forms.PictureBox
|
||||
Friend WithEvents btnLogToggle As System.Windows.Forms.Button
|
||||
Friend WithEvents lblGameTitle As System.Windows.Forms.Label
|
||||
@@ -566,7 +602,6 @@ Partial Class frmMain
|
||||
Friend WithEvents gMonHelpManual As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents btnCancelOperation As System.Windows.Forms.Button
|
||||
Friend WithEvents gMonStripAdminButton As ToolStripSplitButton
|
||||
Friend WithEvents gMonTraySetupTags As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonSetupTags As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents lblStatus1 As Label
|
||||
@@ -578,4 +613,12 @@ Partial Class frmMain
|
||||
Friend WithEvents pbTime As System.Windows.Forms.PictureBox
|
||||
Friend WithEvents gMonTrayToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents gMonToolsLog As ToolStripMenuItem
|
||||
Friend WithEvents gMonLogClear As ToolStripMenuItem
|
||||
Friend WithEvents gMonLogSave As ToolStripMenuItem
|
||||
Friend WithEvents gMonTrayToolsLog As ToolStripMenuItem
|
||||
Friend WithEvents gMonTrayLogClear As ToolStripMenuItem
|
||||
Friend WithEvents gMonTrayLogSave As ToolStripMenuItem
|
||||
Friend WithEvents gMonStripAdminButton As System.Windows.Forms.ToolStripStatusLabel
|
||||
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripStatusLabel
|
||||
End Class
|
||||
|
||||
+287
-75
@@ -23,11 +23,15 @@ Public Class frmMain
|
||||
Private eCurrentOperation As eOperation = eOperation.None
|
||||
Private bCancelledByUser As Boolean = False
|
||||
Private bShutdown As Boolean = False
|
||||
Private bInitFail As Boolean = False
|
||||
Private bPathDetectionFailure As Boolean = False
|
||||
Private sPathDetectionError As String = String.Empty
|
||||
Private bMenuEnabled As Boolean = True
|
||||
Private bLockdown As Boolean = True
|
||||
Private bFirstRun As Boolean = False
|
||||
Private bProcessIsAdmin As Boolean = False
|
||||
Private bLogToggle As Boolean = False
|
||||
Private bShowToggle As Boolean = True
|
||||
Private bAllowIcon As Boolean = False
|
||||
Private bAllowDetails As Boolean = False
|
||||
Private oPriorImage As Image
|
||||
@@ -35,6 +39,9 @@ Public Class frmMain
|
||||
Private sPriorCompany As String
|
||||
Private sPriorVersion As String
|
||||
|
||||
'Developer Debug Flags
|
||||
Private bProcessDebugMode As Boolean = False
|
||||
|
||||
WithEvents oFileWatcher As New System.IO.FileSystemWatcher
|
||||
WithEvents tmScanTimer As New Timer
|
||||
|
||||
@@ -60,7 +67,7 @@ Public Class frmMain
|
||||
Else
|
||||
Dim sPattern As String = "h:mm tt"
|
||||
lblLastActionTitle.Visible = True
|
||||
lblLastAction.Text = sMessage & " at " & TimeOfDay.ToString(sPattern)
|
||||
lblLastAction.Text = sMessage.TrimEnd(".") & " " & mgrCommon.FormatString(frmMain_AtTime, TimeOfDay.ToString(sPattern))
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -92,7 +99,7 @@ Public Class frmMain
|
||||
If oGame.AbsolutePath Then
|
||||
sStatus2 = oGame.Path
|
||||
Else
|
||||
sStatus2 = oGame.ProcessPath & "\" & oGame.Path
|
||||
sStatus2 = oGame.ProcessPath & System.IO.Path.DirectorySeparatorChar & oGame.Path
|
||||
End If
|
||||
sStatus3 = String.Empty
|
||||
|
||||
@@ -141,38 +148,41 @@ Public Class frmMain
|
||||
End Sub
|
||||
|
||||
Private Sub ExecuteBackup(ByVal oBackupList As List(Of clsGame))
|
||||
'Init Backup Settings
|
||||
oBackup.Settings = oSettings
|
||||
oBackup.DoBackup(oBackupList)
|
||||
OperationEnded()
|
||||
End Sub
|
||||
|
||||
Private Sub ExecuteRestore(ByVal oRestoreList As List(Of clsBackup))
|
||||
'Init Restore Settings
|
||||
oRestore.Settings = oSettings
|
||||
oRestore.DoRestore(oRestoreList)
|
||||
OperationEnded()
|
||||
End Sub
|
||||
|
||||
Private Sub RunRestore(ByVal oRestoreList As List(Of clsGame))
|
||||
Dim oBackupData As SortedList = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
Private Sub RunRestore(ByVal oRestoreList As Hashtable)
|
||||
Dim oGame As clsGame
|
||||
Dim oReadyList As New List(Of clsBackup)
|
||||
Dim oRestoreInfo As clsBackup
|
||||
Dim bTriggerReload As Boolean = False
|
||||
|
||||
Dim bPathVerified As Boolean
|
||||
eCurrentOperation = eOperation.Restore
|
||||
OperationStarted()
|
||||
|
||||
'Build Restore List
|
||||
For Each oGame In oRestoreList
|
||||
oRestoreInfo = oBackupData(oGame.Name)
|
||||
For Each de As DictionaryEntry In oRestoreList
|
||||
bPathVerified = False
|
||||
oGame = DirectCast(de.Key, clsGame)
|
||||
oRestoreInfo = DirectCast(de.Value, clsBackup)
|
||||
|
||||
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
|
||||
oReadyList.Add(oRestoreInfo)
|
||||
bPathVerified = True
|
||||
Else
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True)
|
||||
End If
|
||||
|
||||
If bPathVerified Then
|
||||
If oRestore.CheckRestorePrereq(oRestoreInfo) Then
|
||||
oReadyList.Add(oRestoreInfo)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
'Reload the monitor list if any game data was changed during the path checks
|
||||
@@ -192,6 +202,7 @@ Public Class frmMain
|
||||
Private Sub RunManualBackup(ByVal oBackupList As List(Of clsGame))
|
||||
Dim oGame As clsGame
|
||||
Dim bNoAuto As Boolean
|
||||
Dim bPathVerified As Boolean
|
||||
Dim oReadyList As New List(Of clsGame)
|
||||
|
||||
eCurrentOperation = eOperation.Backup
|
||||
@@ -200,6 +211,7 @@ Public Class frmMain
|
||||
'Build Backup List
|
||||
For Each oGame In oBackupList
|
||||
bNoAuto = False
|
||||
bPathVerified = False
|
||||
gMonStripStatusButton.Enabled = False
|
||||
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False)
|
||||
@@ -211,13 +223,19 @@ Public Class frmMain
|
||||
End If
|
||||
|
||||
If oGame.ProcessPath <> String.Empty Then
|
||||
oReadyList.Add(oGame)
|
||||
bPathVerified = True
|
||||
Else
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupUnknownPath, oGame.Name), True, ToolTipIcon.Error, True)
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupUnknownPath, oGame.Name), False, ToolTipIcon.Error, True)
|
||||
End If
|
||||
Else
|
||||
bPathVerified = True
|
||||
End If
|
||||
|
||||
If bPathVerified Then
|
||||
If oBackup.CheckBackupPrereq(oGame) Then
|
||||
oReadyList.Add(oGame)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
'Run backups
|
||||
@@ -267,13 +285,13 @@ Public Class frmMain
|
||||
eCurrentOperation = eOperation.Backup
|
||||
OperationStarted(False)
|
||||
|
||||
If oProcess.GameInfo.MonitorOnly = False Then
|
||||
If SupressBackup() Then
|
||||
bDoBackup = False
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.Name), False)
|
||||
SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.CroppedName))
|
||||
OperationEnded()
|
||||
Else
|
||||
If oProcess.GameInfo.MonitorOnly = False Then
|
||||
If oSettings.DisableConfirmation Then
|
||||
bDoBackup = True
|
||||
Else
|
||||
@@ -286,21 +304,26 @@ Public Class frmMain
|
||||
OperationEnded()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
bDoBackup = False
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.Name), False)
|
||||
SetLastAction(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.CroppedName))
|
||||
OperationEnded()
|
||||
End If
|
||||
End If
|
||||
|
||||
If bDoBackup Then
|
||||
If Not oBackup.CheckBackupPrereq(oProcess.GameInfo) Then
|
||||
SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupCancel, oProcess.GameInfo.CroppedName))
|
||||
OperationEnded()
|
||||
Else
|
||||
'Run the backup
|
||||
oReadyList.Add(oProcess.GameInfo)
|
||||
Dim trd As New System.Threading.Thread(AddressOf ExecuteBackup)
|
||||
trd.IsBackground = True
|
||||
trd.Start(oReadyList)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub CheckRestore()
|
||||
@@ -328,8 +351,16 @@ Public Class frmMain
|
||||
Dim fbBrowser As New OpenFileDialog
|
||||
|
||||
fbBrowser.Title = mgrCommon.FormatString(frmMain_ChooseIcon, oProcess.GameInfo.CroppedName)
|
||||
|
||||
'Unix Handler
|
||||
If Not mgrCommon.IsUnix Then
|
||||
fbBrowser.DefaultExt = "ico"
|
||||
fbBrowser.Filter = frmMain_IconFilter
|
||||
Else
|
||||
fbBrowser.DefaultExt = "png"
|
||||
fbBrowser.Filter = frmMain_PNGFilter
|
||||
End If
|
||||
|
||||
Try
|
||||
fbBrowser.InitialDirectory = IO.Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
|
||||
Catch ex As Exception
|
||||
@@ -525,7 +556,7 @@ Public Class frmMain
|
||||
End If
|
||||
|
||||
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
|
||||
UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours)
|
||||
End Sub
|
||||
@@ -545,12 +576,93 @@ Public Class frmMain
|
||||
End Function
|
||||
|
||||
'Functions handling the opening of other windows
|
||||
Private Sub OpenDevConsole()
|
||||
Dim sFullCommand As String
|
||||
Dim sMainCommand As String
|
||||
Dim sCommand As String()
|
||||
Dim sDelimters As String = " :"
|
||||
Dim cDelimters As Char() = sDelimters.ToCharArray
|
||||
|
||||
sFullCommand = InputBox(frmMain_EnterCommand, frmMain_DeveloperConsole)
|
||||
|
||||
If sFullCommand <> String.Empty Then
|
||||
sMainCommand = sFullCommand.Split(cDelimters, 2)(0)
|
||||
|
||||
'Parse Command
|
||||
Select Case sMainCommand.ToLower
|
||||
Case "sql"
|
||||
'Run a SQL command directly on any database
|
||||
'Usage: SQL {Local or Remote} SQL Command
|
||||
|
||||
Dim oDatabase As mgrSQLite
|
||||
Dim bSuccess As Boolean
|
||||
|
||||
sCommand = sFullCommand.Split(cDelimters, 3)
|
||||
|
||||
'Check Paramters
|
||||
If sCommand.Length < 3 Then
|
||||
mgrCommon.ShowMessage(frmMain_ErrorMissingParams, sCommand(0), MsgBoxStyle.Exclamation)
|
||||
Exit Select
|
||||
End If
|
||||
|
||||
If sCommand(1).ToLower = "local" Then
|
||||
oDatabase = New mgrSQLite(mgrSQLite.Database.Local)
|
||||
ElseIf sCommand(1).ToLower = "remote" Then
|
||||
oDatabase = New mgrSQLite(mgrSQLite.Database.Remote)
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmMain_ErrorCommandBadParam, New String() {sCommand(1), sCommand(0)}, MsgBoxStyle.Exclamation)
|
||||
Exit Select
|
||||
End If
|
||||
|
||||
bSuccess = oDatabase.RunParamQuery(sCommand(2), New Hashtable)
|
||||
|
||||
If bSuccess Then
|
||||
mgrCommon.ShowMessage(frmMain_CommandSucess, MsgBoxStyle.Exclamation)
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmMain_CommandFail, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
|
||||
Case "debug"
|
||||
'Enable or disable various debug modes
|
||||
'Usage: DEBUG Mode {Enable or Disable}
|
||||
|
||||
sCommand = sFullCommand.Split(cDelimters, 3)
|
||||
|
||||
Dim bDebugEnable As Boolean = False
|
||||
|
||||
'Check Paramters
|
||||
If sCommand.Length < 3 Then
|
||||
mgrCommon.ShowMessage(frmMain_ErrorMissingParams, sCommand(0), MsgBoxStyle.Exclamation)
|
||||
Exit Select
|
||||
End If
|
||||
|
||||
If sCommand(2).ToLower = "enable" Then
|
||||
bDebugEnable = True
|
||||
ElseIf sCommand(2).ToLower = "disable" Then
|
||||
bDebugEnable = False
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmMain_ErrorCommandBadParam, New String() {sCommand(1), sCommand(0)}, MsgBoxStyle.Exclamation)
|
||||
Exit Select
|
||||
End If
|
||||
|
||||
Select Case sCommand(1).ToLower
|
||||
Case "process"
|
||||
bProcessDebugMode = bDebugEnable
|
||||
mgrCommon.ShowMessage(frmMain_CommandSucess, MsgBoxStyle.Exclamation)
|
||||
End Select
|
||||
Case Else
|
||||
mgrCommon.ShowMessage(frmMain_ErrorCommandInvalid, sMainCommand, MsgBoxStyle.Exclamation)
|
||||
End Select
|
||||
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub OpenAbout()
|
||||
Dim iProcessType As System.Reflection.ProcessorArchitecture = System.Reflection.AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
|
||||
Dim sVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor
|
||||
Dim sProcessType = [Enum].GetName(GetType(System.Reflection.ProcessorArchitecture), iProcessType)
|
||||
Dim sRevision As String = My.Application.Info.Version.Build & "." & My.Application.Info.Version.Revision
|
||||
Dim sConstCopyright As String = Chr(169) & App_Copyright
|
||||
Dim sConstCopyright As String = Chr(169) & mgrCommon.FormatString(App_Copyright, Now.Year.ToString)
|
||||
|
||||
mgrCommon.ShowMessage(frmMain_About, New String() {sVersion, sProcessType, sRevision, sConstCopyright}, MsgBoxStyle.Information)
|
||||
End Sub
|
||||
@@ -559,7 +671,7 @@ Public Class frmMain
|
||||
Dim frm As New frmTags
|
||||
PauseScan()
|
||||
frm.ShowDialog()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
ResumeScan()
|
||||
End Sub
|
||||
|
||||
@@ -570,7 +682,7 @@ Public Class frmMain
|
||||
frm.PendingRestores = bPendingRestores
|
||||
frm.ShowDialog()
|
||||
LoadGameSettings()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
ResumeScan()
|
||||
|
||||
'Handle backup trigger
|
||||
@@ -590,6 +702,8 @@ Public Class frmMain
|
||||
PauseScan()
|
||||
If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
|
||||
oSettings = frm.Settings
|
||||
oBackup.Settings = oSettings
|
||||
oRestore.Settings = oSettings
|
||||
'Set Remote Database Location
|
||||
mgrPath.RemoteDatabaseLocation = oSettings.BackupFolder
|
||||
SetupSyncWatcher()
|
||||
@@ -604,7 +718,7 @@ Public Class frmMain
|
||||
frm.GameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
|
||||
frm.ShowDialog()
|
||||
LoadGameSettings()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
ResumeScan()
|
||||
End Sub
|
||||
|
||||
@@ -613,7 +727,7 @@ Public Class frmMain
|
||||
PauseScan()
|
||||
frm.ShowDialog()
|
||||
mgrPath.CustomVariablesReload()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
ResumeScan()
|
||||
End Sub
|
||||
|
||||
@@ -684,7 +798,7 @@ Public Class frmMain
|
||||
|
||||
Private Sub SyncGameSettings()
|
||||
'Sync Monitor List
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(False)
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
|
||||
End Sub
|
||||
|
||||
Private Sub LocalDatabaseCheck()
|
||||
@@ -699,11 +813,11 @@ Public Class frmMain
|
||||
|
||||
Private Sub LoadAndVerify()
|
||||
|
||||
'The application cannot continue if this fails
|
||||
If Not oBackup.CheckForUtilities(mgrPath.Utility7zLocation) Then
|
||||
'If the default utility is missing we cannot continue
|
||||
If Not oBackup.CheckForUtilities(mgrPath.Default7zLocation) Then
|
||||
mgrCommon.ShowMessage(frmMain_Error7zip, MsgBoxStyle.Critical)
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
bInitFail = True
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
'Local Database Check
|
||||
@@ -712,12 +826,14 @@ Public Class frmMain
|
||||
|
||||
'Load Settings
|
||||
oSettings.LoadSettings()
|
||||
oBackup.Settings = oSettings
|
||||
oRestore.Settings = oSettings
|
||||
|
||||
If Not bFirstRun Then
|
||||
'The application cannot continue if this fails
|
||||
If Not VerifyBackupLocation() Then
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
bInitFail = True
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
'Remote Database Check
|
||||
@@ -741,20 +857,34 @@ Public Class frmMain
|
||||
End If
|
||||
End If
|
||||
|
||||
'Check for any custom 7z utility and display a warning if it's missing
|
||||
If oSettings.Custom7zLocation <> String.Empty Then
|
||||
If Not oBackup.CheckForUtilities(oSettings.Custom7zLocation) Then
|
||||
mgrCommon.ShowMessage(frmMain_Error7zCustom, oSettings.Custom7zLocation, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
'Functions that handle buttons, menus and other GUI features on this form
|
||||
Private Sub ToggleLog()
|
||||
If bLogToggle = False Then
|
||||
txtLog.Visible = True
|
||||
Me.Size = New System.Drawing.Size(540, 425)
|
||||
|
||||
'Unix Handler
|
||||
If mgrCommon.IsUnix Then
|
||||
Me.Size = New System.Drawing.Size(Me.Size.Width, 440)
|
||||
Else
|
||||
Me.Size = New System.Drawing.Size(Me.Size.Width, 425)
|
||||
End If
|
||||
|
||||
bLogToggle = True
|
||||
btnLogToggle.Text = frmMain_btnToggleLog_Hide
|
||||
txtLog.Select(txtLog.TextLength, 0)
|
||||
txtLog.ScrollToCaret()
|
||||
Else
|
||||
txtLog.Visible = False
|
||||
Me.Size = New System.Drawing.Size(540, 245)
|
||||
Me.Size = New System.Drawing.Size(Me.Size.Width, 245)
|
||||
bLogToggle = False
|
||||
btnLogToggle.Text = frmMain_btnToggleLog_Show
|
||||
End If
|
||||
@@ -762,15 +892,15 @@ Public Class frmMain
|
||||
|
||||
Private Sub ToggleState()
|
||||
'Toggle State with Tray Clicks
|
||||
If Me.WindowState = FormWindowState.Minimized Then
|
||||
If Not bShowToggle Then
|
||||
bShowToggle = True
|
||||
Me.Visible = True
|
||||
Me.ShowInTaskbar = True
|
||||
Me.WindowState = FormWindowState.Normal
|
||||
Me.Focus()
|
||||
Else
|
||||
bShowToggle = False
|
||||
Me.Visible = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.WindowState = FormWindowState.Minimized
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -920,9 +1050,17 @@ Public Class frmMain
|
||||
Dim d As New UpdateLogCallBack(AddressOf UpdateLog)
|
||||
Me.Invoke(d, New Object() {sLogUpdate, bTrayUpdate, objIcon, bTimeStamp})
|
||||
Else
|
||||
'Clear the log if we are approaching the limit
|
||||
If txtLog.TextLength > 16770000 Then
|
||||
txtLog.Text = String.Empty
|
||||
'Auto save and/or clear the log if we are approaching the limit
|
||||
If txtLog.TextLength > 262144 Then
|
||||
If oSettings.AutoSaveLog Then
|
||||
Dim sLogFile As String = mgrPath.LogFileLocation
|
||||
mgrCommon.SaveText(txtLog.Text, sLogFile)
|
||||
txtLog.Clear()
|
||||
txtLog.AppendText("[" & Date.Now & "] " & mgrCommon.FormatString(frmMain_LogAutoSave, sLogFile))
|
||||
Else
|
||||
txtLog.Clear()
|
||||
txtLog.AppendText("[" & Date.Now & "] " & frmMain_LogAutoClear)
|
||||
End If
|
||||
End If
|
||||
|
||||
'We shouldn't allow any one message to be greater than 255 characters if that same message is pushed to the tray icon
|
||||
@@ -949,6 +1087,22 @@ Public Class frmMain
|
||||
Application.DoEvents()
|
||||
End Sub
|
||||
|
||||
Private Sub ClearLog()
|
||||
If mgrCommon.ShowMessage(frmMain_ConfirmLogClear, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
txtLog.Clear()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SaveLog()
|
||||
Dim sLocation As String
|
||||
|
||||
sLocation = mgrCommon.SaveFileBrowser(frmMain_ChooseLogFile, "txt", frmMain_Text, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmMain_DefaultLogFileName & " " & Date.Now.ToString("dd-MMM-yyyy"))
|
||||
|
||||
If sLocation <> String.Empty Then
|
||||
mgrCommon.SaveText(txtLog.Text, sLocation)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
'Set Form Name
|
||||
Me.Name = App_NameLong
|
||||
@@ -966,6 +1120,9 @@ Public Class frmMain
|
||||
gMonTools.Text = frmMain_gMonTools
|
||||
gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan
|
||||
gMonToolsCompact.Text = frmMain_gMonToolsCompact
|
||||
gMonToolsLog.Text = frmMain_gMonToolsLog
|
||||
gMonLogClear.Text = frmMain_gMonLogClear
|
||||
gMonLogSave.Text = frmMain_gMonLogSave
|
||||
gMonHelp.Text = frmMain_gMonHelp
|
||||
gMonHelpWebSite.Text = frmMain_gMonHelpWebSite
|
||||
gMonHelpManual.Text = frmMain_gMonHelpManual
|
||||
@@ -984,6 +1141,9 @@ Public Class frmMain
|
||||
gMonTrayTools.Text = frmMain_gMonTools
|
||||
gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan
|
||||
gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact
|
||||
gMonTrayToolsLog.Text = frmMain_gMonToolsLog
|
||||
gMonTrayLogClear.Text = frmMain_gMonLogClear
|
||||
gMonTrayLogSave.Text = frmMain_gMonLogSave
|
||||
gMonTrayExit.Text = frmMain_gMonFileExit
|
||||
|
||||
'Set Form Text
|
||||
@@ -1006,7 +1166,7 @@ Public Class frmMain
|
||||
lblLastAction.Text = String.Empty
|
||||
pbTime.SizeMode = PictureBoxSizeMode.AutoSize
|
||||
pbTime.Image = Icon_Clock
|
||||
Me.Size = New System.Drawing.Size(540, 245)
|
||||
Me.Size = New System.Drawing.Size(Me.Size.Width, 245)
|
||||
AddHandler mgrMonitorList.UpdateLog, AddressOf UpdateLog
|
||||
ResetGameInfo()
|
||||
End Sub
|
||||
@@ -1088,7 +1248,7 @@ Public Class frmMain
|
||||
oSettings.BackupFolder = sBackupPath
|
||||
oSettings.SaveSettings()
|
||||
oSettings.LoadSettings()
|
||||
If oSettings.Sync Then mgrMonitorList.HandleBackupLocationChange()
|
||||
If oSettings.Sync Then mgrMonitorList.HandleBackupLocationChange(oSettings)
|
||||
End If
|
||||
Return True
|
||||
Else
|
||||
@@ -1098,8 +1258,8 @@ Public Class frmMain
|
||||
|
||||
Private Sub VerifyGameDataPath()
|
||||
'Important: This function cannot access mgrPath for settings, as that will trigger a database creation and destroy the reason for this function
|
||||
Dim sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\gbm"
|
||||
Dim sDBLocation As String = sSettingsRoot & "\gbm.s3db"
|
||||
Dim sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "/gbm"
|
||||
Dim sDBLocation As String = sSettingsRoot & "/gbm.s3db"
|
||||
|
||||
If Not IO.Directory.Exists(sSettingsRoot) Then
|
||||
Try
|
||||
@@ -1171,6 +1331,8 @@ Public Class frmMain
|
||||
|
||||
'Functions to handle other features
|
||||
Private Sub RestartAsAdmin()
|
||||
'Unix Hanlder
|
||||
If Not mgrCommon.IsUnix Then
|
||||
If mgrCommon.IsElevated Then
|
||||
mgrCommon.ShowMessage(frmMain_ErrorAlreadyAdmin, MsgBoxStyle.Information)
|
||||
Else
|
||||
@@ -1180,6 +1342,9 @@ Public Class frmMain
|
||||
ShutdownApp(False)
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
mgrCommon.ShowMessage(App_ErrorUnixNotAvailable, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub CleanLocalManifest()
|
||||
@@ -1294,6 +1459,14 @@ Public Class frmMain
|
||||
OpenCheckforUpdates()
|
||||
End Sub
|
||||
|
||||
Private Sub gMonLogClear_Click(sender As Object, e As EventArgs) Handles gMonLogClear.Click, gMonTrayLogClear.Click
|
||||
ClearLog()
|
||||
End Sub
|
||||
|
||||
Private Sub gMonLogSave_Click(sender As Object, e As EventArgs) Handles gMonLogSave.Click, gMonTrayLogSave.Click
|
||||
SaveLog()
|
||||
End Sub
|
||||
|
||||
Private Sub gMonNotification_Click(sender As Object, e As EventArgs) Handles gMonNotification.Click, gMonTrayNotification.Click
|
||||
gMonNotification.Visible = False
|
||||
gMonTrayNotification.Visible = False
|
||||
@@ -1304,7 +1477,7 @@ Public Class frmMain
|
||||
ToggleLog()
|
||||
End Sub
|
||||
|
||||
Private Sub gMonStripSplitButton_ButtonClick(sender As Object, e As EventArgs) Handles gMonStripStatusButton.ButtonClick
|
||||
Private Sub gMonStripSplitStatusButton_ButtonClick(sender As Object, e As EventArgs) Handles gMonStripStatusButton.Click
|
||||
ScanToggle()
|
||||
End Sub
|
||||
|
||||
@@ -1315,9 +1488,9 @@ Public Class frmMain
|
||||
End Sub
|
||||
|
||||
Private Sub gMonTray_BalloonTipClicked(sender As System.Object, e As System.EventArgs) Handles gMonTray.BalloonTipClicked
|
||||
bShowToggle = True
|
||||
Me.Visible = True
|
||||
Me.ShowInTaskbar = True
|
||||
Me.WindowState = FormWindowState.Normal
|
||||
Me.Focus()
|
||||
End Sub
|
||||
|
||||
@@ -1325,7 +1498,7 @@ Public Class frmMain
|
||||
OperationCancel()
|
||||
End Sub
|
||||
|
||||
Private Sub gMonStripAdminButton_ButtonClick(sender As Object, e As EventArgs) Handles gMonStripAdminButton.ButtonClick
|
||||
Private Sub gMonStripAdminButton_ButtonClick(sender As Object, e As EventArgs) Handles gMonStripAdminButton.Click
|
||||
RestartAsAdmin()
|
||||
End Sub
|
||||
|
||||
@@ -1335,23 +1508,29 @@ Public Class frmMain
|
||||
End Sub
|
||||
|
||||
Private Sub Main_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
|
||||
'Intercept Exit & Minimize
|
||||
'Unix Handler
|
||||
If mgrCommon.IsUnix And Not bShutdown Then
|
||||
ShutdownApp()
|
||||
End If
|
||||
|
||||
'Intercept Exit
|
||||
If bShutdown = False Then
|
||||
e.Cancel = True
|
||||
If Not mgrCommon.IsUnix Then
|
||||
bShowToggle = False
|
||||
Me.Visible = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.WindowState = FormWindowState.Minimized
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
|
||||
Dim bNeedsPath As Boolean = False
|
||||
Dim bContinue As Boolean = True
|
||||
Dim bAskForRestart As Boolean = False
|
||||
Dim iErrorCode As Integer = 0
|
||||
Dim sErrorMessage As String = String.Empty
|
||||
|
||||
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode) Then
|
||||
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode, bProcessDebugMode) Then
|
||||
PauseScan()
|
||||
|
||||
If bNeedsPath Then
|
||||
@@ -1359,42 +1538,27 @@ Public Class frmMain
|
||||
If iErrorCode = 5 Then
|
||||
If oProcess.Duplicate Then
|
||||
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMultiAdmin)
|
||||
mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation)
|
||||
bAskForRestart = True
|
||||
UpdateLog(sErrorMessage, True, ToolTipIcon.Warning, True)
|
||||
Else
|
||||
If Not CheckForSavedPath() Then
|
||||
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorAdminBackup, oProcess.GameInfo.Name)
|
||||
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sErrorMessage)
|
||||
If oProcess.GameInfo.ProcessPath <> String.Empty Then
|
||||
'Update and reload
|
||||
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
|
||||
LoadGameSettings()
|
||||
bContinue = True
|
||||
bPathDetectionFailure = True
|
||||
sPathDetectionError = mgrCommon.FormatString(frmMain_ErrorAdminBackup, oProcess.GameInfo.Name)
|
||||
End If
|
||||
Else
|
||||
bContinue = True
|
||||
End If
|
||||
End If
|
||||
ElseIf iErrorCode = 299 Then
|
||||
If oProcess.Duplicate Then
|
||||
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMulti64)
|
||||
mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation)
|
||||
UpdateLog(sErrorMessage, True, ToolTipIcon.Warning, True)
|
||||
Else
|
||||
If Not CheckForSavedPath() Then
|
||||
sErrorMessage = mgrCommon.FormatString(frmMain_Error64Backup, oProcess.GameInfo.Name)
|
||||
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sErrorMessage)
|
||||
If oProcess.GameInfo.ProcessPath <> String.Empty Then
|
||||
'Update and reload
|
||||
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
|
||||
LoadGameSettings()
|
||||
bContinue = True
|
||||
bPathDetectionFailure = True
|
||||
sPathDetectionError = mgrCommon.FormatString(frmMain_Error64Backup, oProcess.GameInfo.Name)
|
||||
End If
|
||||
Else
|
||||
bContinue = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
If bContinue = True Then
|
||||
CheckForSavedDuplicate()
|
||||
@@ -1411,9 +1575,6 @@ Public Class frmMain
|
||||
bwMonitor.RunWorkerAsync()
|
||||
Else
|
||||
StopScan()
|
||||
If bAskForRestart Then
|
||||
RestartAsAdmin()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
@@ -1434,34 +1595,61 @@ Public Class frmMain
|
||||
End Sub
|
||||
|
||||
Private Sub bwMain_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMonitor.RunWorkerCompleted
|
||||
Dim bContinue As Boolean = True
|
||||
oProcess.EndTime = Now
|
||||
|
||||
If Not bCancelledByUser Then
|
||||
'Check if we failed to detect the game path
|
||||
If bPathDetectionFailure Then
|
||||
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sPathDetectionError)
|
||||
If oProcess.GameInfo.ProcessPath <> String.Empty Then
|
||||
'Update and reload
|
||||
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
|
||||
LoadGameSettings()
|
||||
Else
|
||||
bContinue = False
|
||||
If oSettings.TimeTracking Then HandleTimeSpent()
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupUnknownPath, oProcess.GameInfo.Name), False)
|
||||
oProcess.GameInfo = Nothing
|
||||
ResetGameInfo()
|
||||
ResumeScan()
|
||||
End If
|
||||
End If
|
||||
|
||||
If bContinue Then
|
||||
If DoMultiGameCheck() Then
|
||||
UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False)
|
||||
If oSettings.TimeTracking Then HandleTimeSpent()
|
||||
RunBackup()
|
||||
Else
|
||||
UpdateLog(frmMain_UnknownGameEnded, False)
|
||||
oProcess.GameInfo = Nothing
|
||||
ResetGameInfo()
|
||||
ResumeScan()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
'Reset globals
|
||||
bPathDetectionFailure = False
|
||||
sPathDetectionError = String.Empty
|
||||
bCancelledByUser = False
|
||||
oProcess.StartTime = Now : oProcess.EndTime = Now
|
||||
End Sub
|
||||
|
||||
Private Sub Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
|
||||
'Init
|
||||
Try
|
||||
SetForm()
|
||||
VerifyGameDataPath()
|
||||
LoadAndVerify()
|
||||
If Not bInitFail Then
|
||||
VerifyCustomPathVariables()
|
||||
|
||||
If oSettings.StartToTray Then
|
||||
If oSettings.StartToTray And Not mgrCommon.IsUnix Then
|
||||
bShowToggle = False
|
||||
Me.Visible = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.WindowState = FormWindowState.Minimized
|
||||
End If
|
||||
|
||||
If oSettings.MonitorOnStartup Then
|
||||
@@ -1473,10 +1661,27 @@ Public Class frmMain
|
||||
HandleScan()
|
||||
CheckForNewBackups()
|
||||
|
||||
'Unix Handler
|
||||
If mgrCommon.IsUnix Then
|
||||
Me.MinimizeBox = True
|
||||
Else
|
||||
Me.gMonTray.Visible = True
|
||||
End If
|
||||
End If
|
||||
Catch ex As Exception
|
||||
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
bInitFail = True
|
||||
End If
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
|
||||
If bFirstRun Then
|
||||
If bInitFail Then
|
||||
bShutdown = True
|
||||
Me.Close()
|
||||
End If
|
||||
|
||||
If bFirstRun And Not bShutdown Then
|
||||
OpenStartupWizard()
|
||||
End If
|
||||
End Sub
|
||||
@@ -1484,4 +1689,11 @@ Public Class frmMain
|
||||
Private Sub txtGameInfo_Enter(sender As Object, e As EventArgs)
|
||||
btnLogToggle.Focus()
|
||||
End Sub
|
||||
|
||||
Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
|
||||
If e.KeyCode = Keys.Oemtilde AndAlso e.Modifiers = Keys.Control Then
|
||||
OpenDevConsole()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
Generated
+352
-118
@@ -24,30 +24,55 @@ Partial Class frmSettings
|
||||
Private Sub InitializeComponent()
|
||||
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
|
||||
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
|
||||
Me.grpGeneral = New System.Windows.Forms.GroupBox()
|
||||
Me.chkTimeTracking = New System.Windows.Forms.CheckBox()
|
||||
Me.grpStartup = New System.Windows.Forms.GroupBox()
|
||||
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
|
||||
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
|
||||
Me.chkAutoSaveLog = New System.Windows.Forms.CheckBox()
|
||||
Me.btnOptionalFields = New System.Windows.Forms.Button()
|
||||
Me.chkTimeTracking = New System.Windows.Forms.CheckBox()
|
||||
Me.chkSync = New System.Windows.Forms.CheckBox()
|
||||
Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox()
|
||||
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
|
||||
Me.grpPaths = New System.Windows.Forms.GroupBox()
|
||||
Me.grpFolderOptions = New System.Windows.Forms.GroupBox()
|
||||
Me.btnBackupFolder = New System.Windows.Forms.Button()
|
||||
Me.lblBackupFolder = New System.Windows.Forms.Label()
|
||||
Me.txtBackupFolder = New System.Windows.Forms.TextBox()
|
||||
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
|
||||
Me.btnSave = New System.Windows.Forms.Button()
|
||||
Me.btnCancel = New System.Windows.Forms.Button()
|
||||
Me.grpBackup = New System.Windows.Forms.GroupBox()
|
||||
Me.lblMinutes = New System.Windows.Forms.Label()
|
||||
Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
|
||||
Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
|
||||
Me.chkCheckSum = New System.Windows.Forms.CheckBox()
|
||||
Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox()
|
||||
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
|
||||
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
|
||||
Me.grpGeneral.SuspendLayout()
|
||||
Me.grpPaths.SuspendLayout()
|
||||
Me.grpBackup.SuspendLayout()
|
||||
Me.grp7zGeneral = New System.Windows.Forms.GroupBox()
|
||||
Me.cboCompression = New System.Windows.Forms.ComboBox()
|
||||
Me.lblCompression = New System.Windows.Forms.Label()
|
||||
Me.btn7zLocation = New System.Windows.Forms.Button()
|
||||
Me.txt7zLocation = New System.Windows.Forms.TextBox()
|
||||
Me.lblLocation = New System.Windows.Forms.Label()
|
||||
Me.txt7zArguments = New System.Windows.Forms.TextBox()
|
||||
Me.lblArguments = New System.Windows.Forms.Label()
|
||||
Me.lbl7zCopyright = New System.Windows.Forms.Label()
|
||||
Me.lbl7zProduct = New System.Windows.Forms.Label()
|
||||
Me.btnDefaults = New System.Windows.Forms.Button()
|
||||
Me.pnlBackup = New System.Windows.Forms.Panel()
|
||||
Me.pnl7z = New System.Windows.Forms.Panel()
|
||||
Me.grp7zAdvanced = New System.Windows.Forms.GroupBox()
|
||||
Me.grp7zInformation = New System.Windows.Forms.GroupBox()
|
||||
Me.pnlGeneral = New System.Windows.Forms.Panel()
|
||||
Me.grpGameData = New System.Windows.Forms.GroupBox()
|
||||
Me.lstSettings = New System.Windows.Forms.ListBox()
|
||||
Me.grpStartup.SuspendLayout()
|
||||
Me.grpFolderOptions.SuspendLayout()
|
||||
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.grp7zGeneral.SuspendLayout()
|
||||
Me.pnlBackup.SuspendLayout()
|
||||
Me.pnl7z.SuspendLayout()
|
||||
Me.grp7zAdvanced.SuspendLayout()
|
||||
Me.grp7zInformation.SuspendLayout()
|
||||
Me.pnlGeneral.SuspendLayout()
|
||||
Me.grpGameData.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'chkMonitorOnStartup
|
||||
@@ -63,37 +88,24 @@ Partial Class frmSettings
|
||||
'chkBackupConfirm
|
||||
'
|
||||
Me.chkBackupConfirm.AutoSize = True
|
||||
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 42)
|
||||
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 88)
|
||||
Me.chkBackupConfirm.Name = "chkBackupConfirm"
|
||||
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
|
||||
Me.chkBackupConfirm.TabIndex = 1
|
||||
Me.chkBackupConfirm.Text = "Disable backup confirmation"
|
||||
Me.chkBackupConfirm.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpGeneral
|
||||
'grpStartup
|
||||
'
|
||||
Me.grpGeneral.Controls.Add(Me.chkTimeTracking)
|
||||
Me.grpGeneral.Controls.Add(Me.chkStartWindows)
|
||||
Me.grpGeneral.Controls.Add(Me.chkSync)
|
||||
Me.grpGeneral.Controls.Add(Me.chkShowDetectionTips)
|
||||
Me.grpGeneral.Controls.Add(Me.chkStartToTray)
|
||||
Me.grpGeneral.Controls.Add(Me.chkMonitorOnStartup)
|
||||
Me.grpGeneral.Location = New System.Drawing.Point(12, 12)
|
||||
Me.grpGeneral.Name = "grpGeneral"
|
||||
Me.grpGeneral.Size = New System.Drawing.Size(360, 165)
|
||||
Me.grpGeneral.TabIndex = 0
|
||||
Me.grpGeneral.TabStop = False
|
||||
Me.grpGeneral.Text = "General"
|
||||
'
|
||||
'chkTimeTracking
|
||||
'
|
||||
Me.chkTimeTracking.AutoSize = True
|
||||
Me.chkTimeTracking.Location = New System.Drawing.Point(6, 111)
|
||||
Me.chkTimeTracking.Name = "chkTimeTracking"
|
||||
Me.chkTimeTracking.Size = New System.Drawing.Size(122, 17)
|
||||
Me.chkTimeTracking.TabIndex = 4
|
||||
Me.chkTimeTracking.Text = "Enable time tracking"
|
||||
Me.chkTimeTracking.UseVisualStyleBackColor = True
|
||||
Me.grpStartup.Controls.Add(Me.chkStartWindows)
|
||||
Me.grpStartup.Controls.Add(Me.chkStartToTray)
|
||||
Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
|
||||
Me.grpStartup.Location = New System.Drawing.Point(6, 12)
|
||||
Me.grpStartup.Name = "grpStartup"
|
||||
Me.grpStartup.Size = New System.Drawing.Size(354, 90)
|
||||
Me.grpStartup.TabIndex = 0
|
||||
Me.grpStartup.TabStop = False
|
||||
Me.grpStartup.Text = "Startup"
|
||||
'
|
||||
'chkStartWindows
|
||||
'
|
||||
@@ -105,26 +117,6 @@ Partial Class frmSettings
|
||||
Me.chkStartWindows.Text = "Start with Windows"
|
||||
Me.chkStartWindows.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkSync
|
||||
'
|
||||
Me.chkSync.AutoSize = True
|
||||
Me.chkSync.Location = New System.Drawing.Point(6, 134)
|
||||
Me.chkSync.Name = "chkSync"
|
||||
Me.chkSync.Size = New System.Drawing.Size(208, 17)
|
||||
Me.chkSync.TabIndex = 5
|
||||
Me.chkSync.Text = "Sync game list data with backup folder"
|
||||
Me.chkSync.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkShowDetectionTips
|
||||
'
|
||||
Me.chkShowDetectionTips.AutoSize = True
|
||||
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 88)
|
||||
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
|
||||
Me.chkShowDetectionTips.Size = New System.Drawing.Size(159, 17)
|
||||
Me.chkShowDetectionTips.TabIndex = 3
|
||||
Me.chkShowDetectionTips.Text = "Show detection notifications"
|
||||
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkStartToTray
|
||||
'
|
||||
Me.chkStartToTray.AutoSize = True
|
||||
@@ -135,21 +127,71 @@ Partial Class frmSettings
|
||||
Me.chkStartToTray.Text = "Start to system tray"
|
||||
Me.chkStartToTray.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpPaths
|
||||
'chkAutoSaveLog
|
||||
'
|
||||
Me.grpPaths.Controls.Add(Me.btnBackupFolder)
|
||||
Me.grpPaths.Controls.Add(Me.lblBackupFolder)
|
||||
Me.grpPaths.Controls.Add(Me.txtBackupFolder)
|
||||
Me.grpPaths.Location = New System.Drawing.Point(12, 360)
|
||||
Me.grpPaths.Name = "grpPaths"
|
||||
Me.grpPaths.Size = New System.Drawing.Size(360, 60)
|
||||
Me.grpPaths.TabIndex = 2
|
||||
Me.grpPaths.TabStop = False
|
||||
Me.grpPaths.Text = "Paths"
|
||||
Me.chkAutoSaveLog.AutoSize = True
|
||||
Me.chkAutoSaveLog.Location = New System.Drawing.Point(6, 204)
|
||||
Me.chkAutoSaveLog.Name = "chkAutoSaveLog"
|
||||
Me.chkAutoSaveLog.Size = New System.Drawing.Size(231, 17)
|
||||
Me.chkAutoSaveLog.TabIndex = 7
|
||||
Me.chkAutoSaveLog.Text = "Autosave log when max length is exceeded"
|
||||
Me.chkAutoSaveLog.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnOptionalFields
|
||||
'
|
||||
Me.btnOptionalFields.Location = New System.Drawing.Point(110, 38)
|
||||
Me.btnOptionalFields.Name = "btnOptionalFields"
|
||||
Me.btnOptionalFields.Size = New System.Drawing.Size(134, 23)
|
||||
Me.btnOptionalFields.TabIndex = 6
|
||||
Me.btnOptionalFields.Text = "Choose &Optional Fields..."
|
||||
Me.btnOptionalFields.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkTimeTracking
|
||||
'
|
||||
Me.chkTimeTracking.AutoSize = True
|
||||
Me.chkTimeTracking.Location = New System.Drawing.Point(6, 19)
|
||||
Me.chkTimeTracking.Name = "chkTimeTracking"
|
||||
Me.chkTimeTracking.Size = New System.Drawing.Size(122, 17)
|
||||
Me.chkTimeTracking.TabIndex = 4
|
||||
Me.chkTimeTracking.Text = "Enable time tracking"
|
||||
Me.chkTimeTracking.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkSync
|
||||
'
|
||||
Me.chkSync.AutoSize = True
|
||||
Me.chkSync.Location = New System.Drawing.Point(6, 42)
|
||||
Me.chkSync.Name = "chkSync"
|
||||
Me.chkSync.Size = New System.Drawing.Size(98, 17)
|
||||
Me.chkSync.TabIndex = 5
|
||||
Me.chkSync.Text = "Enable syncing"
|
||||
Me.chkSync.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkShowDetectionTips
|
||||
'
|
||||
Me.chkShowDetectionTips.AutoSize = True
|
||||
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 181)
|
||||
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
|
||||
Me.chkShowDetectionTips.Size = New System.Drawing.Size(159, 17)
|
||||
Me.chkShowDetectionTips.TabIndex = 3
|
||||
Me.chkShowDetectionTips.Text = "Show detection notifications"
|
||||
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpFolderOptions
|
||||
'
|
||||
Me.grpFolderOptions.Controls.Add(Me.btnBackupFolder)
|
||||
Me.grpFolderOptions.Controls.Add(Me.lblBackupFolder)
|
||||
Me.grpFolderOptions.Controls.Add(Me.txtBackupFolder)
|
||||
Me.grpFolderOptions.Controls.Add(Me.chkCreateFolder)
|
||||
Me.grpFolderOptions.Location = New System.Drawing.Point(6, 12)
|
||||
Me.grpFolderOptions.Name = "grpFolderOptions"
|
||||
Me.grpFolderOptions.Size = New System.Drawing.Size(354, 70)
|
||||
Me.grpFolderOptions.TabIndex = 1
|
||||
Me.grpFolderOptions.TabStop = False
|
||||
Me.grpFolderOptions.Text = "Folders"
|
||||
'
|
||||
'btnBackupFolder
|
||||
'
|
||||
Me.btnBackupFolder.Location = New System.Drawing.Point(318, 23)
|
||||
Me.btnBackupFolder.Location = New System.Drawing.Point(313, 17)
|
||||
Me.btnBackupFolder.Name = "btnBackupFolder"
|
||||
Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20)
|
||||
Me.btnBackupFolder.TabIndex = 2
|
||||
@@ -159,60 +201,53 @@ Partial Class frmSettings
|
||||
'lblBackupFolder
|
||||
'
|
||||
Me.lblBackupFolder.AutoSize = True
|
||||
Me.lblBackupFolder.Location = New System.Drawing.Point(6, 27)
|
||||
Me.lblBackupFolder.Location = New System.Drawing.Point(6, 20)
|
||||
Me.lblBackupFolder.Name = "lblBackupFolder"
|
||||
Me.lblBackupFolder.Size = New System.Drawing.Size(76, 13)
|
||||
Me.lblBackupFolder.Size = New System.Drawing.Size(79, 13)
|
||||
Me.lblBackupFolder.TabIndex = 0
|
||||
Me.lblBackupFolder.Text = "Backup Folder"
|
||||
Me.lblBackupFolder.Text = "Backup Folder:"
|
||||
'
|
||||
'txtBackupFolder
|
||||
'
|
||||
Me.txtBackupFolder.Location = New System.Drawing.Point(88, 24)
|
||||
Me.txtBackupFolder.Location = New System.Drawing.Point(91, 17)
|
||||
Me.txtBackupFolder.Name = "txtBackupFolder"
|
||||
Me.txtBackupFolder.Size = New System.Drawing.Size(224, 20)
|
||||
Me.txtBackupFolder.Size = New System.Drawing.Size(216, 20)
|
||||
Me.txtBackupFolder.TabIndex = 1
|
||||
'
|
||||
'chkCreateFolder
|
||||
'
|
||||
Me.chkCreateFolder.AutoSize = True
|
||||
Me.chkCreateFolder.Location = New System.Drawing.Point(9, 43)
|
||||
Me.chkCreateFolder.Name = "chkCreateFolder"
|
||||
Me.chkCreateFolder.Size = New System.Drawing.Size(186, 17)
|
||||
Me.chkCreateFolder.TabIndex = 3
|
||||
Me.chkCreateFolder.Text = "Create a sub-folder for each game"
|
||||
Me.chkCreateFolder.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnSave
|
||||
'
|
||||
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
|
||||
Me.btnSave.Location = New System.Drawing.Point(216, 426)
|
||||
Me.btnSave.Location = New System.Drawing.Point(384, 321)
|
||||
Me.btnSave.Name = "btnSave"
|
||||
Me.btnSave.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnSave.TabIndex = 3
|
||||
Me.btnSave.TabIndex = 5
|
||||
Me.btnSave.Text = "&Save"
|
||||
Me.btnSave.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnCancel
|
||||
'
|
||||
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
|
||||
Me.btnCancel.Location = New System.Drawing.Point(297, 426)
|
||||
Me.btnCancel.Location = New System.Drawing.Point(465, 321)
|
||||
Me.btnCancel.Name = "btnCancel"
|
||||
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
|
||||
Me.btnCancel.TabIndex = 4
|
||||
Me.btnCancel.TabIndex = 6
|
||||
Me.btnCancel.Text = "&Cancel"
|
||||
Me.btnCancel.UseVisualStyleBackColor = True
|
||||
'
|
||||
'grpBackup
|
||||
'
|
||||
Me.grpBackup.Controls.Add(Me.lblMinutes)
|
||||
Me.grpBackup.Controls.Add(Me.nudSupressBackupThreshold)
|
||||
Me.grpBackup.Controls.Add(Me.chkSupressBackup)
|
||||
Me.grpBackup.Controls.Add(Me.chkCheckSum)
|
||||
Me.grpBackup.Controls.Add(Me.chkRestoreOnLaunch)
|
||||
Me.grpBackup.Controls.Add(Me.chkOverwriteWarning)
|
||||
Me.grpBackup.Controls.Add(Me.chkCreateFolder)
|
||||
Me.grpBackup.Controls.Add(Me.chkBackupConfirm)
|
||||
Me.grpBackup.Location = New System.Drawing.Point(12, 183)
|
||||
Me.grpBackup.Name = "grpBackup"
|
||||
Me.grpBackup.Size = New System.Drawing.Size(360, 171)
|
||||
Me.grpBackup.TabIndex = 1
|
||||
Me.grpBackup.TabStop = False
|
||||
Me.grpBackup.Text = "Backup and Restore"
|
||||
'
|
||||
'lblMinutes
|
||||
'
|
||||
Me.lblMinutes.AutoSize = True
|
||||
Me.lblMinutes.Location = New System.Drawing.Point(286, 135)
|
||||
Me.lblMinutes.Location = New System.Drawing.Point(286, 181)
|
||||
Me.lblMinutes.Name = "lblMinutes"
|
||||
Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
|
||||
Me.lblMinutes.TabIndex = 7
|
||||
@@ -220,7 +255,7 @@ Partial Class frmSettings
|
||||
'
|
||||
'nudSupressBackupThreshold
|
||||
'
|
||||
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(229, 133)
|
||||
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(229, 179)
|
||||
Me.nudSupressBackupThreshold.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
|
||||
Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold"
|
||||
Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20)
|
||||
@@ -229,7 +264,7 @@ Partial Class frmSettings
|
||||
'chkSupressBackup
|
||||
'
|
||||
Me.chkSupressBackup.AutoSize = True
|
||||
Me.chkSupressBackup.Location = New System.Drawing.Point(6, 134)
|
||||
Me.chkSupressBackup.Location = New System.Drawing.Point(6, 180)
|
||||
Me.chkSupressBackup.Name = "chkSupressBackup"
|
||||
Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17)
|
||||
Me.chkSupressBackup.TabIndex = 5
|
||||
@@ -239,7 +274,7 @@ Partial Class frmSettings
|
||||
'chkCheckSum
|
||||
'
|
||||
Me.chkCheckSum.AutoSize = True
|
||||
Me.chkCheckSum.Location = New System.Drawing.Point(6, 88)
|
||||
Me.chkCheckSum.Location = New System.Drawing.Point(6, 134)
|
||||
Me.chkCheckSum.Name = "chkCheckSum"
|
||||
Me.chkCheckSum.Size = New System.Drawing.Size(195, 17)
|
||||
Me.chkCheckSum.TabIndex = 3
|
||||
@@ -249,7 +284,7 @@ Partial Class frmSettings
|
||||
'chkRestoreOnLaunch
|
||||
'
|
||||
Me.chkRestoreOnLaunch.AutoSize = True
|
||||
Me.chkRestoreOnLaunch.Location = New System.Drawing.Point(6, 111)
|
||||
Me.chkRestoreOnLaunch.Location = New System.Drawing.Point(6, 157)
|
||||
Me.chkRestoreOnLaunch.Name = "chkRestoreOnLaunch"
|
||||
Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(257, 17)
|
||||
Me.chkRestoreOnLaunch.TabIndex = 4
|
||||
@@ -259,55 +294,235 @@ Partial Class frmSettings
|
||||
'chkOverwriteWarning
|
||||
'
|
||||
Me.chkOverwriteWarning.AutoSize = True
|
||||
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 65)
|
||||
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 111)
|
||||
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
|
||||
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
|
||||
Me.chkOverwriteWarning.TabIndex = 2
|
||||
Me.chkOverwriteWarning.Text = "Show overwrite warning"
|
||||
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkCreateFolder
|
||||
'grp7zGeneral
|
||||
'
|
||||
Me.chkCreateFolder.AutoSize = True
|
||||
Me.chkCreateFolder.Location = New System.Drawing.Point(6, 19)
|
||||
Me.chkCreateFolder.Name = "chkCreateFolder"
|
||||
Me.chkCreateFolder.Size = New System.Drawing.Size(186, 17)
|
||||
Me.chkCreateFolder.TabIndex = 0
|
||||
Me.chkCreateFolder.Text = "Create a sub-folder for each game"
|
||||
Me.chkCreateFolder.UseVisualStyleBackColor = True
|
||||
Me.grp7zGeneral.Controls.Add(Me.cboCompression)
|
||||
Me.grp7zGeneral.Controls.Add(Me.lblCompression)
|
||||
Me.grp7zGeneral.Location = New System.Drawing.Point(6, 12)
|
||||
Me.grp7zGeneral.Name = "grp7zGeneral"
|
||||
Me.grp7zGeneral.Size = New System.Drawing.Size(354, 50)
|
||||
Me.grp7zGeneral.TabIndex = 0
|
||||
Me.grp7zGeneral.TabStop = False
|
||||
Me.grp7zGeneral.Text = "General"
|
||||
'
|
||||
'cboCompression
|
||||
'
|
||||
Me.cboCompression.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
|
||||
Me.cboCompression.FormattingEnabled = True
|
||||
Me.cboCompression.Location = New System.Drawing.Point(110, 17)
|
||||
Me.cboCompression.Name = "cboCompression"
|
||||
Me.cboCompression.Size = New System.Drawing.Size(238, 21)
|
||||
Me.cboCompression.TabIndex = 1
|
||||
'
|
||||
'lblCompression
|
||||
'
|
||||
Me.lblCompression.AutoSize = True
|
||||
Me.lblCompression.Location = New System.Drawing.Point(6, 20)
|
||||
Me.lblCompression.Name = "lblCompression"
|
||||
Me.lblCompression.Size = New System.Drawing.Size(70, 13)
|
||||
Me.lblCompression.TabIndex = 0
|
||||
Me.lblCompression.Text = "Compression:"
|
||||
'
|
||||
'btn7zLocation
|
||||
'
|
||||
Me.btn7zLocation.Location = New System.Drawing.Point(313, 41)
|
||||
Me.btn7zLocation.Name = "btn7zLocation"
|
||||
Me.btn7zLocation.Size = New System.Drawing.Size(27, 20)
|
||||
Me.btn7zLocation.TabIndex = 5
|
||||
Me.btn7zLocation.Text = "..."
|
||||
Me.btn7zLocation.UseVisualStyleBackColor = True
|
||||
'
|
||||
'txt7zLocation
|
||||
'
|
||||
Me.txt7zLocation.Location = New System.Drawing.Point(110, 41)
|
||||
Me.txt7zLocation.Name = "txt7zLocation"
|
||||
Me.txt7zLocation.Size = New System.Drawing.Size(197, 20)
|
||||
Me.txt7zLocation.TabIndex = 4
|
||||
'
|
||||
'lblLocation
|
||||
'
|
||||
Me.lblLocation.AutoSize = True
|
||||
Me.lblLocation.Location = New System.Drawing.Point(6, 44)
|
||||
Me.lblLocation.Name = "lblLocation"
|
||||
Me.lblLocation.Size = New System.Drawing.Size(89, 13)
|
||||
Me.lblLocation.TabIndex = 4
|
||||
Me.lblLocation.Text = "Custom Location:"
|
||||
'
|
||||
'txt7zArguments
|
||||
'
|
||||
Me.txt7zArguments.Location = New System.Drawing.Point(110, 15)
|
||||
Me.txt7zArguments.Name = "txt7zArguments"
|
||||
Me.txt7zArguments.Size = New System.Drawing.Size(238, 20)
|
||||
Me.txt7zArguments.TabIndex = 3
|
||||
'
|
||||
'lblArguments
|
||||
'
|
||||
Me.lblArguments.AutoSize = True
|
||||
Me.lblArguments.Location = New System.Drawing.Point(6, 20)
|
||||
Me.lblArguments.Name = "lblArguments"
|
||||
Me.lblArguments.Size = New System.Drawing.Size(98, 13)
|
||||
Me.lblArguments.TabIndex = 2
|
||||
Me.lblArguments.Text = "Custom Arguments:"
|
||||
'
|
||||
'lbl7zCopyright
|
||||
'
|
||||
Me.lbl7zCopyright.AutoEllipsis = True
|
||||
Me.lbl7zCopyright.Location = New System.Drawing.Point(9, 34)
|
||||
Me.lbl7zCopyright.Name = "lbl7zCopyright"
|
||||
Me.lbl7zCopyright.Size = New System.Drawing.Size(339, 17)
|
||||
Me.lbl7zCopyright.TabIndex = 8
|
||||
Me.lbl7zCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lbl7zProduct
|
||||
'
|
||||
Me.lbl7zProduct.AutoEllipsis = True
|
||||
Me.lbl7zProduct.Location = New System.Drawing.Point(9, 17)
|
||||
Me.lbl7zProduct.Name = "lbl7zProduct"
|
||||
Me.lbl7zProduct.Size = New System.Drawing.Size(339, 17)
|
||||
Me.lbl7zProduct.TabIndex = 7
|
||||
Me.lbl7zProduct.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'btnDefaults
|
||||
'
|
||||
Me.btnDefaults.Location = New System.Drawing.Point(12, 321)
|
||||
Me.btnDefaults.Name = "btnDefaults"
|
||||
Me.btnDefaults.Size = New System.Drawing.Size(110, 23)
|
||||
Me.btnDefaults.TabIndex = 4
|
||||
Me.btnDefaults.Text = "Set &Defaults"
|
||||
Me.btnDefaults.UseVisualStyleBackColor = True
|
||||
'
|
||||
'pnlBackup
|
||||
'
|
||||
Me.pnlBackup.Controls.Add(Me.lblMinutes)
|
||||
Me.pnlBackup.Controls.Add(Me.nudSupressBackupThreshold)
|
||||
Me.pnlBackup.Controls.Add(Me.grpFolderOptions)
|
||||
Me.pnlBackup.Controls.Add(Me.chkSupressBackup)
|
||||
Me.pnlBackup.Controls.Add(Me.chkBackupConfirm)
|
||||
Me.pnlBackup.Controls.Add(Me.chkCheckSum)
|
||||
Me.pnlBackup.Controls.Add(Me.chkOverwriteWarning)
|
||||
Me.pnlBackup.Controls.Add(Me.chkRestoreOnLaunch)
|
||||
Me.pnlBackup.Location = New System.Drawing.Point(180, 0)
|
||||
Me.pnlBackup.Name = "pnlBackup"
|
||||
Me.pnlBackup.Size = New System.Drawing.Size(367, 314)
|
||||
Me.pnlBackup.TabIndex = 3
|
||||
'
|
||||
'pnl7z
|
||||
'
|
||||
Me.pnl7z.Controls.Add(Me.grp7zAdvanced)
|
||||
Me.pnl7z.Controls.Add(Me.grp7zInformation)
|
||||
Me.pnl7z.Controls.Add(Me.grp7zGeneral)
|
||||
Me.pnl7z.Location = New System.Drawing.Point(180, 0)
|
||||
Me.pnl7z.Name = "pnl7z"
|
||||
Me.pnl7z.Size = New System.Drawing.Size(367, 314)
|
||||
Me.pnl7z.TabIndex = 2
|
||||
'
|
||||
'grp7zAdvanced
|
||||
'
|
||||
Me.grp7zAdvanced.Controls.Add(Me.btn7zLocation)
|
||||
Me.grp7zAdvanced.Controls.Add(Me.lblArguments)
|
||||
Me.grp7zAdvanced.Controls.Add(Me.txt7zLocation)
|
||||
Me.grp7zAdvanced.Controls.Add(Me.txt7zArguments)
|
||||
Me.grp7zAdvanced.Controls.Add(Me.lblLocation)
|
||||
Me.grp7zAdvanced.Location = New System.Drawing.Point(6, 68)
|
||||
Me.grp7zAdvanced.Name = "grp7zAdvanced"
|
||||
Me.grp7zAdvanced.Size = New System.Drawing.Size(354, 73)
|
||||
Me.grp7zAdvanced.TabIndex = 2
|
||||
Me.grp7zAdvanced.TabStop = False
|
||||
Me.grp7zAdvanced.Text = "Advanced"
|
||||
'
|
||||
'grp7zInformation
|
||||
'
|
||||
Me.grp7zInformation.Controls.Add(Me.lbl7zProduct)
|
||||
Me.grp7zInformation.Controls.Add(Me.lbl7zCopyright)
|
||||
Me.grp7zInformation.Location = New System.Drawing.Point(6, 146)
|
||||
Me.grp7zInformation.Name = "grp7zInformation"
|
||||
Me.grp7zInformation.Size = New System.Drawing.Size(354, 63)
|
||||
Me.grp7zInformation.TabIndex = 1
|
||||
Me.grp7zInformation.TabStop = False
|
||||
Me.grp7zInformation.Text = "Utility Information"
|
||||
'
|
||||
'pnlGeneral
|
||||
'
|
||||
Me.pnlGeneral.Controls.Add(Me.chkAutoSaveLog)
|
||||
Me.pnlGeneral.Controls.Add(Me.grpGameData)
|
||||
Me.pnlGeneral.Controls.Add(Me.chkShowDetectionTips)
|
||||
Me.pnlGeneral.Controls.Add(Me.grpStartup)
|
||||
Me.pnlGeneral.Location = New System.Drawing.Point(180, 0)
|
||||
Me.pnlGeneral.Name = "pnlGeneral"
|
||||
Me.pnlGeneral.Size = New System.Drawing.Size(367, 314)
|
||||
Me.pnlGeneral.TabIndex = 1
|
||||
'
|
||||
'grpGameData
|
||||
'
|
||||
Me.grpGameData.Controls.Add(Me.chkTimeTracking)
|
||||
Me.grpGameData.Controls.Add(Me.chkSync)
|
||||
Me.grpGameData.Controls.Add(Me.btnOptionalFields)
|
||||
Me.grpGameData.Location = New System.Drawing.Point(6, 106)
|
||||
Me.grpGameData.Name = "grpGameData"
|
||||
Me.grpGameData.Size = New System.Drawing.Size(354, 69)
|
||||
Me.grpGameData.TabIndex = 1
|
||||
Me.grpGameData.TabStop = False
|
||||
Me.grpGameData.Text = "Game Data"
|
||||
'
|
||||
'lstSettings
|
||||
'
|
||||
Me.lstSettings.FormattingEnabled = True
|
||||
Me.lstSettings.Location = New System.Drawing.Point(12, 12)
|
||||
Me.lstSettings.Name = "lstSettings"
|
||||
Me.lstSettings.Size = New System.Drawing.Size(162, 303)
|
||||
Me.lstSettings.TabIndex = 0
|
||||
'
|
||||
'frmSettings
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(384, 461)
|
||||
Me.Controls.Add(Me.grpBackup)
|
||||
Me.ClientSize = New System.Drawing.Size(554, 361)
|
||||
Me.Controls.Add(Me.lstSettings)
|
||||
Me.Controls.Add(Me.btnDefaults)
|
||||
Me.Controls.Add(Me.btnCancel)
|
||||
Me.Controls.Add(Me.btnSave)
|
||||
Me.Controls.Add(Me.grpPaths)
|
||||
Me.Controls.Add(Me.grpGeneral)
|
||||
Me.Controls.Add(Me.pnlGeneral)
|
||||
Me.Controls.Add(Me.pnl7z)
|
||||
Me.Controls.Add(Me.pnlBackup)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.MaximizeBox = False
|
||||
Me.MinimizeBox = False
|
||||
Me.Name = "frmSettings"
|
||||
Me.ShowIcon = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
|
||||
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
|
||||
Me.Text = "Settings"
|
||||
Me.grpGeneral.ResumeLayout(False)
|
||||
Me.grpGeneral.PerformLayout()
|
||||
Me.grpPaths.ResumeLayout(False)
|
||||
Me.grpPaths.PerformLayout()
|
||||
Me.grpBackup.ResumeLayout(False)
|
||||
Me.grpBackup.PerformLayout()
|
||||
Me.grpStartup.ResumeLayout(False)
|
||||
Me.grpStartup.PerformLayout()
|
||||
Me.grpFolderOptions.ResumeLayout(False)
|
||||
Me.grpFolderOptions.PerformLayout()
|
||||
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.grp7zGeneral.ResumeLayout(False)
|
||||
Me.grp7zGeneral.PerformLayout()
|
||||
Me.pnlBackup.ResumeLayout(False)
|
||||
Me.pnlBackup.PerformLayout()
|
||||
Me.pnl7z.ResumeLayout(False)
|
||||
Me.grp7zAdvanced.ResumeLayout(False)
|
||||
Me.grp7zAdvanced.PerformLayout()
|
||||
Me.grp7zInformation.ResumeLayout(False)
|
||||
Me.pnlGeneral.ResumeLayout(False)
|
||||
Me.pnlGeneral.PerformLayout()
|
||||
Me.grpGameData.ResumeLayout(False)
|
||||
Me.grpGameData.PerformLayout()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents grpGeneral As System.Windows.Forms.GroupBox
|
||||
Friend WithEvents grpPaths As System.Windows.Forms.GroupBox
|
||||
Friend WithEvents grpStartup As System.Windows.Forms.GroupBox
|
||||
Friend WithEvents grpFolderOptions As System.Windows.Forms.GroupBox
|
||||
Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox
|
||||
Friend WithEvents btnSave As System.Windows.Forms.Button
|
||||
Friend WithEvents btnCancel As System.Windows.Forms.Button
|
||||
@@ -315,7 +530,6 @@ Partial Class frmSettings
|
||||
Friend WithEvents btnBackupFolder As System.Windows.Forms.Button
|
||||
Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents chkStartToTray As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents grpBackup As System.Windows.Forms.GroupBox
|
||||
Friend WithEvents chkOverwriteWarning As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
|
||||
Friend WithEvents chkRestoreOnLaunch As System.Windows.Forms.CheckBox
|
||||
@@ -326,4 +540,24 @@ Partial Class frmSettings
|
||||
Friend WithEvents lblMinutes As Label
|
||||
Friend WithEvents nudSupressBackupThreshold As NumericUpDown
|
||||
Friend WithEvents chkSupressBackup As CheckBox
|
||||
Friend WithEvents grp7zGeneral As GroupBox
|
||||
Friend WithEvents cboCompression As ComboBox
|
||||
Friend WithEvents lblCompression As Label
|
||||
Friend WithEvents lbl7zProduct As Label
|
||||
Friend WithEvents lbl7zCopyright As Label
|
||||
Friend WithEvents btn7zLocation As Button
|
||||
Friend WithEvents txt7zLocation As TextBox
|
||||
Friend WithEvents lblLocation As Label
|
||||
Friend WithEvents txt7zArguments As TextBox
|
||||
Friend WithEvents lblArguments As Label
|
||||
Friend WithEvents btnDefaults As Button
|
||||
Friend WithEvents btnOptionalFields As Button
|
||||
Friend WithEvents chkAutoSaveLog As CheckBox
|
||||
Friend WithEvents pnlBackup As Panel
|
||||
Friend WithEvents pnl7z As Panel
|
||||
Friend WithEvents pnlGeneral As Panel
|
||||
Friend WithEvents grpGameData As GroupBox
|
||||
Friend WithEvents lstSettings As ListBox
|
||||
Friend WithEvents grp7zAdvanced As GroupBox
|
||||
Friend WithEvents grp7zInformation As GroupBox
|
||||
End Class
|
||||
|
||||
+250
-47
@@ -1,9 +1,11 @@
|
||||
Imports GBM.My.Resources
|
||||
Imports System.IO
|
||||
|
||||
Public Class frmSettings
|
||||
Dim bShutdown As Boolean = False
|
||||
Dim bBackupLocationChanged As Boolean = False
|
||||
Dim bSyncSettingsChanged As Boolean = False
|
||||
Dim bCheckSumDisabled As Boolean = False
|
||||
Dim eCurrentSyncFields As clsGame.eOptionalSyncFields
|
||||
Private oSettings As mgrSettings
|
||||
|
||||
Property Settings As mgrSettings
|
||||
@@ -15,15 +17,6 @@ Public Class frmSettings
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Property BackupLocationChanged As Boolean
|
||||
Get
|
||||
Return bBackupLocationChanged
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
bBackupLocationChanged = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
|
||||
Dim oKey As Microsoft.Win32.RegistryKey
|
||||
Dim sAppName As String = Application.ProductName
|
||||
@@ -51,6 +44,7 @@ Public Class frmSettings
|
||||
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
|
||||
oSettings.StartToTray = chkStartToTray.Checked
|
||||
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
|
||||
oSettings.AutoSaveLog = chkAutoSaveLog.Checked
|
||||
oSettings.DisableConfirmation = chkBackupConfirm.Checked
|
||||
oSettings.CreateSubFolder = chkCreateFolder.Checked
|
||||
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
|
||||
@@ -58,6 +52,14 @@ Public Class frmSettings
|
||||
oSettings.TimeTracking = chkTimeTracking.Checked
|
||||
oSettings.SupressBackup = chkSupressBackup.Checked
|
||||
oSettings.SupressBackupThreshold = nudSupressBackupThreshold.Value
|
||||
oSettings.CompressionLevel = cboCompression.SelectedValue
|
||||
|
||||
If oSettings.Custom7zArguments <> txt7zArguments.Text.Trim And txt7zArguments.Text.Trim <> String.Empty Then
|
||||
mgrCommon.ShowMessage(frmSettings_WarningArguments, MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
|
||||
oSettings.Custom7zArguments = txt7zArguments.Text.Trim
|
||||
oSettings.Custom7zLocation = txt7zLocation.Text.Trim
|
||||
|
||||
'We need to clear all checksums its turned off
|
||||
If chkCheckSum.Checked = False And oSettings.CheckSum = True Then
|
||||
@@ -67,13 +69,13 @@ Public Class frmSettings
|
||||
|
||||
'Turning syncing from off to on is the same as changing the backup folder
|
||||
If chkSync.Checked = True And oSettings.Sync = False Then
|
||||
bBackupLocationChanged = True
|
||||
bSyncSettingsChanged = True
|
||||
End If
|
||||
oSettings.Sync = chkSync.Checked
|
||||
|
||||
If IO.Directory.Exists(txtBackupFolder.Text) Then
|
||||
If Directory.Exists(txtBackupFolder.Text) Then
|
||||
If oSettings.BackupFolder <> txtBackupFolder.Text Then
|
||||
If chkSync.Checked Then bBackupLocationChanged = True
|
||||
If chkSync.Checked Then bSyncSettingsChanged = True
|
||||
End If
|
||||
oSettings.BackupFolder = txtBackupFolder.Text
|
||||
Else
|
||||
@@ -81,13 +83,29 @@ Public Class frmSettings
|
||||
Return False
|
||||
End If
|
||||
|
||||
If oSettings.Custom7zLocation <> String.Empty Then
|
||||
If File.Exists(oSettings.Custom7zLocation) Then
|
||||
If Path.GetFileNameWithoutExtension(oSettings.Custom7zLocation) <> "7za" Then
|
||||
mgrCommon.ShowMessage(frmSettings_WarningLocation, MsgBoxStyle.Critical)
|
||||
End If
|
||||
Else
|
||||
mgrCommon.ShowMessage(frmSettings_ErrorLocation, oSettings.Custom7zLocation, MsgBoxStyle.Critical)
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
'We must trigger a sync if optional fields have changed
|
||||
If Settings.Sync And (eCurrentSyncFields <> Settings.SyncFields) Then
|
||||
bSyncSettingsChanged = True
|
||||
End If
|
||||
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Function SaveSettings() As Boolean
|
||||
If ValidateSettings() Then
|
||||
oSettings.SaveSettings()
|
||||
If BackupLocationChanged Then mgrMonitorList.HandleBackupLocationChange()
|
||||
If bSyncSettingsChanged Then mgrMonitorList.HandleBackupLocationChange(Settings)
|
||||
If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe()
|
||||
Return True
|
||||
Else
|
||||
@@ -95,11 +113,67 @@ Public Class frmSettings
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Sub GetUtilityInfo(ByVal sLocation As String)
|
||||
Dim bDefault As Boolean = False
|
||||
Dim sFileDescription As String
|
||||
Dim sVersion As String
|
||||
Dim sCopyright As String
|
||||
|
||||
'Ignore this function when on Unix and hide the information data
|
||||
If mgrCommon.IsUnix Then
|
||||
grp7zInformation.Visible = False
|
||||
Else
|
||||
Try
|
||||
grp7zInformation.Visible = True
|
||||
|
||||
'Use default when no custom location is set
|
||||
If sLocation = String.Empty Then
|
||||
sLocation = mgrPath.Default7zLocation
|
||||
bDefault = True
|
||||
End If
|
||||
|
||||
'Get info
|
||||
Dim oFileInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(sLocation)
|
||||
|
||||
If oFileInfo.FileDescription = String.Empty Then
|
||||
sFileDescription = App_NotAvailable
|
||||
Else
|
||||
sFileDescription = oFileInfo.FileDescription
|
||||
End If
|
||||
|
||||
If oFileInfo.ProductVersion = String.Empty Then
|
||||
sVersion = App_NotAvailable
|
||||
Else
|
||||
sVersion = oFileInfo.ProductVersion
|
||||
End If
|
||||
|
||||
If oFileInfo.LegalCopyright = String.Empty Then
|
||||
sCopyright = App_NotAvailable
|
||||
Else
|
||||
sCopyright = oFileInfo.LegalCopyright
|
||||
End If
|
||||
|
||||
lbl7zProduct.Text = sFileDescription & " - " & sVersion
|
||||
lbl7zCopyright.Text = sCopyright
|
||||
Catch ex As Exception
|
||||
grp7zInformation.Visible = False
|
||||
End Try
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetDefaults()
|
||||
If mgrCommon.ShowMessage(frmSettings_ConfirmDefaults, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
oSettings = New mgrSettings
|
||||
LoadSettings()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub LoadSettings()
|
||||
chkStartWindows.Checked = oSettings.StartWithWindows
|
||||
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
|
||||
chkStartToTray.Checked = oSettings.StartToTray
|
||||
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
|
||||
chkAutoSaveLog.Checked = oSettings.AutoSaveLog
|
||||
chkBackupConfirm.Checked = oSettings.DisableConfirmation
|
||||
chkCreateFolder.Checked = oSettings.CreateSubFolder
|
||||
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
|
||||
@@ -111,6 +185,138 @@ Public Class frmSettings
|
||||
chkSupressBackup.Checked = oSettings.SupressBackup
|
||||
nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold
|
||||
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
|
||||
cboCompression.SelectedValue = oSettings.CompressionLevel
|
||||
txt7zArguments.Text = oSettings.Custom7zArguments
|
||||
txt7zLocation.Text = oSettings.Custom7zLocation
|
||||
eCurrentSyncFields = oSettings.SyncFields
|
||||
|
||||
'Unix Handler
|
||||
If mgrCommon.IsUnix Then
|
||||
chkStartToTray.Checked = False
|
||||
chkStartWindows.Checked = False
|
||||
End If
|
||||
|
||||
'Retrieve 7z Info
|
||||
GetUtilityInfo(oSettings.Custom7zLocation)
|
||||
|
||||
'Toggle Sync Button
|
||||
ToggleSyncButton()
|
||||
End Sub
|
||||
|
||||
Private Sub LoadCombos()
|
||||
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
|
||||
Dim oSettingsItems As New List(Of KeyValuePair(Of Integer, String))
|
||||
|
||||
'cboCompression
|
||||
cboCompression.ValueMember = "Key"
|
||||
cboCompression.DisplayMember = "Value"
|
||||
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(0, frmSettings_cboCompression_None))
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(1, frmSettings_cboCompression_Fastest))
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(3, frmSettings_cboCompression_Fast))
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(5, frmSettings_cboCompression_Normal))
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(7, frmSettings_cboCompression_Maximum))
|
||||
oComboItems.Add(New KeyValuePair(Of Integer, String)(9, frmSettings_cboCompression_Ultra))
|
||||
|
||||
cboCompression.DataSource = oComboItems
|
||||
|
||||
'lstSettings
|
||||
lstSettings.ValueMember = "Key"
|
||||
lstSettings.DisplayMember = "Value"
|
||||
|
||||
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(0, frmSettings_lstSettings_General))
|
||||
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(1, frmSettings_lstSettings_BackupRestore))
|
||||
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(2, frmSettings_lstSettings_7z))
|
||||
|
||||
lstSettings.DataSource = oSettingsItems
|
||||
|
||||
'Select Default
|
||||
lstSettings.SelectedIndex = 0
|
||||
End Sub
|
||||
|
||||
Private Sub ToggleSyncButton()
|
||||
If chkSync.Checked Then
|
||||
btnOptionalFields.Enabled = True
|
||||
Else
|
||||
btnOptionalFields.Enabled = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub OpenOptionalFields()
|
||||
Dim frm As New frmSyncFields
|
||||
frm.SyncFields = Settings.SyncFields
|
||||
frm.ShowDialog()
|
||||
If frm.DialogResult = DialogResult.OK Then
|
||||
Settings.SyncFields = frm.SyncFields
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub ChangePanel()
|
||||
If lstSettings.SelectedItems.Count > 0 Then
|
||||
Dim oSettingsItem As KeyValuePair(Of Integer, String) = lstSettings.SelectedItems(0)
|
||||
|
||||
Select Case oSettingsItem.Key
|
||||
Case 0
|
||||
pnlGeneral.Visible = True
|
||||
pnlBackup.Visible = False
|
||||
pnl7z.Visible = False
|
||||
Case 1
|
||||
pnlGeneral.Visible = False
|
||||
pnlBackup.Visible = True
|
||||
pnl7z.Visible = False
|
||||
Case 2
|
||||
pnlGeneral.Visible = False
|
||||
pnlBackup.Visible = False
|
||||
pnl7z.Visible = True
|
||||
End Select
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
'Set Form Name
|
||||
Me.Text = frmSettings_FormName
|
||||
|
||||
'Set Form Text
|
||||
lblMinutes.Text = frmSettings_lblMinutes
|
||||
chkSupressBackup.Text = frmSettings_chkSupressBackup
|
||||
chkCheckSum.Text = frmSettings_chkCheckSum
|
||||
chkRestoreOnLaunch.Text = frmSettings_chkRestoreOnLaunch
|
||||
chkOverwriteWarning.Text = frmSettings_chkOverwriteWarning
|
||||
chkCreateFolder.Text = frmSettings_chkCreateFolder
|
||||
chkBackupConfirm.Text = frmSettings_chkBackupConfirm
|
||||
btnCancel.Text = frmSettings_btnCancel
|
||||
btnSave.Text = frmSettings_btnSave
|
||||
grpFolderOptions.Text = frmSettings_grpFolderOptions
|
||||
btnBackupFolder.Text = frmSettings_btnBackupFolder
|
||||
lblBackupFolder.Text = frmSettings_lblBackupFolder
|
||||
grpStartup.Text = frmSettings_grpStartup
|
||||
grpGameData.Text = frmSettings_grpGameData
|
||||
chkTimeTracking.Text = frmSettings_chkTimeTracking
|
||||
chkStartWindows.Text = frmSettings_chkStartWindows
|
||||
chkSync.Text = frmSettings_chkSync
|
||||
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
|
||||
chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog
|
||||
chkStartToTray.Text = frmSettings_chkStartToTray
|
||||
chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup
|
||||
grp7zGeneral.Text = frmSettings_grp7zGeneral
|
||||
grp7zAdvanced.Text = frmSettings_grp7zAdvanced
|
||||
grp7zInformation.Text = frmSettings_grp7zInformation
|
||||
lblCompression.Text = frmSettings_lblCompression
|
||||
btnDefaults.Text = frmSettings_btnDefaults
|
||||
lblArguments.Text = frmSettings_lblArguments
|
||||
lblLocation.Text = frmSettings_lblLocation
|
||||
btnOptionalFields.Text = frmSettings_btnOptionalFields
|
||||
|
||||
'Unix Handler
|
||||
If mgrCommon.IsUnix Then
|
||||
chkStartToTray.Enabled = False
|
||||
chkStartWindows.Enabled = False
|
||||
End If
|
||||
|
||||
'Handle Panels
|
||||
pnlGeneral.Visible = False
|
||||
pnlBackup.Visible = False
|
||||
pnl7z.Visible = False
|
||||
End Sub
|
||||
|
||||
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
|
||||
@@ -125,41 +331,9 @@ Public Class frmSettings
|
||||
Me.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub frmSettings_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
|
||||
If bShutdown = False Then
|
||||
e.Cancel = True
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
'Set Form Name
|
||||
Me.Text = frmSettings_FormName
|
||||
|
||||
'Set Form Text
|
||||
grpBackup.Text = frmSettings_grpBackup
|
||||
lblMinutes.Text = frmSettings_lblMinutes
|
||||
chkSupressBackup.Text = frmSettings_chkSupressBackup
|
||||
chkCheckSum.Text = frmSettings_chkCheckSum
|
||||
chkRestoreOnLaunch.Text = frmSettings_chkRestoreOnLaunch
|
||||
chkOverwriteWarning.Text = frmSettings_chkOverwriteWarning
|
||||
chkCreateFolder.Text = frmSettings_chkCreateFolder
|
||||
chkBackupConfirm.Text = frmSettings_chkBackupConfirm
|
||||
btnCancel.Text = frmSettings_btnCancel
|
||||
btnSave.Text = frmSettings_btnSave
|
||||
grpPaths.Text = frmSettings_grpPaths
|
||||
btnBackupFolder.Text = frmSettings_btnBackupFolder
|
||||
lblBackupFolder.Text = frmSettings_lblBackupFolder
|
||||
grpGeneral.Text = frmSettings_grpGeneral
|
||||
chkTimeTracking.Text = frmSettings_chkTimeTracking
|
||||
chkStartWindows.Text = frmSettings_chkStartWindows
|
||||
chkSync.Text = frmSettings_chkSync
|
||||
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
|
||||
chkStartToTray.Text = frmSettings_chkStartToTray
|
||||
chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup
|
||||
End Sub
|
||||
|
||||
Private Sub frmSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
|
||||
SetForm()
|
||||
LoadCombos()
|
||||
LoadSettings()
|
||||
End Sub
|
||||
|
||||
@@ -169,7 +343,36 @@ Public Class frmSettings
|
||||
If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
|
||||
End Sub
|
||||
|
||||
Private Sub btn7zLocation_Click(sender As Object, e As EventArgs) Handles btn7zLocation.Click
|
||||
Dim sNewLocation As String
|
||||
sNewLocation = mgrCommon.OpenFileBrowser(frmSettings_Browse7za, "exe", frmSettings_7zaFileType, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
|
||||
If sNewLocation <> String.Empty Then
|
||||
txt7zLocation.Text = sNewLocation
|
||||
GetUtilityInfo(txt7zLocation.Text)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkSupressBackup_CheckedChanged(sender As Object, e As EventArgs) Handles chkSupressBackup.CheckedChanged
|
||||
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
|
||||
End Sub
|
||||
|
||||
Private Sub txt7zLocation_Leave(sender As Object, e As EventArgs) Handles txt7zLocation.Leave
|
||||
GetUtilityInfo(txt7zLocation.Text.Trim)
|
||||
End Sub
|
||||
|
||||
Private Sub btnDefaults_Click(sender As Object, e As EventArgs) Handles btnDefaults.Click
|
||||
SetDefaults()
|
||||
End Sub
|
||||
|
||||
Private Sub btnOptionalFields_Click(sender As Object, e As EventArgs) Handles btnOptionalFields.Click
|
||||
OpenOptionalFields()
|
||||
End Sub
|
||||
|
||||
Private Sub chkSync_CheckedChanged(sender As Object, e As EventArgs) Handles chkSync.CheckedChanged
|
||||
ToggleSyncButton()
|
||||
End Sub
|
||||
|
||||
Private Sub lstSettings_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstSettings.SelectedValueChanged
|
||||
ChangePanel()
|
||||
End Sub
|
||||
End Class
|
||||
Generated
+1
-2
@@ -96,11 +96,10 @@ Partial Class frmStartUpWizard
|
||||
'
|
||||
'llbManual
|
||||
'
|
||||
Me.llbManual.AutoSize = True
|
||||
Me.llbManual.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!)
|
||||
Me.llbManual.Location = New System.Drawing.Point(14, 158)
|
||||
Me.llbManual.Name = "llbManual"
|
||||
Me.llbManual.Size = New System.Drawing.Size(151, 13)
|
||||
Me.llbManual.Size = New System.Drawing.Size(303, 13)
|
||||
Me.llbManual.TabIndex = 3
|
||||
Me.llbManual.TabStop = True
|
||||
Me.llbManual.Text = "Game Backup Monitor Manual"
|
||||
|
||||
@@ -66,7 +66,7 @@ Public Class frmStartUpWizard
|
||||
If oDatabase.CheckDB() Then
|
||||
'Make sure database is the latest version
|
||||
oDatabase.DatabaseUpgrade()
|
||||
mgrMonitorList.SyncMonitorLists(False)
|
||||
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
|
||||
mgrCommon.ShowMessage(frmStartUpWizard_ExistingData, MsgBoxStyle.Information)
|
||||
End If
|
||||
End Sub
|
||||
@@ -98,10 +98,18 @@ Public Class frmStartUpWizard
|
||||
End Sub
|
||||
|
||||
Private Sub DownloadSettings()
|
||||
Dim sImportURL As String
|
||||
|
||||
If mgrCommon.IsUnix Then
|
||||
sImportURL = App_URLImportLinux
|
||||
Else
|
||||
sImportURL = App_URLImport
|
||||
End If
|
||||
|
||||
If mgrCommon.ShowMessage(frmStartUpWizard_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
If mgrMonitorList.DoImport(App_URLImport) Then
|
||||
If mgrMonitorList.DoImport(sImportURL) Then
|
||||
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
@@ -116,7 +124,7 @@ Public Class frmStartUpWizard
|
||||
frm.GameData = oGameData
|
||||
frm.ShowDialog()
|
||||
LoadGameSettings()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
End Sub
|
||||
|
||||
Private Sub OpenMonitorList()
|
||||
@@ -125,7 +133,7 @@ Public Class frmStartUpWizard
|
||||
frm.DisableExternalFunctions = True
|
||||
frm.ShowDialog()
|
||||
LoadGameSettings()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
|
||||
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
End Sub
|
||||
|
||||
Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
|
||||
|
||||
Generated
+163
@@ -0,0 +1,163 @@
|
||||
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
|
||||
Partial Class frmSyncFields
|
||||
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.grpFields = New System.Windows.Forms.GroupBox()
|
||||
Me.chkMonitorGame = New System.Windows.Forms.CheckBox()
|
||||
Me.chkIcon = New System.Windows.Forms.CheckBox()
|
||||
Me.chkVersion = New System.Windows.Forms.CheckBox()
|
||||
Me.chkCompany = New System.Windows.Forms.CheckBox()
|
||||
Me.chkGamePath = New System.Windows.Forms.CheckBox()
|
||||
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
|
||||
Me.btnCancel = New System.Windows.Forms.Button()
|
||||
Me.btnSave = New System.Windows.Forms.Button()
|
||||
Me.grpFields.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'grpFields
|
||||
'
|
||||
Me.grpFields.Controls.Add(Me.chkMonitorGame)
|
||||
Me.grpFields.Controls.Add(Me.chkIcon)
|
||||
Me.grpFields.Controls.Add(Me.chkVersion)
|
||||
Me.grpFields.Controls.Add(Me.chkCompany)
|
||||
Me.grpFields.Controls.Add(Me.chkGamePath)
|
||||
Me.grpFields.Controls.Add(Me.chkTimeStamp)
|
||||
Me.grpFields.Location = New System.Drawing.Point(12, 12)
|
||||
Me.grpFields.Name = "grpFields"
|
||||
Me.grpFields.Size = New System.Drawing.Size(195, 162)
|
||||
Me.grpFields.TabIndex = 0
|
||||
Me.grpFields.TabStop = False
|
||||
Me.grpFields.Text = "Available Fields"
|
||||
'
|
||||
'chkMonitorGame
|
||||
'
|
||||
Me.chkMonitorGame.AutoSize = True
|
||||
Me.chkMonitorGame.Location = New System.Drawing.Point(6, 134)
|
||||
Me.chkMonitorGame.Name = "chkMonitorGame"
|
||||
Me.chkMonitorGame.Size = New System.Drawing.Size(109, 17)
|
||||
Me.chkMonitorGame.TabIndex = 5
|
||||
Me.chkMonitorGame.Text = "Monitor this game"
|
||||
Me.chkMonitorGame.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkIcon
|
||||
'
|
||||
Me.chkIcon.AutoSize = True
|
||||
Me.chkIcon.Location = New System.Drawing.Point(6, 111)
|
||||
Me.chkIcon.Name = "chkIcon"
|
||||
Me.chkIcon.Size = New System.Drawing.Size(148, 17)
|
||||
Me.chkIcon.TabIndex = 4
|
||||
Me.chkIcon.Text = "Icon (Not Recommended)"
|
||||
Me.chkIcon.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkVersion
|
||||
'
|
||||
Me.chkVersion.AutoSize = True
|
||||
Me.chkVersion.Location = New System.Drawing.Point(6, 88)
|
||||
Me.chkVersion.Name = "chkVersion"
|
||||
Me.chkVersion.Size = New System.Drawing.Size(61, 17)
|
||||
Me.chkVersion.TabIndex = 3
|
||||
Me.chkVersion.Text = "Version"
|
||||
Me.chkVersion.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkCompany
|
||||
'
|
||||
Me.chkCompany.AutoSize = True
|
||||
Me.chkCompany.Location = New System.Drawing.Point(6, 65)
|
||||
Me.chkCompany.Name = "chkCompany"
|
||||
Me.chkCompany.Size = New System.Drawing.Size(70, 17)
|
||||
Me.chkCompany.TabIndex = 2
|
||||
Me.chkCompany.Text = "Company"
|
||||
Me.chkCompany.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkGamePath
|
||||
'
|
||||
Me.chkGamePath.AutoSize = True
|
||||
Me.chkGamePath.Location = New System.Drawing.Point(6, 42)
|
||||
Me.chkGamePath.Name = "chkGamePath"
|
||||
Me.chkGamePath.Size = New System.Drawing.Size(180, 17)
|
||||
Me.chkGamePath.TabIndex = 1
|
||||
Me.chkGamePath.Text = "Game Path (Not Recommended)"
|
||||
Me.chkGamePath.UseVisualStyleBackColor = True
|
||||
'
|
||||
'chkTimeStamp
|
||||
'
|
||||
Me.chkTimeStamp.AutoSize = True
|
||||
Me.chkTimeStamp.Location = New System.Drawing.Point(6, 19)
|
||||
Me.chkTimeStamp.Name = "chkTimeStamp"
|
||||
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
|
||||
Me.chkTimeStamp.TabIndex = 0
|
||||
Me.chkTimeStamp.Text = "Save multiple backups"
|
||||
Me.chkTimeStamp.UseVisualStyleBackColor = True
|
||||
'
|
||||
'btnCancel
|
||||
'
|
||||
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
|
||||
Me.btnCancel.Location = New System.Drawing.Point(132, 180)
|
||||
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
|
||||
'
|
||||
'btnSave
|
||||
'
|
||||
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
|
||||
Me.btnSave.Location = New System.Drawing.Point(52, 180)
|
||||
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
|
||||
'
|
||||
'frmSyncFields
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(219, 211)
|
||||
Me.Controls.Add(Me.btnCancel)
|
||||
Me.Controls.Add(Me.btnSave)
|
||||
Me.Controls.Add(Me.grpFields)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.MaximizeBox = False
|
||||
Me.MinimizeBox = False
|
||||
Me.Name = "frmSyncFields"
|
||||
Me.ShowIcon = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
|
||||
Me.Text = "Optional Sync Fields"
|
||||
Me.grpFields.ResumeLayout(False)
|
||||
Me.grpFields.PerformLayout()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
|
||||
Friend WithEvents grpFields As GroupBox
|
||||
Friend WithEvents chkMonitorGame As CheckBox
|
||||
Friend WithEvents chkIcon As CheckBox
|
||||
Friend WithEvents chkVersion As CheckBox
|
||||
Friend WithEvents chkCompany As CheckBox
|
||||
Friend WithEvents chkGamePath As CheckBox
|
||||
Friend WithEvents chkTimeStamp As CheckBox
|
||||
Friend WithEvents btnCancel As Button
|
||||
Friend WithEvents btnSave As Button
|
||||
End Class
|
||||
@@ -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>
|
||||
@@ -0,0 +1,115 @@
|
||||
Imports GBM.My.Resources
|
||||
|
||||
Public Class frmSyncFields
|
||||
Private eSyncFields As clsGame.eOptionalSyncFields
|
||||
|
||||
Public Property SyncFields As clsGame.eOptionalSyncFields
|
||||
Get
|
||||
Return eSyncFields
|
||||
End Get
|
||||
Set(value As clsGame.eOptionalSyncFields)
|
||||
eSyncFields = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Sub LoadForm()
|
||||
'Load fields
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
|
||||
chkCompany.Checked = True
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
|
||||
chkGamePath.Checked = True
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
|
||||
chkIcon.Checked = True
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
|
||||
chkMonitorGame.Checked = True
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
|
||||
chkTimeStamp.Checked = True
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
|
||||
chkVersion.Checked = True
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SetForm()
|
||||
'Set Form Name
|
||||
Me.Text = frmSyncFields_FormName
|
||||
|
||||
'Set Form Text
|
||||
btnCancel.Text = frmSyncFields_btnCancel
|
||||
btnSave.Text = frmSyncFields_btnSave
|
||||
grpFields.Text = frmSyncFields_grpFields
|
||||
chkMonitorGame.Text = frmSyncFields_chkMonitorGame
|
||||
chkIcon.Text = frmSyncFields_chkIcon
|
||||
chkVersion.Text = frmSyncFields_chkVersion
|
||||
chkCompany.Text = frmSyncFields_chkCompany
|
||||
chkGamePath.Text = frmSyncFields_chkGamePath
|
||||
chkTimeStamp.Text = frmSyncFields_chkTimeStamp
|
||||
End Sub
|
||||
|
||||
Private Sub frmSyncFields_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
SetForm()
|
||||
LoadForm()
|
||||
End Sub
|
||||
|
||||
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
|
||||
Me.DialogResult = DialogResult.OK
|
||||
Me.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
|
||||
Me.DialogResult = DialogResult.Cancel
|
||||
Me.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
|
||||
If chkTimeStamp.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged
|
||||
If chkGamePath.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkCompany_CheckedChanged(sender As Object, e As EventArgs) Handles chkCompany.CheckedChanged
|
||||
If chkCompany.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkVersion_CheckedChanged(sender As Object, e As EventArgs) Handles chkVersion.CheckedChanged
|
||||
If chkVersion.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkIcon_CheckedChanged(sender As Object, e As EventArgs) Handles chkIcon.CheckedChanged
|
||||
If chkIcon.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub chkMonitorGame_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorGame.CheckedChanged
|
||||
If chkMonitorGame.Checked Then
|
||||
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
|
||||
Else
|
||||
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
@@ -90,13 +90,21 @@
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent Condition="$(Platform)==x64">echo Running x64 Post Build Event...
|
||||
COPY /Y "$(SolutionDir)\GBM\x64\sqlite3.dll" .
|
||||
RMDIR /S /Q Utilities\x86</PostBuildEvent>
|
||||
<PostBuildEvent Condition="$(Platform)==x86">echo Running x86 Post Build Event...
|
||||
COPY /Y "$(SolutionDir)\GBM\x86\sqlite3.dll" .
|
||||
RMDIR /S /Q Utilities\x64</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>References\Mono.Data.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>References\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
@@ -187,6 +195,12 @@
|
||||
<DependentUpon>frmMain.vb</DependentUpon>
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\frmSyncFields.Designer.vb">
|
||||
<DependentUpon>frmSyncFields.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\frmSyncFields.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\frmTags.Designer.vb">
|
||||
<DependentUpon>frmTags.vb</DependentUpon>
|
||||
</Compile>
|
||||
@@ -265,6 +279,9 @@
|
||||
<DependentUpon>frmMain.vb</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\frmSyncFields.resx">
|
||||
<DependentUpon>frmSyncFields.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\frmTags.resx">
|
||||
<DependentUpon>frmTags.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -320,7 +337,14 @@
|
||||
<Content Include="License\credits.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="References\System.Data.SQLite.dll" />
|
||||
<Content Include="References\Mono.Data.Sqlite.dll" />
|
||||
<Content Include="Utilities\x64\7za.exe">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x86\7za.exe">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="x86\sqlite3.dll" />
|
||||
<None Include="Resources\gbm.ico" />
|
||||
<Content Include="Resources\Admin.png" />
|
||||
<Content Include="Resources\Clock.png" />
|
||||
@@ -332,30 +356,7 @@
|
||||
<Content Include="Resources\Inbox.png" />
|
||||
<Content Include="Resources\type.ico" />
|
||||
<Content Include="Resources\User.png" />
|
||||
<Content Include="Utilities\x64\7za.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x64\7za.exe">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x64\7zxa.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x86\7za.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x86\7za.exe">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Utilities\x86\7zxa.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="x64\SQLite.Interop.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="x86\SQLite.Interop.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="x64\sqlite3.dll" />
|
||||
<None Include="Resources\Stopped.png" />
|
||||
<None Include="Resources\Detected.png" />
|
||||
<None Include="Resources\Ready.png" />
|
||||
@@ -387,6 +388,7 @@
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
@@ -394,5 +396,6 @@
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
|
||||
-->
|
||||
</Project>
|
||||
@@ -3,7 +3,7 @@
|
||||
License for use and distribution
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Copyright (C) 1999-2015 Igor Pavlov.
|
||||
Copyright (C) 1999-2016 Igor Pavlov.
|
||||
|
||||
7-Zip Extra files are under the GNU LGPL license.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
GBM - Game Backup Monitor
|
||||
Copyright (C) 2015 Michael J. Seiferling
|
||||
Copyright (C) 2016 Michael J. Seiferling
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -16,4 +16,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Contact Information:
|
||||
|
||||
mseiferling@gmail.com
|
||||
gamebackupmonitor@gmail.com
|
||||
+69
-28
@@ -42,7 +42,7 @@ Public Class mgrBackup
|
||||
'Create manifest item
|
||||
oItem.Name = oGameInfo.Name
|
||||
'Keep the path relative to the manifest location
|
||||
oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & "\", "")
|
||||
oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & Path.DirectorySeparatorChar, "")
|
||||
oItem.RestorePath = oGameInfo.TruePath
|
||||
oItem.AbsolutePath = oGameInfo.AbsolutePath
|
||||
oItem.DateUpdated = dTimeStamp
|
||||
@@ -50,15 +50,15 @@ Public Class mgrBackup
|
||||
oItem.CheckSum = sCheckSum
|
||||
|
||||
'Save Remote Manifest
|
||||
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then
|
||||
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Remote)
|
||||
If mgrManifest.DoSpecificManifestCheck(oItem, mgrSQLite.Database.Remote) Then
|
||||
mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
|
||||
End If
|
||||
|
||||
'Save Local Manifest
|
||||
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Local)
|
||||
If mgrManifest.DoGlobalManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdateByName(oItem, mgrSQLite.Database.Local)
|
||||
Else
|
||||
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
|
||||
End If
|
||||
@@ -75,7 +75,7 @@ Public Class mgrBackup
|
||||
Using oStream
|
||||
If sList <> String.Empty Then
|
||||
For Each sTypeItem As String In sList.Split(":")
|
||||
oStream.WriteLine("""" & sBackupPath & "\" & sTypeItem & """")
|
||||
oStream.WriteLine("""" & sBackupPath & Path.DirectorySeparatorChar & sTypeItem & """")
|
||||
Next
|
||||
End If
|
||||
oStream.Flush()
|
||||
@@ -85,6 +85,55 @@ Public Class mgrBackup
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Function CheckBackupPrereq(ByVal oGame As clsGame) As Boolean
|
||||
Dim sBackupFile As String = oSettings.BackupFolder
|
||||
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
|
||||
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
|
||||
|
||||
If mgrRestore.CheckManifest(oGame.Name) Then
|
||||
If mgrCommon.ShowMessage(mgrBackup_ConfirmManifestConflict, oGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
RaiseEvent UpdateLog(mgrBackup_ErrorManifestConflict, False, ToolTipIcon.Error, True)
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) And Not oGame.AppendTimeStamp Then
|
||||
If mgrCommon.ShowMessage(mgrBackup_ConfirmOverwrite, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOverwriteAbort, oGame.Name), False, ToolTipIcon.Error, True)
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Sub CheckOldBackups(ByVal oGame As clsGame)
|
||||
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByName(oGame.Name, mgrSQLite.Database.Remote)
|
||||
Dim oGameBackup As clsBackup
|
||||
Dim sOldBackup As String
|
||||
Dim iBackupCount As Integer = oGameBackups.Count
|
||||
Dim iDelCount As Integer
|
||||
|
||||
'If we've hit or exceeded the maximum backup limit
|
||||
If oGameBackups.Count >= oGame.BackupLimit Then
|
||||
'How many do we need to delete
|
||||
iDelCount = (oGameBackups.Count - oGame.BackupLimit) + 1
|
||||
|
||||
'Delete the oldest backup(s) (Manifest entry and backup file)
|
||||
For i = 1 To iDelCount
|
||||
oGameBackup = oGameBackups(oGameBackups.Count - i)
|
||||
sOldBackup = Settings.BackupFolder & Path.DirectorySeparatorChar & oGameBackup.FileName
|
||||
|
||||
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Remote)
|
||||
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Local)
|
||||
mgrCommon.DeleteFile(sOldBackup)
|
||||
mgrCommon.DeleteDirectoryByBackup(Settings.BackupFolder & Path.DirectorySeparatorChar, oGameBackup)
|
||||
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupLimitExceeded, Path.GetFileName(sOldBackup)), False, ToolTipIcon.Info, True)
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
|
||||
Dim oGame As clsGame
|
||||
Dim bDoBackup As Boolean
|
||||
@@ -109,15 +158,8 @@ Public Class mgrBackup
|
||||
CancelOperation = False
|
||||
RaiseEvent UpdateBackupInfo(oGame)
|
||||
|
||||
If mgrRestore.CheckManifest(oGame.Name) Then
|
||||
If mgrCommon.ShowMessage(mgrBackup_ConfirmManifestConflict, oGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
RaiseEvent UpdateLog(mgrBackup_ErrorManifestConflict, False, ToolTipIcon.Error, True)
|
||||
bDoBackup = False
|
||||
End If
|
||||
End If
|
||||
|
||||
If oSettings.CreateSubFolder Then
|
||||
sBackupFile = sBackupFile & "\" & oGame.Name
|
||||
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
|
||||
Try
|
||||
If Not Directory.Exists(sBackupFile) Then
|
||||
Directory.CreateDirectory(sBackupFile)
|
||||
@@ -129,22 +171,16 @@ Public Class mgrBackup
|
||||
End If
|
||||
|
||||
If oGame.AppendTimeStamp Then
|
||||
sBackupFile = sBackupFile & "\" & oGame.Name & sTimeStamp & ".7z"
|
||||
CheckOldBackups(oGame)
|
||||
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
|
||||
Else
|
||||
sBackupFile = sBackupFile & "\" & oGame.Name & ".7z"
|
||||
End If
|
||||
|
||||
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) Then
|
||||
If mgrCommon.ShowMessage(mgrBackup_ConfirmOverwrite, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOverwriteAbort, oGame.Name), False, ToolTipIcon.Error, True)
|
||||
bDoBackup = False
|
||||
End If
|
||||
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
|
||||
End If
|
||||
|
||||
If bDoBackup Then
|
||||
If oGame.AbsolutePath = False Then
|
||||
If oGame.Path <> String.Empty Then
|
||||
sSavePath = oGame.ProcessPath & "\" & oGame.Path
|
||||
sSavePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oGame.Path
|
||||
Else
|
||||
sSavePath = oGame.ProcessPath
|
||||
End If
|
||||
@@ -161,15 +197,16 @@ Public Class mgrBackup
|
||||
BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation)
|
||||
|
||||
Try
|
||||
If Directory.Exists(sSavePath) Then
|
||||
If Settings.Is7zUtilityValid Then
|
||||
'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
|
||||
'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
|
||||
If File.Exists(sBackupFile) Then
|
||||
File.Delete(sBackupFile)
|
||||
End If
|
||||
|
||||
If Directory.Exists(sSavePath) Then
|
||||
prs7z.StartInfo.Arguments = "a -t7z " & "-i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
|
||||
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
|
||||
prs7z.StartInfo.Arguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
|
||||
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
|
||||
prs7z.StartInfo.UseShellExecute = False
|
||||
prs7z.StartInfo.RedirectStandardOutput = True
|
||||
prs7z.StartInfo.CreateNoWindow = True
|
||||
@@ -186,7 +223,7 @@ Public Class mgrBackup
|
||||
prs7z.WaitForExit()
|
||||
If Not CancelOperation Then
|
||||
If prs7z.ExitCode = 0 Then
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, oGame.Name), False, ToolTipIcon.Info, True)
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.GetFileSize(sBackupFile)}), False, ToolTipIcon.Info, True)
|
||||
bBackupCompleted = True
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
|
||||
@@ -194,6 +231,10 @@ Public Class mgrBackup
|
||||
End If
|
||||
End If
|
||||
prs7z.Dispose()
|
||||
Else
|
||||
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
|
||||
bBackupCompleted = False
|
||||
End If
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True)
|
||||
bBackupCompleted = False
|
||||
|
||||
+129
-4
@@ -1,8 +1,27 @@
|
||||
Imports GBM.My.Resources
|
||||
Imports System.Net
|
||||
Imports System.IO
|
||||
Imports System.Security.Principal
|
||||
|
||||
Public Class mgrCommon
|
||||
|
||||
'These need to be updated when upgrading the packaged 7z utility
|
||||
Private Shared sUtility64Hash As String = "05ACEE3BAC0C6C4E396116EF27B953F992DE8D28DD14D317977F45692304C318" 'v16.02 7za.exe x64
|
||||
Private Shared sUtility32Hash As String = "7AA7056DB4348229A288EEF49027B94C0D8D1A3C3AEDC6FA89B640334C7B37E9" 'v16.02 7za.exe x86
|
||||
|
||||
Public Shared ReadOnly Property UtilityHash As String
|
||||
Get
|
||||
Select Case mgrPath.ReleaseType
|
||||
Case 64
|
||||
Return sUtility64Hash
|
||||
Case 32
|
||||
Return sUtility32Hash
|
||||
Case Else
|
||||
Return sUtility32Hash
|
||||
End Select
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly Property BuildVersion As Integer
|
||||
Get
|
||||
Return My.Application.Info.Version.Build
|
||||
@@ -19,6 +38,7 @@ Public Class mgrCommon
|
||||
Try
|
||||
Dim request As WebRequest = WebRequest.Create(URL)
|
||||
Dim response As WebResponse = request.GetResponse()
|
||||
response.Close()
|
||||
Catch ex As Exception
|
||||
Return False
|
||||
End Try
|
||||
@@ -96,6 +116,11 @@ Public Class mgrCommon
|
||||
Dim sExemptList As String() = {"dosbox", "scummvm"}
|
||||
Dim bFound As Boolean = False
|
||||
|
||||
'We can't search if we don't have a configuration
|
||||
If oGame.Temporary Then
|
||||
Return True
|
||||
End If
|
||||
|
||||
For Each s As String In sExemptList
|
||||
If oGame.ProcessName.ToLower.Contains(s) Then bFound = True
|
||||
Next
|
||||
@@ -107,12 +132,18 @@ Public Class mgrCommon
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public Shared Function IsElevated() As Boolean
|
||||
If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then
|
||||
Public Shared Function IsUnix() As Boolean
|
||||
If Path.DirectorySeparatorChar = "/" Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
|
||||
Return False
|
||||
End Function
|
||||
|
||||
Public Shared Function IsElevated() As Boolean
|
||||
Dim oID As WindowsIdentity = WindowsIdentity.GetCurrent
|
||||
Dim oPrincipal As New WindowsPrincipal(oID)
|
||||
Return oPrincipal.IsInRole(WindowsBuiltInRole.Administrator)
|
||||
End Function
|
||||
|
||||
Public Shared Sub RestartAsAdmin()
|
||||
@@ -126,6 +157,91 @@ Public Class mgrCommon
|
||||
oProcess.Start()
|
||||
End Sub
|
||||
|
||||
Public Shared Function SetSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
|
||||
Return eSyncFields Or eSyncField
|
||||
End Function
|
||||
|
||||
Public Shared Function RemoveSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
|
||||
Return eSyncFields And (Not eSyncField)
|
||||
End Function
|
||||
|
||||
'Delete file based on OS type
|
||||
Public Shared Sub DeleteFile(ByVal sPath As String, Optional ByVal bRecycle As Boolean = True)
|
||||
If File.Exists(sPath) Then
|
||||
If IsUnix() Then
|
||||
File.Delete(sPath)
|
||||
Else
|
||||
If bRecycle Then
|
||||
My.Computer.FileSystem.DeleteFile(sPath, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
||||
Else
|
||||
File.Delete(sPath)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Delete directory based on OS type
|
||||
Public Shared Sub DeleteDirectory(ByVal sPath As String, Optional ByVal bRecursive As Boolean = False)
|
||||
If Directory.Exists(sPath) Then
|
||||
If IsUnix() Then
|
||||
Directory.Delete(sPath, bRecursive)
|
||||
Else
|
||||
My.Computer.FileSystem.DeleteDirectory(sPath, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Delete a sub-folder based on the provided backup information
|
||||
Public Shared Sub DeleteDirectoryByBackup(ByVal sBackupFolder As String, ByVal oBackup As clsBackup)
|
||||
Dim oDir As DirectoryInfo
|
||||
Dim sDir As String = sBackupFolder & oBackup.Name
|
||||
|
||||
'Delete sub directory if it's empty
|
||||
If oBackup.FileName.StartsWith(oBackup.Name & Path.DirectorySeparatorChar) Then
|
||||
If Directory.Exists(sDir) Then
|
||||
'Check if there's any sub-directories or files remaining
|
||||
oDir = New DirectoryInfo(sDir)
|
||||
If oDir.GetDirectories.Length = 0 And oDir.GetFiles.Length = 0 Then
|
||||
'Folder is empty, delete the empty sub-folder
|
||||
If Directory.Exists(sDir) Then DeleteDirectory(sDir)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Save string as text file
|
||||
Public Shared Sub SaveText(ByVal sText As String, ByVal sPath As String)
|
||||
Dim oStream As StreamWriter
|
||||
|
||||
Try
|
||||
If File.Exists(sPath) Then DeleteFile(sPath, False)
|
||||
oStream = New StreamWriter(sPath)
|
||||
oStream.Write(sText)
|
||||
oStream.Flush()
|
||||
oStream.Close()
|
||||
Catch ex As Exception
|
||||
ShowMessage(mgrCommon_ErrorWritingTextFile, ex.Message, MsgBoxStyle.Critical)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'Get a file size
|
||||
Public Shared Function GetFileSize(ByVal sFile As String) As String
|
||||
Dim oFileInfo As FileInfo
|
||||
Dim dFileSize As Double
|
||||
|
||||
Try
|
||||
oFileInfo = New FileInfo(sFile)
|
||||
dFileSize = oFileInfo.Length
|
||||
If dFileSize > 1048576 Then
|
||||
Return FormatString(App_MB, Math.Round(dFileSize / 1048576, 2).ToString)
|
||||
Else
|
||||
Return FormatString(App_KB, Math.Round(dFileSize / 1024, 2).ToString)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Return String.Empty
|
||||
End Try
|
||||
End Function
|
||||
|
||||
'Handles no extra parameters
|
||||
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
|
||||
Dim oResult As MsgBoxResult
|
||||
@@ -178,6 +294,15 @@ Public Class mgrCommon
|
||||
Return sString
|
||||
End Function
|
||||
|
||||
'Compare functions
|
||||
Public Shared Function CompareImportTagsByName(oItem1 As Tag, oItem2 As Tag) As Integer
|
||||
Return String.Compare(oItem1.Name, oItem2.Name)
|
||||
End Function
|
||||
|
||||
Public Shared Function CompareByListBoxItemByValue(sItem1 As KeyValuePair(Of String, String), sItem2 As KeyValuePair(Of String, String)) As Integer
|
||||
Return String.Compare(sItem1.Value, sItem2.Value)
|
||||
End Function
|
||||
|
||||
'Maintenance Only - Function for string management
|
||||
Public Shared Sub GetAllStrings(ByVal ctlParent As Control, ByRef sResource As String, ByRef sCode As String, ByVal sFormName As String)
|
||||
For Each ctl As Control In ctlParent.Controls
|
||||
|
||||
+156
-56
@@ -1,6 +1,37 @@
|
||||
Public Class mgrManifest
|
||||
|
||||
Public Shared Function ReadManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
|
||||
Private Shared Function MapToObject(ByVal dr As DataRow) As clsBackup
|
||||
Dim oBackupItem As clsBackup
|
||||
|
||||
oBackupItem = New clsBackup
|
||||
oBackupItem.ID = CStr(dr("ManifestID"))
|
||||
oBackupItem.Name = CStr(dr("Name"))
|
||||
oBackupItem.FileName = CStr(dr("FileName"))
|
||||
oBackupItem.RestorePath = CStr(dr("RestorePath"))
|
||||
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
|
||||
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
|
||||
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
|
||||
|
||||
Return oBackupItem
|
||||
End Function
|
||||
|
||||
Private Shared Function SetCoreParameters(ByVal oBackupItem As clsBackup) As Hashtable
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
hshParams.Add("ID", oBackupItem.ID)
|
||||
hshParams.Add("Name", oBackupItem.Name)
|
||||
hshParams.Add("FileName", oBackupItem.FileName)
|
||||
hshParams.Add("Path", oBackupItem.TruePath)
|
||||
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
|
||||
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
|
||||
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
|
||||
hshParams.Add("CheckSum", oBackupItem.CheckSum)
|
||||
|
||||
Return hshParams
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadFullManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
@@ -11,15 +42,26 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oBackupItem = New clsBackup
|
||||
oBackupItem.ID = CStr(dr("ManifestID"))
|
||||
oBackupItem.Name = CStr(dr("Name"))
|
||||
oBackupItem.FileName = CStr(dr("FileName"))
|
||||
oBackupItem.RestorePath = CStr(dr("RestorePath"))
|
||||
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
|
||||
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
|
||||
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
|
||||
oBackupItem = MapToObject(dr)
|
||||
slList.Add(oBackupItem.ID, oBackupItem)
|
||||
Next
|
||||
|
||||
Return slList
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadLatestManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
Dim oBackupItem As clsBackup
|
||||
Dim slList As New SortedList
|
||||
|
||||
sSQL = "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, Max(DateUpdated) As DateUpdated, UpdatedBy, CheckSum FROM manifest GROUP BY Name ORDER By Name ASC"
|
||||
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oBackupItem = MapToObject(dr)
|
||||
slList.Add(oBackupItem.Name, oBackupItem)
|
||||
Next
|
||||
|
||||
@@ -27,7 +69,80 @@
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function DoManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
|
||||
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As List(Of clsBackup)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim oBackupItem As New clsBackup
|
||||
Dim oList As New List(Of clsBackup)
|
||||
|
||||
|
||||
sSQL = "SELECT * from manifest "
|
||||
sSQL &= "WHERE Name = @Name ORDER BY DateUpdated Desc"
|
||||
|
||||
hshParams.Add("Name", sName)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oBackupItem = MapToObject(dr)
|
||||
oList.Add(oBackupItem)
|
||||
Next
|
||||
|
||||
Return oList
|
||||
End Function
|
||||
|
||||
Public Shared Function DoManifestGetByID(ByVal sID As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim oBackupItem As New clsBackup
|
||||
Dim oList As New List(Of clsBackup)
|
||||
|
||||
sSQL = "SELECT * from manifest "
|
||||
sSQL &= "WHERE ManifestID = @ID ORDER BY DateUpdated Desc"
|
||||
|
||||
hshParams.Add("ID", sID)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oBackupItem = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oBackupItem
|
||||
End Function
|
||||
|
||||
'This should only be used to update specific entries in the remote manifest
|
||||
Public Shared Function DoSpecificManifestCheck(ByRef oItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) As Boolean
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
sSQL = "SELECT * from manifest "
|
||||
sSQL &= "WHERE Name = @Name AND FileName = @FileName"
|
||||
|
||||
hshParams.Add("Name", oItem.Name)
|
||||
hshParams.Add("FileName", oItem.FileName)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
If oData.Tables(0).Rows.Count > 0 Then
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oItem.ID = CStr(dr("ManifestID"))
|
||||
Next
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
|
||||
End Function
|
||||
|
||||
'This should only be used to update entries in the local manifest
|
||||
Public Shared Function DoGlobalManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
@@ -48,12 +163,11 @@
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
|
||||
Public Shared Function DoManifestNameCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim oBackupItem As New clsBackup
|
||||
|
||||
sSQL = "SELECT * from manifest "
|
||||
sSQL &= "WHERE Name = @Name"
|
||||
@@ -62,82 +176,55 @@
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oBackupItem = New clsBackup
|
||||
oBackupItem.ID = CStr(dr("ManifestID"))
|
||||
oBackupItem.Name = CStr(dr("Name"))
|
||||
oBackupItem.FileName = CStr(dr("FileName"))
|
||||
oBackupItem.RestorePath = CStr(dr("RestorePath"))
|
||||
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
|
||||
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
|
||||
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
|
||||
Next
|
||||
If oData.Tables(0).Rows.Count > 0 Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
|
||||
Return oBackupItem
|
||||
End Function
|
||||
|
||||
Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)"
|
||||
|
||||
hshParams.Add("ID", oBackupItem.ID)
|
||||
hshParams.Add("Name", oBackupItem.Name)
|
||||
hshParams.Add("FileName", oBackupItem.FileName)
|
||||
hshParams.Add("Path", oBackupItem.TruePath)
|
||||
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
|
||||
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
|
||||
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
|
||||
hshParams.Add("CheckSum", oBackupItem.CheckSum)
|
||||
hshParams = SetCoreParameters(oBackupItem)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoManifestUpdate(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Public Shared Sub DoManifestUpdateByName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
|
||||
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName"
|
||||
|
||||
hshParams.Add("Name", oBackupItem.Name)
|
||||
hshParams.Add("FileName", oBackupItem.FileName)
|
||||
hshParams.Add("Path", oBackupItem.TruePath)
|
||||
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
|
||||
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
|
||||
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
|
||||
hshParams.Add("CheckSum", oBackupItem.CheckSum)
|
||||
hshParams = SetCoreParameters(oBackupItem)
|
||||
hshParams.Add("QueryName", oBackupItem.Name)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoManifestNameUpdate(ByVal sOriginalName As String, ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Public Shared Sub DoManifestUpdateByID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
|
||||
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName"
|
||||
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID"
|
||||
|
||||
hshParams.Add("Name", oBackupItem.Name)
|
||||
hshParams.Add("FileName", oBackupItem.FileName)
|
||||
hshParams.Add("Path", oBackupItem.TruePath)
|
||||
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
|
||||
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
|
||||
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
|
||||
hshParams.Add("CheckSum", oBackupItem.CheckSum)
|
||||
hshParams.Add("QueryName", sOriginalName)
|
||||
hshParams = SetCoreParameters(oBackupItem)
|
||||
hshParams.Add("QueryID", oBackupItem.ID)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoManifestDelete(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Public Shared Sub DoManifestDeletebyName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
@@ -150,6 +237,19 @@
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoManifestDeletebyID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
sSQL = "DELETE FROM manifest "
|
||||
sSQL &= "WHERE ManifestID = @ID"
|
||||
|
||||
hshParams.Add("ID", oBackupItem.ID)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoManifestHashWipe()
|
||||
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
|
||||
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
|
||||
|
||||
+467
-446
@@ -10,336 +10,9 @@ Public Class mgrMonitorList
|
||||
|
||||
Public Shared Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
|
||||
|
||||
Public Shared Sub HandleBackupLocationChange()
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
|
||||
Dim iGameCount As Integer
|
||||
Private Shared Function MapToObject(ByVal dr As DataRow) As clsGame
|
||||
Dim oGame As New clsGame
|
||||
|
||||
'Check if a remote database already exists in the new backup location
|
||||
If oDatabase.CheckDB() Then
|
||||
'Make sure database is the latest version
|
||||
oDatabase.DatabaseUpgrade()
|
||||
|
||||
'See if the remote database is empty
|
||||
iGameCount = mgrMonitorList.ReadList(eListTypes.FullList, mgrSQLite.Database.Remote).Count
|
||||
|
||||
'If the remote database actually contains a list, then ask what to do
|
||||
If iGameCount > 0 Then
|
||||
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
mgrMonitorList.SyncMonitorLists()
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists(False)
|
||||
End If
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists()
|
||||
End If
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
|
||||
Dim oList As List(Of Game)
|
||||
Dim bSuccess As Boolean = False
|
||||
Dim oTagFilters As New List(Of clsTag)
|
||||
Dim oStringFilters As New Hashtable
|
||||
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
|
||||
|
||||
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmApplyFilter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
Dim frm As New frmFilter
|
||||
frm.ShowDialog()
|
||||
oTagFilters = frm.TagFilters
|
||||
oStringFilters = frm.StringFilters
|
||||
eCurrentFilter = frm.FilterType
|
||||
End If
|
||||
|
||||
oList = ReadListForExport(oTagFilters, oStringFilters, eCurrentFilter)
|
||||
|
||||
bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
|
||||
|
||||
If bSuccess Then
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ExportComplete, oList.Count, MsgBoxStyle.Information)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoListAddUpdateSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As Hashtable
|
||||
Dim oParamList As New List(Of Hashtable)
|
||||
|
||||
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly) "
|
||||
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
|
||||
sSQL &= "@TimeStamp, @ExcludeList, (SELECT ProcessPath FROM monitorlist WHERE MonitorID=@ID), "
|
||||
sSQL &= "(SELECT Icon FROM monitorlist WHERE MonitorID=@ID), @Hours, (SELECT Version FROM monitorlist WHERE MonitorID=@ID), "
|
||||
sSQL &= "(SELECT Company FROM monitorlist WHERE MonitorID=@ID), COALESCE((SELECT Enabled FROM monitorlist WHERE MonitorID=@ID),1), COALESCE((SELECT MonitorOnly FROM monitorlist WHERE MonitorID=@ID),0));"
|
||||
|
||||
For Each oGame As clsGame In hshGames.Values
|
||||
hshParams = New Hashtable
|
||||
|
||||
'Parameters
|
||||
hshParams.Add("ID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
hshParams.Add("Path", oGame.TruePath)
|
||||
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
|
||||
hshParams.Add("FolderSave", oGame.FolderSave)
|
||||
hshParams.Add("FileType", oGame.FileType)
|
||||
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
|
||||
hshParams.Add("ExcludeList", oGame.ExcludeList)
|
||||
hshParams.Add("Hours", oGame.Hours)
|
||||
|
||||
oParamList.Add(hshParams)
|
||||
Next
|
||||
|
||||
oDatabase.RunMassParamQuery(sSQL, oParamList)
|
||||
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoListDeleteSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As Hashtable
|
||||
Dim oParamList As New List(Of Hashtable)
|
||||
|
||||
sSQL = "DELETE FROM gametags "
|
||||
sSQL &= "WHERE MonitorID = @MonitorID;"
|
||||
sSQL &= "DELETE FROM monitorlist "
|
||||
sSQL &= "WHERE Name = @Name AND Process= @Process;"
|
||||
|
||||
For Each oGame As clsGame In hshGames.Values
|
||||
hshParams = New Hashtable
|
||||
hshParams.Add("MonitorID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
oParamList.Add(hshParams)
|
||||
Next
|
||||
|
||||
oDatabase.RunMassParamQuery(sSQL, oParamList)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub SyncMonitorLists(Optional ByVal bToRemote As Boolean = True)
|
||||
Dim hshCompareFrom As Hashtable
|
||||
Dim hshCompareTo As Hashtable
|
||||
Dim hshSyncItems As Hashtable
|
||||
Dim hshDeleteItems As Hashtable
|
||||
Dim oFromItem As clsGame
|
||||
Dim oToItem As clsGame
|
||||
Dim iChanges As Integer
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
If bToRemote Then
|
||||
RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True)
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrMonitorList_SyncFromMaster, False, ToolTipIcon.Info, True)
|
||||
End If
|
||||
|
||||
'Add / Update Sync
|
||||
If bToRemote Then
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
hshSyncItems = hshCompareFrom.Clone
|
||||
|
||||
For Each oFromItem In hshCompareFrom.Values
|
||||
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
|
||||
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
|
||||
If oFromItem.SyncEquals(oToItem) Then
|
||||
hshSyncItems.Remove(oFromItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If bToRemote Then
|
||||
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote)
|
||||
|
||||
Else
|
||||
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
'Sync Tags
|
||||
iChanges = mgrTags.SyncTags(bToRemote)
|
||||
iChanges += mgrGameTags.SyncGameTags(bToRemote)
|
||||
|
||||
'Delete Sync
|
||||
If bToRemote Then
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
hshDeleteItems = hshCompareTo.Clone
|
||||
|
||||
For Each oToItem In hshCompareTo.Values
|
||||
If hshCompareFrom.Contains(oToItem.CompoundKey) Then
|
||||
oFromItem = DirectCast(hshCompareFrom(oToItem.CompoundKey), clsGame)
|
||||
If oToItem.MinimalEquals(oFromItem) Then
|
||||
hshDeleteItems.Remove(oToItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If bToRemote Then
|
||||
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True)
|
||||
Cursor.Current = Cursors.Default
|
||||
Application.DoEvents()
|
||||
End Sub
|
||||
|
||||
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
|
||||
Dim hshCompareFrom As Hashtable
|
||||
Dim hshCompareTo As Hashtable
|
||||
Dim hshSyncItems As Hashtable
|
||||
Dim oFromItem As clsGame
|
||||
Dim oToItem As clsGame
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
'Add / Update Sync
|
||||
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, bWebRead)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
|
||||
hshSyncItems = hshCompareFrom.Clone
|
||||
|
||||
For Each oFromItem In hshCompareFrom.Values
|
||||
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
|
||||
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
|
||||
If oFromItem.CoreEquals(oToItem) Then
|
||||
hshSyncItems.Remove(oFromItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
Cursor.Current = Cursors.Default
|
||||
|
||||
If hshSyncItems.Count > 0 Then
|
||||
Dim frm As New frmAdvancedImport
|
||||
frm.ImportData = hshSyncItems
|
||||
If frm.ShowDialog() = DialogResult.OK Then
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
DoListAddUpdateSync(frm.ImportData)
|
||||
mgrTags.DoTagAddImport(frm.ImportData)
|
||||
|
||||
Cursor.Current = Cursors.Default
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ImportComplete, MsgBoxStyle.Information)
|
||||
End If
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ImportNothing, MsgBoxStyle.Information)
|
||||
End If
|
||||
|
||||
Application.DoEvents()
|
||||
End Sub
|
||||
|
||||
Public Shared Function DoImport(ByVal sPath As String) As Boolean
|
||||
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or _
|
||||
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
|
||||
If mgrCommon.CheckAddress(sPath) Then
|
||||
ImportMonitorList(sPath, True)
|
||||
Return True
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_WebNoReponse, sPath, MsgBoxStyle.Exclamation)
|
||||
Return False
|
||||
End If
|
||||
Else
|
||||
If File.Exists(sPath) Then
|
||||
ImportMonitorList(sPath)
|
||||
Return True
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_FileNotFound, sPath, MsgBoxStyle.Exclamation)
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, ByRef hshParams As Hashtable) As String
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim iCounter As Integer = 0
|
||||
|
||||
Select Case eFilterType
|
||||
Case frmFilter.eFilterType.NoFilter
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.FieldAnd, frmFilter.eFilterType.FieldOr
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist"
|
||||
|
||||
If hshStringFilters.Count > 0 Then
|
||||
sSQL &= " WHERE ("
|
||||
For Each de As DictionaryEntry In hshStringFilters
|
||||
sSQL &= de.Key & " LIKE @" & de.Key
|
||||
hshParams.Add(de.Key, "%" & de.Value.ToString & "%")
|
||||
iCounter += 1
|
||||
If iCounter <> hshStringFilters.Count Then
|
||||
Select Case eFilterType
|
||||
Case frmFilter.eFilterType.FieldAnd
|
||||
sSQL &= " AND "
|
||||
Case frmFilter.eFilterType.FieldOr
|
||||
sSQL &= " OR "
|
||||
End Select
|
||||
End If
|
||||
|
||||
Next
|
||||
sSQL &= ")"
|
||||
End If
|
||||
sSQL &= " ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.AnyTag
|
||||
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist "
|
||||
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
|
||||
|
||||
For Each oTag As clsTag In oTagFilters
|
||||
sSQL &= "@TagID" & iCounter & ","
|
||||
hshParams.Add("TagID" & iCounter, oTag.ID)
|
||||
iCounter += 1
|
||||
Next
|
||||
|
||||
sSQL = sSQL.TrimEnd(",")
|
||||
sSQL &= ") ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.AllTags
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID IN "
|
||||
|
||||
For Each oTag As clsTag In oTagFilters
|
||||
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
|
||||
If iCounter <> oTagFilters.Count - 1 Then
|
||||
sSQL &= " AND MonitorID IN "
|
||||
End If
|
||||
hshParams.Add("TagID" & iCounter, oTag.ID)
|
||||
iCounter += 1
|
||||
Next
|
||||
|
||||
sSQL &= " ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.NoTags
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc"
|
||||
End Select
|
||||
|
||||
Return sSQL
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim hshList As New Hashtable
|
||||
Dim oGame As clsGame
|
||||
Dim hshParams As New Hashtable
|
||||
Dim iCounter As Integer = 0
|
||||
|
||||
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New clsGame
|
||||
oGame.ID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
@@ -356,41 +29,33 @@ Public Class mgrMonitorList
|
||||
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
|
||||
oGame.Enabled = CBool(dr("Enabled"))
|
||||
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
|
||||
oGame.BackupLimit = CInt(dr("BackupLimit"))
|
||||
|
||||
hshList.Add(oGame.ID, oGame)
|
||||
Next
|
||||
|
||||
Return hshList
|
||||
Return oGame
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim sID As String
|
||||
Dim oList As New List(Of Game)
|
||||
Dim oGame As Game
|
||||
Private Shared Function SetCoreParameters(ByVal oGame As clsGame) As Hashtable
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
|
||||
hshParams.Add("ID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
hshParams.Add("Path", oGame.TruePath)
|
||||
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
|
||||
hshParams.Add("FolderSave", oGame.FolderSave)
|
||||
hshParams.Add("FileType", oGame.FileType)
|
||||
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
|
||||
hshParams.Add("ExcludeList", oGame.ExcludeList)
|
||||
hshParams.Add("ProcessPath", oGame.ProcessPath)
|
||||
hshParams.Add("Icon", oGame.Icon)
|
||||
hshParams.Add("Hours", oGame.Hours)
|
||||
hshParams.Add("Version", oGame.Version)
|
||||
hshParams.Add("Company", oGame.Company)
|
||||
hshParams.Add("Enabled", oGame.Enabled)
|
||||
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
|
||||
hshParams.Add("BackupLimit", oGame.BackupLimit)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New Game
|
||||
sID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
|
||||
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oGame.FolderSave = CBool(dr("FolderSave"))
|
||||
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
|
||||
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
|
||||
oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID)
|
||||
oList.Add(oGame)
|
||||
Next
|
||||
|
||||
Return oList
|
||||
Return hshParams
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadList(ByVal eListType As eListTypes, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
|
||||
@@ -405,24 +70,7 @@ Public Class mgrMonitorList
|
||||
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New clsGame
|
||||
oGame.ID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
|
||||
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oGame.FolderSave = CBool(dr("FolderSave"))
|
||||
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
|
||||
oGame.AppendTimeStamp = CBool(dr("TimeStamp"))
|
||||
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
|
||||
If Not IsDBNull(dr("ProcessPath")) Then oGame.ProcessPath = CStr(dr("ProcessPath"))
|
||||
If Not IsDBNull(dr("Icon")) Then oGame.Icon = CStr(dr("Icon"))
|
||||
oGame.Hours = CDbl(dr("Hours"))
|
||||
If Not IsDBNull(dr("Version")) Then oGame.Version = CStr(dr("Version"))
|
||||
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
|
||||
oGame.Enabled = CBool(dr("Enabled"))
|
||||
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
|
||||
|
||||
oGame = MapToObject(dr)
|
||||
Select Case eListType
|
||||
Case eListTypes.FullList
|
||||
'Don't wrap this, if it fails there's a problem with the database
|
||||
@@ -443,28 +91,13 @@ Public Class mgrMonitorList
|
||||
Public Shared Sub DoListAdd(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
|
||||
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly)"
|
||||
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit)"
|
||||
|
||||
'Parameters
|
||||
hshParams.Add("ID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
hshParams.Add("Path", oGame.TruePath)
|
||||
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
|
||||
hshParams.Add("FolderSave", oGame.FolderSave)
|
||||
hshParams.Add("FileType", oGame.FileType)
|
||||
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
|
||||
hshParams.Add("ExcludeList", oGame.ExcludeList)
|
||||
hshParams.Add("ProcessPath", oGame.ProcessPath)
|
||||
hshParams.Add("Icon", oGame.Icon)
|
||||
hshParams.Add("Hours", oGame.Hours)
|
||||
hshParams.Add("Version", oGame.Version)
|
||||
hshParams.Add("Company", oGame.Company)
|
||||
hshParams.Add("Enabled", oGame.Enabled)
|
||||
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
|
||||
hshParams = SetCoreParameters(oGame)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
|
||||
@@ -473,29 +106,14 @@ Public Class mgrMonitorList
|
||||
Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
|
||||
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
|
||||
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly WHERE MonitorID=@ID"
|
||||
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit WHERE MonitorID=@ID"
|
||||
|
||||
'Parameters
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
hshParams.Add("Path", oGame.TruePath)
|
||||
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
|
||||
hshParams.Add("FolderSave", oGame.FolderSave)
|
||||
hshParams.Add("FileType", oGame.FileType)
|
||||
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
|
||||
hshParams.Add("ExcludeList", oGame.ExcludeList)
|
||||
hshParams.Add("ProcessPath", oGame.ProcessPath)
|
||||
hshParams.Add("Icon", oGame.Icon)
|
||||
hshParams.Add("Hours", oGame.Hours)
|
||||
hshParams.Add("Version", oGame.Version)
|
||||
hshParams.Add("Company", oGame.Company)
|
||||
hshParams.Add("Enabled", oGame.Enabled)
|
||||
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
|
||||
hshParams.Add("ID", oGame.ID)
|
||||
hshParams = SetCoreParameters(oGame)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
|
||||
@@ -590,23 +208,7 @@ Public Class mgrMonitorList
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New clsGame
|
||||
oGame.ID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
|
||||
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oGame.FolderSave = CBool(dr("FolderSave"))
|
||||
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
|
||||
oGame.AppendTimeStamp = CBool(dr("TimeStamp"))
|
||||
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
|
||||
If Not IsDBNull(dr("ProcessPath")) Then oGame.ProcessPath = CStr(dr("ProcessPath"))
|
||||
If Not IsDBNull(dr("Icon")) Then oGame.Icon = CStr(dr("Icon"))
|
||||
oGame.Hours = CDbl(dr("Hours"))
|
||||
If Not IsDBNull(dr("Version")) Then oGame.Version = CStr(dr("Version"))
|
||||
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
|
||||
oGame.Enabled = CBool(dr("Enabled"))
|
||||
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
|
||||
oGame = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oGame
|
||||
@@ -629,23 +231,7 @@ Public Class mgrMonitorList
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New clsGame
|
||||
oGame.ID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
|
||||
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oGame.FolderSave = CBool(dr("FolderSave"))
|
||||
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
|
||||
oGame.AppendTimeStamp = CBool(dr("TimeStamp"))
|
||||
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
|
||||
If Not IsDBNull(dr("ProcessPath")) Then oGame.ProcessPath = CStr(dr("ProcessPath"))
|
||||
If Not IsDBNull(dr("Icon")) Then oGame.Icon = CStr(dr("Icon"))
|
||||
oGame.Hours = CDbl(dr("Hours"))
|
||||
If Not IsDBNull(dr("Version")) Then oGame.Version = CStr(dr("Version"))
|
||||
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
|
||||
oGame.Enabled = CBool(dr("Enabled"))
|
||||
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
|
||||
oGame = MapToObject(dr)
|
||||
hshGames.Add(iCounter, oGame)
|
||||
iCounter += 1
|
||||
Next
|
||||
@@ -678,4 +264,439 @@ Public Class mgrMonitorList
|
||||
End If
|
||||
End Function
|
||||
|
||||
'Sync Functions
|
||||
Public Shared Sub DoListAddUpdateSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local,
|
||||
Optional ByVal eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As Hashtable
|
||||
Dim oParamList As New List(Of Hashtable)
|
||||
|
||||
'Handle Optional Sync Fields
|
||||
Dim sGamePath As String
|
||||
Dim sIcon As String
|
||||
Dim sVersion As String
|
||||
Dim sCompany As String
|
||||
Dim sMonitorGame As String
|
||||
Dim sTimeStamp As String
|
||||
Dim sBackupLimit As String
|
||||
|
||||
'Setup SQL for optional fields
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
|
||||
sCompany = "@Company"
|
||||
Else
|
||||
sCompany = "(SELECT Company FROM monitorlist WHERE MonitorID=@ID)"
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
|
||||
sGamePath = "@ProcessPath"
|
||||
Else
|
||||
sGamePath = "(SELECT ProcessPath FROM monitorlist WHERE MonitorID=@ID)"
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
|
||||
sIcon = "@Icon"
|
||||
Else
|
||||
sIcon = "(SELECT Icon FROM monitorlist WHERE MonitorID=@ID)"
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
|
||||
sMonitorGame = "@Enabled"
|
||||
Else
|
||||
sMonitorGame = "COALESCE((SELECT Enabled FROM monitorlist WHERE MonitorID=@ID),1)"
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
|
||||
sTimeStamp = "@TimeStamp"
|
||||
sBackupLimit = "@BackupLimit"
|
||||
Else
|
||||
sTimeStamp = "COALESCE((SELECT TimeStamp FROM monitorlist WHERE MonitorID=@ID),0)"
|
||||
sBackupLimit = "COALESCE((SELECT BackupLimit FROM monitorlist WHERE MonitorID=@ID),2)"
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
|
||||
sVersion = "@Version"
|
||||
Else
|
||||
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
|
||||
End If
|
||||
|
||||
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit) "
|
||||
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
|
||||
sSQL &= sTimeStamp & ", @ExcludeList, " & sGamePath & ", "
|
||||
sSQL &= sIcon & ", @Hours, " & sVersion & ", "
|
||||
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ");"
|
||||
|
||||
For Each oGame As clsGame In hshGames.Values
|
||||
hshParams = New Hashtable
|
||||
|
||||
'Core Parameters
|
||||
hshParams.Add("ID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
hshParams.Add("Path", oGame.TruePath)
|
||||
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
|
||||
hshParams.Add("FolderSave", oGame.FolderSave)
|
||||
hshParams.Add("FileType", oGame.FileType)
|
||||
hshParams.Add("ExcludeList", oGame.ExcludeList)
|
||||
hshParams.Add("Hours", oGame.Hours)
|
||||
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
|
||||
|
||||
'Optional Parameters
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
|
||||
hshParams.Add("Company", oGame.Company)
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
|
||||
hshParams.Add("ProcessPath", oGame.ProcessPath)
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
|
||||
hshParams.Add("Icon", oGame.Icon)
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
|
||||
hshParams.Add("Enabled", oGame.Enabled)
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
|
||||
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
|
||||
hshParams.Add("BackupLimit", oGame.BackupLimit)
|
||||
End If
|
||||
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
|
||||
hshParams.Add("Version", oGame.Version)
|
||||
End If
|
||||
|
||||
oParamList.Add(hshParams)
|
||||
Next
|
||||
|
||||
oDatabase.RunMassParamQuery(sSQL, oParamList)
|
||||
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoListDeleteSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As Hashtable
|
||||
Dim oParamList As New List(Of Hashtable)
|
||||
|
||||
sSQL = "DELETE FROM gametags "
|
||||
sSQL &= "WHERE MonitorID = @MonitorID;"
|
||||
sSQL &= "DELETE FROM monitorlist "
|
||||
sSQL &= "WHERE Name = @Name AND Process= @Process;"
|
||||
|
||||
For Each oGame As clsGame In hshGames.Values
|
||||
hshParams = New Hashtable
|
||||
hshParams.Add("MonitorID", oGame.ID)
|
||||
hshParams.Add("Name", oGame.Name)
|
||||
hshParams.Add("Process", oGame.TrueProcess)
|
||||
oParamList.Add(hshParams)
|
||||
Next
|
||||
|
||||
oDatabase.RunMassParamQuery(sSQL, oParamList)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub SyncMonitorLists(ByVal eSyncFields As clsGame.eOptionalSyncFields, Optional ByVal bToRemote As Boolean = True)
|
||||
Dim hshCompareFrom As Hashtable
|
||||
Dim hshCompareTo As Hashtable
|
||||
Dim hshSyncItems As Hashtable
|
||||
Dim hshDeleteItems As Hashtable
|
||||
Dim oFromItem As clsGame
|
||||
Dim oToItem As clsGame
|
||||
Dim iChanges As Integer
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
If bToRemote Then
|
||||
RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True)
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrMonitorList_SyncFromMaster, False, ToolTipIcon.Info, True)
|
||||
End If
|
||||
|
||||
'Add / Update Sync
|
||||
If bToRemote Then
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
hshSyncItems = hshCompareFrom.Clone
|
||||
|
||||
For Each oFromItem In hshCompareFrom.Values
|
||||
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
|
||||
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
|
||||
If oFromItem.SyncEquals(oToItem, eSyncFields) Then
|
||||
hshSyncItems.Remove(oFromItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If bToRemote Then
|
||||
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote, eSyncFields)
|
||||
Else
|
||||
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local, eSyncFields)
|
||||
End If
|
||||
|
||||
'Sync Tags
|
||||
iChanges = mgrTags.SyncTags(bToRemote)
|
||||
iChanges += mgrGameTags.SyncGameTags(bToRemote)
|
||||
|
||||
'Delete Sync
|
||||
If bToRemote Then
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
hshDeleteItems = hshCompareTo.Clone
|
||||
|
||||
For Each oToItem In hshCompareTo.Values
|
||||
If hshCompareFrom.Contains(oToItem.CompoundKey) Then
|
||||
oFromItem = DirectCast(hshCompareFrom(oToItem.CompoundKey), clsGame)
|
||||
If oToItem.MinimalEquals(oFromItem) Then
|
||||
hshDeleteItems.Remove(oToItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If bToRemote Then
|
||||
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Remote)
|
||||
Else
|
||||
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
|
||||
End If
|
||||
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True)
|
||||
Cursor.Current = Cursors.Default
|
||||
Application.DoEvents()
|
||||
End Sub
|
||||
|
||||
'Filter Functions
|
||||
Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, ByRef hshParams As Hashtable) As String
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim iCounter As Integer = 0
|
||||
|
||||
Select Case eFilterType
|
||||
Case frmFilter.eFilterType.NoFilter
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit FROM monitorlist ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.FieldAnd, frmFilter.eFilterType.FieldOr
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit FROM monitorlist"
|
||||
|
||||
If hshStringFilters.Count > 0 Then
|
||||
sSQL &= " WHERE ("
|
||||
For Each de As DictionaryEntry In hshStringFilters
|
||||
sSQL &= de.Key & " LIKE @" & de.Key
|
||||
hshParams.Add(de.Key, "%" & de.Value.ToString & "%")
|
||||
iCounter += 1
|
||||
If iCounter <> hshStringFilters.Count Then
|
||||
Select Case eFilterType
|
||||
Case frmFilter.eFilterType.FieldAnd
|
||||
sSQL &= " AND "
|
||||
Case frmFilter.eFilterType.FieldOr
|
||||
sSQL &= " OR "
|
||||
End Select
|
||||
End If
|
||||
|
||||
Next
|
||||
sSQL &= ")"
|
||||
End If
|
||||
sSQL &= " ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.AnyTag
|
||||
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit FROM monitorlist "
|
||||
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
|
||||
|
||||
For Each oTag As clsTag In oTagFilters
|
||||
sSQL &= "@TagID" & iCounter & ","
|
||||
hshParams.Add("TagID" & iCounter, oTag.ID)
|
||||
iCounter += 1
|
||||
Next
|
||||
|
||||
sSQL = sSQL.TrimEnd(",")
|
||||
sSQL &= ") ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.AllTags
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit FROM monitorlist WHERE MonitorID IN "
|
||||
|
||||
For Each oTag As clsTag In oTagFilters
|
||||
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
|
||||
If iCounter <> oTagFilters.Count - 1 Then
|
||||
sSQL &= " AND MonitorID IN "
|
||||
End If
|
||||
hshParams.Add("TagID" & iCounter, oTag.ID)
|
||||
iCounter += 1
|
||||
Next
|
||||
|
||||
sSQL &= " ORDER BY Name Asc"
|
||||
Case frmFilter.eFilterType.NoTags
|
||||
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit FROM monitorlist WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc"
|
||||
End Select
|
||||
|
||||
Return sSQL
|
||||
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim hshList As New Hashtable
|
||||
Dim oGame As clsGame
|
||||
Dim hshParams As New Hashtable
|
||||
Dim iCounter As Integer = 0
|
||||
|
||||
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = MapToObject(dr)
|
||||
|
||||
hshList.Add(oGame.ID, oGame)
|
||||
Next
|
||||
|
||||
Return hshList
|
||||
End Function
|
||||
|
||||
|
||||
'Import / Export Functions
|
||||
Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim oData As DataSet
|
||||
Dim sSQL As String = String.Empty
|
||||
Dim sID As String
|
||||
Dim oList As New List(Of Game)
|
||||
Dim oGame As Game
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
|
||||
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oGame = New Game
|
||||
sID = CStr(dr("MonitorID"))
|
||||
oGame.Name = CStr(dr("Name"))
|
||||
oGame.ProcessName = CStr(dr("Process"))
|
||||
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
|
||||
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
|
||||
oGame.FolderSave = CBool(dr("FolderSave"))
|
||||
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
|
||||
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
|
||||
oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID)
|
||||
oList.Add(oGame)
|
||||
Next
|
||||
|
||||
Return oList
|
||||
End Function
|
||||
|
||||
Public Shared Function DoImport(ByVal sPath As String) As Boolean
|
||||
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or
|
||||
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
|
||||
If mgrCommon.CheckAddress(sPath) Then
|
||||
ImportMonitorList(sPath, True)
|
||||
Return True
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_WebNoReponse, sPath, MsgBoxStyle.Exclamation)
|
||||
Return False
|
||||
End If
|
||||
Else
|
||||
If File.Exists(sPath) Then
|
||||
ImportMonitorList(sPath)
|
||||
Return True
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_FileNotFound, sPath, MsgBoxStyle.Exclamation)
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
|
||||
Dim hshCompareFrom As Hashtable
|
||||
Dim hshCompareTo As Hashtable
|
||||
Dim hshSyncItems As Hashtable
|
||||
Dim oFromItem As clsGame
|
||||
Dim oToItem As clsGame
|
||||
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
'Add / Update Sync
|
||||
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, bWebRead)
|
||||
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
|
||||
|
||||
hshSyncItems = hshCompareFrom.Clone
|
||||
|
||||
For Each oFromItem In hshCompareFrom.Values
|
||||
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
|
||||
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
|
||||
If oFromItem.CoreEquals(oToItem) Then
|
||||
hshSyncItems.Remove(oFromItem.CompoundKey)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
Cursor.Current = Cursors.Default
|
||||
|
||||
If hshSyncItems.Count > 0 Then
|
||||
Dim frm As New frmAdvancedImport
|
||||
frm.ImportData = hshSyncItems
|
||||
If frm.ShowDialog() = DialogResult.OK Then
|
||||
Cursor.Current = Cursors.WaitCursor
|
||||
|
||||
DoListAddUpdateSync(frm.FinalData)
|
||||
mgrTags.DoTagAddImport(frm.FinalData)
|
||||
|
||||
Cursor.Current = Cursors.Default
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ImportComplete, MsgBoxStyle.Information)
|
||||
End If
|
||||
Else
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ImportNothing, MsgBoxStyle.Information)
|
||||
End If
|
||||
|
||||
Application.DoEvents()
|
||||
End Sub
|
||||
|
||||
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
|
||||
Dim oList As List(Of Game)
|
||||
Dim bSuccess As Boolean = False
|
||||
Dim oTagFilters As New List(Of clsTag)
|
||||
Dim oStringFilters As New Hashtable
|
||||
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
|
||||
|
||||
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmApplyFilter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
Dim frm As New frmFilter
|
||||
frm.ShowDialog()
|
||||
oTagFilters = frm.TagFilters
|
||||
oStringFilters = frm.StringFilters
|
||||
eCurrentFilter = frm.FilterType
|
||||
End If
|
||||
|
||||
oList = ReadListForExport(oTagFilters, oStringFilters, eCurrentFilter)
|
||||
|
||||
bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
|
||||
|
||||
If bSuccess Then
|
||||
mgrCommon.ShowMessage(mgrMonitorList_ExportComplete, oList.Count, MsgBoxStyle.Information)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Other Functions
|
||||
Public Shared Sub HandleBackupLocationChange(ByVal oSettings As mgrSettings)
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
|
||||
Dim iGameCount As Integer
|
||||
|
||||
'Check if a remote database already exists in the new backup location
|
||||
If oDatabase.CheckDB() Then
|
||||
'Make sure database is the latest version
|
||||
oDatabase.DatabaseUpgrade()
|
||||
|
||||
'See if the remote database is empty
|
||||
iGameCount = mgrMonitorList.ReadList(eListTypes.FullList, mgrSQLite.Database.Remote).Count
|
||||
|
||||
'If the remote database actually contains a list, then ask what to do
|
||||
If iGameCount > 0 Then
|
||||
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
|
||||
End If
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
End If
|
||||
Else
|
||||
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
+79
-49
@@ -5,10 +5,11 @@ Imports System.Reflection
|
||||
|
||||
Public Class mgrPath
|
||||
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
|
||||
Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\gbm"
|
||||
Private Shared sDBLocation As String = sSettingsRoot & "\gbm.s3db"
|
||||
Private Shared sIncludeFile As String = sSettingsRoot & "\gbm_include.txt"
|
||||
Private Shared sExcludeFile As String = sSettingsRoot & "\gbm_exclude.txt"
|
||||
Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & Path.DirectorySeparatorChar & "gbm"
|
||||
Private Shared sDBLocation As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm.s3db"
|
||||
Private Shared sIncludeFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_include.txt"
|
||||
Private Shared sExcludeFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_exclude.txt"
|
||||
Private Shared sLogFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_log_" & Date.Now.ToString("dd-MM-yyyy-HH-mm-ss") & ".txt"
|
||||
Private Shared sRemoteDatabaseLocation As String
|
||||
Private Shared hshCustomVariables As Hashtable
|
||||
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
|
||||
@@ -36,8 +37,12 @@ Public Class mgrPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Shared ReadOnly Property Utility7zLocation As String
|
||||
Shared ReadOnly Property Default7zLocation As String
|
||||
Get
|
||||
If mgrCommon.IsUnix Then
|
||||
Return "/usr/bin/7za"
|
||||
End If
|
||||
|
||||
Select Case oReleaseType
|
||||
Case ProcessorArchitecture.Amd64
|
||||
Return Application.StartupPath & "\Utilities\x64\7za.exe"
|
||||
@@ -73,6 +78,12 @@ Public Class mgrPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Shared ReadOnly Property LogFileLocation As String
|
||||
Get
|
||||
Return sLogFile
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Shared ReadOnly Property SettingsRoot As String
|
||||
Get
|
||||
Return sSettingsRoot
|
||||
@@ -84,7 +95,7 @@ Public Class mgrPath
|
||||
Return sRemoteDatabaseLocation
|
||||
End Get
|
||||
Set(value As String)
|
||||
sRemoteDatabaseLocation = value & "\gbm.s3db"
|
||||
sRemoteDatabaseLocation = value & Path.DirectorySeparatorChar & "gbm.s3db"
|
||||
End Set
|
||||
End Property
|
||||
|
||||
@@ -112,19 +123,27 @@ Public Class mgrPath
|
||||
Dim iRemove As Integer = 0
|
||||
Dim iBackFolders As Integer = 0
|
||||
Dim bDeep As Boolean
|
||||
Dim cDS As Char = Path.DirectorySeparatorChar 'Set the directory seperator based on the OS
|
||||
|
||||
'We are working with a case insenstive file system, ensure a uniform case
|
||||
If Not mgrCommon.IsUnix Then
|
||||
'If we are working with a case insenstive file system, use a uniform case to reduce possible issues
|
||||
sProcessPath = sProcessPath.ToLower
|
||||
sSavePath = sSavePath.ToLower
|
||||
Else
|
||||
'If we are on Unix trim the root off
|
||||
sProcessPath = sProcessPath.TrimStart(cDS)
|
||||
sSavePath = sSavePath.TrimStart(cDS)
|
||||
End If
|
||||
|
||||
'We need to ensure we have a single trailing slash on the parameters
|
||||
sProcessPath = sProcessPath.TrimEnd("\")
|
||||
sSavePath = sSavePath.TrimEnd("\")
|
||||
sProcessPath &= "\"
|
||||
sSavePath &= "\"
|
||||
sProcessPath = sProcessPath.TrimEnd(cDS)
|
||||
sSavePath = sSavePath.TrimEnd(cDS)
|
||||
sProcessPath &= cDS
|
||||
sSavePath &= cDS
|
||||
|
||||
|
||||
'Determines the direction we need to go, we always want to be relative to the process location
|
||||
If sSavePath.Split("\").Length > sProcessPath.Split("\").Length Then
|
||||
If sSavePath.Split(cDS).Length > sProcessPath.Split(cDS).Length Then
|
||||
sPath1 = sProcessPath
|
||||
sPath2 = sSavePath
|
||||
bDeep = True
|
||||
@@ -135,8 +154,8 @@ Public Class mgrPath
|
||||
End If
|
||||
|
||||
'Build an array of folders to work with from each path
|
||||
sPath1Array = sPath1.Split("\")
|
||||
sPath2Array = sPath2.Split("\")
|
||||
sPath1Array = sPath1.Split(cDS)
|
||||
sPath2Array = sPath2.Split(cDS)
|
||||
|
||||
'Take the shortest path and remove the common folders from both
|
||||
For Each s As String In sPath1Array
|
||||
@@ -148,25 +167,25 @@ Public Class mgrPath
|
||||
Next
|
||||
|
||||
'Remove the trailing slashes
|
||||
sPath1 = sPath1.TrimEnd("\")
|
||||
sPath2 = sPath2.TrimEnd("\")
|
||||
sPath1 = sPath1.TrimEnd(cDS)
|
||||
sPath2 = sPath2.TrimEnd(cDS)
|
||||
|
||||
'Determine which way we go
|
||||
If bDeep Then
|
||||
If sPath1.Length > 0 Then
|
||||
iBackFolders = sPath1.Split("\").Length
|
||||
iBackFolders = sPath1.Split(cDS).Length
|
||||
End If
|
||||
sResult = sPath2
|
||||
Else
|
||||
If sPath2.Length > 0 Then
|
||||
iBackFolders = sPath2.Split("\").Length
|
||||
iBackFolders = sPath2.Split(cDS).Length
|
||||
End If
|
||||
sResult = sPath1
|
||||
End If
|
||||
|
||||
'Insert direction modifiers based on how many folders are left
|
||||
For i = 1 To iBackFolders
|
||||
sResult = "..\" & sResult
|
||||
sResult = ".." & cDS & sResult
|
||||
Next i
|
||||
|
||||
'Done
|
||||
@@ -181,13 +200,12 @@ Public Class mgrPath
|
||||
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
|
||||
Dim oCustomVariable As clsPathVariable
|
||||
|
||||
If sValue.Contains("*mydocs*") Then
|
||||
Return sValue.Replace("*mydocs*", sMyDocs)
|
||||
End If
|
||||
|
||||
If sValue.Contains("*publicdocs*") Then
|
||||
Return sValue.Replace("*publicdocs*", sPublicDocs)
|
||||
For Each oCustomVariable In hshCustomVariables.Values
|
||||
If sValue.Contains(oCustomVariable.FormattedName) Then
|
||||
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
|
||||
End If
|
||||
Next
|
||||
|
||||
If sValue.Contains("*appdatalocal*") Then
|
||||
Return sValue.Replace("*appdatalocal*", sAppDataLocal)
|
||||
@@ -197,15 +215,21 @@ Public Class mgrPath
|
||||
Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
|
||||
End If
|
||||
|
||||
'This needs to be tested last for Unix compatability
|
||||
If sValue.Contains("*mydocs*") Then
|
||||
Return sValue.Replace("*mydocs*", sMyDocs)
|
||||
End If
|
||||
|
||||
'Don't use these in Unix
|
||||
If Not mgrCommon.IsUnix Then
|
||||
If sValue.Contains("*publicdocs*") Then
|
||||
Return sValue.Replace("*publicdocs*", sPublicDocs)
|
||||
End If
|
||||
|
||||
If sValue.Contains("*currentuser*") Then
|
||||
Return sValue.Replace("*currentuser*", sCurrentUser)
|
||||
End If
|
||||
|
||||
For Each oCustomVariable In hshCustomVariables.Values
|
||||
If sValue.Contains(oCustomVariable.FormattedName) Then
|
||||
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
|
||||
End If
|
||||
Next
|
||||
|
||||
Return sValue
|
||||
End Function
|
||||
@@ -218,13 +242,11 @@ Public Class mgrPath
|
||||
Dim sCurrentUser As String = "*currentuser*"
|
||||
Dim oCustomVariable As clsPathVariable
|
||||
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs)
|
||||
End If
|
||||
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
|
||||
For Each oCustomVariable In hshCustomVariables.Values
|
||||
If sValue.Contains(oCustomVariable.Path) Then
|
||||
Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
|
||||
End If
|
||||
Next
|
||||
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal)
|
||||
@@ -234,15 +256,21 @@ Public Class mgrPath
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming)
|
||||
End If
|
||||
|
||||
'This needs to be tested last for Unix compatability
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs)
|
||||
End If
|
||||
|
||||
'Don't use these in Unix
|
||||
If Not mgrCommon.IsUnix Then
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
|
||||
End If
|
||||
|
||||
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then
|
||||
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser)
|
||||
End If
|
||||
|
||||
For Each oCustomVariable In hshCustomVariables.Values
|
||||
If sValue.Contains(oCustomVariable.Path) Then
|
||||
Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
|
||||
End If
|
||||
Next
|
||||
|
||||
Return sValue
|
||||
End Function
|
||||
@@ -252,11 +280,16 @@ Public Class mgrPath
|
||||
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
|
||||
Dim oCustomVariable As clsPathVariable
|
||||
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
|
||||
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
|
||||
|
||||
'Don't use these in Unix
|
||||
If Not mgrCommon.IsUnix Then
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
|
||||
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
|
||||
End If
|
||||
|
||||
'Load Custom Variables
|
||||
For Each oCustomVariable In hshCustomVariables.Values
|
||||
@@ -313,6 +346,7 @@ Public Class mgrPath
|
||||
Dim sFolder As String = String.Empty
|
||||
Dim bSearchFailed As Boolean = False
|
||||
|
||||
frmFind.GameName = sGameName
|
||||
frmFind.SearchItem = sProcess & ".*"
|
||||
frmFind.FolderSearch = False
|
||||
|
||||
@@ -333,13 +367,7 @@ Public Class mgrPath
|
||||
frmFind.ShowDialog()
|
||||
|
||||
If frmFind.FoundItem <> String.Empty Then
|
||||
sFolder = IO.Path.GetDirectoryName(frmFind.FoundItem)
|
||||
sMessage = mgrCommon.FormatString(mgrPath_ConfirmPathCorrect, New String() {sGameName, sFolder})
|
||||
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
Return sFolder
|
||||
Else
|
||||
sFolder = String.Empty
|
||||
End If
|
||||
Return frmFind.FoundItem
|
||||
Else
|
||||
bSearchFailed = True
|
||||
End If
|
||||
@@ -353,6 +381,8 @@ Public Class mgrPath
|
||||
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
sFolder = SetManualgamePath()
|
||||
End If
|
||||
|
||||
frmFind.Dispose()
|
||||
End If
|
||||
|
||||
Return sFolder
|
||||
|
||||
@@ -85,13 +85,70 @@ Public Class mgrProcesses
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer) As Boolean
|
||||
'This function will only work correctly on Unix
|
||||
Private Function GetUnixProcessArguments(ByVal prs As Process) As String()
|
||||
Dim sArguments As String
|
||||
Try
|
||||
sArguments = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline")
|
||||
Return sArguments.Split(vbNullChar)
|
||||
Catch ex As Exception
|
||||
Return New String() {String.Empty}
|
||||
End Try
|
||||
End Function
|
||||
|
||||
'This function will only work correctly on Unix
|
||||
Private Function GetUnixSymLinkDirectory(ByVal prs As Process) As String
|
||||
Dim prsls As Process
|
||||
Dim slsinfo As String()
|
||||
|
||||
'This is the best way I can think of to determine the end point of a symlink without doing even more crazy shit
|
||||
Try
|
||||
prsls = New Process
|
||||
prsls.StartInfo.FileName = "/bin/bash"
|
||||
prsls.StartInfo.Arguments = "-c ""ls -l /proc/" & prs.Id.ToString & " | grep cwd"""
|
||||
prsls.StartInfo.UseShellExecute = False
|
||||
prsls.StartInfo.RedirectStandardOutput = True
|
||||
prsls.StartInfo.CreateNoWindow = True
|
||||
prsls.Start()
|
||||
slsinfo = prsls.StandardOutput.ReadToEnd().Split(">")
|
||||
Return slsinfo(slsinfo.Length - 1).Trim
|
||||
Catch ex As Exception
|
||||
Return String.Empty
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
|
||||
Dim prsList() As Process = Process.GetProcesses
|
||||
Dim sProcessCheck As String = String.Empty
|
||||
Dim sProcessList As String = String.Empty
|
||||
Dim bWineProcess As Boolean = False
|
||||
|
||||
For Each prsCurrent As Process In prsList
|
||||
'This needs to be wrapped due to issues with Mono.
|
||||
Try
|
||||
sProcessCheck = prsCurrent.ProcessName
|
||||
|
||||
'Unix Handler
|
||||
'We need some special handling for Wine processes
|
||||
If mgrCommon.IsUnix And (sProcessCheck.ToLower = "wine-preloader" Or sProcessCheck.ToLower = "wine64-preloader") Then
|
||||
Dim sWinePath As String()
|
||||
'We can't use Path.GetFileName here, Wine uses the Windows seperator in arguments and Mono expects a different one in Unix.
|
||||
sWinePath = GetUnixProcessArguments(prsCurrent)(0).Split("\")
|
||||
sProcessCheck = sWinePath(sWinePath.Length - 1).Replace(".exe", "")
|
||||
bWineProcess = True
|
||||
Else
|
||||
bWineProcess = False
|
||||
End If
|
||||
|
||||
If bDebugMode And mgrCommon.IsUnix Then
|
||||
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & " " & GetUnixProcessArguments(prsCurrent)(0) & vbCrLf
|
||||
ElseIf bDebugMode Then
|
||||
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & vbCrLf
|
||||
End If
|
||||
Catch ex As Exception
|
||||
'Do Nothing
|
||||
End Try
|
||||
|
||||
If hshScanList.ContainsKey(sProcessCheck) Then
|
||||
prsFoundProcess = prsCurrent
|
||||
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
|
||||
@@ -105,7 +162,11 @@ Public Class mgrProcesses
|
||||
|
||||
If Not oGame.AbsolutePath Or oGame.Duplicate Then
|
||||
Try
|
||||
If Not bWineProcess Then
|
||||
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName)
|
||||
Else
|
||||
oGame.ProcessPath = GetUnixSymLinkDirectory(prsCurrent)
|
||||
End If
|
||||
Catch exWin32 As System.ComponentModel.Win32Exception
|
||||
'If an exception occurs the process is:
|
||||
'Running as administrator and the app isn't.
|
||||
@@ -117,10 +178,12 @@ Public Class mgrProcesses
|
||||
bNeedsPath = True
|
||||
iErrorCode = 299
|
||||
Else
|
||||
If bDebugMode Then mgrCommon.ShowMessage(exWin32.NativeErrorCode & " " & exWin32.Message & vbCrLf & vbCrLf & exWin32.StackTrace, MsgBoxStyle.Critical)
|
||||
'A different failure occured, drop out and continue to scan.
|
||||
Return False
|
||||
End If
|
||||
Catch exAll As Exception
|
||||
If bDebugMode Then mgrCommon.ShowMessage(exAll.Message & vbCrLf & vbCrLf & exAll.StackTrace, MsgBoxStyle.Critical)
|
||||
'A different failure occured, drop out and continue to scan.
|
||||
Return False
|
||||
End Try
|
||||
@@ -137,6 +200,8 @@ Public Class mgrProcesses
|
||||
End If
|
||||
Next
|
||||
|
||||
If bDebugMode Then mgrCommon.SaveText(sProcessList, mgrPath.SettingsRoot & "/gbm_process_list.txt")
|
||||
|
||||
Return False
|
||||
End Function
|
||||
|
||||
|
||||
+55
-52
@@ -28,39 +28,28 @@ Public Class mgrRestore
|
||||
Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup)
|
||||
Public Event SetLastAction(sMessage As String)
|
||||
|
||||
Private Shared Function CheckForPathOverride(ByRef oCheckBackup As clsBackup, ByVal oCheckGame As clsGame) As Boolean
|
||||
Dim oResult As MsgBoxResult
|
||||
|
||||
If oCheckBackup.RestorePath <> oCheckGame.Path Then
|
||||
oResult = mgrCommon.ShowMessage(mgrRestore_ConfirmPathMismatch, oCheckBackup.CroppedName, MsgBoxStyle.YesNoCancel)
|
||||
If oResult = MsgBoxResult.Yes Then
|
||||
Public Shared Sub DoPathOverride(ByRef oCheckBackup As clsBackup, ByVal oCheckGame As clsGame)
|
||||
'Always override the manifest restore path with the current configuration path if possible
|
||||
If Not oCheckGame.Temporary Then
|
||||
If Path.IsPathRooted(oCheckGame.Path) Then
|
||||
oCheckBackup.AbsolutePath = True
|
||||
oCheckBackup.RestorePath = oCheckGame.Path
|
||||
Else
|
||||
oCheckBackup.AbsolutePath = False
|
||||
End If
|
||||
oCheckBackup.RestorePath = oCheckGame.Path
|
||||
End If
|
||||
ElseIf oResult = MsgBoxResult.Cancel Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
Return True
|
||||
End Function
|
||||
End Sub
|
||||
|
||||
Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame, ByRef bTriggerReload As Boolean) As Boolean
|
||||
Dim sProcess As String
|
||||
Dim sRestorePath As String
|
||||
Dim bNoAuto As Boolean
|
||||
|
||||
'Before we do anything check if we need to override the current path
|
||||
If Not CheckForPathOverride(oRestoreInfo, oGame) Then
|
||||
Return False
|
||||
End If
|
||||
DoPathOverride(oRestoreInfo, oGame)
|
||||
|
||||
If Not oRestoreInfo.AbsolutePath Then
|
||||
If oGame.ProcessPath <> String.Empty Then
|
||||
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & "\" & oRestoreInfo.RestorePath
|
||||
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
|
||||
Else
|
||||
sProcess = oGame.TrueProcess
|
||||
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
|
||||
@@ -73,7 +62,7 @@ Public Class mgrRestore
|
||||
bTriggerReload = True
|
||||
|
||||
'Set path for restore
|
||||
oRestoreInfo.RelativeRestorePath = sRestorePath & "\" & oRestoreInfo.RestorePath
|
||||
oRestoreInfo.RelativeRestorePath = sRestorePath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
@@ -91,8 +80,8 @@ Public Class mgrRestore
|
||||
Dim bLocal As Boolean = False
|
||||
Dim bRemote As Boolean = False
|
||||
|
||||
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
|
||||
|
||||
If slLocalManifest.Contains(sAppName) Then
|
||||
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
|
||||
@@ -128,8 +117,8 @@ Public Class mgrRestore
|
||||
Dim bLocal As Boolean = False
|
||||
Dim bRemote As Boolean = False
|
||||
|
||||
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
|
||||
|
||||
For Each oItem As clsBackup In slRemoteManifest.Values
|
||||
If slLocalManifest.Contains(oItem.Name) Then
|
||||
@@ -159,36 +148,23 @@ Public Class mgrRestore
|
||||
Dim slRemoteManifest As SortedList
|
||||
Dim slRemovedItems As New SortedList
|
||||
|
||||
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
|
||||
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
|
||||
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
|
||||
|
||||
For Each oItem As clsBackup In slLocalManifest.Values
|
||||
If Not slRemoteManifest.Contains(oItem.Name) Then
|
||||
slRemovedItems.Add(oItem.Name, oItem)
|
||||
mgrManifest.DoManifestDelete(oItem, mgrSQLite.Database.Local)
|
||||
mgrManifest.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local)
|
||||
End If
|
||||
Next
|
||||
|
||||
Return slRemovedItems
|
||||
End Function
|
||||
|
||||
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup))
|
||||
Dim prs7z As Process
|
||||
Dim sBackupFile As String
|
||||
Dim sExtractPath As String
|
||||
Dim bDoRestore As Boolean
|
||||
Dim bRestoreCompleted As Boolean
|
||||
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup) As Boolean
|
||||
Dim sHash As String
|
||||
|
||||
For Each oBackupInfo In oRestoreList
|
||||
'Init
|
||||
prs7z = New Process
|
||||
sBackupFile = oSettings.BackupFolder & "\" & oBackupInfo.FileName
|
||||
sExtractPath = String.Empty
|
||||
bDoRestore = True
|
||||
bRestoreCompleted = False
|
||||
CancelOperation = False
|
||||
RaiseEvent UpdateRestoreInfo(oBackupInfo)
|
||||
Dim sExtractPath As String
|
||||
Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
|
||||
|
||||
If oBackupInfo.AbsolutePath Then
|
||||
sExtractPath = oBackupInfo.RestorePath
|
||||
@@ -203,11 +179,11 @@ Public Class mgrRestore
|
||||
Directory.CreateDirectory(sExtractPath)
|
||||
Catch ex As Exception
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True)
|
||||
bDoRestore = False
|
||||
Return False
|
||||
End Try
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
|
||||
bDoRestore = False
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -219,7 +195,7 @@ Public Class mgrRestore
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFailedCheck, oBackupInfo.Name), False, ToolTipIcon.Info, True)
|
||||
If mgrCommon.ShowMessage(mgrRestore_ConfirmFailedCheck, oBackupInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
|
||||
RaiseEvent UpdateLog(mgrRestore_ErrorCheckAbort, False, ToolTipIcon.Info, True)
|
||||
bDoRestore = False
|
||||
Return False
|
||||
End If
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_Verified, oBackupInfo.Name), False, ToolTipIcon.Info, True)
|
||||
@@ -229,11 +205,35 @@ Public Class mgrRestore
|
||||
End If
|
||||
End If
|
||||
|
||||
If bDoRestore Then
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup))
|
||||
Dim prs7z As Process
|
||||
Dim sBackupFile As String
|
||||
Dim sExtractPath As String
|
||||
Dim bRestoreCompleted As Boolean
|
||||
|
||||
For Each oBackupInfo In oRestoreList
|
||||
'Init
|
||||
prs7z = New Process
|
||||
sBackupFile = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
|
||||
sExtractPath = String.Empty
|
||||
bRestoreCompleted = False
|
||||
CancelOperation = False
|
||||
RaiseEvent UpdateRestoreInfo(oBackupInfo)
|
||||
|
||||
If oBackupInfo.AbsolutePath Then
|
||||
sExtractPath = oBackupInfo.RestorePath
|
||||
Else
|
||||
sExtractPath = oBackupInfo.RelativeRestorePath
|
||||
End If
|
||||
|
||||
Try
|
||||
If File.Exists(sBackupFile) Then
|
||||
prs7z.StartInfo.Arguments = "x """ & sBackupFile & """ -o""" & sExtractPath & "\"" -aoa -r"
|
||||
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
|
||||
If Settings.Is7zUtilityValid Then
|
||||
prs7z.StartInfo.Arguments = "x" & oSettings.Prepared7zArguments & """" & sBackupFile & """ -o""" & sExtractPath & Path.DirectorySeparatorChar & """ -aoa -r"
|
||||
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
|
||||
prs7z.StartInfo.UseShellExecute = False
|
||||
prs7z.StartInfo.RedirectStandardOutput = True
|
||||
prs7z.StartInfo.CreateNoWindow = True
|
||||
@@ -258,14 +258,18 @@ Public Class mgrRestore
|
||||
End If
|
||||
End If
|
||||
prs7z.Dispose()
|
||||
Else
|
||||
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
|
||||
bRestoreCompleted = False
|
||||
End If
|
||||
Else
|
||||
RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
|
||||
End If
|
||||
|
||||
If bRestoreCompleted Then
|
||||
'Save Local Manifest
|
||||
If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local)
|
||||
If mgrManifest.DoGlobalManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
|
||||
mgrManifest.DoManifestUpdateByName(oBackupInfo, mgrSQLite.Database.Local)
|
||||
Else
|
||||
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
|
||||
End If
|
||||
@@ -279,7 +283,6 @@ Public Class mgrRestore
|
||||
Else
|
||||
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName))
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
|
||||
+113
-19
@@ -1,6 +1,6 @@
|
||||
Imports GBM.My.Resources
|
||||
Imports System.IO
|
||||
Imports System.Data.SQLite
|
||||
Imports Mono.Data.Sqlite
|
||||
|
||||
Public Class mgrSQLite
|
||||
|
||||
@@ -73,13 +73,14 @@ Public Class mgrSQLite
|
||||
sSql = "CREATE TABLE settings (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
|
||||
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
|
||||
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, CheckSum BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
|
||||
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL);"
|
||||
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
|
||||
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);"
|
||||
|
||||
'Add Tables (Monitor List)
|
||||
sSql &= "CREATE TABLE monitorlist (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));"
|
||||
"BackupLimit INTEGER NOT NULL, PRIMARY KEY(Name, Process));"
|
||||
|
||||
'Add Tables (Tags)
|
||||
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
|
||||
@@ -91,7 +92,7 @@ Public Class mgrSQLite
|
||||
sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
|
||||
|
||||
'Add Tables (Local Manifest)
|
||||
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
|
||||
sSql &= "CREATE TABLE manifest (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);"
|
||||
|
||||
'Set Version
|
||||
@@ -110,16 +111,16 @@ Public Class mgrSQLite
|
||||
|
||||
Try
|
||||
'Create the DB
|
||||
SQLiteConnection.CreateFile(sDatabaseLocation)
|
||||
SqliteConnection.CreateFile(sDatabaseLocation)
|
||||
|
||||
'Add Tables (Remote Monitor List)
|
||||
sSql = "CREATE TABLE monitorlist (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));"
|
||||
"BackupLimit INTEGER NOT NULL, PRIMARY KEY(Name, Process));"
|
||||
|
||||
'Add Tables (Remote Manifest)
|
||||
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
|
||||
sSql &= "CREATE TABLE manifest (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);"
|
||||
|
||||
'Add Tables (Remote Tags)
|
||||
@@ -154,7 +155,7 @@ Public Class mgrSQLite
|
||||
|
||||
Public Sub Connect()
|
||||
If CheckDB() Then
|
||||
db = New SQLiteConnection(sConnectString)
|
||||
db = New SqliteConnection(sConnectString)
|
||||
db.Open()
|
||||
Else
|
||||
CreateDB()
|
||||
@@ -166,18 +167,18 @@ Public Class mgrSQLite
|
||||
db.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub BuildParams(ByRef command As SQLiteCommand, ByRef hshParams As Hashtable)
|
||||
Private Sub BuildParams(ByRef command As SqliteCommand, ByRef hshParams As Hashtable)
|
||||
For Each de As DictionaryEntry In hshParams
|
||||
command.Parameters.AddWithValue(de.Key, de.Value)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean
|
||||
Dim trans As SQLiteTransaction
|
||||
Dim command As SQLiteCommand
|
||||
Dim trans As SqliteTransaction
|
||||
Dim command As SqliteCommand
|
||||
|
||||
Connect()
|
||||
command = New SQLiteCommand(sSQL, db)
|
||||
command = New SqliteCommand(sSQL, db)
|
||||
BuildParams(command, hshParams)
|
||||
trans = db.BeginTransaction()
|
||||
|
||||
@@ -197,11 +198,11 @@ Public Class mgrSQLite
|
||||
End Function
|
||||
|
||||
Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean
|
||||
Dim trans As SQLiteTransaction
|
||||
Dim command As SQLiteCommand
|
||||
Dim trans As SqliteTransaction
|
||||
Dim command As SqliteCommand
|
||||
|
||||
Connect()
|
||||
command = New SQLiteCommand(sSQL, db)
|
||||
command = New SqliteCommand(sSQL, db)
|
||||
trans = db.BeginTransaction()
|
||||
|
||||
Try
|
||||
@@ -223,16 +224,17 @@ Public Class mgrSQLite
|
||||
End Function
|
||||
|
||||
Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet
|
||||
Dim adapter As SQLiteDataAdapter
|
||||
Dim command As SQLiteCommand
|
||||
Dim adapter As SqliteDataAdapter
|
||||
Dim command As SqliteCommand
|
||||
Dim oData As New DataSet
|
||||
|
||||
Connect()
|
||||
command = New SQLiteCommand(sSQL, db)
|
||||
command = New SqliteCommand(sSQL, db)
|
||||
BuildParams(command, hshParams)
|
||||
|
||||
Try
|
||||
adapter = New SQLiteDataAdapter(command)
|
||||
adapter = New SqliteDataAdapter()
|
||||
adapter.SelectCommand = command
|
||||
adapter.Fill(oData)
|
||||
Catch ex As Exception
|
||||
mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
|
||||
@@ -506,6 +508,98 @@ Public Class mgrSQLite
|
||||
End If
|
||||
End If
|
||||
|
||||
'0.96 Upgrade
|
||||
If GetDatabaseVersion() < 96 Then
|
||||
If eDatabase = Database.Local Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v95")
|
||||
|
||||
'Add new setting
|
||||
sSQL = "ALTER TABLE settings ADD COLUMN CompressionLevel INTEGER NOT NULL DEFAULT 5;"
|
||||
|
||||
sSQL &= "PRAGMA user_version=96"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
End If
|
||||
If eDatabase = Database.Remote Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v95")
|
||||
|
||||
sSQL = "PRAGMA user_version=96"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
End If
|
||||
End If
|
||||
|
||||
'0.97 Upgrade
|
||||
If GetDatabaseVersion() < 97 Then
|
||||
If eDatabase = Database.Local Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v96")
|
||||
|
||||
'Add new settings
|
||||
sSQL = "ALTER TABLE settings ADD COLUMN Custom7zArguments TEXT;"
|
||||
sSQL &= "ALTER TABLE settings ADD COLUMN Custom7zLocation TEXT;"
|
||||
sSQL &= "ALTER TABLE settings ADD COLUMN SyncFields INTEGER NOT NULL DEFAULT 32;"
|
||||
sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN NOT NULL DEFAULT 0;"
|
||||
sSQL &= "PRAGMA user_version=97"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
End If
|
||||
If eDatabase = Database.Remote Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v96")
|
||||
|
||||
sSQL = "PRAGMA user_version=97"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
End If
|
||||
End If
|
||||
|
||||
'0.98 Upgrade
|
||||
If GetDatabaseVersion() < 98 Then
|
||||
If eDatabase = Database.Local Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v97")
|
||||
|
||||
'Overhaul Manifest Table
|
||||
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
|
||||
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
|
||||
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
|
||||
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
|
||||
|
||||
'Add backup limit field
|
||||
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
|
||||
|
||||
sSQL &= "PRAGMA user_version=98"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
|
||||
'Run a compact
|
||||
CompactDatabase()
|
||||
End If
|
||||
If eDatabase = Database.Remote Then
|
||||
'Backup DB before starting
|
||||
BackupDB("v97")
|
||||
|
||||
'Overhaul Manifest Table
|
||||
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
|
||||
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
|
||||
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
|
||||
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
|
||||
|
||||
'Add backup limit field
|
||||
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
|
||||
|
||||
sSQL &= "PRAGMA user_version=98"
|
||||
|
||||
RunParamQuery(sSQL, New Hashtable)
|
||||
|
||||
'Run a compact
|
||||
CompactDatabase()
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Public Function GetDBSize() As Long
|
||||
|
||||
+110
-2
@@ -14,7 +14,12 @@ Public Class mgrSettings
|
||||
Private bTimeTracking As Boolean = True
|
||||
Private bSupressBackup As Boolean = False
|
||||
Private iSupressBackupThreshold As Integer = 10
|
||||
Private iCompressionLevel As Integer = 5
|
||||
Private s7zArguments As String = String.Empty
|
||||
Private s7zLocation As String = String.Empty
|
||||
Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"})
|
||||
Private eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None Or clsGame.eOptionalSyncFields.TimeStamp
|
||||
Private bAutoSaveLog As Boolean = False
|
||||
|
||||
Property StartWithWindows As Boolean
|
||||
Get
|
||||
@@ -133,6 +138,81 @@ Public Class mgrSettings
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property CompressionLevel As Integer
|
||||
Get
|
||||
Return iCompressionLevel
|
||||
End Get
|
||||
Set(value As Integer)
|
||||
iCompressionLevel = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property Custom7zArguments As String
|
||||
Get
|
||||
Return s7zArguments
|
||||
End Get
|
||||
Set(value As String)
|
||||
s7zArguments = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
ReadOnly Property Prepared7zArguments As String
|
||||
Get
|
||||
'Prepare custom 7z arguments
|
||||
Dim sPreparedArguments As String
|
||||
If s7zArguments <> String.Empty Then
|
||||
'Surround the arguments with spaces to be inserted into command
|
||||
sPreparedArguments = " " & s7zArguments & " "
|
||||
Else
|
||||
'The command always needs at least one space inserted
|
||||
sPreparedArguments = " "
|
||||
End If
|
||||
Return sPreparedArguments
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Property Custom7zLocation As String
|
||||
Get
|
||||
Return s7zLocation
|
||||
End Get
|
||||
Set(value As String)
|
||||
s7zLocation = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
ReadOnly Property Is7zUtilityValid As Boolean
|
||||
Get
|
||||
'We don't use a packaged 7za on Unix, assume valid.
|
||||
If mgrCommon.IsUnix Then
|
||||
Return True
|
||||
End If
|
||||
|
||||
If s7zLocation = String.Empty Then
|
||||
'Verify stored hash of the default utility if we're using it
|
||||
Return mgrCommon.UtilityHash = mgrHash.Generate_SHA256_Hash(mgrPath.Default7zLocation)
|
||||
Else
|
||||
'When using a custom utility assume it's valid, we have no way to be sure.
|
||||
Return True
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
|
||||
ReadOnly Property Utility7zLocation As String
|
||||
Get
|
||||
'Return default utility when custom setting is not used
|
||||
If s7zLocation = String.Empty Then
|
||||
Return mgrPath.Default7zLocation
|
||||
Else
|
||||
'Check if custom utility is available, if not use the default utility
|
||||
If File.Exists(s7zLocation) Then
|
||||
Return s7zLocation
|
||||
Else
|
||||
Return mgrPath.Default7zLocation
|
||||
End If
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Property BackupFolder As String
|
||||
Get
|
||||
Return sBackupFolder
|
||||
@@ -142,6 +222,24 @@ Public Class mgrSettings
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property SyncFields As clsGame.eOptionalSyncFields
|
||||
Get
|
||||
Return eSyncFields
|
||||
End Get
|
||||
Set(value As clsGame.eOptionalSyncFields)
|
||||
eSyncFields = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Property AutoSaveLog As Boolean
|
||||
Get
|
||||
Return bAutoSaveLog
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
bAutoSaveLog = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Sub SaveFromClass()
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
|
||||
Dim sSQL As String
|
||||
@@ -152,7 +250,8 @@ Public Class mgrSettings
|
||||
|
||||
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
|
||||
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @CheckSum, @StartWithWindows, "
|
||||
sSQL &= "@TimeTracking, @SupressBackup, @SupressBackupThreshold)"
|
||||
sSQL &= "@TimeTracking, @SupressBackup, @SupressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
|
||||
sSQL &= "@SyncFields,@AutoSaveLog)"
|
||||
|
||||
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
|
||||
hshParams.Add("StartToTray", StartToTray)
|
||||
@@ -168,7 +267,11 @@ Public Class mgrSettings
|
||||
hshParams.Add("TimeTracking", TimeTracking)
|
||||
hshParams.Add("SupressBackup", SupressBackup)
|
||||
hshParams.Add("SupressBackupThreshold", SupressBackupThreshold)
|
||||
|
||||
hshParams.Add("CompressionLevel", CompressionLevel)
|
||||
hshParams.Add("Custom7zArguments", Custom7zArguments)
|
||||
hshParams.Add("Custom7zLocation", Custom7zLocation)
|
||||
hshParams.Add("SyncFields", SyncFields)
|
||||
hshParams.Add("AutoSaveLog", AutoSaveLog)
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
@@ -197,6 +300,11 @@ Public Class mgrSettings
|
||||
TimeTracking = CBool(dr("TimeTracking"))
|
||||
SupressBackup = CBool(dr("SupressBackup"))
|
||||
SupressBackupThreshold = CInt(dr("SupressBackupThreshold"))
|
||||
CompressionLevel = CInt(dr("CompressionLevel"))
|
||||
If Not IsDBNull(dr("Custom7zArguments")) Then Custom7zArguments = CStr(dr("Custom7zArguments"))
|
||||
If Not IsDBNull(dr("Custom7zLocation")) Then Custom7zLocation = CStr(dr("Custom7zLocation"))
|
||||
SyncFields = CInt(dr("SyncFields"))
|
||||
AutoSaveLog = CBool(dr("AutoSaveLog"))
|
||||
Next
|
||||
|
||||
oDatabase.Disconnect()
|
||||
|
||||
+27
-15
@@ -1,26 +1,44 @@
|
||||
Public Class mgrTags
|
||||
|
||||
Private Shared Function MapToObject(ByVal dr As DataRow) As clsTag
|
||||
Dim oTag As New clsTag
|
||||
|
||||
oTag.ID = CStr(dr("TagID"))
|
||||
oTag.Name = CStr(dr("Name"))
|
||||
|
||||
Return oTag
|
||||
End Function
|
||||
|
||||
Private Shared Function SetCoreParameters(ByVal oTag As clsTag) As Hashtable
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
hshParams.Add("ID", oTag.ID)
|
||||
hshParams.Add("Name", oTag.Name)
|
||||
|
||||
Return hshParams
|
||||
End Function
|
||||
|
||||
Public Shared Sub DoTagAdd(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "INSERT INTO tags VALUES (@ID, @Name)"
|
||||
hshParams.Add("ID", oTag.ID)
|
||||
hshParams.Add("Name", oTag.Name)
|
||||
|
||||
hshParams = SetCoreParameters(oTag)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoTagUpdate(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
|
||||
Dim oDatabase As New mgrSQLite(iSelectDB)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "UPDATE tags SET Name=@Name "
|
||||
sSQL &= "WHERE TagID = @ID"
|
||||
|
||||
hshParams.Add("Name", oTag.Name)
|
||||
hshParams.Add("ID", oTag.ID)
|
||||
hshParams = SetCoreParameters(oTag)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
|
||||
@@ -57,9 +75,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oTag = New clsTag
|
||||
oTag.ID = CStr(dr("TagID"))
|
||||
oTag.Name = CStr(dr("Name"))
|
||||
oTag = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oTag
|
||||
@@ -80,9 +96,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oTag = New clsTag
|
||||
oTag.ID = CStr(dr("TagID"))
|
||||
oTag.Name = CStr(dr("Name"))
|
||||
oTag = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oTag
|
||||
@@ -124,9 +138,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oTag = New clsTag
|
||||
oTag.ID = CStr(dr("TagID"))
|
||||
oTag.Name = CStr(dr("Name"))
|
||||
oTag = MapToObject(dr)
|
||||
hshList.Add(oTag.Name, oTag)
|
||||
Next
|
||||
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
Public Class mgrVariables
|
||||
|
||||
Private Shared Function MapToObject(ByVal dr As DataRow) As clsPathVariable
|
||||
Dim oCustomVariable As New clsPathVariable
|
||||
|
||||
oCustomVariable.ID = CStr(dr("VariableID"))
|
||||
oCustomVariable.Name = CStr(dr("Name"))
|
||||
oCustomVariable.Path = CStr(dr("Path"))
|
||||
|
||||
Return oCustomVariable
|
||||
End Function
|
||||
|
||||
Private Shared Function SetCoreParameters(ByVal oCustomVariable As clsPathVariable) As Hashtable
|
||||
Dim hshParams As New Hashtable
|
||||
|
||||
hshParams.Add("ID", oCustomVariable.ID)
|
||||
hshParams.Add("Name", oCustomVariable.Name)
|
||||
hshParams.Add("Path", oCustomVariable.Path)
|
||||
|
||||
Return hshParams
|
||||
End Function
|
||||
|
||||
Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String)
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
|
||||
Dim sSQL As String
|
||||
@@ -15,26 +35,22 @@
|
||||
Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable)
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)"
|
||||
hshParams.Add("ID", oCustomVariable.ID)
|
||||
hshParams.Add("Name", oCustomVariable.Name)
|
||||
hshParams.Add("Path", oCustomVariable.Path)
|
||||
hshParams = SetCoreParameters(oCustomVariable)
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable)
|
||||
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
|
||||
Dim sSQL As String
|
||||
Dim hshParams As New Hashtable
|
||||
Dim hshParams As Hashtable
|
||||
|
||||
sSQL = "UPDATE variables SET Name=@Name, Path = @Path "
|
||||
sSQL &= "WHERE VariableID = @ID"
|
||||
|
||||
hshParams.Add("Name", oCustomVariable.Name)
|
||||
hshParams.Add("Path", oCustomVariable.Path)
|
||||
hshParams.Add("ID", oCustomVariable.ID)
|
||||
hshParams = SetCoreParameters(oCustomVariable)
|
||||
|
||||
oDatabase.RunParamQuery(sSQL, hshParams)
|
||||
|
||||
@@ -69,10 +85,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oCustomVariable = New clsPathVariable
|
||||
oCustomVariable.ID = CStr(dr("VariableID"))
|
||||
oCustomVariable.Name = CStr(dr("Name"))
|
||||
oCustomVariable.Path = CStr(dr("Path"))
|
||||
oCustomVariable = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oCustomVariable
|
||||
@@ -93,10 +106,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, hshParams)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oCustomVariable = New clsPathVariable
|
||||
oCustomVariable.ID = CStr(dr("VariableID"))
|
||||
oCustomVariable.Name = CStr(dr("Name"))
|
||||
oCustomVariable.Path = CStr(dr("Path"))
|
||||
oCustomVariable = MapToObject(dr)
|
||||
Next
|
||||
|
||||
Return oCustomVariable
|
||||
@@ -138,10 +148,7 @@
|
||||
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
|
||||
|
||||
For Each dr As DataRow In oData.Tables(0).Rows
|
||||
oCustomVariable = New clsPathVariable
|
||||
oCustomVariable.ID = CStr(dr("VariableID"))
|
||||
oCustomVariable.Name = CStr(dr("Name"))
|
||||
oCustomVariable.Path = CStr(dr("Path"))
|
||||
oCustomVariable = MapToObject(dr)
|
||||
hshList.Add(oCustomVariable.Name, oCustomVariable)
|
||||
Next
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Imports System.Runtime.InteropServices
|
||||
<Assembly: AssemblyDescription("Game Backup Monitor")>
|
||||
<Assembly: AssemblyCompany("Michael J. Seiferling")>
|
||||
<Assembly: AssemblyProduct("Game Backup Monitor")>
|
||||
<Assembly: AssemblyCopyright("Copyright © 2015 Michael J. Seiferling")>
|
||||
<Assembly: AssemblyCopyright("Copyright © 2016 Michael J. Seiferling")>
|
||||
<Assembly: AssemblyTrademark("")>
|
||||
|
||||
<Assembly: ComVisible(False)>
|
||||
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
|
||||
' by using the '*' as shown below:
|
||||
' <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
<Assembly: AssemblyVersion("0.95.*")>
|
||||
<Assembly: AssemblyFileVersion("0.95.0.0")>
|
||||
<Assembly: AssemblyVersion("0.98.*")>
|
||||
<Assembly: AssemblyFileVersion("0.98.0.0")>
|
||||
|
||||
<Assembly: NeutralResourcesLanguageAttribute("en")>
|
||||
Generated
+829
-82
File diff suppressed because it is too large
Load Diff
+301
-52
@@ -140,7 +140,7 @@
|
||||
<value>This will rebuild all databases and shrink them to an optimal size.[BR]This should only be used if your gbm.s3db files are becoming very large.[BR][BR]Do you wish to continue?</value>
|
||||
</data>
|
||||
<data name="App_Copyright" xml:space="preserve">
|
||||
<value>2015 Michael J. Seiferling</value>
|
||||
<value>[PARAM] Michael J. Seiferling</value>
|
||||
</data>
|
||||
<data name="frmMain_Exit" xml:space="preserve">
|
||||
<value>Are you sure you want to exit? Your games will no longer be monitored.</value>
|
||||
@@ -194,10 +194,10 @@
|
||||
<value>[PARAM] is a 64-bit game, GBM cannot detect the required information to save your backup.</value>
|
||||
</data>
|
||||
<data name="frmMain_Error7zip" xml:space="preserve">
|
||||
<value>7-Zip was not found in the Game Backup Monitor utilities folder. The application cannot continue.</value>
|
||||
<value>7-Zip was not found. The application cannot continue.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorAdminBackup" xml:space="preserve">
|
||||
<value>[PARAM] is running as Administrator and GBM is not, GBM cannot detect the required information to save your backup.</value>
|
||||
<value>[PARAM] was running as Administrator and GBM is not, GBM cannot detect the required information to save your backup.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorAdminDetect" xml:space="preserve">
|
||||
<value>[PARAM] is running as Administrator and GBM is not.[BR]You cannot cancel monitoring at this time.[BR][BR]Run GBM as Administrator to prevent this issue.</value>
|
||||
@@ -227,10 +227,10 @@
|
||||
<value>The GBM data (Version [PARAM]) in your backup folder is too new for your version of GBM (Version [PARAM])[BR][BR]All computers sharing a backup folder must use the same version of GBM. The application cannot proceed.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorMulti64" xml:space="preserve">
|
||||
<value>Multiple possible 64-bit games have been detected, GBM cannot detect the path to identify your game or save your backup.[BR][BR]Please install the 64-bit version of GBM to detect and backup this game properly.</value>
|
||||
<value>Install the 64-bit version of GBM to detect the last running game.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorMultiAdmin" xml:space="preserve">
|
||||
<value>Multiple possible games have been detected running as Administrator and GBM is not, GBM cannot detect the path to identify your game or save your backup.[BR][BR]Please run GBM as Administrator to properly detect and backup this game.</value>
|
||||
<value>Restart GBM as Administrator to detect the last running game.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorRelativePath" xml:space="preserve">
|
||||
<value>[PARAM] uses a relative path and has never been detected on this computer.</value>
|
||||
@@ -431,7 +431,7 @@
|
||||
<value>[PARAM] MB</value>
|
||||
</data>
|
||||
<data name="frmGameManager_BackupTimeAndName" xml:space="preserve">
|
||||
<value>[PARAM] by [PARAM]</value>
|
||||
<value>[PARAM] ([PARAM])</value>
|
||||
</data>
|
||||
<data name="frmGameManager_btnAdd" xml:space="preserve">
|
||||
<value>+</value>
|
||||
@@ -503,7 +503,7 @@
|
||||
<value>Monitor only</value>
|
||||
</data>
|
||||
<data name="frmGameManager_chkTimeStamp" xml:space="preserve">
|
||||
<value>Timestamp each backup</value>
|
||||
<value>Save multiple backups</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ChooseCustomIcon" xml:space="preserve">
|
||||
<value>Choose a custom icon for the game</value>
|
||||
@@ -527,10 +527,7 @@
|
||||
<value>Are you sure you want to run a backup for [PARAM]? This will close the form.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmBackupDelete" xml:space="preserve">
|
||||
<value>This will delete the backup file and all records of this backup. This cannot be undone. [BR][BR]Do you want to remove the data for [PARAM]?</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmBackupFolderDelete" xml:space="preserve">
|
||||
<value>The backup folder [PARAM] still contains [PARAM] directories and [PARAM] files.[BR][BR]Do you want to delete the contents and remove the sub-folder for this game?</value>
|
||||
<value>This will delete the selected backup file. This cannot be undone. [BR][BR]Do you want to delete [PARAM]?</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmGameDelete" xml:space="preserve">
|
||||
<value>Are you sure you want to delete [PARAM]? This cannot be undone.[BR][BR]This will not delete any backup files that already exist for this game.</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>A game with this exact name and process already exists.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ErrorNoBackupData" xml:space="preserve">
|
||||
<value>The selected game(s) have no backup data.</value>
|
||||
<value>The selected game(s) have no backup data or can't be restored with their current configuration.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ErrorNoBackupExists" xml:space="preserve">
|
||||
<value>The backup file does not exist.</value>
|
||||
@@ -616,11 +613,11 @@
|
||||
<data name="frmGameManager_lblCompany" xml:space="preserve">
|
||||
<value>Company:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblCurrentBackup" xml:space="preserve">
|
||||
<value>Current Backup:</value>
|
||||
<data name="frmGameManager_lblRemote" xml:space="preserve">
|
||||
<value>Backup Data:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblFileSize" xml:space="preserve">
|
||||
<value>Backup Size:</value>
|
||||
<data name="frmGameManager_lblBackupFile" xml:space="preserve">
|
||||
<value>Backup File:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblGamePath" xml:space="preserve">
|
||||
<value>Game Path:</value>
|
||||
@@ -631,8 +628,8 @@
|
||||
<data name="frmGameManager_lblIcon" xml:space="preserve">
|
||||
<value>Icon:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblLastBackup" xml:space="preserve">
|
||||
<value>Local Backup:</value>
|
||||
<data name="frmGameManager_lblLocalData" xml:space="preserve">
|
||||
<value>Local Data:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblName" xml:space="preserve">
|
||||
<value>Name:</value>
|
||||
@@ -649,8 +646,8 @@
|
||||
<data name="frmGameManager_lblVersion" xml:space="preserve">
|
||||
<value>Version:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_Never" xml:space="preserve">
|
||||
<value>Never</value>
|
||||
<data name="frmGameManager_None" xml:space="preserve">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="frmGameManager_optAllGames" xml:space="preserve">
|
||||
<value>All</value>
|
||||
@@ -704,10 +701,10 @@
|
||||
<value>...</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_chkFolderSave" xml:space="preserve">
|
||||
<value>Save Entire Folder</value>
|
||||
<value>Save entire folder</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_chkTimeStamp" xml:space="preserve">
|
||||
<value>Time Stamp Backup</value>
|
||||
<value>Save multiple backups</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_ChooseProcess" xml:space="preserve">
|
||||
<value>Choose exe file that starts the game</value>
|
||||
@@ -772,12 +769,6 @@
|
||||
<data name="frmAddWizard_ItemsSelectedNone" xml:space="preserve">
|
||||
<value>0 item(s) selected</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblDrag1" xml:space="preserve">
|
||||
<value>Drag a shortcut here to complete this step.</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblDrag2" xml:space="preserve">
|
||||
<value>Drag a shortcut here to complete this step.</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblExcludePath" xml:space="preserve">
|
||||
<value>Save Path</value>
|
||||
</data>
|
||||
@@ -791,7 +782,7 @@
|
||||
<value>Saved Game Folder:</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep1Instructions" xml:space="preserve">
|
||||
<value>The name will be automatically filtered for length and invalid characters. </value>
|
||||
<value>The name will be automatically filtered for length and invalid characters. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep1Intro" xml:space="preserve">
|
||||
<value>Enter the name of the game to monitor:</value>
|
||||
@@ -800,7 +791,7 @@
|
||||
<value>Game Name</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep2Instructions" xml:space="preserve">
|
||||
<value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual exe file.</value>
|
||||
<value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual exe file. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep2Intro" xml:space="preserve">
|
||||
<value>Choose the game's executable file or shortcut:</value>
|
||||
@@ -815,7 +806,7 @@
|
||||
<value>Choose Files to Backup</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep3Instructions" xml:space="preserve">
|
||||
<value>If you're unsure of exactly which files to backup, make sure Save Entire Folder is checked. You can also time stamp your backup files to make incremental backups.</value>
|
||||
<value>If you're unsure of exactly which files to backup, make sure Save entire folder is checked. You can also choose to save multiple backups and set a limit on how many to keep.</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblStep3Intro" xml:space="preserve">
|
||||
<value>Choose the location of your game's save files:</value>
|
||||
@@ -860,7 +851,7 @@
|
||||
<value>Save Path</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_Summary_Timestamp" xml:space="preserve">
|
||||
<value>Timestamp</value>
|
||||
<value>Multiple Backups</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_btnCancel" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
@@ -871,11 +862,11 @@
|
||||
<data name="frmAdvancedImport_FormName" xml:space="preserve">
|
||||
<value>Import Game Configurations</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_NewConfigs" xml:space="preserve">
|
||||
<value>[PARAM] new configurations available.</value>
|
||||
<data name="frmAdvancedImport_Configs" xml:space="preserve">
|
||||
<value>Configurations ([PARAM])</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_Selected" xml:space="preserve">
|
||||
<value>[PARAM] Selected</value>
|
||||
<value>Selected ([PARAM])</value>
|
||||
</data>
|
||||
<data name="frmChooseGame_btnCancel" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
@@ -896,7 +887,7 @@
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="frmFileFolderSearch_SwitchDrives" xml:space="preserve">
|
||||
<value>The location was not found on the [PARAM] drive. Do you wish to search the [PARAM] drive?</value>
|
||||
<value>Do you wish to search the [PARAM] drive?</value>
|
||||
</data>
|
||||
<data name="frmFilter_btnAdd" xml:space="preserve">
|
||||
<value>></value>
|
||||
@@ -1112,7 +1103,7 @@
|
||||
<value>Backup only when session time exceeds</value>
|
||||
</data>
|
||||
<data name="frmSettings_chkSync" xml:space="preserve">
|
||||
<value>Sync game list data with backup folder</value>
|
||||
<value>Enable syncing</value>
|
||||
</data>
|
||||
<data name="frmSettings_chkTimeTracking" xml:space="preserve">
|
||||
<value>Enable time tracking</value>
|
||||
@@ -1123,17 +1114,14 @@
|
||||
<data name="frmSettings_FormName" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="frmSettings_grpBackup" xml:space="preserve">
|
||||
<value>Backup and Restore</value>
|
||||
<data name="frmSettings_grpStartup" xml:space="preserve">
|
||||
<value>Startup</value>
|
||||
</data>
|
||||
<data name="frmSettings_grpGeneral" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="frmSettings_grpPaths" xml:space="preserve">
|
||||
<value>Paths</value>
|
||||
<data name="frmSettings_grpFolderOptions" xml:space="preserve">
|
||||
<value>Folders</value>
|
||||
</data>
|
||||
<data name="frmSettings_lblBackupFolder" xml:space="preserve">
|
||||
<value>Backup Folder</value>
|
||||
<value>Backup Folder:</value>
|
||||
</data>
|
||||
<data name="frmSettings_lblMinutes" xml:space="preserve">
|
||||
<value>minutes</value>
|
||||
@@ -1307,13 +1295,13 @@
|
||||
<value>Do you wish to manually set the game path? (Path will be saved)</value>
|
||||
</data>
|
||||
<data name="mgrBackup_ActionComplete" xml:space="preserve">
|
||||
<value>[PARAM] backup completed</value>
|
||||
<value>[PARAM] backup completed.</value>
|
||||
</data>
|
||||
<data name="mgrBackup_ActionFailed" xml:space="preserve">
|
||||
<value>[PARAM] backup failed</value>
|
||||
<value>[PARAM] backup failed.</value>
|
||||
</data>
|
||||
<data name="mgrBackup_BackupComplete" xml:space="preserve">
|
||||
<value>[PARAM] backup completed.</value>
|
||||
<value>[PARAM] backup ([PARAM]) completed. </value>
|
||||
</data>
|
||||
<data name="mgrBackup_BackupInProgress" xml:space="preserve">
|
||||
<value>Backup of [PARAM] in progress...</value>
|
||||
@@ -1355,7 +1343,7 @@
|
||||
<value>Generating SHA-256 hash for [PARAM] backup file.</value>
|
||||
</data>
|
||||
<data name="mgrCommon_FilesFilter" xml:space="preserve">
|
||||
<value>[PARAM] files (*.[PARAM])|*.[PARAM]</value>
|
||||
<value>[PARAM] files (*.[PARAM])|*.[PARAM]|All files (*.*)|*.*</value>
|
||||
</data>
|
||||
<data name="mgrCommon_No" xml:space="preserve">
|
||||
<value>No</value>
|
||||
@@ -1367,7 +1355,7 @@
|
||||
<value>Would you like to apply a filter to your export?</value>
|
||||
</data>
|
||||
<data name="mgrMonitorList_ConfirmExistingData" xml:space="preserve">
|
||||
<value>GBM data already exists in the backup folder.[BR][BR]Do you want to make your local game list the new master game list in this folder? (Recommended)[BR][BR]Choosing No will sync your local game list to the current master game list in this folder.</value>
|
||||
<value>The sync settings have changed and data already exists in the backup folder.[BR][BR]Do you want to make your current game data on this PC the new master game data in this folder? (Highly Recommended)[BR][BR]Choosing No will sync your game data on this PC to the current master game data in this folder.</value>
|
||||
</data>
|
||||
<data name="mgrMonitorList_ExportComplete" xml:space="preserve">
|
||||
<value>Export Complete. [PARAM] item(s) have been exported.</value>
|
||||
@@ -1412,10 +1400,10 @@
|
||||
<value>[PARAM] was located in the following folder:[BR][BR][PARAM][BR][BR]Is this correct?</value>
|
||||
</data>
|
||||
<data name="mgrRestore_ActionComplete" xml:space="preserve">
|
||||
<value>[PARAM] backup restored</value>
|
||||
<value>[PARAM] backup restored.</value>
|
||||
</data>
|
||||
<data name="mgrRestore_ActionFailed" xml:space="preserve">
|
||||
<value>[PARAM] restore failed</value>
|
||||
<value>[PARAM] restore failed.</value>
|
||||
</data>
|
||||
<data name="mgrRestore_ConfirmCreatePath" xml:space="preserve">
|
||||
<value>The restore path [PARAM] does not exist.[BR][BR]Do you want to create the folder and continue?</value>
|
||||
@@ -1483,4 +1471,265 @@
|
||||
<data name="mgrXML_ErrorImportFailure" xml:space="preserve">
|
||||
<value>The XML file cannot be read, it may be an invalid format or corrupted.[BR][BR][PARAM]</value>
|
||||
</data>
|
||||
<data name="frmGameManager_DefaultExportFileName" xml:space="preserve">
|
||||
<value>Game Backup Monitor Export</value>
|
||||
</data>
|
||||
<data name="frmMain_ChooseLogFile" xml:space="preserve">
|
||||
<value>Choose a location for the log file</value>
|
||||
</data>
|
||||
<data name="frmMain_ConfirmLogClear" xml:space="preserve">
|
||||
<value>Are you sure you want to clear the log?</value>
|
||||
</data>
|
||||
<data name="frmMain_DefaultLogFileName" xml:space="preserve">
|
||||
<value>Game Backup Monitor Log</value>
|
||||
</data>
|
||||
<data name="frmMain_gMonLogClear" xml:space="preserve">
|
||||
<value>&Clear</value>
|
||||
</data>
|
||||
<data name="frmMain_gMonLogSave" xml:space="preserve">
|
||||
<value>&Save</value>
|
||||
</data>
|
||||
<data name="frmMain_gMonToolsLog" xml:space="preserve">
|
||||
<value>&Log</value>
|
||||
</data>
|
||||
<data name="frmMain_LogAutoSave" xml:space="preserve">
|
||||
<value>The session log reached maximum length and has been auto-saved to [PARAM].</value>
|
||||
</data>
|
||||
<data name="frmMain_Text" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="mgrCommon_ErrorWritingTextFile" xml:space="preserve">
|
||||
<value>An error has occured writing the text file.[BR][BR][PARAM]</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_Fast" xml:space="preserve">
|
||||
<value>Fast</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_Fastest" xml:space="preserve">
|
||||
<value>Fastest</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_Maximum" xml:space="preserve">
|
||||
<value>Maximum</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_None" xml:space="preserve">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_Normal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="frmSettings_cboCompression_Ultra" xml:space="preserve">
|
||||
<value>Ultra</value>
|
||||
</data>
|
||||
<data name="frmSettings_grp7zGeneral" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="frmSettings_lblCompression" xml:space="preserve">
|
||||
<value>Compression:</value>
|
||||
</data>
|
||||
<data name="frmMain_CommandFail" xml:space="preserve">
|
||||
<value>The command has failed.</value>
|
||||
</data>
|
||||
<data name="frmMain_CommandSucess" xml:space="preserve">
|
||||
<value>The command was executed successfully.</value>
|
||||
</data>
|
||||
<data name="frmMain_DeveloperConsole" xml:space="preserve">
|
||||
<value>Developer Console</value>
|
||||
</data>
|
||||
<data name="frmMain_EnterCommand" xml:space="preserve">
|
||||
<value>Enter Command</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorCommandBadParam" xml:space="preserve">
|
||||
<value>Bad parameter ([PARAM]) for command [PARAM].</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorCommandInvalid" xml:space="preserve">
|
||||
<value>The command [PARAM] was not recognized.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorMissingParams" xml:space="preserve">
|
||||
<value>The command [PARAM] requires more parameters.</value>
|
||||
</data>
|
||||
<data name="frmMain_ErrorInitFailure" xml:space="preserve">
|
||||
<value>An unexpected error occured while initializing GBM.[BR][BR][PARAM][BR][BR]Do you wish to continue anyway? (Not Recommended)</value>
|
||||
</data>
|
||||
<data name="App_ErrorUnixNotAvailable" xml:space="preserve">
|
||||
<value>This function is currently not available on a Unix based operating system.</value>
|
||||
</data>
|
||||
<data name="frmMain_PNGFilter" xml:space="preserve">
|
||||
<value>PNG files (*.png)|*.png</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_lblFilter" xml:space="preserve">
|
||||
<value>Filter:</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_ColumnName" xml:space="preserve">
|
||||
<value>Name</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_ColumnProcess" xml:space="preserve">
|
||||
<value>Monitored Process</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_ColumnTags" xml:space="preserve">
|
||||
<value>Tags</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_Filtered" xml:space="preserve">
|
||||
<value>[Filtered]</value>
|
||||
</data>
|
||||
<data name="frmAdvancedImport_chkSelectAll" xml:space="preserve">
|
||||
<value>Select All</value>
|
||||
</data>
|
||||
<data name="frmMain_AtTime" xml:space="preserve">
|
||||
<value>at [PARAM].</value>
|
||||
</data>
|
||||
<data name="frmFileFolderSearch_btnOk" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="frmFileFolderSearch_lblResults" xml:space="preserve">
|
||||
<value>Search Results</value>
|
||||
</data>
|
||||
<data name="frmFileFolderSearch_SearchComplete" xml:space="preserve">
|
||||
<value>Search Complete!</value>
|
||||
</data>
|
||||
<data name="frmFileFolderSearch_SearchCancel" xml:space="preserve">
|
||||
<value>Search Aborted!</value>
|
||||
</data>
|
||||
<data name="frmSettings_btnDefaults" xml:space="preserve">
|
||||
<value>Set &Defaults</value>
|
||||
</data>
|
||||
<data name="frmSettings_lblArguments" xml:space="preserve">
|
||||
<value>Custom Arguments:</value>
|
||||
</data>
|
||||
<data name="frmSettings_lblLocation" xml:space="preserve">
|
||||
<value>Custom Location:</value>
|
||||
</data>
|
||||
<data name="frmSettings_7zaFileType" xml:space="preserve">
|
||||
<value>Executable</value>
|
||||
</data>
|
||||
<data name="frmSettings_Browse7za" xml:space="preserve">
|
||||
<value>Locate 7-Zip Console (7za)</value>
|
||||
</data>
|
||||
<data name="frmSettings_WarningArguments" xml:space="preserve">
|
||||
<value>Invalid or poorly formatted 7-Zip arguments can cause backup or restore operations to fail.[BR][BR]If problems occur, clear the custom arguments and try again.</value>
|
||||
</data>
|
||||
<data name="frmMain_Error7zCustom" xml:space="preserve">
|
||||
<value>The custom 7-Zip utility could not be found at:[BR][BR][PARAM][BR][BR]Please check your settings, the default 7-Zip utility will be used.</value>
|
||||
</data>
|
||||
<data name="frmSettings_ConfirmDefaults" xml:space="preserve">
|
||||
<value>Do you want to revert all settings to their defaults?</value>
|
||||
</data>
|
||||
<data name="frmSettings_ErrorLocation" xml:space="preserve">
|
||||
<value>The custom 7-Zip location [PARAM] does not exist.</value>
|
||||
</data>
|
||||
<data name="frmSettings_WarningLocation" xml:space="preserve">
|
||||
<value>You have chosen a custom utility that does not appear to be 7-Zip. [BR][BR]GBM only supports the use of 7-Zip Console (7za).</value>
|
||||
</data>
|
||||
<data name="App_Invalid7zDetected" xml:space="preserve">
|
||||
<value>7-Zip (7za.exe) is invalid and has been prevented from running.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblQuickFilter" xml:space="preserve">
|
||||
<value>Quick Filter:</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ErrorNoValidBackup" xml:space="preserve">
|
||||
<value>A backup cannot be run on the selected game(s) with their current configuration.</value>
|
||||
</data>
|
||||
<data name="frmSettings_btnOptionalFields" xml:space="preserve">
|
||||
<value>Choose &Optional Fields...</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_btnCancel" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_btnSave" xml:space="preserve">
|
||||
<value>&Save</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkCompany" xml:space="preserve">
|
||||
<value>Company</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkGamePath" xml:space="preserve">
|
||||
<value>Game Path (Not Recommended)</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkIcon" xml:space="preserve">
|
||||
<value>Icon (Not Recommended)</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkMonitorGame" xml:space="preserve">
|
||||
<value>Monitor this game</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkTimeStamp" xml:space="preserve">
|
||||
<value>Save multiple backups</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_chkVersion" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_FormName" xml:space="preserve">
|
||||
<value>Optional Sync Fields</value>
|
||||
</data>
|
||||
<data name="frmSyncFields_grpFields" xml:space="preserve">
|
||||
<value>Available Fields</value>
|
||||
</data>
|
||||
<data name="frmMain_LogAutoClear" xml:space="preserve">
|
||||
<value>The session log reached maximum length and has been cleared.</value>
|
||||
</data>
|
||||
<data name="frmSettings_chkAutoSaveLog" xml:space="preserve">
|
||||
<value>Autosave log when max length is exceeded</value>
|
||||
</data>
|
||||
<data name="frmSettings_grpGameData" xml:space="preserve">
|
||||
<value>Game Data</value>
|
||||
</data>
|
||||
<data name="frmSettings_lstSettings_7z" xml:space="preserve">
|
||||
<value>7-Zip</value>
|
||||
</data>
|
||||
<data name="frmSettings_lstSettings_BackupRestore" xml:space="preserve">
|
||||
<value>Backup and Restore</value>
|
||||
</data>
|
||||
<data name="frmSettings_lstSettings_General" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="frmSettings_grp7zAdvanced" xml:space="preserve">
|
||||
<value>Advanced</value>
|
||||
</data>
|
||||
<data name="frmSettings_grp7zInformation" xml:space="preserve">
|
||||
<value>Version Information</value>
|
||||
</data>
|
||||
<data name="App_NotAvailable" xml:space="preserve">
|
||||
<value>N/A</value>
|
||||
</data>
|
||||
<data name="App_URLImportLinux" xml:space="preserve">
|
||||
<value>http://mikemaximus.github.io/gbm-web/GBM_Official_Linux.xml</value>
|
||||
</data>
|
||||
<data name="frmGameManager_BrowseBackup" xml:space="preserve">
|
||||
<value>Choose a new [PARAM] backup file</value>
|
||||
</data>
|
||||
<data name="frmGameManager_BrowseBackupType" xml:space="preserve">
|
||||
<value>7-Zip</value>
|
||||
</data>
|
||||
<data name="frmGameManager_btnChangeBackup" xml:space="preserve">
|
||||
<value>&Change Backup File</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmBackupChange" xml:space="preserve">
|
||||
<value>[PARAM] will be the new backup file for [PARAM].[BR][BR]Is this correct?</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmBackupChangeRestore" xml:space="preserve">
|
||||
<value>Do you want to restore [PARAM] now?</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ErrorBackupChangeFileName" xml:space="preserve">
|
||||
<value>[PARAM] is already the current backup file.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ErrorBackupChangePath" xml:space="preserve">
|
||||
<value>You cannot choose a file located outside the current [PARAM] backup folder.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_lblLimit" xml:space="preserve">
|
||||
<value>Backup Limit</value>
|
||||
</data>
|
||||
<data name="mgrBackup_BackupLimitExceeded" xml:space="preserve">
|
||||
<value>[PARAM] was automatically removed.</value>
|
||||
</data>
|
||||
<data name="frmGameManager_cmsDeleteAll" xml:space="preserve">
|
||||
<value>&All Files</value>
|
||||
</data>
|
||||
<data name="frmGameManager_cmsDeleteOne" xml:space="preserve">
|
||||
<value>&Selected File</value>
|
||||
</data>
|
||||
<data name="frmGameManager_ConfirmBackupDeleteAll" xml:space="preserve">
|
||||
<value>This will delete all backup files for [PARAM]. This cannot be undone. [BR][BR]Do you want to continue?</value>
|
||||
</data>
|
||||
<data name="frmAddWizard_lblLimit" xml:space="preserve">
|
||||
<value>Backup Limit</value>
|
||||
</data>
|
||||
<data name="frmGameManager_Unknown" xml:space="preserve">
|
||||
<value>Unknown</value>
|
||||
</data>
|
||||
</root>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20
-23
@@ -1,36 +1,33 @@
|
||||
Game Backup Monitor v0.95 Readme
|
||||
Game Backup Monitor v0.98 Readme
|
||||
http://mikemaximus.github.io/gbm-web/
|
||||
gamebackupmonitor@gmail.com
|
||||
|
||||
January 1, 2016
|
||||
September 1, 2016
|
||||
|
||||
Disclaimer:
|
||||
|
||||
This is beta release software. You may still encounter some bugs.
|
||||
|
||||
Important Upgrade Notice:
|
||||
New in 0.98
|
||||
|
||||
- v0.95 changes how DOSBox games are detected and will break DOSBox configurations from prior versions. Sorry for the inconvenience.
|
||||
- To repair a configuration, you'll need to delete the DOS executable part of the process field and make sure the case matches the DOSBox executable being used by the game.
|
||||
- For example, Capitalism Plus using a process of "dosbox:CAPPLUS" and DOSBox.exe would become just "DOSBox".
|
||||
- You can use the new "Custom" filter to easily find and update all your DOSBox games in the Game Manager.
|
||||
- Due to this change GBM can only detect DOS games that are using their own copy of DOSBox in a unique location. Most users will be unaffected, classic games sold online are already packaged in this format.
|
||||
- Official configurations for DOSBox games are updated for this change.
|
||||
- (All) Redesigned GBM's ability to manage multiple backups per game.
|
||||
- The "Timestamp each backup" option has been renamed "Save multiple backups".
|
||||
- You can limit the amount of backups you keep for each game by setting a limit (2 to 100).
|
||||
- GBM will keep your backup folder clean by automatically deleting old backups as limits are reached or modified.
|
||||
- The Game Manager now allows you to browse and manage ALL backups for each game, not just the latest backup.
|
||||
- (All) Using "Monitor Only" no longer puts anys limitations on the game configuration or available features.
|
||||
- (Windows Installer) The installer will now properly go into upgrade mode if a prior version of GBM is installed. Note: 32-bit and 64-bit qualify as different versions.
|
||||
- (Windows Installer) The installer will now create an uninstall entry in Add/Remove Programs (Apps & Features).
|
||||
- (Linux) 64-bit games running in Wine will now be properly detected.
|
||||
- (Linux) Add Game Wizard will no longer remove all extensions when selecting an executable.
|
||||
- (Linux) GBM now prefers to use an absolute path when creating Linux game configurations.
|
||||
|
||||
New in 0.95
|
||||
Important Upgrade Information:
|
||||
|
||||
- Fixed a regression that caused non-critical fields (Game Path, Company, Version, Icon, Enabled, Monitor Only) to be wiped or reset on sync.
|
||||
- The "Check for new backups" feature has been renamed and redesigned. Instead of an annoying pop-up, it now shows a simple notification in the main menu or tray menu.
|
||||
- Added the ability to trigger backups only after a certain session time has elapsed (Global Setting), this setting will be disabled by default.
|
||||
- You can now cancel out of the "Choose Game" window when GBM detects multiple games may be running.
|
||||
- Added the ability to filter by game information such as name, process and company.
|
||||
- Many UI improvements and fixes with filtering. The "Tag" filter is now called "Custom" filter, due to the new options available.
|
||||
- Added a new, more intuitive way of including and excluding items in a backup. See the Game Manager section of the GBM manual for details.
|
||||
- Updated the "Add Game Wizard" to use the new include / exclude and tagging features.
|
||||
- Removed the special handling of DOSBox games for future proofing, DOSBox games will now be handled like all other games.
|
||||
- Moved the import and export game list features from the Tools menu into the Game Manager.
|
||||
- Made some visual improvements to the main app window.
|
||||
- Made changes that will allow GBM to be easily translated to other languages.
|
||||
- Many minor UI improvements and bug fixes.
|
||||
- The v0.98 Game Manager will not detect old backup files made using the "Timestamp each backup" setting in prior versions.
|
||||
- Configurations using the "Timestamp each backup" option will have "Save multiple backups" automatically enabled with a backup limit of 5.
|
||||
- If "Timestamp each backup" is currently set to sync, then "Save multiple backups" will also be set to sync after upgrading.
|
||||
|
||||
For more information regarding Linux support read the FAQ at http://mikemaximus.github.io/gbm-web/linux.html
|
||||
|
||||
The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,12 +2,13 @@
|
||||
|
||||
![Screenshot] (http://mikemaximus.github.io/gbm-web/images/manual/manual_01.jpg)
|
||||
|
||||
Game Backup Monitor is a simple, but flexible application that detects games as you play them. Once you finish playing a game, a backup of the saved games will be made automatically using 7-Zip compression. GBM can be used on a single computer, or on multiple computers to effectively add cloud support to any Windows game or application.
|
||||
Game Backup Monitor is a simple, but flexible application that detects games as you play them. Once you finish playing a game, a backup of the saved games will be made automatically using 7-Zip compression. GBM can be used on a single computer, or on multiple computers to effectively add cloud support to any game or application.
|
||||
|
||||
**License**: GNU General Public License version 3.0 (GPLv3)<br />
|
||||
**Language**: English Only<br />
|
||||
**Platform**: Windows Only (.NET 4)
|
||||
**Platform**: Windows (.NET 4) & Linux (Mono)
|
||||
|
||||
[About Game Backup Monitor] (http://mikemaximus.github.io/gbm-web/about.html) <br />
|
||||
[Game Backup Monitor FAQ] (http://mikemaximus.github.io/gbm-web/faq.html) <br />
|
||||
[Game Backup Monitor Manual] (http://mikemaximus.github.io/gbm-web/manual.html) <br />
|
||||
[List of Preconfigured Games] (http://mikemaximus.github.io/gbm-web/GBM_Official.xml) <br /> <br />
|
||||
|
||||
Reference in New Issue
Block a user