104 Commits

Author SHA1 Message Date
Michael J. Seiferling
6d0db7c075 Changes for issue #62 2016-08-31 09:38:31 -06:00
Michael J. Seiferling
e3f5c7e3c0 Changes for issue #61 2016-08-30 21:37:35 -06:00
Michael J. Seiferling
ba1fc76ebe Import fix and license update 2016-08-30 16:21:40 -06:00
Michael J. Seiferling
6de58dc977 Fixed init failures and minor game manager change 2016-08-27 16:46:33 -06:00
Michael J. Seiferling
5e0e1a543f Updated readme 2016-08-27 10:39:55 -06:00
Michael J. Seiferling
7254b6b501 Fixes and issue #60 2016-08-26 11:30:12 -06:00
MikeMaximus
f117e7fbaa Merge pull request #59 from MikeMaximus/manifest_rewrite
Changes for Issue #56 and #58
2016-08-24 21:02:34 -06:00
Michael J. Seiferling
d46bc38bdc Minor string changes 2016-08-24 20:57:09 -06:00
Michael J. Seiferling
a092c1b44f Fixed delete bug with sub-directories enabled 2016-08-23 15:35:57 -06:00
Michael J. Seiferling
77b5efbe02 Manifest Re-write (Clean-up, Pass 3) 2016-08-23 10:14:12 -06:00
Michael J. Seiferling
7a93fd799b Database upgrade fix 2016-08-22 14:43:39 -06:00
Michael J. Seiferling
4108ec36d7 Upgrade fix and message changes 2016-08-22 13:29:38 -06:00
Michael J. Seiferling
87f93ed4f5 Updates and fixes for pass 2 2016-08-21 23:11:26 -06:00
Michael J. Seiferling
18befc19b3 Manifest Re-write (Functional, New Features, Pass 2) 2016-08-21 20:14:07 -06:00
Michael J. Seiferling
bfe2346e8a Manifest Re-write (Functional, Pass 1) 2016-08-21 11:25:10 -06:00
Michael J. Seiferling
9cbc2b3240 Fixes to Game Manager UI 2016-08-18 20:17:02 -06:00
Michael J. Seiferling
1fab0e0cf4 Game Manager UI changes 2016-08-18 18:54:17 -06:00
Michael J. Seiferling
588f51d496 Small changes for issue #56 2016-08-18 17:01:27 -06:00
Michael J. Seiferling
77eb164a62 Changes for issue #56 2016-08-18 16:09:25 -06:00
Michael J. Seiferling
58ec4564ae Fix for issue #57 2016-08-04 09:30:22 -06:00
Michael J. Seiferling
8c1f3144f8 Merge branch 'master' of https://github.com/MikeMaximus/gbm.git 2016-07-11 09:41:57 -06:00
Michael J. Seiferling
507984bdf8 Fix for issue #55 2016-07-11 09:30:38 -06:00
Michael J. Seiferling
378377a1a9 Updated readme.txt for v0.97 2016-06-23 09:56:31 -06:00
Michael J. Seiferling
86ffc75666 Changes for issue #54 2016-06-18 18:41:00 -06:00
Michael J. Seiferling
f312e315b9 Fixed issue with optional fields button 2016-06-15 21:52:20 -06:00
Michael J. Seiferling
e567638c0e Minor Settings changes 2016-06-14 16:11:00 -06:00
Michael J. Seiferling
1f9fcca024 Fixed Settings tab order 2016-06-11 23:14:46 -06:00
Michael J. Seiferling
b68646c97e Minor settings UI changes 2016-06-11 18:12:30 -06:00
Michael J. Seiferling
896c77fe11 Settings label change 2016-06-11 11:32:57 -06:00
Michael J. Seiferling
e288c77ba8 Changes for issue #52 2016-06-10 12:06:01 -06:00
Michael J. Seiferling
8b779f6d66 Fixed small typo in new string 2016-06-09 20:28:10 -06:00
Michael J. Seiferling
ef6e608d30 Changes for issue #27 2016-06-09 12:37:48 -06:00
Michael J. Seiferling
7b524e42fc Removed maintenance code from frmSyncFields 2016-06-07 17:16:20 -06:00
Michael J. Seiferling
2beff1b46d Additions for issue #48 2016-06-07 17:11:52 -06:00
Michael J. Seiferling
0ad4fd890d Changes for issue #51 2016-06-03 19:53:52 -06:00
Michael J. Seiferling
761fed64cc Revert "Changes for issue #51"
This reverts commit f839793071.
2016-06-03 19:50:40 -06:00
Michael J. Seiferling
f839793071 Changes for issue #51 2016-06-03 19:50:25 -06:00
Michael J. Seiferling
b8b4c63910 Fixes for issue #50 2016-05-27 17:13:17 -06:00
Michael J. Seiferling
ef70c08469 Minor fixes 2016-05-27 08:53:17 -06:00
Michael J. Seiferling
45e59f8ae6 Added a quick find filter to Game Manager 2016-05-26 16:50:31 -06:00
Michael J. Seiferling
cb9bab9892 Changes for Issues #46 and #47 2016-05-26 14:13:14 -06:00
Michael J. Seiferling
7f19ae6345 Added basic 7za validation 2016-05-25 15:20:44 -06:00
Michael J. Seiferling
ab240b610c Removed sync fields from upgrade 2016-05-25 09:15:48 -06:00
Michael J. Seiferling
6c80094848 Fixed Settings tab order 2016-05-24 11:44:17 -06:00
Michael J. Seiferling
16649238f0 Minor Settings UI updates 2016-05-24 11:26:49 -06:00
Michael J. Seiferling
39460f57d5 Reverted new Sync settings 2016-05-24 11:15:29 -06:00
Michael J. Seiferling
d788c751f7 Settings UI changes 2016-05-23 14:49:37 -06:00
Michael J. Seiferling
3acb790822 Added new 7z functionality 2016-05-23 09:20:18 -06:00
Michael J. Seiferling
0e4f357c01 Added backend for new Settings 2016-05-22 22:47:28 -06:00
Michael J. Seiferling
58684bf9a5 Updated Settings UI for v0.97 2016-05-22 10:32:00 -06:00
Michael J. Seiferling
1d19a49b0e Updated 7z to v16.02 [2016-05-21] 2016-05-21 22:11:54 -06:00
Michael J. Seiferling
94bb4e70ef Updated readme.txt for v0.96.5977 2016-05-13 07:49:31 -06:00
Michael J. Seiferling
1c493f1d4e Updated 7z to v16 [2016-05-10] 2016-05-13 07:43:28 -06:00
Michael J. Seiferling
970b1f4e58 Final changes and fixes for v0.96 2016-03-24 19:48:13 -06:00
Michael J. Seiferling
911b3bdfc4 Updated readme for stable release 2016-03-24 19:16:05 -06:00
Michael J. Seiferling
ce759fe87f Merge pull request #44 from MikeMaximus/msgbox_crash_fix
Merge fixes for issue #43
2016-03-24 17:50:30 -06:00
Michael J. Seiferling
d1ca0a150e Alignment fix on search form 2016-03-24 17:45:02 -06:00
Michael J. Seiferling
b149a19a8b Added drive selector to search 2016-03-24 15:46:33 -06:00
Michael J. Seiferling
b458b89b46 Minor search and builder fix 2016-03-24 12:24:54 -06:00
Michael J. Seiferling
83df2edc90 Hide duplicate search results 2016-03-23 17:13:15 -06:00
Michael J. Seiferling
31b72488b2 Test fixes for issue #43 2016-03-23 16:52:03 -06:00
Michael J. Seiferling
3dbf5d0e62 Fix for issue #42 2016-03-18 13:09:55 -06:00
Michael J. Seiferling
2eb6693275 More cosmetic changes 2016-03-13 20:24:30 -06:00
Michael J. Seiferling
d1e292d4bf Cosmetic updates 2016-03-13 14:26:31 -06:00
Michael J. Seiferling
640690514b Pre-release readme update 2016-03-12 10:19:09 -06:00
Michael J. Seiferling
aade2dcee9 Pre-release readme update 2016-03-12 10:17:48 -06:00
Michael J. Seiferling
76ffc79a6b Usability updates for #22 2016-03-12 10:10:06 -06:00
Michael J. Seiferling
a6341ffa76 Updates for issue #22 2016-03-11 16:26:20 -06:00
Michael J. Seiferling
09c7bf8f05 Fixed some minor list box issues 2016-03-08 20:41:46 -06:00
Michael J. Seiferling
039f47fccd Fixed issue #41 2016-03-06 17:00:53 -06:00
Michael J. Seiferling
164bb4255e Revert "Fixed issue #41"
This reverts commit df5e8f2d2a.
2016-03-06 16:51:26 -06:00
Michael J. Seiferling
df5e8f2d2a Fixed issue #41 2016-03-06 16:49:02 -06:00
Michael J. Seiferling
7766a07cf3 Update README.md 2016-03-06 15:26:41 -06:00
Michael J. Seiferling
e71b2f4064 Merge pull request #40 from MikeMaximus/mono-test
Merge multi-platform test branch into master
2016-03-06 15:15:53 -06:00
Michael J. Seiferling
be2335b61e Fixes for issue #39 2016-03-06 12:06:43 -06:00
Michael J. Seiferling
ca9fef33ea Fixes for issues #37 and #39 2016-03-05 15:56:02 -06:00
Michael J. Seiferling
93c9b1a5ee Clean up for issue #37 2016-03-05 13:39:48 -06:00
Michael J. Seiferling
730305b694 Changes for issue #37 and #38 2016-03-05 13:24:48 -06:00
Michael J. Seiferling
8880373f34 Final pre-release changes 2016-03-03 21:16:17 -06:00
Michael J. Seiferling
321c72b6bf Minor restore fixes 2016-03-03 19:28:04 -06:00
Michael J. Seiferling
163b6cd3a0 Fixed GetBuilderRoot function 2016-03-03 18:21:06 -06:00
Michael J. Seiferling
44c2d98f25 Simplified GetUnixSymLinkDirectory function 2016-03-03 17:15:42 -06:00
Michael J. Seiferling
f050061b76 Path fixes and PNG Unix icons 2016-03-03 16:42:49 -06:00
Michael J. Seiferling
0cafd00bf3 Unix path fixes and search lock out 2016-03-03 15:22:47 -06:00
Michael J. Seiferling
feb8a9d0b2 Added Wine detection support 2016-03-03 13:05:50 -06:00
Michael J. Seiferling
d46360b244 More compatability updates 2016-03-02 19:15:32 -06:00
Michael J. Seiferling
ca8798a460 Fixed minor tray and startup issue 2016-03-02 11:43:34 -06:00
Michael J. Seiferling
da16a89baa Fixed unreliable visible check 2016-03-02 10:42:37 -06:00
Michael J. Seiferling
b03545d86f OS specific 7za argument handler 2016-03-02 10:32:04 -06:00
Michael J. Seiferling
430e1171fb Added post build events 2016-03-02 10:22:09 -06:00
Michael J. Seiferling
e531ec5701 Unix fixes and feature lock outs 2016-03-02 01:07:27 -06:00
Michael J. Seiferling
7a7fa65ce6 Functional in Mono 2016-03-01 23:27:42 -06:00
Michael J. Seiferling
4c7d36baef Update to DetermineRelativePath function 2016-02-29 15:59:49 -06:00
Michael J. Seiferling
de7a993abe Changes for multi-platform support 2016-02-29 12:24:56 -06:00
Michael J. Seiferling
ec47697434 Tweak for issue #36 2016-02-27 15:58:24 -06:00
Michael J. Seiferling
a7b97912f2 Update for issue #36 2016-02-24 11:01:43 -06:00
Michael J. Seiferling
8222f518f6 Update for issue #35 2016-02-21 22:31:27 -06:00
Michael J. Seiferling
0a564ca510 v0.96 preview release update 2016-02-19 10:06:31 -06:00
Michael J. Seiferling
85d9cc0c5f Fix for issue #34 2016-02-11 19:18:08 -06:00
Michael J. Seiferling
abbc6a4a70 Update for issue #33 2016-02-06 09:28:39 -06:00
Michael J. Seiferling
5947b7d0b2 Fixed issue #30 2016-02-05 09:18:23 -06:00
Michael J. Seiferling
2fb18c5f19 Changes for issue #27 2016-02-02 10:29:28 -06:00
Michael J. Seiferling
47f4b0774d Fixed issue #32 2016-01-30 09:42:27 -06:00
Michael J. Seiferling
70be04b750 Update for issue 31 2016-01-08 09:51:47 -06:00
57 changed files with 5122 additions and 1769 deletions
+5 -1
View File
@@ -41,7 +41,11 @@
Property FileName As String Property FileName As String
Get Get
Return sFileName If mgrCommon.IsUnix Then
Return sFileName.Replace("\", "/")
Else
Return sFileName.Replace("/", "\")
End If
End Get End Get
Set(value As String) Set(value As String)
sFileName = value sFileName = value
+60 -3
View File
@@ -7,6 +7,7 @@
Private bFolderSave As Boolean = False Private bFolderSave As Boolean = False
Private sFileType As String = String.Empty Private sFileType As String = String.Empty
Private bAppendTimeStamp As Boolean = False Private bAppendTimeStamp As Boolean = False
Private iBackupLimit As Integer = 2
Private sExcludeList As String = String.Empty Private sExcludeList As String = String.Empty
Private sProcessPath As String = String.Empty Private sProcessPath As String = String.Empty
Private sIcon As String = String.Empty Private sIcon As String = String.Empty
@@ -19,6 +20,16 @@
Private bTempGame As Boolean = False Private bTempGame As Boolean = False
Private oImportTags As New List(Of Tag) 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 Property ID As String
Set(value As String) Set(value As String)
sGameID = value sGameID = value
@@ -44,7 +55,6 @@
End Get End Get
End Property End Property
Property Name As String Property Name As String
Set(value As String) Set(value As String)
sGameName = value sGameName = value
@@ -108,6 +118,15 @@
End Set End Set
End Property 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 Property ExcludeList As String
Set(value As String) Set(value As String)
sExcludeList = value sExcludeList = value
@@ -219,15 +238,15 @@
End Set End Set
End Property 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) Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then If oGame Is Nothing Then
Return False Return False
Else Else
'Core Sync Fields
If ID <> oGame.ID Then If ID <> oGame.ID Then
Return False Return False
End If End If
If Name <> oGame.Name Then If Name <> oGame.Name Then
Return False Return False
End If End If
@@ -255,6 +274,44 @@
If Hours <> oGame.Hours Then If Hours <> oGame.Hours Then
Return False Return False
End If 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 Return True
End If End If
End Function End Function
+49 -43
View File
@@ -22,21 +22,22 @@ Partial Class frmAddWizard
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAddWizard))
Me.tabWizard = New System.Windows.Forms.TabControl() Me.tabWizard = New System.Windows.Forms.TabControl()
Me.tbPage1 = New System.Windows.Forms.TabPage() Me.tbPage1 = New System.Windows.Forms.TabPage()
Me.lblStep1Title = New System.Windows.Forms.Label() Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblDrag1 = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label() Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.txtName = New System.Windows.Forms.TextBox() Me.txtName = New System.Windows.Forms.TextBox()
Me.lblStep1Intro = New System.Windows.Forms.Label() Me.lblStep1Intro = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage() Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.lblStep2Title = New System.Windows.Forms.Label() Me.lblStep2Title = New System.Windows.Forms.Label()
Me.lblStep2Instructions = 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.btnProcessBrowse = New System.Windows.Forms.Button()
Me.txtProcessPath = New System.Windows.Forms.TextBox() Me.txtProcessPath = New System.Windows.Forms.TextBox()
Me.lblStep2Intro = New System.Windows.Forms.Label() Me.lblStep2Intro = New System.Windows.Forms.Label()
Me.tbPage3 = New System.Windows.Forms.TabPage() 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.lblStep3Title = New System.Windows.Forms.Label()
Me.lblStep3Instructions = New System.Windows.Forms.Label() Me.lblStep3Instructions = New System.Windows.Forms.Label()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox() Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
@@ -71,6 +72,7 @@ Partial Class frmAddWizard
Me.tbPage1.SuspendLayout() Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout() Me.tbPage2.SuspendLayout()
Me.tbPage3.SuspendLayout() Me.tbPage3.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tbPage3a.SuspendLayout() Me.tbPage3a.SuspendLayout()
Me.tbPage4.SuspendLayout() Me.tbPage4.SuspendLayout()
Me.tbPage5.SuspendLayout() Me.tbPage5.SuspendLayout()
@@ -95,7 +97,6 @@ Partial Class frmAddWizard
' '
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
Me.tbPage1.Controls.Add(Me.lblStep1Title) Me.tbPage1.Controls.Add(Me.lblStep1Title)
Me.tbPage1.Controls.Add(Me.lblDrag1)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions) Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
Me.tbPage1.Controls.Add(Me.txtName) Me.tbPage1.Controls.Add(Me.txtName)
Me.tbPage1.Controls.Add(Me.lblStep1Intro) Me.tbPage1.Controls.Add(Me.lblStep1Intro)
@@ -116,23 +117,16 @@ Partial Class frmAddWizard
Me.lblStep1Title.TabIndex = 8 Me.lblStep1Title.TabIndex = 8
Me.lblStep1Title.Text = "Game Name" 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 'lblStep1Instructions
' '
Me.lblStep1Instructions.AllowDrop = True
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93) Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep1Instructions.Name = "lblStep1Instructions" 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.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 'txtName
' '
@@ -156,7 +150,6 @@ Partial Class frmAddWizard
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
Me.tbPage2.Controls.Add(Me.lblStep2Title) Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions) Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
Me.tbPage2.Controls.Add(Me.lblDrag2)
Me.tbPage2.Controls.Add(Me.btnProcessBrowse) Me.tbPage2.Controls.Add(Me.btnProcessBrowse)
Me.tbPage2.Controls.Add(Me.txtProcessPath) Me.tbPage2.Controls.Add(Me.txtProcessPath)
Me.tbPage2.Controls.Add(Me.lblStep2Intro) Me.tbPage2.Controls.Add(Me.lblStep2Intro)
@@ -179,22 +172,12 @@ Partial Class frmAddWizard
' '
'lblStep2Instructions 'lblStep2Instructions
' '
Me.lblStep2Instructions.AllowDrop = True
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93) Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep2Instructions.Name = "lblStep2Instructions" 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.TabIndex = 10
Me.lblStep2Instructions.Text = "Some games use launchers. Do not monitor launchers, be sure to choose the game'" & _ Me.lblStep2Instructions.Text = resources.GetString("lblStep2Instructions.Text")
"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."
' '
'btnProcessBrowse 'btnProcessBrowse
' '
@@ -225,6 +208,8 @@ Partial Class frmAddWizard
'tbPage3 'tbPage3
' '
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control 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.lblStep3Title)
Me.tbPage3.Controls.Add(Me.lblStep3Instructions) Me.tbPage3.Controls.Add(Me.lblStep3Instructions)
Me.tbPage3.Controls.Add(Me.chkTimeStamp) Me.tbPage3.Controls.Add(Me.chkTimeStamp)
@@ -238,6 +223,26 @@ Partial Class frmAddWizard
Me.tbPage3.TabIndex = 2 Me.tbPage3.TabIndex = 2
Me.tbPage3.Text = "TabPage3" 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 'lblStep3Title
' '
Me.lblStep3Title.AutoSize = True Me.lblStep3Title.AutoSize = True
@@ -250,32 +255,32 @@ Partial Class frmAddWizard
' '
'lblStep3Instructions '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.Name = "lblStep3Instructions"
Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42) Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep3Instructions.TabIndex = 9 Me.lblStep3Instructions.TabIndex = 9
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save Entire Folder " & _ 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" & _ "is checked. You can also choose to save multiple backups and set a limit on how" &
"ps." " many to keep."
' '
'chkTimeStamp 'chkTimeStamp
' '
Me.chkTimeStamp.AutoSize = True 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.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.TabIndex = 8
Me.chkTimeStamp.Text = "Time Stamp Backup" Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True Me.chkTimeStamp.UseVisualStyleBackColor = True
' '
'chkFolderSave 'chkFolderSave
' '
Me.chkFolderSave.AutoSize = True Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(17, 87) Me.chkFolderSave.Location = New System.Drawing.Point(18, 87)
Me.chkFolderSave.Name = "chkFolderSave" 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.TabIndex = 7
Me.chkFolderSave.Text = "Save Entire Folder" Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True Me.chkFolderSave.UseVisualStyleBackColor = True
' '
'btnSaveBrowse 'btnSaveBrowse
@@ -372,7 +377,7 @@ Partial Class frmAddWizard
Me.lblStep3aInstructions.Name = "lblStep3aInstructions" Me.lblStep3aInstructions.Name = "lblStep3aInstructions"
Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56) Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56)
Me.lblStep3aInstructions.TabIndex = 5 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. " "up. If you're unsure, go back a step and choose to save the entire folder. "
' '
'txtFileTypes 'txtFileTypes
@@ -454,7 +459,7 @@ Partial Class frmAddWizard
Me.lblStep4Instructions.Name = "lblStep4Instructions" Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59) Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59)
Me.lblStep4Instructions.TabIndex = 5 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." "ckup. You may choose multiple items to exclude. This step can be skipped."
' '
'txtExcludeList 'txtExcludeList
@@ -559,6 +564,7 @@ Partial Class frmAddWizard
Me.tbPage2.PerformLayout() Me.tbPage2.PerformLayout()
Me.tbPage3.ResumeLayout(False) Me.tbPage3.ResumeLayout(False)
Me.tbPage3.PerformLayout() Me.tbPage3.PerformLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
Me.tbPage3a.ResumeLayout(False) Me.tbPage3a.ResumeLayout(False)
Me.tbPage3a.PerformLayout() Me.tbPage3a.PerformLayout()
Me.tbPage4.ResumeLayout(False) Me.tbPage4.ResumeLayout(False)
@@ -578,12 +584,10 @@ Partial Class frmAddWizard
Friend WithEvents tbPage3a As System.Windows.Forms.TabPage Friend WithEvents tbPage3a As System.Windows.Forms.TabPage
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
Friend WithEvents tbPage5 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 lblStep1Instructions As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
Friend WithEvents lblStep2Instructions 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 btnProcessBrowse As System.Windows.Forms.Button
Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox
Friend WithEvents lblStep2Intro As System.Windows.Forms.Label Friend WithEvents lblStep2Intro As System.Windows.Forms.Label
@@ -613,4 +617,6 @@ Partial Class frmAddWizard
Friend WithEvents lblExcludePath As Label Friend WithEvents lblExcludePath As Label
Friend WithEvents lblIncludePathTitle As Label Friend WithEvents lblIncludePathTitle As Label
Friend WithEvents lblExcludePathTitle As Label Friend WithEvents lblExcludePathTitle As Label
Friend WithEvents lblLimit As Label
Friend WithEvents nudLimit As NumericUpDown
End Class End Class
+3
View File
@@ -117,4 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </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> </root>
+48 -7
View File
@@ -36,18 +36,17 @@ Public Class frmAddWizard
btnNext.Text = frmAddWizard_btnNext btnNext.Text = frmAddWizard_btnNext
btnBack.Text = frmAddWizard_btnBack btnBack.Text = frmAddWizard_btnBack
lblStep1Title.Text = frmAddWizard_lblStep1Title lblStep1Title.Text = frmAddWizard_lblStep1Title
lblDrag1.Text = frmAddWizard_lblDrag1
lblStep1Instructions.Text = frmAddWizard_lblStep1Instructions lblStep1Instructions.Text = frmAddWizard_lblStep1Instructions
lblStep1Intro.Text = frmAddWizard_lblStep1Intro lblStep1Intro.Text = frmAddWizard_lblStep1Intro
lblStep2Title.Text = frmAddWizard_lblStep2Title lblStep2Title.Text = frmAddWizard_lblStep2Title
lblStep2Instructions.Text = frmAddWizard_lblStep2Instructions lblStep2Instructions.Text = frmAddWizard_lblStep2Instructions
lblDrag2.Text = frmAddWizard_lblDrag2
btnProcessBrowse.Text = frmAddWizard_btnProcessBrowse btnProcessBrowse.Text = frmAddWizard_btnProcessBrowse
lblStep2Intro.Text = frmAddWizard_lblStep2Intro lblStep2Intro.Text = frmAddWizard_lblStep2Intro
lblStep3Title.Text = frmAddWizard_lblStep3Title lblStep3Title.Text = frmAddWizard_lblStep3Title
lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions
chkTimeStamp.Text = frmAddWizard_chkTimeStamp chkTimeStamp.Text = frmAddWizard_chkTimeStamp
chkFolderSave.Text = frmAddWizard_chkFolderSave chkFolderSave.Text = frmAddWizard_chkFolderSave
lblLimit.Text = frmAddWizard_lblLimit
btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse
lblStep3Intro.Text = frmAddWizard_lblStep3Intro lblStep3Intro.Text = frmAddWizard_lblStep3Intro
lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle
@@ -70,6 +69,28 @@ Public Class frmAddWizard
StepHandler() StepHandler()
End Sub 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 Private Function StringEmptyText(ByVal sString As String) As String
If sString = String.Empty Then If sString = String.Empty Then
Return frmAddWizard_None Return frmAddWizard_None
@@ -83,19 +104,31 @@ Public Class frmAddWizard
Dim sName As String = txtName.Text Dim sName As String = txtName.Text
Dim sProcessFullPath As String = txtProcessPath.Text Dim sProcessFullPath As String = txtProcessPath.Text
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath) Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")" Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
Dim sSavePath As String = txtSavePath.Text Dim sSavePath As String = txtSavePath.Text
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath) Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
Dim bFolderBackup As Boolean = chkFolderSave.Checked Dim bFolderBackup As Boolean = chkFolderSave.Checked
Dim bTimeStamp As Boolean = chkTimeStamp.Checked Dim bTimeStamp As Boolean = chkTimeStamp.Checked
Dim iLimit As Integer = nudLimit.Value
Dim sFileType As String = txtFileTypes.Text Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text Dim sExcludeList As String = txtExcludeList.Text
Dim sProcess As String
Dim sItem As String() Dim sItem As String()
Dim sItems As String() Dim sItems As String()
Dim sValues As String() Dim sValues As String()
Dim lstItem As ListViewItem 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 If Not bIsAbsolute Then
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath) sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
End If End If
@@ -108,7 +141,7 @@ Public Class frmAddWizard
lstSummary.Columns(1).Width = 210 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} 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 For i = 0 To sItems.Length - 1
sItem = {sItems(i), sValues(i)} sItem = {sItems(i), sValues(i)}
@@ -124,7 +157,9 @@ Public Class frmAddWizard
oGame.FolderSave = bFolderBackup oGame.FolderSave = bFolderBackup
oGame.FileType = sFileType oGame.FileType = sFileType
oGame.AppendTimeStamp = bTimeStamp oGame.AppendTimeStamp = bTimeStamp
oGame.BackupLimit = iLimit
oGame.ExcludeList = sExcludeList oGame.ExcludeList = sExcludeList
oGame.ProcessPath = sProcessPath
Return oGame Return oGame
End Function End Function
@@ -178,7 +213,7 @@ Public Class frmAddWizard
Return False Return False
End If End If
If Path.GetExtension(strPath.ToLower) <> ".exe" Then If Path.GetExtension(strPath.ToLower) <> ".exe" And Not mgrCommon.IsUnix Then
sErrorMessage = frmAddWizard_ErrorNotAProcess sErrorMessage = frmAddWizard_ErrorNotAProcess
txtProcessPath.Focus() txtProcessPath.Focus()
Return False Return False
@@ -459,13 +494,13 @@ Public Class frmAddWizard
SetForm() SetForm()
End Sub 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 If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Copy e.Effect = DragDropEffects.Copy
End If End If
End Sub 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) Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop)
For Each sPath In oFiles For Each sPath In oFiles
ReadShortcut(sPath) ReadShortcut(sPath)
@@ -492,6 +527,10 @@ Public Class frmAddWizard
txtFileTypes.Clear() txtFileTypes.Clear()
End Sub 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 Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
OpenBuilder(frmAddWizard_Include, txtFileTypes) OpenBuilder(frmAddWizard_Include, txtFileTypes)
UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes) UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes)
@@ -501,4 +540,6 @@ Public Class frmAddWizard
OpenBuilder(frmAddWizard_Exclude, txtExcludeList) OpenBuilder(frmAddWizard_Exclude, txtExcludeList)
UpdateBuilderLabel(txtExcludeList.Text, lblExclude) UpdateBuilderLabel(txtExcludeList.Text, lblExclude)
End Sub End Sub
End Class End Class
+47 -23
View File
@@ -22,47 +22,40 @@ Partial Class frmAdvancedImport
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.lstGames = New System.Windows.Forms.CheckedListBox()
Me.btnImport = New System.Windows.Forms.Button() Me.btnImport = New System.Windows.Forms.Button()
Me.chkSelectAll = New System.Windows.Forms.CheckBox() Me.chkSelectAll = New System.Windows.Forms.CheckBox()
Me.lblGames = New System.Windows.Forms.Label() Me.lblGames = New System.Windows.Forms.Label()
Me.lblSelected = New System.Windows.Forms.Label() Me.lblSelected = New System.Windows.Forms.Label()
Me.btnCancel = New System.Windows.Forms.Button() 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() 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 '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.Name = "btnImport"
Me.btnImport.Size = New System.Drawing.Size(75, 23) Me.btnImport.Size = New System.Drawing.Size(75, 23)
Me.btnImport.TabIndex = 2 Me.btnImport.TabIndex = 3
Me.btnImport.Text = "&Import" Me.btnImport.Text = "&Import"
Me.btnImport.UseVisualStyleBackColor = True Me.btnImport.UseVisualStyleBackColor = True
' '
'chkSelectAll 'chkSelectAll
' '
Me.chkSelectAll.AutoSize = True 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.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.TabIndex = 0
Me.chkSelectAll.Text = "Select All"
Me.chkSelectAll.UseVisualStyleBackColor = True Me.chkSelectAll.UseVisualStyleBackColor = True
' '
'lblGames '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.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.TabIndex = 0
Me.lblGames.Text = "Games" Me.lblGames.Text = "Games"
Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter
@@ -70,7 +63,7 @@ Partial Class frmAdvancedImport
'lblSelected 'lblSelected
' '
Me.lblSelected.AutoSize = True 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.Name = "lblSelected"
Me.lblSelected.Size = New System.Drawing.Size(77, 13) Me.lblSelected.Size = New System.Drawing.Size(77, 13)
Me.lblSelected.TabIndex = 0 Me.lblSelected.TabIndex = 0
@@ -78,23 +71,52 @@ Partial Class frmAdvancedImport
' '
'btnCancel '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.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 3 Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True 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 'frmAdvancedImport
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(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.btnCancel)
Me.Controls.Add(Me.lblSelected) Me.Controls.Add(Me.lblSelected)
Me.Controls.Add(Me.chkSelectAll) Me.Controls.Add(Me.chkSelectAll)
Me.Controls.Add(Me.btnImport) Me.Controls.Add(Me.btnImport)
Me.Controls.Add(Me.lstGames)
Me.Controls.Add(Me.lblGames) Me.Controls.Add(Me.lblGames)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
@@ -107,10 +129,12 @@ Partial Class frmAdvancedImport
Me.PerformLayout() Me.PerformLayout()
End Sub End Sub
Friend WithEvents lstGames As System.Windows.Forms.CheckedListBox
Friend WithEvents btnImport As System.Windows.Forms.Button Friend WithEvents btnImport As System.Windows.Forms.Button
Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox
Friend WithEvents lblGames As System.Windows.Forms.Label Friend WithEvents lblGames As System.Windows.Forms.Label
Friend WithEvents lblSelected As System.Windows.Forms.Label Friend WithEvents lblSelected As System.Windows.Forms.Label
Friend WithEvents btnCancel As System.Windows.Forms.Button 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 End Class
+138 -24
View File
@@ -3,8 +3,11 @@
Public Class frmAdvancedImport Public Class frmAdvancedImport
Private hshImportData As Hashtable Private hshImportData As Hashtable
Private hshFinalData As New Hashtable
Private bSelectAll As Boolean = False Private bSelectAll As Boolean = False
Private bIsLoading As Boolean = False Private bIsLoading As Boolean = False
Private iCurrentSort As Integer = 0
Private WithEvents tmFilterTimer As Timer
Public Property ImportData As Hashtable Public Property ImportData As Hashtable
Set(value As Hashtable) Set(value As Hashtable)
@@ -15,26 +18,103 @@ Public Class frmAdvancedImport
End Get End Get
End Property End Property
Public ReadOnly Property FinalData As Hashtable
Get
Return hshFinalData
End Get
End Property
Private Sub SelectToggle() Private Sub SelectToggle()
Cursor.Current = Cursors.WaitCursor
lstGames.BeginUpdate()
bSelectAll = Not bSelectAll bSelectAll = Not bSelectAll
For i As Integer = 0 To lstGames.Items.Count - 1 For i As Integer = 0 To lstGames.Items.Count - 1
lstGames.SetItemChecked(i, bSelectAll) lstGames.Items(i).Checked = bSelectAll
Next Next
lstGames.EndUpdate()
Cursor.Current = Cursors.Default
UpdateSelected() UpdateSelected()
End Sub End Sub
Private Sub LoadData() Private Sub SaveChecked(ByVal oItem As ListViewItem)
Dim oApp As clsGame If oItem.Checked Then
Dim oData As KeyValuePair(Of String, String) FinalData.Add(oItem.Tag, ImportData(oItem.Tag))
Else
FinalData.Remove(oItem.Tag)
End If
End Sub
lstGames.ValueMember = "Key" Private Sub LoadData(Optional ByVal sFilter As String = "")
lstGames.DisplayMember = "Value" 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 For Each de As DictionaryEntry In ImportData
bAddItem = False
oApp = DirectCast(de.Value, clsGame) oApp = DirectCast(de.Value, clsGame)
oData = New KeyValuePair(Of String, String)(oApp.CompoundKey, oApp.Name & " (" & oApp.TrueProcess & ")") sTags = String.Empty
lstGames.Items.Add(oData) oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
For Each oTag As Tag In oApp.ImportTags
sTags &= oTag.Name & ", "
Next 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 End Sub
Private Sub SetForm() Private Sub SetForm()
@@ -42,26 +122,21 @@ Public Class frmAdvancedImport
Me.Text = frmAdvancedImport_FormName Me.Text = frmAdvancedImport_FormName
'Set Form Text 'Set Form Text
lblFilter.Text = frmAdvancedImport_lblFilter
btnCancel.Text = frmAdvancedImport_btnCancel btnCancel.Text = frmAdvancedImport_btnCancel
btnImport.Text = frmAdvancedImport_btnImport btnImport.Text = frmAdvancedImport_btnImport
chkSelectAll.Text = frmAdvancedImport_chkSelectAll
chkSelectAll.Checked = True chkSelectAll.Checked = True
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_NewConfigs, ImportData.Count)
End Sub
Private Sub BuildList() 'Init Filter Timer
Dim oData As KeyValuePair(Of String, String) tmFilterTimer = New Timer()
tmFilterTimer.Interval = 1000
For i As Integer = 0 To lstGames.Items.Count - 1 tmFilterTimer.Enabled = False
If Not lstGames.GetItemChecked(i) Then
oData = lstGames.Items(i)
ImportData.Remove(oData.Key)
End If
Next
End Sub End Sub
Private Sub UpdateSelected() Private Sub UpdateSelected()
lblSelected.Text = mgrCommon.FormatString(frmAdvancedImport_Selected, lstGames.CheckedItems.Count) lblSelected.Text = mgrCommon.FormatString(frmAdvancedImport_Selected, FinalData.Count)
End Sub End Sub
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load 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() If Not bIsLoading Then SelectToggle()
End Sub End Sub
Private Sub lstGames_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedValueChanged Private Sub lstGames_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lstGames.ItemChecked
If Not bIsLoading Then UpdateSelected() SaveChecked(e.Item)
If Not bIsLoading Then
UpdateSelected()
End If
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
@@ -85,8 +163,44 @@ Public Class frmAdvancedImport
End Sub End Sub
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
BuildList() If FinalData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
If ImportData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close() Me.Close()
End Sub 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 End Class
-5
View File
@@ -65,11 +65,6 @@ Public Class frmChooseGame
SetForm() SetForm()
FillComboBox() FillComboBox()
Me.Focus() 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 End Sub
Private Sub btnChoose_Click(sender As System.Object, e As System.EventArgs) Handles btnChoose.Click Private Sub btnChoose_Click(sender As System.Object, e As System.EventArgs) Handles btnChoose.Click
+52 -16
View File
@@ -22,35 +22,30 @@ Partial Class frmFileFolderSearch
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.pgbProgress = New System.Windows.Forms.ProgressBar()
Me.txtCurrentLocation = New System.Windows.Forms.TextBox() Me.txtCurrentLocation = New System.Windows.Forms.TextBox()
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.bwSearch = New System.ComponentModel.BackgroundWorker() 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() 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 '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.Name = "txtCurrentLocation"
Me.txtCurrentLocation.ReadOnly = True 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.TabIndex = 0
Me.txtCurrentLocation.TabStop = False Me.txtCurrentLocation.TabStop = False
' '
'btnCancel '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.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 0 Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True Me.btnCancel.UseVisualStyleBackColor = True
' '
@@ -58,14 +53,52 @@ Partial Class frmFileFolderSearch
' '
Me.bwSearch.WorkerSupportsCancellation = True 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 'frmFileFolderSearch
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(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.btnCancel)
Me.Controls.Add(Me.txtCurrentLocation) Me.Controls.Add(Me.txtCurrentLocation)
Me.Controls.Add(Me.pgbProgress)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
@@ -77,8 +110,11 @@ Partial Class frmFileFolderSearch
Me.PerformLayout() Me.PerformLayout()
End Sub End Sub
Friend WithEvents pgbProgress As System.Windows.Forms.ProgressBar
Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox
Friend WithEvents btnCancel As System.Windows.Forms.Button Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents bwSearch As System.ComponentModel.BackgroundWorker 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 End Class
+132 -17
View File
@@ -3,14 +3,34 @@ Imports System.IO
Public Class frmFileFolderSearch Public Class frmFileFolderSearch
Private sSearchItem As String Private sSearchItem As String
Private sGameName As String = String.Empty
Private bIsLoading As Boolean
Private bIsFolder As Boolean Private bIsFolder As Boolean
Private sFoundItem As String Private sFoundItem As String
Private oDrives As List(Of DriveInfo) Private oDrives As List(Of DriveInfo)
Private iCurrentDrive As Integer
Private oSearchDrive As DirectoryInfo Private oSearchDrive As DirectoryInfo
Dim bShutdown As Boolean = False 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 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 Public Property SearchItem As String
Get Get
@@ -48,19 +68,38 @@ Public Class frmFileFolderSearch
End If End If
End Sub 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 Private Function SearchDirectory(ByVal dir As DirectoryInfo, ByVal sDirectoryName As String) As String
Dim sSubSearch As String = String.Empty Dim sSubSearch As String = String.Empty
Dim sFoundItem As String = String.Empty
If bwSearch.CancellationPending Then If bwSearch.CancellationPending Then
Return "Cancel" Return "Cancel"
End If End If
'Ignore Symlinks
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
Return String.Empty
End If
UpdateInfo(dir.FullName) UpdateInfo(dir.FullName)
Try Try
'Search Current Directory 'Search Current Directory
If dir.GetDirectories(sDirectoryName).Length > 0 Then If dir.GetDirectories(sDirectoryName).Length > 0 Then
Return dir.FullName & "\" & sDirectoryName sFoundItem = dir.FullName & Path.DirectorySeparatorChar & sDirectoryName
UpdateResults(sFoundItem)
End If End If
'Search Sub Directory 'Search Sub Directory
@@ -82,23 +121,31 @@ Public Class frmFileFolderSearch
Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String
Dim sSubSearch As String = String.Empty Dim sSubSearch As String = String.Empty
Dim sFoundItem As String = String.Empty
If bwSearch.CancellationPending Then If bwSearch.CancellationPending Then
Return "Cancel" Return "Cancel"
End If End If
'Ignore Symlinks
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
Return String.Empty
End If
UpdateInfo(dir.FullName) UpdateInfo(dir.FullName)
Try Try
'Search Current Directory 'Search Current Directory
If dir.GetFiles(sFileName).Length > 0 Then If dir.GetFiles(sFileName).Length > 0 Then
Return dir.FullName & "\" & sFileName sFoundItem = Path.GetDirectoryName(dir.FullName & Path.DirectorySeparatorChar & sFileName)
UpdateResults(sFoundItem)
End If End If
'Search Sub Directory 'Search Sub Directory
Dim subdirs() As DirectoryInfo = dir.GetDirectories("*") Dim subdirs() As DirectoryInfo = dir.GetDirectories("*")
For Each newDir As DirectoryInfo In subdirs For Each newDir As DirectoryInfo In subdirs
sSubSearch = SearchFile(newDir, sFileName) sSubSearch = SearchFile(newDir, sFileName)
If sSubSearch <> String.Empty Then If sSubSearch <> String.Empty Then
Return sSubSearch Return sSubSearch
End If End If
@@ -113,39 +160,60 @@ Public Class frmFileFolderSearch
End Function End Function
Private Sub GetDrives() 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) oDrives = New List(Of DriveInfo)
For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives
If oDrive.DriveType = IO.DriveType.Fixed Then If oDrive.DriveType = IO.DriveType.Fixed Then
oDrives.Add(oDrive) oDrives.Add(oDrive)
oComboItems.Add(New KeyValuePair(Of Integer, String)(iCount, oDrive.RootDirectory.ToString))
iCount += 1
End If End If
Next Next
cboDrive.DataSource = oComboItems
End Sub End Sub
Private Sub Search(ByVal oDrive As DriveInfo) Private Sub Search(ByVal oDrive As DriveInfo)
pgbProgress.Style = ProgressBarStyle.Marquee iStopStatus = eStopStatus.FinishedDrive
pgbProgress.MarqueeAnimationSpeed = 5
oSearchDrive = oDrive.RootDirectory oSearchDrive = oDrive.RootDirectory
bwSearch.RunWorkerAsync() bwSearch.RunWorkerAsync()
iCurrentDrive += 1
End Sub End Sub
Private Sub EndSearch() Private Sub EndSearch()
Dim oResult As MsgBoxResult
pgbProgress.MarqueeAnimationSpeed = 0
If FoundItem = "Cancel" Then FoundItem = String.Empty If FoundItem = "Cancel" Then FoundItem = String.Empty
If oDrives.Count > iCurrentDrive And FoundItem = String.Empty Then Select Case iStopStatus
oResult = mgrCommon.ShowMessage(frmFileFolderSearch_SwitchDrives, New String() {oSearchDrive.Root.ToString, oDrives(iCurrentDrive).RootDirectory.ToString}, MsgBoxStyle.YesNo) Case eStopStatus.Cancel
If oResult = MsgBoxResult.Yes Then SearchComplete(frmFileFolderSearch_SearchCancel)
Search(oDrives(iCurrentDrive)) 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 Else
bShutdown = True cboDrive.SelectedIndex = cboDrive.SelectedIndex + 1
Me.Close()
End If End If
Else Else
SearchComplete(frmFileFolderSearch_SearchComplete)
End If
Case eStopStatus.FoundResult
FoundItem = lstResults.SelectedItem.ToString
bShutdown = True bShutdown = True
Me.Close() 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 If
End Sub End Sub
@@ -154,13 +222,17 @@ Public Class frmFileFolderSearch
Me.Text = frmFileFolderSearch_FormName Me.Text = frmFileFolderSearch_FormName
'Set Form Text 'Set Form Text
lblResults.Text = frmFileFolderSearch_lblResults
btnOk.Text = frmFileFolderSearch_btnOk
btnCancel.Text = frmFileFolderSearch_btnCancel btnCancel.Text = frmFileFolderSearch_btnCancel
End Sub End Sub
Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bIsLoading = True
SetForm() SetForm()
GetDrives() GetDrives()
Search(oDrives(iCurrentDrive)) bIsLoading = False
Search(oDrives(0))
End Sub End Sub
Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork
@@ -176,11 +248,54 @@ Public Class frmFileFolderSearch
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
If bwSearch.IsBusy Then
iStopStatus = eStopStatus.Cancel
bwSearch.CancelAsync() bwSearch.CancelAsync()
Else
bShutdown = True
Me.Close()
End If
End Sub End Sub
Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
bwSearch.CancelAsync()
If Not bShutdown Then e.Cancel = True If Not bShutdown Then e.Cancel = True
End Sub 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 End Class
-6
View File
@@ -99,7 +99,6 @@ Partial Class frmFilter
' '
'optAll 'optAll
' '
Me.optAll.AutoSize = True
Me.optAll.Location = New System.Drawing.Point(77, 19) Me.optAll.Location = New System.Drawing.Point(77, 19)
Me.optAll.Name = "optAll" Me.optAll.Name = "optAll"
Me.optAll.Size = New System.Drawing.Size(63, 17) Me.optAll.Size = New System.Drawing.Size(63, 17)
@@ -110,7 +109,6 @@ Partial Class frmFilter
' '
'optAny 'optAny
' '
Me.optAny.AutoSize = True
Me.optAny.Checked = True Me.optAny.Checked = True
Me.optAny.Location = New System.Drawing.Point(6, 19) Me.optAny.Location = New System.Drawing.Point(6, 19)
Me.optAny.Name = "optAny" Me.optAny.Name = "optAny"
@@ -213,7 +211,6 @@ Partial Class frmFilter
' '
'optOr 'optOr
' '
Me.optOr.AutoSize = True
Me.optOr.Location = New System.Drawing.Point(56, 19) Me.optOr.Location = New System.Drawing.Point(56, 19)
Me.optOr.Name = "optOr" Me.optOr.Name = "optOr"
Me.optOr.Size = New System.Drawing.Size(36, 17) Me.optOr.Size = New System.Drawing.Size(36, 17)
@@ -224,7 +221,6 @@ Partial Class frmFilter
' '
'optAnd 'optAnd
' '
Me.optAnd.AutoSize = True
Me.optAnd.Checked = True Me.optAnd.Checked = True
Me.optAnd.Location = New System.Drawing.Point(6, 19) Me.optAnd.Location = New System.Drawing.Point(6, 19)
Me.optAnd.Name = "optAnd" Me.optAnd.Name = "optAnd"
@@ -302,11 +298,9 @@ Partial Class frmFilter
Me.grpTagFilter.ResumeLayout(False) Me.grpTagFilter.ResumeLayout(False)
Me.grpTagFilter.PerformLayout() Me.grpTagFilter.PerformLayout()
Me.grpTagOptions.ResumeLayout(False) Me.grpTagOptions.ResumeLayout(False)
Me.grpTagOptions.PerformLayout()
Me.grpGameFilter.ResumeLayout(False) Me.grpGameFilter.ResumeLayout(False)
Me.grpGameFilter.PerformLayout() Me.grpGameFilter.PerformLayout()
Me.grpGameInfoOptions.ResumeLayout(False) Me.grpGameInfoOptions.ResumeLayout(False)
Me.grpGameInfoOptions.PerformLayout()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
+208 -138
View File
@@ -28,6 +28,8 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button() Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button() Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox() Me.grpConfig = New System.Windows.Forms.GroupBox()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
Me.btnExclude = New System.Windows.Forms.Button() Me.btnExclude = New System.Windows.Forms.Button()
Me.btnInclude = New System.Windows.Forms.Button() Me.btnInclude = New System.Windows.Forms.Button()
Me.txtID = New System.Windows.Forms.TextBox() Me.txtID = New System.Windows.Forms.TextBox()
@@ -61,18 +63,17 @@ Partial Class frmGameManager
Me.lblHours = New System.Windows.Forms.Label() Me.lblHours = New System.Windows.Forms.Label()
Me.btnTags = New System.Windows.Forms.Button() Me.btnTags = New System.Windows.Forms.Button()
Me.grpStats = New System.Windows.Forms.GroupBox() 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.lblRestorePath = New System.Windows.Forms.Label()
Me.txtRestorePath = New System.Windows.Forms.TextBox()
Me.btnOpenRestorePath = New System.Windows.Forms.Button() Me.btnOpenRestorePath = New System.Windows.Forms.Button()
Me.btnOpenBackupFile = 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.btnDeleteBackup = New System.Windows.Forms.Button()
Me.lblFileSize = New System.Windows.Forms.Label() Me.lblBackupFile = New System.Windows.Forms.Label()
Me.lblSync = New System.Windows.Forms.Label() Me.lblRemote = New System.Windows.Forms.Label()
Me.txtCurrentBackup = New System.Windows.Forms.TextBox() Me.lblLocalData = New System.Windows.Forms.Label()
Me.lblCurrentBackup = New System.Windows.Forms.Label()
Me.txtLocalBackup = New System.Windows.Forms.TextBox()
Me.lblLastBackup = New System.Windows.Forms.Label()
Me.btnMarkAsRestored = New System.Windows.Forms.Button() Me.btnMarkAsRestored = New System.Windows.Forms.Button()
Me.btnRestore = New System.Windows.Forms.Button() Me.btnRestore = New System.Windows.Forms.Button()
Me.btnSave = 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.cmsImport = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsOfficial = New System.Windows.Forms.ToolStripMenuItem() Me.cmsOfficial = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsFile = 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() Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout() Me.grpExtra.SuspendLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.nudHours, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.nudHours, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpStats.SuspendLayout() Me.grpStats.SuspendLayout()
Me.grpFilter.SuspendLayout() Me.grpFilter.SuspendLayout()
Me.cmsImport.SuspendLayout() Me.cmsImport.SuspendLayout()
Me.cmsDeleteBackup.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
'btnAdd 'btnAdd
@@ -105,7 +113,7 @@ Partial Class frmGameManager
Me.btnAdd.Location = New System.Drawing.Point(12, 526) Me.btnAdd.Location = New System.Drawing.Point(12, 526)
Me.btnAdd.Name = "btnAdd" Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23) Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 2 Me.btnAdd.TabIndex = 4
Me.btnAdd.Text = "+" Me.btnAdd.Text = "+"
Me.btnAdd.UseVisualStyleBackColor = True Me.btnAdd.UseVisualStyleBackColor = True
' '
@@ -116,33 +124,35 @@ Partial Class frmGameManager
Me.btnDelete.Location = New System.Drawing.Point(48, 526) Me.btnDelete.Location = New System.Drawing.Point(48, 526)
Me.btnDelete.Name = "btnDelete" Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23) Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 3 Me.btnDelete.TabIndex = 5
Me.btnDelete.Text = "-" Me.btnDelete.Text = "-"
Me.btnDelete.UseVisualStyleBackColor = True Me.btnDelete.UseVisualStyleBackColor = True
' '
'btnBackup 'btnBackup
' '
Me.btnBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.Name = "btnBackup"
Me.btnBackup.Size = New System.Drawing.Size(75, 23) Me.btnBackup.Size = New System.Drawing.Size(75, 23)
Me.btnBackup.TabIndex = 16 Me.btnBackup.TabIndex = 19
Me.btnBackup.Text = "&Backup" Me.btnBackup.Text = "&Backup"
Me.btnBackup.UseVisualStyleBackColor = True Me.btnBackup.UseVisualStyleBackColor = True
' '
'btnClose 'btnClose
' '
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23) Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 17 Me.btnClose.TabIndex = 20
Me.btnClose.Text = "C&lose" Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True Me.btnClose.UseVisualStyleBackColor = True
' '
'grpConfig 'grpConfig
' '
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.lblLimit)
Me.grpConfig.Controls.Add(Me.nudLimit)
Me.grpConfig.Controls.Add(Me.btnExclude) Me.grpConfig.Controls.Add(Me.btnExclude)
Me.grpConfig.Controls.Add(Me.btnInclude) Me.grpConfig.Controls.Add(Me.btnInclude)
Me.grpConfig.Controls.Add(Me.txtID) Me.grpConfig.Controls.Add(Me.txtID)
@@ -162,16 +172,36 @@ Partial Class frmGameManager
Me.grpConfig.Location = New System.Drawing.Point(247, 12) Me.grpConfig.Location = New System.Drawing.Point(247, 12)
Me.grpConfig.Name = "grpConfig" Me.grpConfig.Name = "grpConfig"
Me.grpConfig.Size = New System.Drawing.Size(525, 157) Me.grpConfig.Size = New System.Drawing.Size(525, 157)
Me.grpConfig.TabIndex = 6 Me.grpConfig.TabIndex = 8
Me.grpConfig.TabStop = False Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration" 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 'btnExclude
' '
Me.btnExclude.Location = New System.Drawing.Point(9, 125) Me.btnExclude.Location = New System.Drawing.Point(9, 125)
Me.btnExclude.Name = "btnExclude" Me.btnExclude.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23) Me.btnExclude.Size = New System.Drawing.Size(175, 23)
Me.btnExclude.TabIndex = 13 Me.btnExclude.TabIndex = 9
Me.btnExclude.Text = "E&xclude Items..." Me.btnExclude.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True Me.btnExclude.UseVisualStyleBackColor = True
' '
@@ -180,7 +210,7 @@ Partial Class frmGameManager
Me.btnInclude.Location = New System.Drawing.Point(9, 97) Me.btnInclude.Location = New System.Drawing.Point(9, 97)
Me.btnInclude.Name = "btnInclude" Me.btnInclude.Name = "btnInclude"
Me.btnInclude.Size = New System.Drawing.Size(175, 23) Me.btnInclude.Size = New System.Drawing.Size(175, 23)
Me.btnInclude.TabIndex = 10 Me.btnInclude.TabIndex = 8
Me.btnInclude.Text = "In&clude Items..." Me.btnInclude.Text = "In&clude Items..."
Me.btnInclude.UseVisualStyleBackColor = True Me.btnInclude.UseVisualStyleBackColor = True
' '
@@ -190,7 +220,7 @@ Partial Class frmGameManager
Me.txtID.Location = New System.Drawing.Point(489, 19) Me.txtID.Location = New System.Drawing.Point(489, 19)
Me.txtID.Name = "txtID" Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(30, 20) Me.txtID.Size = New System.Drawing.Size(30, 20)
Me.txtID.TabIndex = 16 Me.txtID.TabIndex = 0
Me.txtID.TabStop = False Me.txtID.TabStop = False
Me.txtID.Visible = False Me.txtID.Visible = False
' '
@@ -199,7 +229,7 @@ Partial Class frmGameManager
Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71) Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71)
Me.btnSavePathBrowse.Name = "btnSavePathBrowse" Me.btnSavePathBrowse.Name = "btnSavePathBrowse"
Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20) Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnSavePathBrowse.TabIndex = 9 Me.btnSavePathBrowse.TabIndex = 7
Me.btnSavePathBrowse.Text = "..." Me.btnSavePathBrowse.Text = "..."
Me.btnSavePathBrowse.UseVisualStyleBackColor = True Me.btnSavePathBrowse.UseVisualStyleBackColor = True
' '
@@ -208,7 +238,7 @@ Partial Class frmGameManager
Me.btnProcessBrowse.Location = New System.Drawing.Point(489, 45) Me.btnProcessBrowse.Location = New System.Drawing.Point(489, 45)
Me.btnProcessBrowse.Name = "btnProcessBrowse" Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20) Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnProcessBrowse.TabIndex = 7 Me.btnProcessBrowse.TabIndex = 5
Me.btnProcessBrowse.Text = "..." Me.btnProcessBrowse.Text = "..."
Me.btnProcessBrowse.UseVisualStyleBackColor = True Me.btnProcessBrowse.UseVisualStyleBackColor = True
' '
@@ -241,18 +271,18 @@ Partial Class frmGameManager
' '
'txtExclude '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.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.TabIndex = 0
Me.txtExclude.TabStop = False Me.txtExclude.TabStop = False
Me.txtExclude.Visible = False Me.txtExclude.Visible = False
' '
'txtFileType '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.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.TabIndex = 0
Me.txtFileType.TabStop = False Me.txtFileType.TabStop = False
Me.txtFileType.Visible = False Me.txtFileType.Visible = False
@@ -262,9 +292,9 @@ Partial Class frmGameManager
Me.chkTimeStamp.AutoSize = True Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129) Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129)
Me.chkTimeStamp.Name = "chkTimeStamp" Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(146, 17) Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 14 Me.chkTimeStamp.TabIndex = 11
Me.chkTimeStamp.Text = "Time stamp each backup" Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True Me.chkTimeStamp.UseVisualStyleBackColor = True
' '
'chkFolderSave 'chkFolderSave
@@ -273,7 +303,7 @@ Partial Class frmGameManager
Me.chkFolderSave.Location = New System.Drawing.Point(190, 101) Me.chkFolderSave.Location = New System.Drawing.Point(190, 101)
Me.chkFolderSave.Name = "chkFolderSave" Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17) Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 11 Me.chkFolderSave.TabIndex = 10
Me.chkFolderSave.Text = "Save entire folder" Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True Me.chkFolderSave.UseVisualStyleBackColor = True
' '
@@ -282,30 +312,30 @@ Partial Class frmGameManager
Me.txtSavePath.Location = New System.Drawing.Point(69, 71) Me.txtSavePath.Location = New System.Drawing.Point(69, 71)
Me.txtSavePath.Name = "txtSavePath" Me.txtSavePath.Name = "txtSavePath"
Me.txtSavePath.Size = New System.Drawing.Size(414, 20) Me.txtSavePath.Size = New System.Drawing.Size(414, 20)
Me.txtSavePath.TabIndex = 8 Me.txtSavePath.TabIndex = 6
' '
'txtProcess 'txtProcess
' '
Me.txtProcess.Location = New System.Drawing.Point(69, 45) Me.txtProcess.Location = New System.Drawing.Point(69, 45)
Me.txtProcess.Name = "txtProcess" Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(414, 20) Me.txtProcess.Size = New System.Drawing.Size(414, 20)
Me.txtProcess.TabIndex = 6 Me.txtProcess.TabIndex = 4
' '
'txtName 'txtName
' '
Me.txtName.Location = New System.Drawing.Point(69, 19) Me.txtName.Location = New System.Drawing.Point(69, 19)
Me.txtName.Name = "txtName" Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(414, 20) Me.txtName.Size = New System.Drawing.Size(414, 20)
Me.txtName.TabIndex = 5 Me.txtName.TabIndex = 3
' '
'chkMonitorOnly 'chkMonitorOnly
' '
Me.chkMonitorOnly.AutoSize = True Me.chkMonitorOnly.AutoSize = True
Me.chkMonitorOnly.Location = New System.Drawing.Point(362, 340) Me.chkMonitorOnly.Location = New System.Drawing.Point(362, 340)
Me.chkMonitorOnly.Name = "chkMonitorOnly" Me.chkMonitorOnly.Name = "chkMonitorOnly"
Me.chkMonitorOnly.Size = New System.Drawing.Size(145, 17) Me.chkMonitorOnly.Size = New System.Drawing.Size(83, 17)
Me.chkMonitorOnly.TabIndex = 9 Me.chkMonitorOnly.TabIndex = 11
Me.chkMonitorOnly.Text = "Monitor only (No backup)" Me.chkMonitorOnly.Text = "Monitor only"
Me.chkMonitorOnly.UseVisualStyleBackColor = True Me.chkMonitorOnly.UseVisualStyleBackColor = True
' '
'grpExtra 'grpExtra
@@ -328,7 +358,7 @@ Partial Class frmGameManager
Me.grpExtra.Location = New System.Drawing.Point(247, 175) Me.grpExtra.Location = New System.Drawing.Point(247, 175)
Me.grpExtra.Name = "grpExtra" Me.grpExtra.Name = "grpExtra"
Me.grpExtra.Size = New System.Drawing.Size(525, 155) Me.grpExtra.Size = New System.Drawing.Size(525, 155)
Me.grpExtra.TabIndex = 7 Me.grpExtra.TabIndex = 9
Me.grpExtra.TabStop = False Me.grpExtra.TabStop = False
Me.grpExtra.Text = "Game Information" Me.grpExtra.Text = "Game Information"
' '
@@ -459,32 +489,73 @@ Partial Class frmGameManager
Me.btnTags.Location = New System.Drawing.Point(535, 336) Me.btnTags.Location = New System.Drawing.Point(535, 336)
Me.btnTags.Name = "btnTags" Me.btnTags.Name = "btnTags"
Me.btnTags.Size = New System.Drawing.Size(75, 23) Me.btnTags.Size = New System.Drawing.Size(75, 23)
Me.btnTags.TabIndex = 10 Me.btnTags.TabIndex = 12
Me.btnTags.Text = "Tags..." Me.btnTags.Text = "Tags..."
Me.btnTags.UseVisualStyleBackColor = True Me.btnTags.UseVisualStyleBackColor = True
' '
'grpStats 'grpStats
' '
Me.grpStats.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.lblRestorePath)
Me.grpStats.Controls.Add(Me.txtRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenRestorePath) Me.grpStats.Controls.Add(Me.btnOpenRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenBackupFile) Me.grpStats.Controls.Add(Me.btnOpenBackupFile)
Me.grpStats.Controls.Add(Me.txtFileSize)
Me.grpStats.Controls.Add(Me.btnDeleteBackup) Me.grpStats.Controls.Add(Me.btnDeleteBackup)
Me.grpStats.Controls.Add(Me.lblFileSize) Me.grpStats.Controls.Add(Me.lblBackupFile)
Me.grpStats.Controls.Add(Me.lblSync) Me.grpStats.Controls.Add(Me.lblRemote)
Me.grpStats.Controls.Add(Me.txtCurrentBackup) Me.grpStats.Controls.Add(Me.lblLocalData)
Me.grpStats.Controls.Add(Me.lblCurrentBackup)
Me.grpStats.Controls.Add(Me.txtLocalBackup)
Me.grpStats.Controls.Add(Me.lblLastBackup)
Me.grpStats.Location = New System.Drawing.Point(247, 365) Me.grpStats.Location = New System.Drawing.Point(247, 365)
Me.grpStats.Name = "grpStats" Me.grpStats.Name = "grpStats"
Me.grpStats.Size = New System.Drawing.Size(525, 154) Me.grpStats.Size = New System.Drawing.Size(525, 154)
Me.grpStats.TabIndex = 13 Me.grpStats.TabIndex = 15
Me.grpStats.TabStop = False Me.grpStats.TabStop = False
Me.grpStats.Text = "Backup Information" 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 'lblRestorePath
' '
Me.lblRestorePath.AutoSize = True Me.lblRestorePath.AutoSize = True
@@ -494,122 +565,77 @@ Partial Class frmGameManager
Me.lblRestorePath.TabIndex = 3 Me.lblRestorePath.TabIndex = 3
Me.lblRestorePath.Text = "Restore Path:" 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 '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.Name = "btnOpenRestorePath"
Me.btnOpenRestorePath.Size = New System.Drawing.Size(114, 23) 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.Text = "O&pen Restore Path"
Me.btnOpenRestorePath.UseVisualStyleBackColor = True Me.btnOpenRestorePath.UseVisualStyleBackColor = True
' '
'btnOpenBackupFile '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.Name = "btnOpenBackupFile"
Me.btnOpenBackupFile.Size = New System.Drawing.Size(114, 23) 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.Text = "&Open Backup File"
Me.btnOpenBackupFile.UseVisualStyleBackColor = True 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 '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.Name = "btnDeleteBackup"
Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23) Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23)
Me.btnDeleteBackup.TabIndex = 10 Me.btnDeleteBackup.TabIndex = 8
Me.btnDeleteBackup.Text = "&Delete Backup" Me.btnDeleteBackup.Text = "&Delete Backup"
Me.btnDeleteBackup.UseVisualStyleBackColor = True Me.btnDeleteBackup.UseVisualStyleBackColor = True
' '
'lblFileSize 'lblBackupFile
' '
Me.lblFileSize.AutoSize = True Me.lblBackupFile.AutoSize = True
Me.lblFileSize.Location = New System.Drawing.Point(6, 77) Me.lblBackupFile.Location = New System.Drawing.Point(6, 77)
Me.lblFileSize.Name = "lblFileSize" Me.lblBackupFile.Name = "lblBackupFile"
Me.lblFileSize.Size = New System.Drawing.Size(70, 13) Me.lblBackupFile.Size = New System.Drawing.Size(66, 13)
Me.lblFileSize.TabIndex = 2 Me.lblBackupFile.TabIndex = 2
Me.lblFileSize.Text = "Backup Size:" Me.lblBackupFile.Text = "Backup File:"
' '
'lblSync 'lblRemote
' '
Me.lblSync.AutoSize = True Me.lblRemote.AutoSize = True
Me.lblSync.Location = New System.Drawing.Point(6, 130) Me.lblRemote.Location = New System.Drawing.Point(6, 27)
Me.lblSync.Name = "lblSync" Me.lblRemote.Name = "lblRemote"
Me.lblSync.Size = New System.Drawing.Size(62, 13) Me.lblRemote.Size = New System.Drawing.Size(73, 13)
Me.lblSync.TabIndex = 4 Me.lblRemote.TabIndex = 0
Me.lblSync.Text = "Up to Date!" Me.lblRemote.Text = "Backup Data:"
Me.lblSync.Visible = False
' '
'txtCurrentBackup 'lblLocalData
' '
Me.txtCurrentBackup.Location = New System.Drawing.Point(96, 24) Me.lblLocalData.AutoSize = True
Me.txtCurrentBackup.Name = "txtCurrentBackup" Me.lblLocalData.Location = New System.Drawing.Point(6, 53)
Me.txtCurrentBackup.ReadOnly = True Me.lblLocalData.Name = "lblLocalData"
Me.txtCurrentBackup.Size = New System.Drawing.Size(387, 20) Me.lblLocalData.Size = New System.Drawing.Size(62, 13)
Me.txtCurrentBackup.TabIndex = 5 Me.lblLocalData.TabIndex = 1
Me.txtCurrentBackup.TabStop = False Me.lblLocalData.Text = "Local Data:"
'
'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:"
' '
'btnMarkAsRestored 'btnMarkAsRestored
' '
Me.btnMarkAsRestored.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.Name = "btnMarkAsRestored"
Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23) 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.Text = "&Mark as Restored"
Me.btnMarkAsRestored.UseVisualStyleBackColor = True Me.btnMarkAsRestored.UseVisualStyleBackColor = True
' '
'btnRestore 'btnRestore
' '
Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.Name = "btnRestore"
Me.btnRestore.Size = New System.Drawing.Size(75, 23) Me.btnRestore.Size = New System.Drawing.Size(75, 23)
Me.btnRestore.TabIndex = 15 Me.btnRestore.TabIndex = 18
Me.btnRestore.Text = "&Restore" Me.btnRestore.Text = "&Restore"
Me.btnRestore.UseVisualStyleBackColor = True Me.btnRestore.UseVisualStyleBackColor = True
' '
@@ -619,19 +645,18 @@ Partial Class frmGameManager
Me.btnSave.Location = New System.Drawing.Point(616, 336) Me.btnSave.Location = New System.Drawing.Point(616, 336)
Me.btnSave.Name = "btnSave" Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23) Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 11 Me.btnSave.TabIndex = 13
Me.btnSave.Text = "&Save" Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True Me.btnSave.UseVisualStyleBackColor = True
' '
'lstGames 'lstGames
' '
Me.lstGames.FormattingEnabled = True 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.Name = "lstGames"
Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstGames.Size = New System.Drawing.Size(228, 381) Me.lstGames.Size = New System.Drawing.Size(228, 355)
Me.lstGames.Sorted = True Me.lstGames.TabIndex = 3
Me.lstGames.TabIndex = 1
' '
'btnCancel 'btnCancel
' '
@@ -639,7 +664,7 @@ Partial Class frmGameManager
Me.btnCancel.Location = New System.Drawing.Point(697, 336) Me.btnCancel.Location = New System.Drawing.Point(697, 336)
Me.btnCancel.Name = "btnCancel" Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 12 Me.btnCancel.TabIndex = 14
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True Me.btnCancel.UseVisualStyleBackColor = True
' '
@@ -649,7 +674,7 @@ Partial Class frmGameManager
Me.chkEnabled.Location = New System.Drawing.Point(247, 340) Me.chkEnabled.Location = New System.Drawing.Point(247, 340)
Me.chkEnabled.Name = "chkEnabled" Me.chkEnabled.Name = "chkEnabled"
Me.chkEnabled.Size = New System.Drawing.Size(109, 17) 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.Text = "Monitor this game"
Me.chkEnabled.UseVisualStyleBackColor = True Me.chkEnabled.UseVisualStyleBackColor = True
' '
@@ -715,7 +740,7 @@ Partial Class frmGameManager
Me.btnImport.Location = New System.Drawing.Point(84, 526) Me.btnImport.Location = New System.Drawing.Point(84, 526)
Me.btnImport.Name = "btnImport" Me.btnImport.Name = "btnImport"
Me.btnImport.Size = New System.Drawing.Size(75, 23) Me.btnImport.Size = New System.Drawing.Size(75, 23)
Me.btnImport.TabIndex = 4 Me.btnImport.TabIndex = 6
Me.btnImport.Text = "&Import" Me.btnImport.Text = "&Import"
Me.btnImport.UseVisualStyleBackColor = True Me.btnImport.UseVisualStyleBackColor = True
' '
@@ -724,7 +749,7 @@ Partial Class frmGameManager
Me.btnExport.Location = New System.Drawing.Point(165, 526) Me.btnExport.Location = New System.Drawing.Point(165, 526)
Me.btnExport.Name = "btnExport" Me.btnExport.Name = "btnExport"
Me.btnExport.Size = New System.Drawing.Size(75, 23) Me.btnExport.Size = New System.Drawing.Size(75, 23)
Me.btnExport.TabIndex = 5 Me.btnExport.TabIndex = 7
Me.btnExport.Text = "&Export" Me.btnExport.Text = "&Export"
Me.btnExport.UseVisualStyleBackColor = True Me.btnExport.UseVisualStyleBackColor = True
' '
@@ -747,11 +772,48 @@ Partial Class frmGameManager
Me.cmsFile.Size = New System.Drawing.Size(117, 22) Me.cmsFile.Size = New System.Drawing.Size(117, 22)
Me.cmsFile.Text = "&File..." 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 'frmGameManager
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(784, 561) 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.btnExport)
Me.Controls.Add(Me.btnImport) Me.Controls.Add(Me.btnImport)
Me.Controls.Add(Me.grpFilter) Me.Controls.Add(Me.grpFilter)
@@ -779,6 +841,7 @@ Partial Class frmGameManager
Me.Text = "Game Manager" Me.Text = "Game Manager"
Me.grpConfig.ResumeLayout(False) Me.grpConfig.ResumeLayout(False)
Me.grpConfig.PerformLayout() Me.grpConfig.PerformLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpExtra.ResumeLayout(False) Me.grpExtra.ResumeLayout(False)
Me.grpExtra.PerformLayout() Me.grpExtra.PerformLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
@@ -788,6 +851,7 @@ Partial Class frmGameManager
Me.grpFilter.ResumeLayout(False) Me.grpFilter.ResumeLayout(False)
Me.grpFilter.PerformLayout() Me.grpFilter.PerformLayout()
Me.cmsImport.ResumeLayout(False) Me.cmsImport.ResumeLayout(False)
Me.cmsDeleteBackup.ResumeLayout(False)
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@@ -829,14 +893,10 @@ Partial Class frmGameManager
Friend WithEvents btnIconBrowse As System.Windows.Forms.Button Friend WithEvents btnIconBrowse As System.Windows.Forms.Button
Friend WithEvents txtIcon As System.Windows.Forms.TextBox Friend WithEvents txtIcon As System.Windows.Forms.TextBox
Friend WithEvents txtID As System.Windows.Forms.TextBox Friend WithEvents txtID As System.Windows.Forms.TextBox
Friend WithEvents txtCurrentBackup As System.Windows.Forms.TextBox Friend WithEvents lblRemote As System.Windows.Forms.Label
Friend WithEvents lblCurrentBackup As System.Windows.Forms.Label Friend WithEvents lblLocalData 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 chkEnabled As System.Windows.Forms.CheckBox Friend WithEvents chkEnabled As System.Windows.Forms.CheckBox
Friend WithEvents txtFileSize As System.Windows.Forms.TextBox Friend WithEvents lblBackupFile As System.Windows.Forms.Label
Friend WithEvents lblFileSize As System.Windows.Forms.Label
Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button
Friend WithEvents btnRestore As System.Windows.Forms.Button Friend WithEvents btnRestore As System.Windows.Forms.Button
Friend WithEvents btnDeleteBackup 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 btnInclude As System.Windows.Forms.Button
Friend WithEvents btnExclude As System.Windows.Forms.Button Friend WithEvents btnExclude As System.Windows.Forms.Button
Friend WithEvents lblRestorePath As Label Friend WithEvents lblRestorePath As Label
Friend WithEvents txtRestorePath As TextBox
Friend WithEvents btnImport As System.Windows.Forms.Button Friend WithEvents btnImport As System.Windows.Forms.Button
Friend WithEvents btnExport As System.Windows.Forms.Button Friend WithEvents btnExport As System.Windows.Forms.Button
Friend WithEvents cmsImport As System.Windows.Forms.ContextMenuStrip Friend WithEvents cmsImport As System.Windows.Forms.ContextMenuStrip
Friend WithEvents cmsOfficial As System.Windows.Forms.ToolStripMenuItem Friend WithEvents cmsOfficial As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmsFile 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 End Class
+3
View File
@@ -120,4 +120,7 @@
<metadata name="cmsImport.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="cmsImport.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </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> </root>
+316 -127
View File
@@ -11,7 +11,7 @@ Public Class frmGameManager
Private bTriggerBackup As Boolean = False Private bTriggerBackup As Boolean = False
Private bTriggerRestore As Boolean = False Private bTriggerRestore As Boolean = False
Private oBackupList As New List(Of clsGame) Private oBackupList As New List(Of clsGame)
Private oRestoreList As New List(Of clsGame) Private oRestoreList As New Hashtable
Private oAppData As Hashtable Private oAppData As Hashtable
Private oLocalBackupData As SortedList Private oLocalBackupData As SortedList
Private oRemoteBackupData As SortedList Private oRemoteBackupData As SortedList
@@ -20,6 +20,7 @@ Public Class frmGameManager
Private oCurrentTagFilters As New List(Of clsTag) Private oCurrentTagFilters As New List(Of clsTag)
Private oCurrentStringFilters As New Hashtable Private oCurrentStringFilters As New Hashtable
Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter Private eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
Private WithEvents tmFilterTimer As Timer
Private Enum eModes As Integer Private Enum eModes As Integer
View = 1 View = 1
@@ -34,7 +35,7 @@ Public Class frmGameManager
Property BackupFolder As String Property BackupFolder As String
Get Get
Return sBackupFolder & "\" Return sBackupFolder & Path.DirectorySeparatorChar
End Get End Get
Set(value As String) Set(value As String)
sBackupFolder = value sBackupFolder = value
@@ -113,11 +114,11 @@ Public Class frmGameManager
End Set End Set
End Property End Property
Property RestoreList As List(Of clsGame) Property RestoreList As Hashtable
Get Get
Return oRestoreList Return oRestoreList
End Get End Get
Set(value As List(Of clsGame)) Set(value As Hashtable)
oRestoreList = value oRestoreList = value
End Set End Set
End Property End Property
@@ -141,8 +142,8 @@ Public Class frmGameManager
End Property End Property
Private Sub LoadBackupData() Private Sub LoadBackupData()
oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local) oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
End Sub End Sub
Private Function ConvertToRelativePath(ByVal sSavePath As String, ByVal sAppPath As String) As String Private Function ConvertToRelativePath(ByVal sSavePath As String, ByVal sAppPath As String) As String
@@ -159,7 +160,7 @@ Public Class frmGameManager
End Function End Function
Private Sub CheckManifestandUpdate(ByVal oOriginalApp As clsGame, ByVal oNewApp As clsGame) 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 sDirectory As String
Dim sNewDirectory As String Dim sNewDirectory As String
Dim sFileName 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 there is a name change, check and update the manifest
If oNewApp.Name <> oOriginalApp.Name Then If oNewApp.Name <> oOriginalApp.Name Then
'Local 'Local
If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then
oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local) 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 'Rename Current Backup File & Folder
sFileName = BackupFolder & oBackupItem.FileName sFileName = BackupFolder & oBackupItem.FileName
'Rename Backup File '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 If File.Exists(sFileName) Then
FileSystem.Rename(sFileName, sNewFileName) FileSystem.Rename(sFileName, sNewFileName)
End If End If
@@ -191,16 +193,21 @@ Public Class frmGameManager
oBackupItem.Name = oNewApp.Name oBackupItem.Name = oNewApp.Name
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Local)
oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local) Next
oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
End If End If
'Remote 'Remote
If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then
oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote) oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote)
For Each oBackupItem As clsBackup In oBackupItems
oBackupItem.Name = oNewApp.Name oBackupItem.Name = oNewApp.Name
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Remote) mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Remote)
oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) Next
oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
End If End If
End If End If
End Sub End Sub
@@ -265,7 +272,7 @@ Public Class frmGameManager
Next Next
End If End If
lstGames.Items.Clear() lstGames.DataSource = Nothing
FormatAndFillList() FormatAndFillList()
End Sub End Sub
@@ -280,7 +287,7 @@ Public Class frmGameManager
End If End If
End If End If
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseExe, "exe", _ sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseExe, "exe",
frmGameManager_Executable, sDefaultFolder, False) frmGameManager_Executable, sDefaultFolder, False)
If sNewPath <> String.Empty Then If sNewPath <> String.Empty Then
@@ -336,8 +343,14 @@ Public Class frmGameManager
End If End If
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) frmGameManager_Icon, sDefaultFolder, False)
Else
sNewPath = mgrCommon.OpenFileBrowser(frmGameManager_ChooseCustomIcon, "png",
"PNG", sDefaultFolder, False)
End If
If sNewPath <> String.Empty Then If sNewPath <> String.Empty Then
txtIcon.Text = sNewPath txtIcon.Text = sNewPath
@@ -370,33 +383,48 @@ Public Class frmGameManager
Dim oApp As clsGame Dim oApp As clsGame
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
Dim oList As New List(Of KeyValuePair(Of String, String))
lstGames.ValueMember = "Key" Dim sFilter As String = txtQuickFilter.Text
lstGames.DisplayMember = "Value"
lstGames.BeginUpdate()
For Each de As DictionaryEntry In AppData For Each de As DictionaryEntry In AppData
oApp = DirectCast(de.Value, clsGame) oApp = DirectCast(de.Value, clsGame)
oData = New KeyValuePair(Of String, String)(oApp.ID, oApp.Name) 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 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 IsLoading = False
End Sub End Sub
Private Sub OpenBackupFile() Private Sub OpenBackupFile()
Dim sFileName As String Dim sFileName As String
Dim oProcessStartInfo As ProcessStartInfo
sFileName = BackupFolder & CurrentBackupItem.FileName sFileName = BackupFolder & CurrentBackupItem.FileName
If File.Exists(sFileName) Then 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 Else
mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupExists, MsgBoxStyle.Exclamation)
End If End If
End Sub End Sub
Private Sub UpdateBuilderButtonLabel(ByVal sBuilderString As String, ByVal sLabel As String, ByVal btn As Button, ByVal bDirty As Boolean) 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 End If
Else Else
If txtAppPath.Text <> String.Empty Then If txtAppPath.Text <> String.Empty Then
If Directory.Exists(txtAppPath.Text & "\" & txtSavePath.Text) Then If Directory.Exists(txtAppPath.Text & Path.DirectorySeparatorChar & txtSavePath.Text) Then
sRoot = txtAppPath.Text & "\" & txtSavePath.Text sRoot = txtAppPath.Text & Path.DirectorySeparatorChar & txtSavePath.Text
End If End If
End If End If
End If End If
@@ -451,14 +479,14 @@ Public Class frmGameManager
If Not CurrentBackupItem.AbsolutePath Then If Not CurrentBackupItem.AbsolutePath Then
If CurrentGame.ProcessPath <> String.Empty Then If CurrentGame.ProcessPath <> String.Empty Then
CurrentBackupItem.RelativeRestorePath = CurrentGame.ProcessPath & "\" & CurrentBackupItem.RestorePath CurrentBackupItem.RelativeRestorePath = CurrentGame.ProcessPath & Path.DirectorySeparatorChar & CurrentBackupItem.RestorePath
Else Else
sProcess = CurrentGame.TrueProcess sProcess = CurrentGame.TrueProcess
If mgrCommon.IsProcessNotSearchable(CurrentGame) Then bNoAuto = True If mgrCommon.IsProcessNotSearchable(CurrentGame) Then bNoAuto = True
sRestorePath = mgrPath.ProcessPathSearch(CurrentBackupItem.Name, sProcess, mgrCommon.FormatString(frmGameManager_ErrorPathNotSet, CurrentBackupItem.Name), bNoAuto) sRestorePath = mgrPath.ProcessPathSearch(CurrentBackupItem.Name, sProcess, mgrCommon.FormatString(frmGameManager_ErrorPathNotSet, CurrentBackupItem.Name), bNoAuto)
If sRestorePath <> String.Empty Then If sRestorePath <> String.Empty Then
CurrentBackupItem.RelativeRestorePath = sRestorePath & "\" & CurrentBackupItem.RestorePath CurrentBackupItem.RelativeRestorePath = sRestorePath & Path.DirectorySeparatorChar & CurrentBackupItem.RestorePath
txtAppPath.Text = sRestorePath txtAppPath.Text = sRestorePath
Else Else
Return False Return False
@@ -471,6 +499,7 @@ Public Class frmGameManager
Private Sub OpenRestorePath() Private Sub OpenRestorePath()
Dim sPath As String = String.Empty Dim sPath As String = String.Empty
Dim oProcessStartInfo As ProcessStartInfo
If CurrentBackupItem.AbsolutePath Then If CurrentBackupItem.AbsolutePath Then
sPath = CurrentBackupItem.RestorePath sPath = CurrentBackupItem.RestorePath
@@ -481,11 +510,14 @@ Public Class frmGameManager
End If End If
If Directory.Exists(sPath) Then 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 Else
mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(frmGameManager_ErrorNoRestorePathExists, MsgBoxStyle.Exclamation)
End If End If
End Sub End Sub
Private Sub OpenTags() Private Sub OpenTags()
@@ -515,15 +547,49 @@ Public Class frmGameManager
ModeChange() ModeChange()
End Sub 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) Private Sub GetBackupInfo(ByVal oApp As clsGame)
Dim oBackupInfo As clsBackup Dim oBackupInfo As clsBackup
Dim oCurrentBackup As clsBackup
Dim oCurrentBackups As List(Of clsBackup)
Dim sFileName As String Dim sFileName As String
Dim oFileInfo As FileInfo Dim oComboItems As New List(Of KeyValuePair(Of String, String))
Dim dFileSize As Double Dim bLocalData As Boolean = False
Dim bRemoteData As Boolean = False
'cboRemoteBackup
cboRemoteBackup.ValueMember = "Key"
cboRemoteBackup.DisplayMember = "Value"
If oRemoteBackupData.Contains(oApp.Name) Then 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) CurrentBackupItem = DirectCast(oRemoteBackupData(oApp.Name), clsBackup)
txtCurrentBackup.Text = mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {CurrentBackupItem.DateUpdated, CurrentBackupItem.UpdatedBy})
sFileName = BackupFolder & CurrentBackupItem.FileName sFileName = BackupFolder & CurrentBackupItem.FileName
btnOpenBackupFile.Enabled = True btnOpenBackupFile.Enabled = True
@@ -532,84 +598,95 @@ Public Class frmGameManager
btnDeleteBackup.Enabled = True btnDeleteBackup.Enabled = True
If File.Exists(sFileName) Then If File.Exists(sFileName) Then
oFileInfo = New FileInfo(sFileName) lblBackupFileData.Text = Path.GetFileName(CurrentBackupItem.FileName) & " (" & mgrCommon.GetFileSize(sFileName) & ")"
dFileSize = oFileInfo.Length
If dFileSize > 1048576 Then
txtFileSize.Text = mgrCommon.FormatString(App_MB, Math.Round(dFileSize / 1048576, 2).ToString)
Else Else
txtFileSize.Text = mgrCommon.FormatString(App_KB, Math.Round(dFileSize / 1024, 2).ToString) lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
End If End If
mgrRestore.DoPathOverride(CurrentBackupItem, oApp)
lblRestorePathData.Text = CurrentBackupItem.RestorePath
Else Else
txtFileSize.Text = frmGameManager_ErrorNoBackupExists oComboItems.Add(New KeyValuePair(Of String, String)(String.Empty, frmGameManager_None))
End If lblBackupFileData.Text = String.Empty
txtRestorePath.Text = CurrentBackupItem.RestorePath lblRestorePathData.Text = String.Empty
Else
txtCurrentBackup.Text = frmGameManager_Never
txtFileSize.Text = String.Empty
txtRestorePath.Text = String.Empty
btnOpenBackupFile.Enabled = False btnOpenBackupFile.Enabled = False
btnOpenRestorePath.Enabled = False btnOpenRestorePath.Enabled = False
btnRestore.Enabled = False btnRestore.Enabled = False
btnDeleteBackup.Enabled = False btnDeleteBackup.Enabled = False
End If End If
cboRemoteBackup.DataSource = oComboItems
If oLocalBackupData.Contains(oApp.Name) Then If oLocalBackupData.Contains(oApp.Name) Then
bLocalData = True
oBackupInfo = DirectCast(oLocalBackupData(oApp.Name), clsBackup) 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 Else
txtLocalBackup.Text = frmGameManager_Never lblLocalBackupData.Text = frmGameManager_Unknown
End If End If
If txtCurrentBackup.Text = frmGameManager_Never And txtLocalBackup.Text = frmGameManager_Never Then If Not bRemoteData And Not bLocalData Then
lblSync.Visible = False
btnMarkAsRestored.Enabled = False btnMarkAsRestored.Enabled = False
ElseIf txtCurrentBackup.Text = frmGameManager_Never And txtLocalBackup.Text <> frmGameManager_Never Then lblLocalBackupData.ForeColor = Color.Black
lblSync.Visible = False ElseIf Not bRemoteData And bLocalData Then
btnMarkAsRestored.Enabled = False btnMarkAsRestored.Enabled = False
ElseIf txtCurrentBackup.Text <> txtLocalBackup.Text Then lblLocalBackupData.ForeColor = Color.Black
lblSync.ForeColor = Color.Red ElseIf oComboItems(0).Value <> lblLocalBackupData.Text Then
lblSync.Text = frmGameManager_OutofSync lblLocalBackupData.ForeColor = Color.Red
lblSync.Visible = True
btnMarkAsRestored.Enabled = True btnMarkAsRestored.Enabled = True
Else Else
lblSync.ForeColor = Color.Green lblLocalBackupData.ForeColor = Color.Green
lblSync.Text = frmGameManager_UpToDate
lblSync.Visible = True
btnMarkAsRestored.Enabled = False btnMarkAsRestored.Enabled = False
End If End If
End Sub End Sub
Private Sub DeleteBackup() Private Sub DeleteAllBackups()
Dim oDir As DirectoryInfo Dim oBackupData As List(Of clsBackup)
Dim sSubDir As String Dim oBackup As clsBackup
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDelete, CurrentBackupItem.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDeleteAll, CurrentGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrManifest.DoManifestDelete(CurrentBackupItem, mgrSQLite.Database.Local) oBackupData = mgrManifest.DoManifestGetByName(CurrentGame.Name, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDelete(CurrentBackupItem, 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 '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) 'Check for sub-directory and delete if empty
If CurrentBackupItem.FileName.StartsWith(CurrentBackupItem.Name & "\") Then mgrCommon.DeleteDirectoryByBackup(BackupFolder, CurrentBackupItem)
'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
LoadBackupData() LoadBackupData()
@@ -638,6 +715,7 @@ Public Class frmGameManager
txtExclude.Text = oApp.ExcludeList txtExclude.Text = oApp.ExcludeList
chkFolderSave.Checked = oApp.FolderSave chkFolderSave.Checked = oApp.FolderSave
chkTimeStamp.Checked = oApp.AppendTimeStamp chkTimeStamp.Checked = oApp.AppendTimeStamp
nudLimit.Value = oApp.BackupLimit
chkEnabled.Checked = oApp.Enabled chkEnabled.Checked = oApp.Enabled
chkMonitorOnly.Checked = oApp.MonitorOnly chkMonitorOnly.Checked = oApp.MonitorOnly
@@ -709,9 +787,6 @@ Public Class frmGameManager
AddHandler DirectCast(ctl, NumericUpDown).ValueChanged, AddressOf DirtyCheck_ValueChanged AddHandler DirectCast(ctl, NumericUpDown).ValueChanged, AddressOf DirtyCheck_ValueChanged
End If End If
Next Next
'Exemptions
RemoveHandler txtRestorePath.TextChanged, AddressOf DirtyCheck_ValueChanged
End Sub End Sub
Private Sub AssignDirtyHandlersMisc() Private Sub AssignDirtyHandlersMisc()
@@ -725,8 +800,12 @@ Public Class frmGameManager
DirectCast(ctl, TextBox).Text = String.Empty DirectCast(ctl, TextBox).Text = String.Empty
ElseIf TypeOf ctl Is CheckBox Then ElseIf TypeOf ctl Is CheckBox Then
DirectCast(ctl, CheckBox).Checked = False 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 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 End If
Next Next
End Sub End Sub
@@ -738,6 +817,8 @@ Public Class frmGameManager
Case eModes.Add Case eModes.Add
grpFilter.Enabled = False grpFilter.Enabled = False
lstGames.Enabled = False lstGames.Enabled = False
lblQuickFilter.Enabled = False
txtQuickFilter.Enabled = False
grpConfig.Enabled = True grpConfig.Enabled = True
chkMonitorOnly.Enabled = True chkMonitorOnly.Enabled = True
grpExtra.Enabled = True grpExtra.Enabled = True
@@ -758,7 +839,6 @@ Public Class frmGameManager
btnDeleteBackup.Enabled = False btnDeleteBackup.Enabled = False
btnOpenBackupFile.Enabled = False btnOpenBackupFile.Enabled = False
btnOpenRestorePath.Enabled = False btnOpenRestorePath.Enabled = False
lblSync.Visible = False
chkEnabled.Checked = True chkEnabled.Checked = True
chkMonitorOnly.Checked = False chkMonitorOnly.Checked = False
btnTags.Enabled = False btnTags.Enabled = False
@@ -770,6 +850,8 @@ Public Class frmGameManager
Case eModes.Edit Case eModes.Edit
grpFilter.Enabled = False grpFilter.Enabled = False
lstGames.Enabled = False lstGames.Enabled = False
lblQuickFilter.Enabled = False
txtQuickFilter.Enabled = False
grpConfig.Enabled = True grpConfig.Enabled = True
chkEnabled.Enabled = True chkEnabled.Enabled = True
chkMonitorOnly.Enabled = True chkMonitorOnly.Enabled = True
@@ -792,6 +874,8 @@ Public Class frmGameManager
Case eModes.View Case eModes.View
grpFilter.Enabled = True grpFilter.Enabled = True
lstGames.Enabled = True lstGames.Enabled = True
lblQuickFilter.Enabled = True
txtQuickFilter.Enabled = True
grpConfig.Enabled = True grpConfig.Enabled = True
chkEnabled.Enabled = True chkEnabled.Enabled = True
chkMonitorOnly.Enabled = True chkMonitorOnly.Enabled = True
@@ -809,6 +893,8 @@ Public Class frmGameManager
Case eModes.ViewTemp Case eModes.ViewTemp
grpFilter.Enabled = True grpFilter.Enabled = True
lstGames.Enabled = True lstGames.Enabled = True
lblQuickFilter.Enabled = True
txtQuickFilter.Enabled = True
grpConfig.Enabled = False grpConfig.Enabled = False
chkEnabled.Enabled = False chkEnabled.Enabled = False
chkMonitorOnly.Enabled = False chkMonitorOnly.Enabled = False
@@ -819,6 +905,7 @@ Public Class frmGameManager
btnAdd.Enabled = True btnAdd.Enabled = True
btnDelete.Enabled = False btnDelete.Enabled = False
btnBackup.Enabled = False btnBackup.Enabled = False
btnOpenRestorePath.Enabled = False
btnTags.Enabled = False btnTags.Enabled = False
lblTags.Visible = False lblTags.Visible = False
btnInclude.Text = frmGameManager_btnInclude btnInclude.Text = frmGameManager_btnInclude
@@ -828,11 +915,12 @@ Public Class frmGameManager
Case eModes.Disabled Case eModes.Disabled
grpFilter.Enabled = True grpFilter.Enabled = True
lstGames.Enabled = True lstGames.Enabled = True
lblQuickFilter.Enabled = True
txtQuickFilter.Enabled = True
WipeControls(grpConfig.Controls) WipeControls(grpConfig.Controls)
WipeControls(grpExtra.Controls) WipeControls(grpExtra.Controls)
WipeControls(grpStats.Controls) WipeControls(grpStats.Controls)
pbIcon.Image = Icon_Unknown pbIcon.Image = Icon_Unknown
lblSync.Visible = False
btnSave.Enabled = False btnSave.Enabled = False
btnCancel.Enabled = False btnCancel.Enabled = False
grpConfig.Enabled = False grpConfig.Enabled = False
@@ -853,11 +941,12 @@ Public Class frmGameManager
btnExport.Enabled = True btnExport.Enabled = True
Case eModes.MultiSelect Case eModes.MultiSelect
lstGames.Enabled = True lstGames.Enabled = True
lblQuickFilter.Enabled = False
txtQuickFilter.Enabled = False
WipeControls(grpConfig.Controls) WipeControls(grpConfig.Controls)
WipeControls(grpExtra.Controls) WipeControls(grpExtra.Controls)
WipeControls(grpStats.Controls) WipeControls(grpStats.Controls)
pbIcon.Image = Icon_Unknown pbIcon.Image = Icon_Unknown
lblSync.Visible = False
btnSave.Enabled = True btnSave.Enabled = True
btnCancel.Enabled = False btnCancel.Enabled = False
grpConfig.Enabled = False grpConfig.Enabled = False
@@ -883,6 +972,30 @@ Public Class frmGameManager
IsLoading = False IsLoading = False
End Sub 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() Private Sub EditApp()
eCurrentMode = eModes.Edit eCurrentMode = eModes.Edit
ModeChange() ModeChange()
@@ -950,6 +1063,7 @@ Public Class frmGameManager
oApp.ExcludeList = txtExclude.Text oApp.ExcludeList = txtExclude.Text
oApp.FolderSave = chkFolderSave.Checked oApp.FolderSave = chkFolderSave.Checked
oApp.AppendTimeStamp = chkTimeStamp.Checked oApp.AppendTimeStamp = chkTimeStamp.Checked
oApp.BackupLimit = nudLimit.Value
oApp.Enabled = chkEnabled.Checked oApp.Enabled = chkEnabled.Checked
oApp.MonitorOnly = chkMonitorOnly.Checked oApp.MonitorOnly = chkMonitorOnly.Checked
oApp.ProcessPath = txtAppPath.Text oApp.ProcessPath = txtAppPath.Text
@@ -975,7 +1089,7 @@ Public Class frmGameManager
Case eModes.MultiSelect Case eModes.MultiSelect
Dim sMonitorIDs As New List(Of String) Dim sMonitorIDs As New List(Of String)
For Each oData In lstGames.SelectedItems For Each oData In lstGames.SelectedItems
sMonitorIDs.Add(AppData(oData.Key)) sMonitorIDs.Add(oData.Key)
Next Next
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiSave, New String() {sMonitorIDs.Count, mgrCommon.BooleanYesNo(oApp.Enabled), mgrCommon.BooleanYesNo(oApp.MonitorOnly)}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then 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 End Select
If bSuccess Then If bSuccess Then
Dim iSelected As Integer
IsDirty = False IsDirty = False
LoadData() LoadData()
iSelected = lstGames.Items.IndexOf(New KeyValuePair(Of String, String)(oApp.ID, oApp.Name))
If iSelected = -1 Then eCurrentMode = eModes.Disabled
ModeChange() ModeChange()
If eCurrentMode = eModes.View Then lstGames.SelectedIndex = iSelected If eCurrentMode = eModes.View Then lstGames.SelectedValue = oApp.ID
End If End If
End Sub End Sub
@@ -1028,6 +1139,7 @@ Public Class frmGameManager
End Sub End Sub
Private Sub SwitchApp() Private Sub SwitchApp()
If Not bIsLoading Then
If lstGames.SelectedItems.Count = 1 Then If lstGames.SelectedItems.Count = 1 Then
eCurrentMode = eModes.View eCurrentMode = eModes.View
FillData() FillData()
@@ -1036,6 +1148,7 @@ Public Class frmGameManager
eCurrentMode = eModes.MultiSelect eCurrentMode = eModes.MultiSelect
ModeChange() ModeChange()
End If End If
End If
End Sub End Sub
Private Function CoreValidatation(ByVal oApp As clsGame) As Boolean Private Function CoreValidatation(ByVal oApp As clsGame) As Boolean
@@ -1083,8 +1196,8 @@ Public Class frmGameManager
If oMarkList.Count = 1 Then If oMarkList.Count = 1 Then
If mgrCommon.ShowMessage(frmGameManager_ConfirmMark, oMarkList(0).Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(frmGameManager_ConfirmMark, oMarkList(0).Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
bWasUpdated = True bWasUpdated = True
If mgrManifest.DoManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then If mgrManifest.DoGlobalManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oMarkList(0), mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByName(oMarkList(0), mgrSQLite.Database.Local)
Else Else
mgrManifest.DoManifestAdd(oMarkList(0), mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oMarkList(0), mgrSQLite.Database.Local)
End If End If
@@ -1093,8 +1206,8 @@ Public Class frmGameManager
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiMark, oMarkList.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiMark, oMarkList.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
bWasUpdated = True bWasUpdated = True
For Each oGameBackup In oMarkList For Each oGameBackup In oMarkList
If mgrManifest.DoManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then If mgrManifest.DoGlobalManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oGameBackup, mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByName(oGameBackup, mgrSQLite.Database.Local)
Else Else
mgrManifest.DoManifestAdd(oGameBackup, mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oGameBackup, mgrSQLite.Database.Local)
End If End If
@@ -1121,10 +1234,11 @@ Public Class frmGameManager
End If End If
End Sub End Sub
Private Sub TriggerSelectedBackup() Private Sub TriggerSelectedBackup(Optional ByVal bPrompt As Boolean = True)
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
Dim sMsg As String = String.Empty Dim sMsg As String = String.Empty
Dim oGame As clsGame Dim oGame As clsGame
Dim bDoBackup As Boolean = False
If lstGames.SelectedItems.Count > 0 Then If lstGames.SelectedItems.Count > 0 Then
BackupList.Clear() BackupList.Clear()
@@ -1135,41 +1249,61 @@ Public Class frmGameManager
Next Next
If BackupList.Count = 1 Then If BackupList.Count = 1 Then
bDoBackup = True
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmBackup, BackupList(0).Name) sMsg = mgrCommon.FormatString(frmGameManager_ConfirmBackup, BackupList(0).Name)
ElseIf BackupList.Count > 1 Then ElseIf BackupList.Count > 1 Then
bDoBackup = True
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmMultiBackup, BackupList.Count) sMsg = mgrCommon.FormatString(frmGameManager_ConfirmMultiBackup, BackupList.Count)
Else
mgrCommon.ShowMessage(frmGameManager_ErrorNoValidBackup, MsgBoxStyle.Information)
End If End If
If bDoBackup Then
If bPrompt Then
If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
TriggerBackup = True TriggerBackup = True
Me.Close() Me.Close()
End If End If
Else
TriggerBackup = True
Me.Close()
End If
End If
End If End If
End Sub End Sub
Private Sub TriggerSelectedRestore() Private Sub TriggerSelectedRestore(Optional ByVal bPrompt As Boolean = True)
Dim oData As KeyValuePair(Of String, String) Dim oData As KeyValuePair(Of String, String)
Dim sMsg As String = String.Empty Dim sMsg As String = String.Empty
Dim oGame As clsGame Dim oGame As clsGame
Dim oBackup As clsBackup
Dim bDoRestore As Boolean = False Dim bDoRestore As Boolean = False
If lstGames.SelectedItems.Count > 0 Then If lstGames.SelectedItems.Count > 0 Then
RestoreList.Clear() RestoreList.Clear()
If lstGames.SelectedItems.Count = 1 Then
RestoreList.Add(CurrentGame, CurrentBackupItem)
Else
For Each oData In lstGames.SelectedItems For Each oData In lstGames.SelectedItems
If oRemoteBackupData.Contains(oData.Value) Then If oRemoteBackupData.Contains(oData.Value) Then
oGame = DirectCast(AppData(oData.Key), clsGame) oGame = DirectCast(AppData(oData.Key), clsGame)
RestoreList.Add(oGame) oBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup)
RestoreList.Add(oGame, oBackup)
End If End If
Next Next
End If
If RestoreList.Count = 1 Then If RestoreList.Count = 1 Then
bDoRestore = True bDoRestore = True
If Not mgrRestore.CheckManifest(RestoreList(0).Name) Then oGame = New clsGame
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestoreAnyway, RestoreList(0).Name) 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 Else
sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestore, RestoreList(0).Name) sMsg = mgrCommon.FormatString(frmGameManager_ConfirmRestore, oGame.Name)
End If End If
ElseIf RestoreList.Count > 1 Then ElseIf RestoreList.Count > 1 Then
bDoRestore = True bDoRestore = True
@@ -1178,12 +1312,16 @@ Public Class frmGameManager
mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupData, MsgBoxStyle.Information) mgrCommon.ShowMessage(frmGameManager_ErrorNoBackupData, MsgBoxStyle.Information)
End If End If
'We need this check in case a bunch of games with no backups are multi-selected
If bDoRestore Then If bDoRestore Then
If bPrompt Then
If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMsg, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
TriggerRestore = True TriggerRestore = True
Me.Close() Me.Close()
End If End If
Else
TriggerRestore = True
Me.Close()
End If
End If End If
End If End If
End Sub End Sub
@@ -1204,7 +1342,7 @@ Public Class frmGameManager
Private Sub ExportGameList() Private Sub ExportGameList()
Dim sLocation As String 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 If sLocation <> String.Empty Then
mgrMonitorList.ExportMonitorList(sLocation) mgrMonitorList.ExportMonitorList(sLocation)
@@ -1213,13 +1351,19 @@ Public Class frmGameManager
End Sub End Sub
Private Sub ImportOfficialGameList() 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 mgrCommon.ShowMessage(frmGameManager_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(App_URLImport) Then If mgrMonitorList.DoImport(sImportURL) Then
LoadData() LoadData()
End If End If
End If End If
End Sub End Sub
Private Sub SetForm() Private Sub SetForm()
@@ -1248,9 +1392,9 @@ Public Class frmGameManager
btnOpenRestorePath.Text = frmGameManager_btnOpenRestorePath btnOpenRestorePath.Text = frmGameManager_btnOpenRestorePath
btnOpenBackupFile.Text = frmGameManager_btnOpenBackupFile btnOpenBackupFile.Text = frmGameManager_btnOpenBackupFile
btnDeleteBackup.Text = frmGameManager_btnDeleteBackup btnDeleteBackup.Text = frmGameManager_btnDeleteBackup
lblFileSize.Text = frmGameManager_lblFileSize lblBackupFile.Text = frmGameManager_lblBackupFile
lblCurrentBackup.Text = frmGameManager_lblCurrentBackup lblRemote.Text = frmGameManager_lblRemote
lblLastBackup.Text = frmGameManager_lblLastBackup lblLocalData.Text = frmGameManager_lblLocalData
btnIconBrowse.Text = frmGameManager_btnIconBrowse btnIconBrowse.Text = frmGameManager_btnIconBrowse
lblVersion.Text = frmGameManager_lblVersion lblVersion.Text = frmGameManager_lblVersion
lblCompany.Text = frmGameManager_lblCompany lblCompany.Text = frmGameManager_lblCompany
@@ -1273,6 +1417,15 @@ Public Class frmGameManager
btnAdd.Text = frmGameManager_btnAdd btnAdd.Text = frmGameManager_btnAdd
cmsOfficial.Text = frmGameManager_cmsOfficial cmsOfficial.Text = frmGameManager_cmsOfficial
cmsFile.Text = frmGameManager_cmsFile 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 End Sub
Private Sub frmGameManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmGameManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
@@ -1300,6 +1453,9 @@ Public Class frmGameManager
AssignDirtyHandlers(grpExtra.Controls) AssignDirtyHandlers(grpExtra.Controls)
AssignDirtyHandlers(grpStats.Controls) AssignDirtyHandlers(grpStats.Controls)
AssignDirtyHandlersMisc() AssignDirtyHandlersMisc()
LoadData(False)
ModeChange()
End Sub End Sub
Private Sub lstGames_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedIndexChanged Private Sub lstGames_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedIndexChanged
@@ -1372,7 +1528,19 @@ Public Class frmGameManager
End Sub End Sub
Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click
If cboRemoteBackup.Items.Count > 1 Then
cmsDeleteBackup.Show(btnDeleteBackup, New Drawing.Point(109, 11), ToolStripDropDownDirection.AboveRight)
Else
DeleteBackup() 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 End Sub
Private Sub btnMarkAsRestored_Click(sender As Object, e As EventArgs) Handles btnMarkAsRestored.Click Private Sub btnMarkAsRestored_Click(sender As Object, e As EventArgs) Handles btnMarkAsRestored.Click
@@ -1403,14 +1571,16 @@ Public Class frmGameManager
End Sub End Sub
Private Sub chkFolderSave_CheckedChanged(sender As Object, e As EventArgs) Handles chkFolderSave.CheckedChanged Private Sub chkFolderSave_CheckedChanged(sender As Object, e As EventArgs) Handles chkFolderSave.CheckedChanged
If chkFolderSave.Checked Then FolderSaveModeChange()
btnInclude.Enabled = False End Sub
If txtFileType.Text <> String.Empty Then
txtFileType.Text = String.Empty Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
UpdateBuilderButtonLabel(txtFileType.Text, frmGameManager_IncludeShortcut, btnInclude, False) TimeStampModeChange()
End If End Sub
Else
btnInclude.Enabled = True 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 If
End Sub End Sub
@@ -1429,4 +1599,23 @@ Public Class frmGameManager
Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
ExportGameList() ExportGameList()
End Sub 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 End Class
-3
View File
@@ -170,7 +170,6 @@ Partial Class frmIncludeExclude
' '
'optFileTypes 'optFileTypes
' '
Me.optFileTypes.AutoSize = True
Me.optFileTypes.Location = New System.Drawing.Point(6, 19) Me.optFileTypes.Location = New System.Drawing.Point(6, 19)
Me.optFileTypes.Name = "optFileTypes" Me.optFileTypes.Name = "optFileTypes"
Me.optFileTypes.Size = New System.Drawing.Size(73, 17) Me.optFileTypes.Size = New System.Drawing.Size(73, 17)
@@ -181,7 +180,6 @@ Partial Class frmIncludeExclude
' '
'optIndividualFiles 'optIndividualFiles
' '
Me.optIndividualFiles.AutoSize = True
Me.optIndividualFiles.Location = New System.Drawing.Point(85, 19) Me.optIndividualFiles.Location = New System.Drawing.Point(85, 19)
Me.optIndividualFiles.Name = "optIndividualFiles" Me.optIndividualFiles.Name = "optIndividualFiles"
Me.optIndividualFiles.Size = New System.Drawing.Size(94, 17) Me.optIndividualFiles.Size = New System.Drawing.Size(94, 17)
@@ -250,7 +248,6 @@ Partial Class frmIncludeExclude
Me.Text = "Include / Exclude Builder" Me.Text = "Include / Exclude Builder"
Me.cmsItems.ResumeLayout(False) Me.cmsItems.ResumeLayout(False)
Me.grpFileOptions.ResumeLayout(False) Me.grpFileOptions.ResumeLayout(False)
Me.grpFileOptions.PerformLayout()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
+1 -1
View File
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
CQAAAk1TRnQBSQFMAgEBAwEAAbABAAGwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo CQAAAk1TRnQBSQFMAgEBAwEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+10 -5
View File
@@ -30,7 +30,7 @@ Public Class frmIncludeExclude
Return sRootFolder Return sRootFolder
End Get End Get
Set(value As String) Set(value As String)
sRootFolder = value.TrimEnd("\") sRootFolder = value.TrimEnd(Path.DirectorySeparatorChar)
End Set End Set
End Property End Property
@@ -52,7 +52,7 @@ Public Class frmIncludeExclude
If sFolders.Length <> 0 Then If sFolders.Length <> 0 Then
For Each sFolder As String In sFolders 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.Name = sFolder
oChild.Tag = 0 oChild.Tag = 0
oNode.Nodes.Add(oChild) oNode.Nodes.Add(oChild)
@@ -64,7 +64,7 @@ Public Class frmIncludeExclude
If sFiles.Length <> 0 Then If sFiles.Length <> 0 Then
For Each sFile As String In sFiles 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 oChild.Tag = 1
oNode.Nodes.Add(oChild) oNode.Nodes.Add(oChild)
Next Next
@@ -195,7 +195,7 @@ Public Class frmIncludeExclude
If Path.GetFileName(txtRootFolder.Text) = sNewLabel Then If Path.GetFileName(txtRootFolder.Text) = sNewLabel Then
sFolderCheck = txtRootFolder.Text sFolderCheck = txtRootFolder.Text
Else Else
sFolderCheck = txtRootFolder.Text & "\" & sNewLabel sFolderCheck = txtRootFolder.Text & Path.DirectorySeparatorChar & sNewLabel
End If End If
If Directory.Exists(sFolderCheck) Then If Directory.Exists(sFolderCheck) Then
iType = 0 iType = 0
@@ -335,10 +335,15 @@ Public Class frmIncludeExclude
Private Sub lstBuilder_AfterLabelEdit(sender As Object, e As LabelEditEventArgs) Handles lstBuilder.AfterLabelEdit Private Sub lstBuilder_AfterLabelEdit(sender As Object, e As LabelEditEventArgs) Handles lstBuilder.AfterLabelEdit
If Not e.Label Is Nothing Then 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 If lstBuilder.Items.ContainsKey(e.Label) Then
e.CancelEdit = True e.CancelEdit = True
Else 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 If End If
End Sub End Sub
+65 -22
View File
@@ -39,14 +39,17 @@ Partial Class frmMain
Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCompact = 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.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem()
Me.bwMonitor = New System.ComponentModel.BackgroundWorker() Me.bwMonitor = New System.ComponentModel.BackgroundWorker()
Me.txtLog = New System.Windows.Forms.TextBox() Me.txtLog = New System.Windows.Forms.TextBox()
Me.gMonStatusStrip = New System.Windows.Forms.StatusStrip() 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.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.gMonMainMenu = New System.Windows.Forms.MenuStrip()
Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem() Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonFileMonitor = 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.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem() Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCompact = 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.gMonHelp = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpManual = 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.ContextMenuStrip = Me.gMonTrayMenu
Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon) Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon)
Me.gMonTray.Text = "GBM" Me.gMonTray.Text = "GBM"
Me.gMonTray.Visible = True
' '
'gMonTrayMenu 'gMonTrayMenu
' '
@@ -164,7 +169,7 @@ Partial Class frmMain
' '
'gMonTrayTools '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.Name = "gMonTrayTools"
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22) Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayTools.Text = "&Tools" Me.gMonTrayTools.Text = "&Tools"
@@ -181,6 +186,25 @@ Partial Class frmMain
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(184, 22) Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsCompact.Text = "&Compact Databases" 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 'gMonTraySep1
' '
Me.gMonTraySep1.Name = "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.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.Location = New System.Drawing.Point(12, 184)
Me.txtLog.MaxLength = 16777216 Me.txtLog.MaxLength = 524288
Me.txtLog.Multiline = True Me.txtLog.Multiline = True
Me.txtLog.Name = "txtLog" Me.txtLog.Name = "txtLog"
Me.txtLog.ReadOnly = True 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.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.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.Name = "gMonStatusStrip"
Me.gMonStatusStrip.ShowItemToolTips = True Me.gMonStatusStrip.ShowItemToolTips = True
Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22) Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22)
@@ -223,33 +247,26 @@ Partial Class frmMain
'gMonStripAdminButton 'gMonStripAdminButton
' '
Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
Me.gMonStripAdminButton.DropDownButtonWidth = 0
Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.Icon_User Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.Icon_User
Me.gMonStripAdminButton.ImageTransparentColor = System.Drawing.Color.Magenta
Me.gMonStripAdminButton.Name = "gMonStripAdminButton" Me.gMonStripAdminButton.Name = "gMonStripAdminButton"
Me.gMonStripAdminButton.Size = New System.Drawing.Size(21, 20) Me.gMonStripAdminButton.Size = New System.Drawing.Size(16, 17)
Me.gMonStripAdminButton.Text = "Elevation" Me.gMonStripAdminButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.gMonStripAdminButton.ToolTipText = "Elevation"
' '
'gMonStripTxtStatus 'gMonStripTxtStatus
' '
Me.gMonStripTxtStatus.Margin = New System.Windows.Forms.Padding(5, 0, 0, 0)
Me.gMonStripTxtStatus.Name = "gMonStripTxtStatus" 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.Spring = True
Me.gMonStripTxtStatus.Text = "Monitor Status" Me.gMonStripTxtStatus.Text = "Monitor Status"
Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
' '
'gMonStripStatusButton '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.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.Text = "Monitor Status:"
Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.gMonStripStatusButton.ToolTipText = "Click to toggle monitoring on or off."
' '
'gMonMainMenu 'gMonMainMenu
' '
@@ -329,7 +346,7 @@ Partial Class frmMain
' '
'gMonTools '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.Name = "gMonTools"
Me.gMonTools.Size = New System.Drawing.Size(47, 20) Me.gMonTools.Size = New System.Drawing.Size(47, 20)
Me.gMonTools.Text = "&Tools" Me.gMonTools.Text = "&Tools"
@@ -346,6 +363,25 @@ Partial Class frmMain
Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22) Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsCompact.Text = "&Compact Databases" 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 'gMonHelp
' '
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout}) 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.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(524, 386) Me.ClientSize = New System.Drawing.Size(524, 401)
Me.Controls.Add(Me.pbTime) Me.Controls.Add(Me.pbTime)
Me.Controls.Add(Me.lblStatus3) Me.Controls.Add(Me.lblStatus3)
Me.Controls.Add(Me.lblStatus2) 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.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.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.KeyPreview = True
Me.MainMenuStrip = Me.gMonMainMenu Me.MainMenuStrip = Me.gMonMainMenu
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
@@ -548,7 +585,6 @@ Partial Class frmMain
Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupCustomVariables 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 pbIcon As System.Windows.Forms.PictureBox
Friend WithEvents btnLogToggle As System.Windows.Forms.Button Friend WithEvents btnLogToggle As System.Windows.Forms.Button
Friend WithEvents lblGameTitle As System.Windows.Forms.Label 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 gMonHelpManual As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btnCancelOperation As System.Windows.Forms.Button Friend WithEvents btnCancelOperation As System.Windows.Forms.Button
Friend WithEvents gMonStripAdminButton As ToolStripSplitButton
Friend WithEvents gMonTraySetupTags As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTraySetupTags As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupTags As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonSetupTags As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents lblStatus1 As Label Friend WithEvents lblStatus1 As Label
@@ -578,4 +613,12 @@ Partial Class frmMain
Friend WithEvents pbTime As System.Windows.Forms.PictureBox Friend WithEvents pbTime As System.Windows.Forms.PictureBox
Friend WithEvents gMonTrayToolsCleanMan As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTrayToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsCleanMan 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 End Class
+287 -75
View File
@@ -23,11 +23,15 @@ Public Class frmMain
Private eCurrentOperation As eOperation = eOperation.None Private eCurrentOperation As eOperation = eOperation.None
Private bCancelledByUser As Boolean = False Private bCancelledByUser As Boolean = False
Private bShutdown 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 bMenuEnabled As Boolean = True
Private bLockdown As Boolean = True Private bLockdown As Boolean = True
Private bFirstRun As Boolean = False Private bFirstRun As Boolean = False
Private bProcessIsAdmin As Boolean = False Private bProcessIsAdmin As Boolean = False
Private bLogToggle As Boolean = False Private bLogToggle As Boolean = False
Private bShowToggle As Boolean = True
Private bAllowIcon As Boolean = False Private bAllowIcon As Boolean = False
Private bAllowDetails As Boolean = False Private bAllowDetails As Boolean = False
Private oPriorImage As Image Private oPriorImage As Image
@@ -35,6 +39,9 @@ Public Class frmMain
Private sPriorCompany As String Private sPriorCompany As String
Private sPriorVersion As String Private sPriorVersion As String
'Developer Debug Flags
Private bProcessDebugMode As Boolean = False
WithEvents oFileWatcher As New System.IO.FileSystemWatcher WithEvents oFileWatcher As New System.IO.FileSystemWatcher
WithEvents tmScanTimer As New Timer WithEvents tmScanTimer As New Timer
@@ -60,7 +67,7 @@ Public Class frmMain
Else Else
Dim sPattern As String = "h:mm tt" Dim sPattern As String = "h:mm tt"
lblLastActionTitle.Visible = True lblLastActionTitle.Visible = True
lblLastAction.Text = sMessage & " at " & TimeOfDay.ToString(sPattern) lblLastAction.Text = sMessage.TrimEnd(".") & " " & mgrCommon.FormatString(frmMain_AtTime, TimeOfDay.ToString(sPattern))
End If End If
End Sub End Sub
@@ -92,7 +99,7 @@ Public Class frmMain
If oGame.AbsolutePath Then If oGame.AbsolutePath Then
sStatus2 = oGame.Path sStatus2 = oGame.Path
Else Else
sStatus2 = oGame.ProcessPath & "\" & oGame.Path sStatus2 = oGame.ProcessPath & System.IO.Path.DirectorySeparatorChar & oGame.Path
End If End If
sStatus3 = String.Empty sStatus3 = String.Empty
@@ -141,38 +148,41 @@ Public Class frmMain
End Sub End Sub
Private Sub ExecuteBackup(ByVal oBackupList As List(Of clsGame)) Private Sub ExecuteBackup(ByVal oBackupList As List(Of clsGame))
'Init Backup Settings
oBackup.Settings = oSettings
oBackup.DoBackup(oBackupList) oBackup.DoBackup(oBackupList)
OperationEnded() OperationEnded()
End Sub End Sub
Private Sub ExecuteRestore(ByVal oRestoreList As List(Of clsBackup)) Private Sub ExecuteRestore(ByVal oRestoreList As List(Of clsBackup))
'Init Restore Settings
oRestore.Settings = oSettings
oRestore.DoRestore(oRestoreList) oRestore.DoRestore(oRestoreList)
OperationEnded() OperationEnded()
End Sub End Sub
Private Sub RunRestore(ByVal oRestoreList As List(Of clsGame)) Private Sub RunRestore(ByVal oRestoreList As Hashtable)
Dim oBackupData As SortedList = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
Dim oGame As clsGame Dim oGame As clsGame
Dim oReadyList As New List(Of clsBackup) Dim oReadyList As New List(Of clsBackup)
Dim oRestoreInfo As clsBackup Dim oRestoreInfo As clsBackup
Dim bTriggerReload As Boolean = False Dim bTriggerReload As Boolean = False
Dim bPathVerified As Boolean
eCurrentOperation = eOperation.Restore eCurrentOperation = eOperation.Restore
OperationStarted() OperationStarted()
'Build Restore List 'Build Restore List
For Each oGame In oRestoreList For Each de As DictionaryEntry In oRestoreList
oRestoreInfo = oBackupData(oGame.Name) bPathVerified = False
oGame = DirectCast(de.Key, clsGame)
oRestoreInfo = DirectCast(de.Value, clsBackup)
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
oReadyList.Add(oRestoreInfo) bPathVerified = True
Else Else
UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True) UpdateLog(mgrCommon.FormatString(frmMain_ErrorRestorePath, oRestoreInfo.Name), False, ToolTipIcon.Error, True)
End If End If
If bPathVerified Then
If oRestore.CheckRestorePrereq(oRestoreInfo) Then
oReadyList.Add(oRestoreInfo)
End If
End If
Next Next
'Reload the monitor list if any game data was changed during the path checks '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)) Private Sub RunManualBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame Dim oGame As clsGame
Dim bNoAuto As Boolean Dim bNoAuto As Boolean
Dim bPathVerified As Boolean
Dim oReadyList As New List(Of clsGame) Dim oReadyList As New List(Of clsGame)
eCurrentOperation = eOperation.Backup eCurrentOperation = eOperation.Backup
@@ -200,6 +211,7 @@ Public Class frmMain
'Build Backup List 'Build Backup List
For Each oGame In oBackupList For Each oGame In oBackupList
bNoAuto = False bNoAuto = False
bPathVerified = False
gMonStripStatusButton.Enabled = False gMonStripStatusButton.Enabled = False
UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False) UpdateLog(mgrCommon.FormatString(frmMain_ManualBackup, oGame.Name), False)
@@ -211,13 +223,19 @@ Public Class frmMain
End If End If
If oGame.ProcessPath <> String.Empty Then If oGame.ProcessPath <> String.Empty Then
oReadyList.Add(oGame) bPathVerified = True
Else 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 End If
Else Else
bPathVerified = True
End If
If bPathVerified Then
If oBackup.CheckBackupPrereq(oGame) Then
oReadyList.Add(oGame) oReadyList.Add(oGame)
End If End If
End If
Next Next
'Run backups 'Run backups
@@ -267,13 +285,13 @@ Public Class frmMain
eCurrentOperation = eOperation.Backup eCurrentOperation = eOperation.Backup
OperationStarted(False) OperationStarted(False)
If oProcess.GameInfo.MonitorOnly = False Then
If SupressBackup() Then If SupressBackup() Then
bDoBackup = False bDoBackup = False
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.Name), False) UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.Name), False)
SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.CroppedName)) SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.CroppedName))
OperationEnded() OperationEnded()
Else Else
If oProcess.GameInfo.MonitorOnly = False Then
If oSettings.DisableConfirmation Then If oSettings.DisableConfirmation Then
bDoBackup = True bDoBackup = True
Else Else
@@ -286,21 +304,26 @@ Public Class frmMain
OperationEnded() OperationEnded()
End If End If
End If End If
End If
Else Else
bDoBackup = False bDoBackup = False
UpdateLog(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.Name), False) UpdateLog(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.Name), False)
SetLastAction(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.CroppedName)) SetLastAction(mgrCommon.FormatString(frmMain_MonitorEnded, oProcess.GameInfo.CroppedName))
OperationEnded() OperationEnded()
End If End If
End If
If bDoBackup Then If bDoBackup Then
If Not oBackup.CheckBackupPrereq(oProcess.GameInfo) Then
SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupCancel, oProcess.GameInfo.CroppedName))
OperationEnded()
Else
'Run the backup 'Run the backup
oReadyList.Add(oProcess.GameInfo) oReadyList.Add(oProcess.GameInfo)
Dim trd As New System.Threading.Thread(AddressOf ExecuteBackup) Dim trd As New System.Threading.Thread(AddressOf ExecuteBackup)
trd.IsBackground = True trd.IsBackground = True
trd.Start(oReadyList) trd.Start(oReadyList)
End If End If
End If
End Sub End Sub
Private Sub CheckRestore() Private Sub CheckRestore()
@@ -328,8 +351,16 @@ Public Class frmMain
Dim fbBrowser As New OpenFileDialog Dim fbBrowser As New OpenFileDialog
fbBrowser.Title = mgrCommon.FormatString(frmMain_ChooseIcon, oProcess.GameInfo.CroppedName) fbBrowser.Title = mgrCommon.FormatString(frmMain_ChooseIcon, oProcess.GameInfo.CroppedName)
'Unix Handler
If Not mgrCommon.IsUnix Then
fbBrowser.DefaultExt = "ico" fbBrowser.DefaultExt = "ico"
fbBrowser.Filter = frmMain_IconFilter fbBrowser.Filter = frmMain_IconFilter
Else
fbBrowser.DefaultExt = "png"
fbBrowser.Filter = frmMain_PNGFilter
End If
Try Try
fbBrowser.InitialDirectory = IO.Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName) fbBrowser.InitialDirectory = IO.Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
Catch ex As Exception Catch ex As Exception
@@ -525,7 +556,7 @@ Public Class frmMain
End If End If
mgrMonitorList.DoListUpdate(oProcess.GameInfo) mgrMonitorList.DoListUpdate(oProcess.GameInfo)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours) UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours)
End Sub End Sub
@@ -545,12 +576,93 @@ Public Class frmMain
End Function End Function
'Functions handling the opening of other windows '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() Private Sub OpenAbout()
Dim iProcessType As System.Reflection.ProcessorArchitecture = System.Reflection.AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture 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 sVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor
Dim sProcessType = [Enum].GetName(GetType(System.Reflection.ProcessorArchitecture), iProcessType) Dim sProcessType = [Enum].GetName(GetType(System.Reflection.ProcessorArchitecture), iProcessType)
Dim sRevision As String = My.Application.Info.Version.Build & "." & My.Application.Info.Version.Revision 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) mgrCommon.ShowMessage(frmMain_About, New String() {sVersion, sProcessType, sRevision, sConstCopyright}, MsgBoxStyle.Information)
End Sub End Sub
@@ -559,7 +671,7 @@ Public Class frmMain
Dim frm As New frmTags Dim frm As New frmTags
PauseScan() PauseScan()
frm.ShowDialog() frm.ShowDialog()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan() ResumeScan()
End Sub End Sub
@@ -570,7 +682,7 @@ Public Class frmMain
frm.PendingRestores = bPendingRestores frm.PendingRestores = bPendingRestores
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan() ResumeScan()
'Handle backup trigger 'Handle backup trigger
@@ -590,6 +702,8 @@ Public Class frmMain
PauseScan() PauseScan()
If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
oSettings = frm.Settings oSettings = frm.Settings
oBackup.Settings = oSettings
oRestore.Settings = oSettings
'Set Remote Database Location 'Set Remote Database Location
mgrPath.RemoteDatabaseLocation = oSettings.BackupFolder mgrPath.RemoteDatabaseLocation = oSettings.BackupFolder
SetupSyncWatcher() SetupSyncWatcher()
@@ -604,7 +718,7 @@ Public Class frmMain
frm.GameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList) frm.GameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan() ResumeScan()
End Sub End Sub
@@ -613,7 +727,7 @@ Public Class frmMain
PauseScan() PauseScan()
frm.ShowDialog() frm.ShowDialog()
mgrPath.CustomVariablesReload() mgrPath.CustomVariablesReload()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan() ResumeScan()
End Sub End Sub
@@ -684,7 +798,7 @@ Public Class frmMain
Private Sub SyncGameSettings() Private Sub SyncGameSettings()
'Sync Monitor List 'Sync Monitor List
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(False) If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
End Sub End Sub
Private Sub LocalDatabaseCheck() Private Sub LocalDatabaseCheck()
@@ -699,11 +813,11 @@ Public Class frmMain
Private Sub LoadAndVerify() Private Sub LoadAndVerify()
'The application cannot continue if this fails 'If the default utility is missing we cannot continue
If Not oBackup.CheckForUtilities(mgrPath.Utility7zLocation) Then If Not oBackup.CheckForUtilities(mgrPath.Default7zLocation) Then
mgrCommon.ShowMessage(frmMain_Error7zip, MsgBoxStyle.Critical) mgrCommon.ShowMessage(frmMain_Error7zip, MsgBoxStyle.Critical)
bShutdown = True bInitFail = True
Me.Close() Exit Sub
End If End If
'Local Database Check 'Local Database Check
@@ -712,12 +826,14 @@ Public Class frmMain
'Load Settings 'Load Settings
oSettings.LoadSettings() oSettings.LoadSettings()
oBackup.Settings = oSettings
oRestore.Settings = oSettings
If Not bFirstRun Then If Not bFirstRun Then
'The application cannot continue if this fails 'The application cannot continue if this fails
If Not VerifyBackupLocation() Then If Not VerifyBackupLocation() Then
bShutdown = True bInitFail = True
Me.Close() Exit Sub
End If End If
'Remote Database Check 'Remote Database Check
@@ -741,20 +857,34 @@ Public Class frmMain
End If End If
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 End Sub
'Functions that handle buttons, menus and other GUI features on this form 'Functions that handle buttons, menus and other GUI features on this form
Private Sub ToggleLog() Private Sub ToggleLog()
If bLogToggle = False Then If bLogToggle = False Then
txtLog.Visible = True 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 bLogToggle = True
btnLogToggle.Text = frmMain_btnToggleLog_Hide btnLogToggle.Text = frmMain_btnToggleLog_Hide
txtLog.Select(txtLog.TextLength, 0) txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret() txtLog.ScrollToCaret()
Else Else
txtLog.Visible = False txtLog.Visible = False
Me.Size = New System.Drawing.Size(540, 245) Me.Size = New System.Drawing.Size(Me.Size.Width, 245)
bLogToggle = False bLogToggle = False
btnLogToggle.Text = frmMain_btnToggleLog_Show btnLogToggle.Text = frmMain_btnToggleLog_Show
End If End If
@@ -762,15 +892,15 @@ Public Class frmMain
Private Sub ToggleState() Private Sub ToggleState()
'Toggle State with Tray Clicks 'Toggle State with Tray Clicks
If Me.WindowState = FormWindowState.Minimized Then If Not bShowToggle Then
bShowToggle = True
Me.Visible = True Me.Visible = True
Me.ShowInTaskbar = True Me.ShowInTaskbar = True
Me.WindowState = FormWindowState.Normal
Me.Focus() Me.Focus()
Else Else
bShowToggle = False
Me.Visible = False Me.Visible = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.WindowState = FormWindowState.Minimized
End If End If
End Sub End Sub
@@ -920,9 +1050,17 @@ Public Class frmMain
Dim d As New UpdateLogCallBack(AddressOf UpdateLog) Dim d As New UpdateLogCallBack(AddressOf UpdateLog)
Me.Invoke(d, New Object() {sLogUpdate, bTrayUpdate, objIcon, bTimeStamp}) Me.Invoke(d, New Object() {sLogUpdate, bTrayUpdate, objIcon, bTimeStamp})
Else Else
'Clear the log if we are approaching the limit 'Auto save and/or clear the log if we are approaching the limit
If txtLog.TextLength > 16770000 Then If txtLog.TextLength > 262144 Then
txtLog.Text = String.Empty 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 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 '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() Application.DoEvents()
End Sub 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() Private Sub SetForm()
'Set Form Name 'Set Form Name
Me.Name = App_NameLong Me.Name = App_NameLong
@@ -966,6 +1120,9 @@ Public Class frmMain
gMonTools.Text = frmMain_gMonTools gMonTools.Text = frmMain_gMonTools
gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonToolsCompact.Text = frmMain_gMonToolsCompact gMonToolsCompact.Text = frmMain_gMonToolsCompact
gMonToolsLog.Text = frmMain_gMonToolsLog
gMonLogClear.Text = frmMain_gMonLogClear
gMonLogSave.Text = frmMain_gMonLogSave
gMonHelp.Text = frmMain_gMonHelp gMonHelp.Text = frmMain_gMonHelp
gMonHelpWebSite.Text = frmMain_gMonHelpWebSite gMonHelpWebSite.Text = frmMain_gMonHelpWebSite
gMonHelpManual.Text = frmMain_gMonHelpManual gMonHelpManual.Text = frmMain_gMonHelpManual
@@ -984,6 +1141,9 @@ Public Class frmMain
gMonTrayTools.Text = frmMain_gMonTools gMonTrayTools.Text = frmMain_gMonTools
gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact
gMonTrayToolsLog.Text = frmMain_gMonToolsLog
gMonTrayLogClear.Text = frmMain_gMonLogClear
gMonTrayLogSave.Text = frmMain_gMonLogSave
gMonTrayExit.Text = frmMain_gMonFileExit gMonTrayExit.Text = frmMain_gMonFileExit
'Set Form Text 'Set Form Text
@@ -1006,7 +1166,7 @@ Public Class frmMain
lblLastAction.Text = String.Empty lblLastAction.Text = String.Empty
pbTime.SizeMode = PictureBoxSizeMode.AutoSize pbTime.SizeMode = PictureBoxSizeMode.AutoSize
pbTime.Image = Icon_Clock 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 AddHandler mgrMonitorList.UpdateLog, AddressOf UpdateLog
ResetGameInfo() ResetGameInfo()
End Sub End Sub
@@ -1088,7 +1248,7 @@ Public Class frmMain
oSettings.BackupFolder = sBackupPath oSettings.BackupFolder = sBackupPath
oSettings.SaveSettings() oSettings.SaveSettings()
oSettings.LoadSettings() oSettings.LoadSettings()
If oSettings.Sync Then mgrMonitorList.HandleBackupLocationChange() If oSettings.Sync Then mgrMonitorList.HandleBackupLocationChange(oSettings)
End If End If
Return True Return True
Else Else
@@ -1098,8 +1258,8 @@ Public Class frmMain
Private Sub VerifyGameDataPath() 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 '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 sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "/gbm"
Dim sDBLocation As String = sSettingsRoot & "\gbm.s3db" Dim sDBLocation As String = sSettingsRoot & "/gbm.s3db"
If Not IO.Directory.Exists(sSettingsRoot) Then If Not IO.Directory.Exists(sSettingsRoot) Then
Try Try
@@ -1171,6 +1331,8 @@ Public Class frmMain
'Functions to handle other features 'Functions to handle other features
Private Sub RestartAsAdmin() Private Sub RestartAsAdmin()
'Unix Hanlder
If Not mgrCommon.IsUnix Then
If mgrCommon.IsElevated Then If mgrCommon.IsElevated Then
mgrCommon.ShowMessage(frmMain_ErrorAlreadyAdmin, MsgBoxStyle.Information) mgrCommon.ShowMessage(frmMain_ErrorAlreadyAdmin, MsgBoxStyle.Information)
Else Else
@@ -1180,6 +1342,9 @@ Public Class frmMain
ShutdownApp(False) ShutdownApp(False)
End If End If
End If End If
Else
mgrCommon.ShowMessage(App_ErrorUnixNotAvailable, MsgBoxStyle.Exclamation)
End If
End Sub End Sub
Private Sub CleanLocalManifest() Private Sub CleanLocalManifest()
@@ -1294,6 +1459,14 @@ Public Class frmMain
OpenCheckforUpdates() OpenCheckforUpdates()
End Sub 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 Private Sub gMonNotification_Click(sender As Object, e As EventArgs) Handles gMonNotification.Click, gMonTrayNotification.Click
gMonNotification.Visible = False gMonNotification.Visible = False
gMonTrayNotification.Visible = False gMonTrayNotification.Visible = False
@@ -1304,7 +1477,7 @@ Public Class frmMain
ToggleLog() ToggleLog()
End Sub 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() ScanToggle()
End Sub End Sub
@@ -1315,9 +1488,9 @@ Public Class frmMain
End Sub End Sub
Private Sub gMonTray_BalloonTipClicked(sender As System.Object, e As System.EventArgs) Handles gMonTray.BalloonTipClicked Private Sub gMonTray_BalloonTipClicked(sender As System.Object, e As System.EventArgs) Handles gMonTray.BalloonTipClicked
bShowToggle = True
Me.Visible = True Me.Visible = True
Me.ShowInTaskbar = True Me.ShowInTaskbar = True
Me.WindowState = FormWindowState.Normal
Me.Focus() Me.Focus()
End Sub End Sub
@@ -1325,7 +1498,7 @@ Public Class frmMain
OperationCancel() OperationCancel()
End Sub 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() RestartAsAdmin()
End Sub End Sub
@@ -1335,23 +1508,29 @@ Public Class frmMain
End Sub End Sub
Private Sub Main_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing 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 If bShutdown = False Then
e.Cancel = True e.Cancel = True
If Not mgrCommon.IsUnix Then
bShowToggle = False
Me.Visible = False Me.Visible = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.WindowState = FormWindowState.Minimized End If
End If End If
End Sub End Sub
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
Dim bNeedsPath As Boolean = False Dim bNeedsPath As Boolean = False
Dim bContinue As Boolean = True Dim bContinue As Boolean = True
Dim bAskForRestart As Boolean = False
Dim iErrorCode As Integer = 0 Dim iErrorCode As Integer = 0
Dim sErrorMessage As String = String.Empty Dim sErrorMessage As String = String.Empty
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode) Then If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode, bProcessDebugMode) Then
PauseScan() PauseScan()
If bNeedsPath Then If bNeedsPath Then
@@ -1359,42 +1538,27 @@ Public Class frmMain
If iErrorCode = 5 Then If iErrorCode = 5 Then
If oProcess.Duplicate Then If oProcess.Duplicate Then
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMultiAdmin) sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMultiAdmin)
mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation) UpdateLog(sErrorMessage, True, ToolTipIcon.Warning, True)
bAskForRestart = True
Else Else
If Not CheckForSavedPath() Then If Not CheckForSavedPath() Then
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorAdminBackup, oProcess.GameInfo.Name) bPathDetectionFailure = True
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sErrorMessage) sPathDetectionError = mgrCommon.FormatString(frmMain_ErrorAdminBackup, oProcess.GameInfo.Name)
If oProcess.GameInfo.ProcessPath <> String.Empty Then
'Update and reload
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
LoadGameSettings()
bContinue = True
End If End If
Else
bContinue = True bContinue = True
End If End If
End If
ElseIf iErrorCode = 299 Then ElseIf iErrorCode = 299 Then
If oProcess.Duplicate Then If oProcess.Duplicate Then
sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMulti64) sErrorMessage = mgrCommon.FormatString(frmMain_ErrorMulti64)
mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation) UpdateLog(sErrorMessage, True, ToolTipIcon.Warning, True)
Else Else
If Not CheckForSavedPath() Then If Not CheckForSavedPath() Then
sErrorMessage = mgrCommon.FormatString(frmMain_Error64Backup, oProcess.GameInfo.Name) bPathDetectionFailure = True
oProcess.GameInfo.ProcessPath = mgrPath.ProcessPathSearch(oProcess.GameInfo.Name, oProcess.GameInfo.ProcessName, sErrorMessage) sPathDetectionError = mgrCommon.FormatString(frmMain_Error64Backup, oProcess.GameInfo.Name)
If oProcess.GameInfo.ProcessPath <> String.Empty Then
'Update and reload
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
LoadGameSettings()
bContinue = True
End If End If
Else
bContinue = True bContinue = True
End If End If
End If End If
End If End If
End If
If bContinue = True Then If bContinue = True Then
CheckForSavedDuplicate() CheckForSavedDuplicate()
@@ -1411,9 +1575,6 @@ Public Class frmMain
bwMonitor.RunWorkerAsync() bwMonitor.RunWorkerAsync()
Else Else
StopScan() StopScan()
If bAskForRestart Then
RestartAsAdmin()
End If
End If End If
End If End If
End Sub End Sub
@@ -1434,34 +1595,61 @@ Public Class frmMain
End Sub End Sub
Private Sub bwMain_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMonitor.RunWorkerCompleted Private Sub bwMain_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMonitor.RunWorkerCompleted
Dim bContinue As Boolean = True
oProcess.EndTime = Now oProcess.EndTime = Now
If Not bCancelledByUser Then 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 If DoMultiGameCheck() Then
UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False) UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False)
If oSettings.TimeTracking Then HandleTimeSpent() If oSettings.TimeTracking Then HandleTimeSpent()
RunBackup() RunBackup()
Else Else
UpdateLog(frmMain_UnknownGameEnded, False) UpdateLog(frmMain_UnknownGameEnded, False)
oProcess.GameInfo = Nothing
ResetGameInfo() ResetGameInfo()
ResumeScan() ResumeScan()
End If End If
End If End If
End If
'Reset globals
bPathDetectionFailure = False
sPathDetectionError = String.Empty
bCancelledByUser = False bCancelledByUser = False
oProcess.StartTime = Now : oProcess.EndTime = Now oProcess.StartTime = Now : oProcess.EndTime = Now
End Sub End Sub
Private Sub Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Private Sub Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'Init
Try
SetForm() SetForm()
VerifyGameDataPath() VerifyGameDataPath()
LoadAndVerify() LoadAndVerify()
If Not bInitFail Then
VerifyCustomPathVariables() VerifyCustomPathVariables()
If oSettings.StartToTray Then If oSettings.StartToTray And Not mgrCommon.IsUnix Then
bShowToggle = False
Me.Visible = False Me.Visible = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.WindowState = FormWindowState.Minimized
End If End If
If oSettings.MonitorOnStartup Then If oSettings.MonitorOnStartup Then
@@ -1473,10 +1661,27 @@ Public Class frmMain
HandleScan() HandleScan()
CheckForNewBackups() 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 End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 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() OpenStartupWizard()
End If End If
End Sub End Sub
@@ -1484,4 +1689,11 @@ Public Class frmMain
Private Sub txtGameInfo_Enter(sender As Object, e As EventArgs) Private Sub txtGameInfo_Enter(sender As Object, e As EventArgs)
btnLogToggle.Focus() btnLogToggle.Focus()
End Sub 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 End Class
+352 -118
View File
@@ -24,30 +24,55 @@ Partial Class frmSettings
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox() Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox() Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.grpGeneral = New System.Windows.Forms.GroupBox() Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkTimeTracking = New System.Windows.Forms.CheckBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox() 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.chkSync = New System.Windows.Forms.CheckBox()
Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox() Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox() Me.grpFolderOptions = New System.Windows.Forms.GroupBox()
Me.grpPaths = New System.Windows.Forms.GroupBox()
Me.btnBackupFolder = New System.Windows.Forms.Button() Me.btnBackupFolder = New System.Windows.Forms.Button()
Me.lblBackupFolder = New System.Windows.Forms.Label() Me.lblBackupFolder = New System.Windows.Forms.Label()
Me.txtBackupFolder = New System.Windows.Forms.TextBox() Me.txtBackupFolder = New System.Windows.Forms.TextBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.btnSave = New System.Windows.Forms.Button() Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = 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.lblMinutes = New System.Windows.Forms.Label()
Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown() Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.chkSupressBackup = New System.Windows.Forms.CheckBox() Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
Me.chkCheckSum = New System.Windows.Forms.CheckBox() Me.chkCheckSum = New System.Windows.Forms.CheckBox()
Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox() Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox() Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox() Me.grp7zGeneral = New System.Windows.Forms.GroupBox()
Me.grpGeneral.SuspendLayout() Me.cboCompression = New System.Windows.Forms.ComboBox()
Me.grpPaths.SuspendLayout() Me.lblCompression = New System.Windows.Forms.Label()
Me.grpBackup.SuspendLayout() 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() 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() Me.SuspendLayout()
' '
'chkMonitorOnStartup 'chkMonitorOnStartup
@@ -63,37 +88,24 @@ Partial Class frmSettings
'chkBackupConfirm 'chkBackupConfirm
' '
Me.chkBackupConfirm.AutoSize = True 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.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17) Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 1 Me.chkBackupConfirm.TabIndex = 1
Me.chkBackupConfirm.Text = "Disable backup confirmation" Me.chkBackupConfirm.Text = "Disable backup confirmation"
Me.chkBackupConfirm.UseVisualStyleBackColor = True Me.chkBackupConfirm.UseVisualStyleBackColor = True
' '
'grpGeneral 'grpStartup
' '
Me.grpGeneral.Controls.Add(Me.chkTimeTracking) Me.grpStartup.Controls.Add(Me.chkStartWindows)
Me.grpGeneral.Controls.Add(Me.chkStartWindows) Me.grpStartup.Controls.Add(Me.chkStartToTray)
Me.grpGeneral.Controls.Add(Me.chkSync) Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.grpGeneral.Controls.Add(Me.chkShowDetectionTips) Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.grpGeneral.Controls.Add(Me.chkStartToTray) Me.grpStartup.Name = "grpStartup"
Me.grpGeneral.Controls.Add(Me.chkMonitorOnStartup) Me.grpStartup.Size = New System.Drawing.Size(354, 90)
Me.grpGeneral.Location = New System.Drawing.Point(12, 12) Me.grpStartup.TabIndex = 0
Me.grpGeneral.Name = "grpGeneral" Me.grpStartup.TabStop = False
Me.grpGeneral.Size = New System.Drawing.Size(360, 165) Me.grpStartup.Text = "Startup"
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
' '
'chkStartWindows 'chkStartWindows
' '
@@ -105,26 +117,6 @@ Partial Class frmSettings
Me.chkStartWindows.Text = "Start with Windows" Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True 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 'chkStartToTray
' '
Me.chkStartToTray.AutoSize = True Me.chkStartToTray.AutoSize = True
@@ -135,21 +127,71 @@ Partial Class frmSettings
Me.chkStartToTray.Text = "Start to system tray" Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True Me.chkStartToTray.UseVisualStyleBackColor = True
' '
'grpPaths 'chkAutoSaveLog
' '
Me.grpPaths.Controls.Add(Me.btnBackupFolder) Me.chkAutoSaveLog.AutoSize = True
Me.grpPaths.Controls.Add(Me.lblBackupFolder) Me.chkAutoSaveLog.Location = New System.Drawing.Point(6, 204)
Me.grpPaths.Controls.Add(Me.txtBackupFolder) Me.chkAutoSaveLog.Name = "chkAutoSaveLog"
Me.grpPaths.Location = New System.Drawing.Point(12, 360) Me.chkAutoSaveLog.Size = New System.Drawing.Size(231, 17)
Me.grpPaths.Name = "grpPaths" Me.chkAutoSaveLog.TabIndex = 7
Me.grpPaths.Size = New System.Drawing.Size(360, 60) Me.chkAutoSaveLog.Text = "Autosave log when max length is exceeded"
Me.grpPaths.TabIndex = 2 Me.chkAutoSaveLog.UseVisualStyleBackColor = True
Me.grpPaths.TabStop = False '
Me.grpPaths.Text = "Paths" '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 '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.Name = "btnBackupFolder"
Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20) Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20)
Me.btnBackupFolder.TabIndex = 2 Me.btnBackupFolder.TabIndex = 2
@@ -159,60 +201,53 @@ Partial Class frmSettings
'lblBackupFolder 'lblBackupFolder
' '
Me.lblBackupFolder.AutoSize = True 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.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.TabIndex = 0
Me.lblBackupFolder.Text = "Backup Folder" Me.lblBackupFolder.Text = "Backup Folder:"
' '
'txtBackupFolder '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.Name = "txtBackupFolder"
Me.txtBackupFolder.Size = New System.Drawing.Size(224, 20) Me.txtBackupFolder.Size = New System.Drawing.Size(216, 20)
Me.txtBackupFolder.TabIndex = 1 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 'btnSave
' '
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK 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.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23) Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 3 Me.btnSave.TabIndex = 5
Me.btnSave.Text = "&Save" Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True Me.btnSave.UseVisualStyleBackColor = True
' '
'btnCancel 'btnCancel
' '
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel 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.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 4 Me.btnCancel.TabIndex = 6
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True 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 'lblMinutes
' '
Me.lblMinutes.AutoSize = True 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.Name = "lblMinutes"
Me.lblMinutes.Size = New System.Drawing.Size(43, 13) Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
Me.lblMinutes.TabIndex = 7 Me.lblMinutes.TabIndex = 7
@@ -220,7 +255,7 @@ Partial Class frmSettings
' '
'nudSupressBackupThreshold '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.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold" Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold"
Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20) Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20)
@@ -229,7 +264,7 @@ Partial Class frmSettings
'chkSupressBackup 'chkSupressBackup
' '
Me.chkSupressBackup.AutoSize = True 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.Name = "chkSupressBackup"
Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17) Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17)
Me.chkSupressBackup.TabIndex = 5 Me.chkSupressBackup.TabIndex = 5
@@ -239,7 +274,7 @@ Partial Class frmSettings
'chkCheckSum 'chkCheckSum
' '
Me.chkCheckSum.AutoSize = True 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.Name = "chkCheckSum"
Me.chkCheckSum.Size = New System.Drawing.Size(195, 17) Me.chkCheckSum.Size = New System.Drawing.Size(195, 17)
Me.chkCheckSum.TabIndex = 3 Me.chkCheckSum.TabIndex = 3
@@ -249,7 +284,7 @@ Partial Class frmSettings
'chkRestoreOnLaunch 'chkRestoreOnLaunch
' '
Me.chkRestoreOnLaunch.AutoSize = True 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.Name = "chkRestoreOnLaunch"
Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(257, 17) Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(257, 17)
Me.chkRestoreOnLaunch.TabIndex = 4 Me.chkRestoreOnLaunch.TabIndex = 4
@@ -259,55 +294,235 @@ Partial Class frmSettings
'chkOverwriteWarning 'chkOverwriteWarning
' '
Me.chkOverwriteWarning.AutoSize = True 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.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17) Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 2 Me.chkOverwriteWarning.TabIndex = 2
Me.chkOverwriteWarning.Text = "Show overwrite warning" Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True Me.chkOverwriteWarning.UseVisualStyleBackColor = True
' '
'chkCreateFolder 'grp7zGeneral
' '
Me.chkCreateFolder.AutoSize = True Me.grp7zGeneral.Controls.Add(Me.cboCompression)
Me.chkCreateFolder.Location = New System.Drawing.Point(6, 19) Me.grp7zGeneral.Controls.Add(Me.lblCompression)
Me.chkCreateFolder.Name = "chkCreateFolder" Me.grp7zGeneral.Location = New System.Drawing.Point(6, 12)
Me.chkCreateFolder.Size = New System.Drawing.Size(186, 17) Me.grp7zGeneral.Name = "grp7zGeneral"
Me.chkCreateFolder.TabIndex = 0 Me.grp7zGeneral.Size = New System.Drawing.Size(354, 50)
Me.chkCreateFolder.Text = "Create a sub-folder for each game" Me.grp7zGeneral.TabIndex = 0
Me.chkCreateFolder.UseVisualStyleBackColor = True 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 'frmSettings
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(384, 461) Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.grpBackup) Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave) Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpPaths) Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.grpGeneral) Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.pnlBackup)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
Me.Name = "frmSettings" Me.Name = "frmSettings"
Me.ShowIcon = False Me.ShowIcon = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Settings" Me.Text = "Settings"
Me.grpGeneral.ResumeLayout(False) Me.grpStartup.ResumeLayout(False)
Me.grpGeneral.PerformLayout() Me.grpStartup.PerformLayout()
Me.grpPaths.ResumeLayout(False) Me.grpFolderOptions.ResumeLayout(False)
Me.grpPaths.PerformLayout() Me.grpFolderOptions.PerformLayout()
Me.grpBackup.ResumeLayout(False)
Me.grpBackup.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit() 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) Me.ResumeLayout(False)
End Sub End Sub
Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox
Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox
Friend WithEvents grpGeneral As System.Windows.Forms.GroupBox Friend WithEvents grpStartup As System.Windows.Forms.GroupBox
Friend WithEvents grpPaths As System.Windows.Forms.GroupBox Friend WithEvents grpFolderOptions As System.Windows.Forms.GroupBox
Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox
Friend WithEvents btnSave As System.Windows.Forms.Button Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents btnCancel 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 btnBackupFolder As System.Windows.Forms.Button
Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox
Friend WithEvents chkStartToTray 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 chkOverwriteWarning As System.Windows.Forms.CheckBox
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents chkRestoreOnLaunch 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 lblMinutes As Label
Friend WithEvents nudSupressBackupThreshold As NumericUpDown Friend WithEvents nudSupressBackupThreshold As NumericUpDown
Friend WithEvents chkSupressBackup As CheckBox 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 End Class
+250 -47
View File
@@ -1,9 +1,11 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.IO
Public Class frmSettings Public Class frmSettings
Dim bShutdown As Boolean = False Dim bShutdown As Boolean = False
Dim bBackupLocationChanged As Boolean = False Dim bSyncSettingsChanged As Boolean = False
Dim bCheckSumDisabled As Boolean = False Dim bCheckSumDisabled As Boolean = False
Dim eCurrentSyncFields As clsGame.eOptionalSyncFields
Private oSettings As mgrSettings Private oSettings As mgrSettings
Property Settings As mgrSettings Property Settings As mgrSettings
@@ -15,15 +17,6 @@ Public Class frmSettings
End Set End Set
End Property 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) Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
Dim oKey As Microsoft.Win32.RegistryKey Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName Dim sAppName As String = Application.ProductName
@@ -51,6 +44,7 @@ Public Class frmSettings
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked oSettings.StartToTray = chkStartToTray.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.AutoSaveLog = chkAutoSaveLog.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
@@ -58,6 +52,14 @@ Public Class frmSettings
oSettings.TimeTracking = chkTimeTracking.Checked oSettings.TimeTracking = chkTimeTracking.Checked
oSettings.SupressBackup = chkSupressBackup.Checked oSettings.SupressBackup = chkSupressBackup.Checked
oSettings.SupressBackupThreshold = nudSupressBackupThreshold.Value 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 'We need to clear all checksums its turned off
If chkCheckSum.Checked = False And oSettings.CheckSum = True Then 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 'Turning syncing from off to on is the same as changing the backup folder
If chkSync.Checked = True And oSettings.Sync = False Then If chkSync.Checked = True And oSettings.Sync = False Then
bBackupLocationChanged = True bSyncSettingsChanged = True
End If End If
oSettings.Sync = chkSync.Checked oSettings.Sync = chkSync.Checked
If IO.Directory.Exists(txtBackupFolder.Text) Then If Directory.Exists(txtBackupFolder.Text) Then
If oSettings.BackupFolder <> txtBackupFolder.Text Then If oSettings.BackupFolder <> txtBackupFolder.Text Then
If chkSync.Checked Then bBackupLocationChanged = True If chkSync.Checked Then bSyncSettingsChanged = True
End If End If
oSettings.BackupFolder = txtBackupFolder.Text oSettings.BackupFolder = txtBackupFolder.Text
Else Else
@@ -81,13 +83,29 @@ Public Class frmSettings
Return False Return False
End If 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 Return True
End Function End Function
Private Function SaveSettings() As Boolean Private Function SaveSettings() As Boolean
If ValidateSettings() Then If ValidateSettings() Then
oSettings.SaveSettings() oSettings.SaveSettings()
If BackupLocationChanged Then mgrMonitorList.HandleBackupLocationChange() If bSyncSettingsChanged Then mgrMonitorList.HandleBackupLocationChange(Settings)
If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe() If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe()
Return True Return True
Else Else
@@ -95,11 +113,67 @@ Public Class frmSettings
End If End If
End Function 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() Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows chkStartWindows.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray chkStartToTray.Checked = oSettings.StartToTray
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkAutoSaveLog.Checked = oSettings.AutoSaveLog
chkBackupConfirm.Checked = oSettings.DisableConfirmation chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkCreateFolder.Checked = oSettings.CreateSubFolder chkCreateFolder.Checked = oSettings.CreateSubFolder
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
@@ -111,6 +185,138 @@ Public Class frmSettings
chkSupressBackup.Checked = oSettings.SupressBackup chkSupressBackup.Checked = oSettings.SupressBackup
nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked 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 End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
@@ -125,41 +331,9 @@ Public Class frmSettings
Me.Close() Me.Close()
End Sub 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 Private Sub frmSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SetForm() SetForm()
LoadCombos()
LoadSettings() LoadSettings()
End Sub End Sub
@@ -169,7 +343,36 @@ Public Class frmSettings
If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
End Sub 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 Private Sub chkSupressBackup_CheckedChanged(sender As Object, e As EventArgs) Handles chkSupressBackup.CheckedChanged
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
End Sub 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 End Class
+1 -2
View File
@@ -96,11 +96,10 @@ Partial Class frmStartUpWizard
' '
'llbManual 'llbManual
' '
Me.llbManual.AutoSize = True
Me.llbManual.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) Me.llbManual.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!)
Me.llbManual.Location = New System.Drawing.Point(14, 158) Me.llbManual.Location = New System.Drawing.Point(14, 158)
Me.llbManual.Name = "llbManual" 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.TabIndex = 3
Me.llbManual.TabStop = True Me.llbManual.TabStop = True
Me.llbManual.Text = "Game Backup Monitor Manual" Me.llbManual.Text = "Game Backup Monitor Manual"
+13 -5
View File
@@ -66,7 +66,7 @@ Public Class frmStartUpWizard
If oDatabase.CheckDB() Then If oDatabase.CheckDB() Then
'Make sure database is the latest version 'Make sure database is the latest version
oDatabase.DatabaseUpgrade() oDatabase.DatabaseUpgrade()
mgrMonitorList.SyncMonitorLists(False) mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
mgrCommon.ShowMessage(frmStartUpWizard_ExistingData, MsgBoxStyle.Information) mgrCommon.ShowMessage(frmStartUpWizard_ExistingData, MsgBoxStyle.Information)
End If End If
End Sub End Sub
@@ -98,10 +98,18 @@ Public Class frmStartUpWizard
End Sub End Sub
Private Sub DownloadSettings() 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 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) 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 If End If
End Sub End Sub
@@ -116,7 +124,7 @@ Public Class frmStartUpWizard
frm.GameData = oGameData frm.GameData = oGameData
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End Sub End Sub
Private Sub OpenMonitorList() Private Sub OpenMonitorList()
@@ -125,7 +133,7 @@ Public Class frmStartUpWizard
frm.DisableExternalFunctions = True frm.DisableExternalFunctions = True
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End Sub End Sub
Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
+163
View File
@@ -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
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+115
View File
@@ -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
+32 -29
View File
@@ -90,13 +90,21 @@
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </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> <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" />
<Reference Include="System.Data" /> <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.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@@ -187,6 +195,12 @@
<DependentUpon>frmMain.vb</DependentUpon> <DependentUpon>frmMain.vb</DependentUpon>
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </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"> <Compile Include="Forms\frmTags.Designer.vb">
<DependentUpon>frmTags.vb</DependentUpon> <DependentUpon>frmTags.vb</DependentUpon>
</Compile> </Compile>
@@ -265,6 +279,9 @@
<DependentUpon>frmMain.vb</DependentUpon> <DependentUpon>frmMain.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\frmSyncFields.resx">
<DependentUpon>frmSyncFields.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmTags.resx"> <EmbeddedResource Include="Forms\frmTags.resx">
<DependentUpon>frmTags.vb</DependentUpon> <DependentUpon>frmTags.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@@ -320,7 +337,14 @@
<Content Include="License\credits.txt"> <Content Include="License\credits.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </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" /> <None Include="Resources\gbm.ico" />
<Content Include="Resources\Admin.png" /> <Content Include="Resources\Admin.png" />
<Content Include="Resources\Clock.png" /> <Content Include="Resources\Clock.png" />
@@ -332,30 +356,7 @@
<Content Include="Resources\Inbox.png" /> <Content Include="Resources\Inbox.png" />
<Content Include="Resources\type.ico" /> <Content Include="Resources\type.ico" />
<Content Include="Resources\User.png" /> <Content Include="Resources\User.png" />
<Content Include="Utilities\x64\7za.dll"> <Content Include="x64\sqlite3.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>
<None Include="Resources\Stopped.png" /> <None Include="Resources\Stopped.png" />
<None Include="Resources\Detected.png" /> <None Include="Resources\Detected.png" />
<None Include="Resources\Ready.png" /> <None Include="Resources\Ready.png" />
@@ -387,6 +388,7 @@
<EmbedInteropTypes>True</EmbedInteropTypes> <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference> </COMReference>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.
@@ -394,5 +396,6 @@
</Target> </Target>
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution 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. 7-Zip Extra files are under the GNU LGPL license.
+2 -2
View File
@@ -1,5 +1,5 @@
GBM - Game Backup Monitor 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 This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -16,4 +16,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact Information: Contact Information:
mseiferling@gmail.com gamebackupmonitor@gmail.com
+69 -28
View File
@@ -42,7 +42,7 @@ Public Class mgrBackup
'Create manifest item 'Create manifest item
oItem.Name = oGameInfo.Name oItem.Name = oGameInfo.Name
'Keep the path relative to the manifest location '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.RestorePath = oGameInfo.TruePath
oItem.AbsolutePath = oGameInfo.AbsolutePath oItem.AbsolutePath = oGameInfo.AbsolutePath
oItem.DateUpdated = dTimeStamp oItem.DateUpdated = dTimeStamp
@@ -50,15 +50,15 @@ Public Class mgrBackup
oItem.CheckSum = sCheckSum oItem.CheckSum = sCheckSum
'Save Remote Manifest 'Save Remote Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then If mgrManifest.DoSpecificManifestCheck(oItem, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Remote) mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote)
Else Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote) mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
End If End If
'Save Local Manifest 'Save Local Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then If mgrManifest.DoGlobalManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByName(oItem, mgrSQLite.Database.Local)
Else Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
End If End If
@@ -75,7 +75,7 @@ Public Class mgrBackup
Using oStream Using oStream
If sList <> String.Empty Then If sList <> String.Empty Then
For Each sTypeItem As String In sList.Split(":") For Each sTypeItem As String In sList.Split(":")
oStream.WriteLine("""" & sBackupPath & "\" & sTypeItem & """") oStream.WriteLine("""" & sBackupPath & Path.DirectorySeparatorChar & sTypeItem & """")
Next Next
End If End If
oStream.Flush() oStream.Flush()
@@ -85,6 +85,55 @@ Public Class mgrBackup
End Try End Try
End Sub 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)) Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame Dim oGame As clsGame
Dim bDoBackup As Boolean Dim bDoBackup As Boolean
@@ -109,15 +158,8 @@ Public Class mgrBackup
CancelOperation = False CancelOperation = False
RaiseEvent UpdateBackupInfo(oGame) 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 If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & "\" & oGame.Name sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
Try Try
If Not Directory.Exists(sBackupFile) Then If Not Directory.Exists(sBackupFile) Then
Directory.CreateDirectory(sBackupFile) Directory.CreateDirectory(sBackupFile)
@@ -129,22 +171,16 @@ Public Class mgrBackup
End If End If
If oGame.AppendTimeStamp Then If oGame.AppendTimeStamp Then
sBackupFile = sBackupFile & "\" & oGame.Name & sTimeStamp & ".7z" CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
Else Else
sBackupFile = sBackupFile & "\" & oGame.Name & ".7z" sBackupFile = sBackupFile & Path.DirectorySeparatorChar & 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
End If End If
If bDoBackup Then If bDoBackup Then
If oGame.AbsolutePath = False Then If oGame.AbsolutePath = False Then
If oGame.Path <> String.Empty Then If oGame.Path <> String.Empty Then
sSavePath = oGame.ProcessPath & "\" & oGame.Path sSavePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oGame.Path
Else Else
sSavePath = oGame.ProcessPath sSavePath = oGame.ProcessPath
End If End If
@@ -161,15 +197,16 @@ Public Class mgrBackup
BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation) BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation)
Try 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. '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 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 If File.Exists(sBackupFile) Then
File.Delete(sBackupFile) File.Delete(sBackupFile)
End If End If
If Directory.Exists(sSavePath) Then prs7z.StartInfo.Arguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
prs7z.StartInfo.Arguments = "a -t7z " & "-i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r" prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True prs7z.StartInfo.CreateNoWindow = True
@@ -186,7 +223,7 @@ Public Class mgrBackup
prs7z.WaitForExit() prs7z.WaitForExit()
If Not CancelOperation Then If Not CancelOperation Then
If prs7z.ExitCode = 0 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 bBackupCompleted = True
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupWarnings, oGame.Name), True, ToolTipIcon.Warning, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
@@ -194,6 +231,10 @@ Public Class mgrBackup
End If End If
End If End If
prs7z.Dispose() prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bBackupCompleted = False
End If
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False bBackupCompleted = False
+129 -4
View File
@@ -1,8 +1,27 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.Net Imports System.Net
Imports System.IO
Imports System.Security.Principal
Public Class mgrCommon 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 Public Shared ReadOnly Property BuildVersion As Integer
Get Get
Return My.Application.Info.Version.Build Return My.Application.Info.Version.Build
@@ -19,6 +38,7 @@ Public Class mgrCommon
Try Try
Dim request As WebRequest = WebRequest.Create(URL) Dim request As WebRequest = WebRequest.Create(URL)
Dim response As WebResponse = request.GetResponse() Dim response As WebResponse = request.GetResponse()
response.Close()
Catch ex As Exception Catch ex As Exception
Return False Return False
End Try End Try
@@ -96,6 +116,11 @@ Public Class mgrCommon
Dim sExemptList As String() = {"dosbox", "scummvm"} Dim sExemptList As String() = {"dosbox", "scummvm"}
Dim bFound As Boolean = False 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 For Each s As String In sExemptList
If oGame.ProcessName.ToLower.Contains(s) Then bFound = True If oGame.ProcessName.ToLower.Contains(s) Then bFound = True
Next Next
@@ -107,12 +132,18 @@ Public Class mgrCommon
End If End If
End Function End Function
Public Shared Function IsElevated() As Boolean Public Shared Function IsUnix() As Boolean
If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then If Path.DirectorySeparatorChar = "/" Then
Return True Return True
Else
Return False
End If 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 End Function
Public Shared Sub RestartAsAdmin() Public Shared Sub RestartAsAdmin()
@@ -126,6 +157,91 @@ Public Class mgrCommon
oProcess.Start() oProcess.Start()
End Sub 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 'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult Dim oResult As MsgBoxResult
@@ -178,6 +294,15 @@ Public Class mgrCommon
Return sString Return sString
End Function 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 '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) 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 For Each ctl As Control In ctlParent.Controls
+156 -56
View File
@@ -1,6 +1,37 @@
Public Class mgrManifest 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 oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
@@ -11,15 +42,26 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = New clsBackup oBackupItem = MapToObject(dr)
oBackupItem.ID = CStr(dr("ManifestID")) slList.Add(oBackupItem.ID, oBackupItem)
oBackupItem.Name = CStr(dr("Name")) Next
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath")) Return slList
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated")) End Function
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum")) 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) slList.Add(oBackupItem.Name, oBackupItem)
Next Next
@@ -27,7 +69,80 @@
End Function 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 oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
@@ -48,12 +163,11 @@
End Function 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 oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
sSQL = "SELECT * from manifest " sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name" sSQL &= "WHERE Name = @Name"
@@ -62,82 +176,55 @@
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows If oData.Tables(0).Rows.Count > 0 Then
oBackupItem = New clsBackup Return True
oBackupItem.ID = CStr(dr("ManifestID")) Else
oBackupItem.Name = CStr(dr("Name")) Return False
oBackupItem.FileName = CStr(dr("FileName")) End If
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
Return oBackupItem
End Function End Function
Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String 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)" sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)"
hshParams.Add("ID", oBackupItem.ID) hshParams = SetCoreParameters(oBackupItem)
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)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub 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 oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String 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 = "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 Name = @QueryName"
hshParams.Add("Name", oBackupItem.Name) hshParams = SetCoreParameters(oBackupItem)
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", oBackupItem.Name) hshParams.Add("QueryName", oBackupItem.Name)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub 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 oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String 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 = "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 = SetCoreParameters(oBackupItem)
hshParams.Add("FileName", oBackupItem.FileName) hshParams.Add("QueryID", oBackupItem.ID)
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)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub 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 oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
@@ -150,6 +237,19 @@
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub 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() Public Shared Sub DoManifestHashWipe()
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote) Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
+467 -446
View File
@@ -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 Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
Public Shared Sub HandleBackupLocationChange() Private Shared Function MapToObject(ByVal dr As DataRow) As clsGame
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote) Dim oGame As New clsGame
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()
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.ID = CStr(dr("MonitorID"))
oGame.Name = CStr(dr("Name")) oGame.Name = CStr(dr("Name"))
oGame.ProcessName = CStr(dr("Process")) oGame.ProcessName = CStr(dr("Process"))
@@ -356,41 +29,33 @@ Public Class mgrMonitorList
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company")) If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
oGame.Enabled = CBool(dr("Enabled")) oGame.Enabled = CBool(dr("Enabled"))
oGame.MonitorOnly = CBool(dr("MonitorOnly")) oGame.MonitorOnly = CBool(dr("MonitorOnly"))
oGame.BackupLimit = CInt(dr("BackupLimit"))
hshList.Add(oGame.ID, oGame) Return oGame
Next
Return hshList
End Function 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) Private Shared Function SetCoreParameters(ByVal oGame As clsGame) As Hashtable
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 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) Return 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 End Function
Public Shared Function ReadList(ByVal eListType As eListTypes, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable 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) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
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"))
Select Case eListType Select Case eListType
Case eListTypes.FullList Case eListTypes.FullList
'Don't wrap this, if it fails there's a problem with the database '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) Public Shared Sub DoListAdd(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, " sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly)" sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit)"
'Parameters 'Parameters
hshParams.Add("ID", oGame.ID) hshParams = SetCoreParameters(oGame)
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)
oDatabase.RunParamQuery(sSQL, hshParams) 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) Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, " 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 &= "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 'Parameters
hshParams.Add("Name", oGame.Name) hshParams = SetCoreParameters(oGame)
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)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -590,23 +208,7 @@ Public Class mgrMonitorList
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
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"))
Next Next
Return oGame Return oGame
@@ -629,23 +231,7 @@ Public Class mgrMonitorList
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
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"))
hshGames.Add(iCounter, oGame) hshGames.Add(iCounter, oGame)
iCounter += 1 iCounter += 1
Next Next
@@ -678,4 +264,439 @@ Public Class mgrMonitorList
End If End If
End Function 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 End Class
+79 -49
View File
@@ -5,10 +5,11 @@ Imports System.Reflection
Public Class mgrPath Public Class mgrPath
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath 'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\gbm" Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & Path.DirectorySeparatorChar & "gbm"
Private Shared sDBLocation As String = sSettingsRoot & "\gbm.s3db" Private Shared sDBLocation As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm.s3db"
Private Shared sIncludeFile As String = sSettingsRoot & "\gbm_include.txt" Private Shared sIncludeFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_include.txt"
Private Shared sExcludeFile As String = sSettingsRoot & "\gbm_exclude.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 sRemoteDatabaseLocation As String
Private Shared hshCustomVariables As Hashtable Private Shared hshCustomVariables As Hashtable
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
@@ -36,8 +37,12 @@ Public Class mgrPath
End Get End Get
End Property End Property
Shared ReadOnly Property Utility7zLocation As String Shared ReadOnly Property Default7zLocation As String
Get Get
If mgrCommon.IsUnix Then
Return "/usr/bin/7za"
End If
Select Case oReleaseType Select Case oReleaseType
Case ProcessorArchitecture.Amd64 Case ProcessorArchitecture.Amd64
Return Application.StartupPath & "\Utilities\x64\7za.exe" Return Application.StartupPath & "\Utilities\x64\7za.exe"
@@ -73,6 +78,12 @@ Public Class mgrPath
End Get End Get
End Property End Property
Shared ReadOnly Property LogFileLocation As String
Get
Return sLogFile
End Get
End Property
Shared ReadOnly Property SettingsRoot As String Shared ReadOnly Property SettingsRoot As String
Get Get
Return sSettingsRoot Return sSettingsRoot
@@ -84,7 +95,7 @@ Public Class mgrPath
Return sRemoteDatabaseLocation Return sRemoteDatabaseLocation
End Get End Get
Set(value As String) Set(value As String)
sRemoteDatabaseLocation = value & "\gbm.s3db" sRemoteDatabaseLocation = value & Path.DirectorySeparatorChar & "gbm.s3db"
End Set End Set
End Property End Property
@@ -112,19 +123,27 @@ Public Class mgrPath
Dim iRemove As Integer = 0 Dim iRemove As Integer = 0
Dim iBackFolders As Integer = 0 Dim iBackFolders As Integer = 0
Dim bDeep As Boolean 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 sProcessPath = sProcessPath.ToLower
sSavePath = sSavePath.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 'We need to ensure we have a single trailing slash on the parameters
sProcessPath = sProcessPath.TrimEnd("\") sProcessPath = sProcessPath.TrimEnd(cDS)
sSavePath = sSavePath.TrimEnd("\") sSavePath = sSavePath.TrimEnd(cDS)
sProcessPath &= "\" sProcessPath &= cDS
sSavePath &= "\" sSavePath &= cDS
'Determines the direction we need to go, we always want to be relative to the process location '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 sPath1 = sProcessPath
sPath2 = sSavePath sPath2 = sSavePath
bDeep = True bDeep = True
@@ -135,8 +154,8 @@ Public Class mgrPath
End If End If
'Build an array of folders to work with from each path 'Build an array of folders to work with from each path
sPath1Array = sPath1.Split("\") sPath1Array = sPath1.Split(cDS)
sPath2Array = sPath2.Split("\") sPath2Array = sPath2.Split(cDS)
'Take the shortest path and remove the common folders from both 'Take the shortest path and remove the common folders from both
For Each s As String In sPath1Array For Each s As String In sPath1Array
@@ -148,25 +167,25 @@ Public Class mgrPath
Next Next
'Remove the trailing slashes 'Remove the trailing slashes
sPath1 = sPath1.TrimEnd("\") sPath1 = sPath1.TrimEnd(cDS)
sPath2 = sPath2.TrimEnd("\") sPath2 = sPath2.TrimEnd(cDS)
'Determine which way we go 'Determine which way we go
If bDeep Then If bDeep Then
If sPath1.Length > 0 Then If sPath1.Length > 0 Then
iBackFolders = sPath1.Split("\").Length iBackFolders = sPath1.Split(cDS).Length
End If End If
sResult = sPath2 sResult = sPath2
Else Else
If sPath2.Length > 0 Then If sPath2.Length > 0 Then
iBackFolders = sPath2.Split("\").Length iBackFolders = sPath2.Split(cDS).Length
End If End If
sResult = sPath1 sResult = sPath1
End If End If
'Insert direction modifiers based on how many folders are left 'Insert direction modifiers based on how many folders are left
For i = 1 To iBackFolders For i = 1 To iBackFolders
sResult = "..\" & sResult sResult = ".." & cDS & sResult
Next i Next i
'Done 'Done
@@ -181,13 +200,12 @@ Public Class mgrPath
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable Dim oCustomVariable As clsPathVariable
If sValue.Contains("*mydocs*") Then
Return sValue.Replace("*mydocs*", sMyDocs)
End If
If sValue.Contains("*publicdocs*") Then For Each oCustomVariable In hshCustomVariables.Values
Return sValue.Replace("*publicdocs*", sPublicDocs) If sValue.Contains(oCustomVariable.FormattedName) Then
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
End If End If
Next
If sValue.Contains("*appdatalocal*") Then If sValue.Contains("*appdatalocal*") Then
Return sValue.Replace("*appdatalocal*", sAppDataLocal) Return sValue.Replace("*appdatalocal*", sAppDataLocal)
@@ -197,15 +215,21 @@ Public Class mgrPath
Return sValue.Replace("*appdataroaming*", sAppDataRoaming) Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
End If 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 If sValue.Contains("*currentuser*") Then
Return sValue.Replace("*currentuser*", sCurrentUser) Return sValue.Replace("*currentuser*", sCurrentUser)
End If End If
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.FormattedName) Then
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
End If End If
Next
Return sValue Return sValue
End Function End Function
@@ -218,13 +242,11 @@ Public Class mgrPath
Dim sCurrentUser As String = "*currentuser*" Dim sCurrentUser As String = "*currentuser*"
Dim oCustomVariable As clsPathVariable Dim oCustomVariable As clsPathVariable
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then For Each oCustomVariable In hshCustomVariables.Values
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs) If sValue.Contains(oCustomVariable.Path) Then
End If Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
End If End If
Next
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal) 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) Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming)
End If 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 If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser) Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser)
End If End If
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.Path) Then
Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
End If End If
Next
Return sValue Return sValue
End Function End Function
@@ -252,11 +280,16 @@ Public Class mgrPath
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
Dim oCustomVariable As clsPathVariable 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.ApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) 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)) hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
End If
'Load Custom Variables 'Load Custom Variables
For Each oCustomVariable In hshCustomVariables.Values For Each oCustomVariable In hshCustomVariables.Values
@@ -313,6 +346,7 @@ Public Class mgrPath
Dim sFolder As String = String.Empty Dim sFolder As String = String.Empty
Dim bSearchFailed As Boolean = False Dim bSearchFailed As Boolean = False
frmFind.GameName = sGameName
frmFind.SearchItem = sProcess & ".*" frmFind.SearchItem = sProcess & ".*"
frmFind.FolderSearch = False frmFind.FolderSearch = False
@@ -333,13 +367,7 @@ Public Class mgrPath
frmFind.ShowDialog() frmFind.ShowDialog()
If frmFind.FoundItem <> String.Empty Then If frmFind.FoundItem <> String.Empty Then
sFolder = IO.Path.GetDirectoryName(frmFind.FoundItem) Return 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
Else Else
bSearchFailed = True bSearchFailed = True
End If End If
@@ -353,6 +381,8 @@ Public Class mgrPath
If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath() sFolder = SetManualgamePath()
End If End If
frmFind.Dispose()
End If End If
Return sFolder Return sFolder
+66 -1
View File
@@ -85,13 +85,70 @@ Public Class mgrProcesses
Next Next
End Sub 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 prsList() As Process = Process.GetProcesses
Dim sProcessCheck As String = String.Empty Dim sProcessCheck As String = String.Empty
Dim sProcessList As String = String.Empty
Dim bWineProcess As Boolean = False
For Each prsCurrent As Process In prsList For Each prsCurrent As Process In prsList
'This needs to be wrapped due to issues with Mono.
Try
sProcessCheck = prsCurrent.ProcessName 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 If hshScanList.ContainsKey(sProcessCheck) Then
prsFoundProcess = prsCurrent prsFoundProcess = prsCurrent
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
@@ -105,7 +162,11 @@ Public Class mgrProcesses
If Not oGame.AbsolutePath Or oGame.Duplicate Then If Not oGame.AbsolutePath Or oGame.Duplicate Then
Try Try
If Not bWineProcess Then
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName) oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName)
Else
oGame.ProcessPath = GetUnixSymLinkDirectory(prsCurrent)
End If
Catch exWin32 As System.ComponentModel.Win32Exception Catch exWin32 As System.ComponentModel.Win32Exception
'If an exception occurs the process is: 'If an exception occurs the process is:
'Running as administrator and the app isn't. 'Running as administrator and the app isn't.
@@ -117,10 +178,12 @@ Public Class mgrProcesses
bNeedsPath = True bNeedsPath = True
iErrorCode = 299 iErrorCode = 299
Else 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. 'A different failure occured, drop out and continue to scan.
Return False Return False
End If End If
Catch exAll As Exception 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. 'A different failure occured, drop out and continue to scan.
Return False Return False
End Try End Try
@@ -137,6 +200,8 @@ Public Class mgrProcesses
End If End If
Next Next
If bDebugMode Then mgrCommon.SaveText(sProcessList, mgrPath.SettingsRoot & "/gbm_process_list.txt")
Return False Return False
End Function End Function
+55 -52
View File
@@ -28,39 +28,28 @@ Public Class mgrRestore
Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup) Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup)
Public Event SetLastAction(sMessage As String) Public Event SetLastAction(sMessage As String)
Private Shared Function CheckForPathOverride(ByRef oCheckBackup As clsBackup, ByVal oCheckGame As clsGame) As Boolean Public Shared Sub DoPathOverride(ByRef oCheckBackup As clsBackup, ByVal oCheckGame As clsGame)
Dim oResult As MsgBoxResult 'Always override the manifest restore path with the current configuration path if possible
If Not oCheckGame.Temporary Then
If oCheckBackup.RestorePath <> oCheckGame.Path Then
oResult = mgrCommon.ShowMessage(mgrRestore_ConfirmPathMismatch, oCheckBackup.CroppedName, MsgBoxStyle.YesNoCancel)
If oResult = MsgBoxResult.Yes Then
If Path.IsPathRooted(oCheckGame.Path) Then If Path.IsPathRooted(oCheckGame.Path) Then
oCheckBackup.AbsolutePath = True oCheckBackup.AbsolutePath = True
oCheckBackup.RestorePath = oCheckGame.Path
Else Else
oCheckBackup.AbsolutePath = False
End If
oCheckBackup.RestorePath = oCheckGame.Path oCheckBackup.RestorePath = oCheckGame.Path
End If End If
ElseIf oResult = MsgBoxResult.Cancel Then End Sub
Return False
End If
End If
Return True
End Function
Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame, ByRef bTriggerReload As Boolean) As Boolean Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame, ByRef bTriggerReload As Boolean) As Boolean
Dim sProcess As String Dim sProcess As String
Dim sRestorePath As String Dim sRestorePath As String
Dim bNoAuto As Boolean Dim bNoAuto As Boolean
'Before we do anything check if we need to override the current path DoPathOverride(oRestoreInfo, oGame)
If Not CheckForPathOverride(oRestoreInfo, oGame) Then
Return False
End If
If Not oRestoreInfo.AbsolutePath Then If Not oRestoreInfo.AbsolutePath Then
If oGame.ProcessPath <> String.Empty Then If oGame.ProcessPath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & "\" & oRestoreInfo.RestorePath oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
Else Else
sProcess = oGame.TrueProcess sProcess = oGame.TrueProcess
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
@@ -73,7 +62,7 @@ Public Class mgrRestore
bTriggerReload = True bTriggerReload = True
'Set path for restore 'Set path for restore
oRestoreInfo.RelativeRestorePath = sRestorePath & "\" & oRestoreInfo.RestorePath oRestoreInfo.RelativeRestorePath = sRestorePath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
Else Else
Return False Return False
End If End If
@@ -91,8 +80,8 @@ Public Class mgrRestore
Dim bLocal As Boolean = False Dim bLocal As Boolean = False
Dim bRemote As Boolean = False Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
If slLocalManifest.Contains(sAppName) Then If slLocalManifest.Contains(sAppName) Then
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup) oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
@@ -128,8 +117,8 @@ Public Class mgrRestore
Dim bLocal As Boolean = False Dim bLocal As Boolean = False
Dim bRemote As Boolean = False Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slRemoteManifest.Values For Each oItem As clsBackup In slRemoteManifest.Values
If slLocalManifest.Contains(oItem.Name) Then If slLocalManifest.Contains(oItem.Name) Then
@@ -159,36 +148,23 @@ Public Class mgrRestore
Dim slRemoteManifest As SortedList Dim slRemoteManifest As SortedList
Dim slRemovedItems As New SortedList Dim slRemovedItems As New SortedList
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slLocalManifest.Values For Each oItem As clsBackup In slLocalManifest.Values
If Not slRemoteManifest.Contains(oItem.Name) Then If Not slRemoteManifest.Contains(oItem.Name) Then
slRemovedItems.Add(oItem.Name, oItem) slRemovedItems.Add(oItem.Name, oItem)
mgrManifest.DoManifestDelete(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local)
End If End If
Next Next
Return slRemovedItems Return slRemovedItems
End Function End Function
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup)) Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup) As Boolean
Dim prs7z As Process
Dim sBackupFile As String
Dim sExtractPath As String
Dim bDoRestore As Boolean
Dim bRestoreCompleted As Boolean
Dim sHash As String Dim sHash As String
Dim sExtractPath As String
For Each oBackupInfo In oRestoreList Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder & "\" & oBackupInfo.FileName
sExtractPath = String.Empty
bDoRestore = True
bRestoreCompleted = False
CancelOperation = False
RaiseEvent UpdateRestoreInfo(oBackupInfo)
If oBackupInfo.AbsolutePath Then If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath sExtractPath = oBackupInfo.RestorePath
@@ -203,11 +179,11 @@ Public Class mgrRestore
Directory.CreateDirectory(sExtractPath) Directory.CreateDirectory(sExtractPath)
Catch ex As Exception Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True)
bDoRestore = False Return False
End Try End Try
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
bDoRestore = False Return False
End If End If
End If End If
@@ -219,7 +195,7 @@ Public Class mgrRestore
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFailedCheck, oBackupInfo.Name), False, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFailedCheck, oBackupInfo.Name), False, ToolTipIcon.Info, True)
If mgrCommon.ShowMessage(mgrRestore_ConfirmFailedCheck, oBackupInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then If mgrCommon.ShowMessage(mgrRestore_ConfirmFailedCheck, oBackupInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrRestore_ErrorCheckAbort, False, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrRestore_ErrorCheckAbort, False, ToolTipIcon.Info, True)
bDoRestore = False Return False
End If End If
Else Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_Verified, oBackupInfo.Name), False, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_Verified, oBackupInfo.Name), False, ToolTipIcon.Info, True)
@@ -229,11 +205,35 @@ Public Class mgrRestore
End If End If
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 Try
If File.Exists(sBackupFile) Then If File.Exists(sBackupFile) Then
prs7z.StartInfo.Arguments = "x """ & sBackupFile & """ -o""" & sExtractPath & "\"" -aoa -r" If Settings.Is7zUtilityValid Then
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation prs7z.StartInfo.Arguments = "x" & oSettings.Prepared7zArguments & """" & sBackupFile & """ -o""" & sExtractPath & Path.DirectorySeparatorChar & """ -aoa -r"
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True prs7z.StartInfo.CreateNoWindow = True
@@ -258,14 +258,18 @@ Public Class mgrRestore
End If End If
End If End If
prs7z.Dispose() prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bRestoreCompleted = False
End If
Else Else
RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
End If End If
If bRestoreCompleted Then If bRestoreCompleted Then
'Save Local Manifest 'Save Local Manifest
If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then If mgrManifest.DoGlobalManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByName(oBackupInfo, mgrSQLite.Database.Local)
Else Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If End If
@@ -279,7 +283,6 @@ Public Class mgrRestore
Else Else
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName)) RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName))
End If End If
End If
Next Next
End Sub End Sub
+113 -19
View File
@@ -1,6 +1,6 @@
Imports GBM.My.Resources Imports GBM.My.Resources
Imports System.IO Imports System.IO
Imports System.Data.SQLite Imports Mono.Data.Sqlite
Public Class mgrSQLite 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, " & 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, " & "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, " & "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) 'Add Tables (Monitor List)
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & 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, " & "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));" "BackupLimit INTEGER NOT NULL, PRIMARY KEY(Name, Process));"
'Add Tables (Tags) 'Add Tables (Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); " sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
@@ -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);" sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
'Add Tables (Local Manifest) '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);" "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Set Version 'Set Version
@@ -110,16 +111,16 @@ Public Class mgrSQLite
Try Try
'Create the DB 'Create the DB
SQLiteConnection.CreateFile(sDatabaseLocation) SqliteConnection.CreateFile(sDatabaseLocation)
'Add Tables (Remote Monitor List) 'Add Tables (Remote Monitor List)
sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & 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, " & "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));" "BackupLimit INTEGER NOT NULL, PRIMARY KEY(Name, Process));"
'Add Tables (Remote Manifest) '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);" "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Add Tables (Remote Tags) 'Add Tables (Remote Tags)
@@ -154,7 +155,7 @@ Public Class mgrSQLite
Public Sub Connect() Public Sub Connect()
If CheckDB() Then If CheckDB() Then
db = New SQLiteConnection(sConnectString) db = New SqliteConnection(sConnectString)
db.Open() db.Open()
Else Else
CreateDB() CreateDB()
@@ -166,18 +167,18 @@ Public Class mgrSQLite
db.Close() db.Close()
End Sub 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 For Each de As DictionaryEntry In hshParams
command.Parameters.AddWithValue(de.Key, de.Value) command.Parameters.AddWithValue(de.Key, de.Value)
Next Next
End Sub End Sub
Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean
Dim trans As SQLiteTransaction Dim trans As SqliteTransaction
Dim command As SQLiteCommand Dim command As SqliteCommand
Connect() Connect()
command = New SQLiteCommand(sSQL, db) command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams) BuildParams(command, hshParams)
trans = db.BeginTransaction() trans = db.BeginTransaction()
@@ -197,11 +198,11 @@ Public Class mgrSQLite
End Function End Function
Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean
Dim trans As SQLiteTransaction Dim trans As SqliteTransaction
Dim command As SQLiteCommand Dim command As SqliteCommand
Connect() Connect()
command = New SQLiteCommand(sSQL, db) command = New SqliteCommand(sSQL, db)
trans = db.BeginTransaction() trans = db.BeginTransaction()
Try Try
@@ -223,16 +224,17 @@ Public Class mgrSQLite
End Function End Function
Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet
Dim adapter As SQLiteDataAdapter Dim adapter As SqliteDataAdapter
Dim command As SQLiteCommand Dim command As SqliteCommand
Dim oData As New DataSet Dim oData As New DataSet
Connect() Connect()
command = New SQLiteCommand(sSQL, db) command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams) BuildParams(command, hshParams)
Try Try
adapter = New SQLiteDataAdapter(command) adapter = New SqliteDataAdapter()
adapter.SelectCommand = command
adapter.Fill(oData) adapter.Fill(oData)
Catch ex As Exception Catch ex As Exception
mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation) mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
@@ -506,6 +508,98 @@ Public Class mgrSQLite
End If End If
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 End Sub
Public Function GetDBSize() As Long Public Function GetDBSize() As Long
+110 -2
View File
@@ -14,7 +14,12 @@ Public Class mgrSettings
Private bTimeTracking As Boolean = True Private bTimeTracking As Boolean = True
Private bSupressBackup As Boolean = False Private bSupressBackup As Boolean = False
Private iSupressBackupThreshold As Integer = 10 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 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 Property StartWithWindows As Boolean
Get Get
@@ -133,6 +138,81 @@ Public Class mgrSettings
End Set End Set
End Property 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 Property BackupFolder As String
Get Get
Return sBackupFolder Return sBackupFolder
@@ -142,6 +222,24 @@ Public Class mgrSettings
End Set End Set
End Property 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() Private Sub SaveFromClass()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
@@ -152,7 +250,8 @@ Public Class mgrSettings
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, " sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @CheckSum, @StartWithWindows, " 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("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray) hshParams.Add("StartToTray", StartToTray)
@@ -168,7 +267,11 @@ Public Class mgrSettings
hshParams.Add("TimeTracking", TimeTracking) hshParams.Add("TimeTracking", TimeTracking)
hshParams.Add("SupressBackup", SupressBackup) hshParams.Add("SupressBackup", SupressBackup)
hshParams.Add("SupressBackupThreshold", SupressBackupThreshold) 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) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
@@ -197,6 +300,11 @@ Public Class mgrSettings
TimeTracking = CBool(dr("TimeTracking")) TimeTracking = CBool(dr("TimeTracking"))
SupressBackup = CBool(dr("SupressBackup")) SupressBackup = CBool(dr("SupressBackup"))
SupressBackupThreshold = CInt(dr("SupressBackupThreshold")) 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 Next
oDatabase.Disconnect() oDatabase.Disconnect()
+27 -15
View File
@@ -1,26 +1,44 @@
Public Class mgrTags 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) Public Shared Sub DoTagAdd(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO tags VALUES (@ID, @Name)" sSQL = "INSERT INTO tags VALUES (@ID, @Name)"
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name) hshParams = SetCoreParameters(oTag)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoTagUpdate(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) Public Shared Sub DoTagUpdate(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE tags SET Name=@Name " sSQL = "UPDATE tags SET Name=@Name "
sSQL &= "WHERE TagID = @ID" sSQL &= "WHERE TagID = @ID"
hshParams.Add("Name", oTag.Name) hshParams = SetCoreParameters(oTag)
hshParams.Add("ID", oTag.ID)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -57,9 +75,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag oTag = MapToObject(dr)
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
Next Next
Return oTag Return oTag
@@ -80,9 +96,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag oTag = MapToObject(dr)
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
Next Next
Return oTag Return oTag
@@ -124,9 +138,7 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag oTag = MapToObject(dr)
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
hshList.Add(oTag.Name, oTag) hshList.Add(oTag.Name, oTag)
Next Next
+27 -20
View File
@@ -1,5 +1,25 @@
Public Class mgrVariables 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) Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
@@ -15,26 +35,22 @@
Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable) Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)" sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)"
hshParams.Add("ID", oCustomVariable.ID) hshParams = SetCoreParameters(oCustomVariable)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable) Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE variables SET Name=@Name, Path = @Path " sSQL = "UPDATE variables SET Name=@Name, Path = @Path "
sSQL &= "WHERE VariableID = @ID" sSQL &= "WHERE VariableID = @ID"
hshParams.Add("Name", oCustomVariable.Name) hshParams = SetCoreParameters(oCustomVariable)
hshParams.Add("Path", oCustomVariable.Path)
hshParams.Add("ID", oCustomVariable.ID)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -69,10 +85,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
Next Next
Return oCustomVariable Return oCustomVariable
@@ -93,10 +106,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
Next Next
Return oCustomVariable Return oCustomVariable
@@ -138,10 +148,7 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
hshList.Add(oCustomVariable.Name, oCustomVariable) hshList.Add(oCustomVariable.Name, oCustomVariable)
Next Next
+3 -3
View File
@@ -14,7 +14,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyDescription("Game Backup Monitor")> <Assembly: AssemblyDescription("Game Backup Monitor")>
<Assembly: AssemblyCompany("Michael J. Seiferling")> <Assembly: AssemblyCompany("Michael J. Seiferling")>
<Assembly: AssemblyProduct("Game Backup Monitor")> <Assembly: AssemblyProduct("Game Backup Monitor")>
<Assembly: AssemblyCopyright("Copyright © 2015 Michael J. Seiferling")> <Assembly: AssemblyCopyright("Copyright © 2016 Michael J. Seiferling")>
<Assembly: AssemblyTrademark("")> <Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)> <Assembly: ComVisible(False)>
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("0.95.*")> <Assembly: AssemblyVersion("0.98.*")>
<Assembly: AssemblyFileVersion("0.95.0.0")> <Assembly: AssemblyFileVersion("0.98.0.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")> <Assembly: NeutralResourcesLanguageAttribute("en")>
+829 -82
View File
File diff suppressed because it is too large Load Diff
+301 -52
View File
@@ -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> <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>
<data name="App_Copyright" xml:space="preserve"> <data name="App_Copyright" xml:space="preserve">
<value>2015 Michael J. Seiferling</value> <value>[PARAM] Michael J. Seiferling</value>
</data> </data>
<data name="frmMain_Exit" xml:space="preserve"> <data name="frmMain_Exit" xml:space="preserve">
<value>Are you sure you want to exit? Your games will no longer be monitored.</value> <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> <value>[PARAM] is a 64-bit game, GBM cannot detect the required information to save your backup.</value>
</data> </data>
<data name="frmMain_Error7zip" xml:space="preserve"> <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>
<data name="frmMain_ErrorAdminBackup" xml:space="preserve"> <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>
<data name="frmMain_ErrorAdminDetect" xml:space="preserve"> <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> <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> <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>
<data name="frmMain_ErrorMulti64" xml:space="preserve"> <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>
<data name="frmMain_ErrorMultiAdmin" xml:space="preserve"> <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>
<data name="frmMain_ErrorRelativePath" xml:space="preserve"> <data name="frmMain_ErrorRelativePath" xml:space="preserve">
<value>[PARAM] uses a relative path and has never been detected on this computer.</value> <value>[PARAM] uses a relative path and has never been detected on this computer.</value>
@@ -431,7 +431,7 @@
<value>[PARAM] MB</value> <value>[PARAM] MB</value>
</data> </data>
<data name="frmGameManager_BackupTimeAndName" xml:space="preserve"> <data name="frmGameManager_BackupTimeAndName" xml:space="preserve">
<value>[PARAM] by [PARAM]</value> <value>[PARAM] ([PARAM])</value>
</data> </data>
<data name="frmGameManager_btnAdd" xml:space="preserve"> <data name="frmGameManager_btnAdd" xml:space="preserve">
<value>+</value> <value>+</value>
@@ -503,7 +503,7 @@
<value>Monitor only</value> <value>Monitor only</value>
</data> </data>
<data name="frmGameManager_chkTimeStamp" xml:space="preserve"> <data name="frmGameManager_chkTimeStamp" xml:space="preserve">
<value>Timestamp each backup</value> <value>Save multiple backups</value>
</data> </data>
<data name="frmGameManager_ChooseCustomIcon" xml:space="preserve"> <data name="frmGameManager_ChooseCustomIcon" xml:space="preserve">
<value>Choose a custom icon for the game</value> <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> <value>Are you sure you want to run a backup for [PARAM]? This will close the form.</value>
</data> </data>
<data name="frmGameManager_ConfirmBackupDelete" xml:space="preserve"> <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> <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_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>
</data> </data>
<data name="frmGameManager_ConfirmGameDelete" xml:space="preserve"> <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> <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> <value>A game with this exact name and process already exists.</value>
</data> </data>
<data name="frmGameManager_ErrorNoBackupData" xml:space="preserve"> <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>
<data name="frmGameManager_ErrorNoBackupExists" xml:space="preserve"> <data name="frmGameManager_ErrorNoBackupExists" xml:space="preserve">
<value>The backup file does not exist.</value> <value>The backup file does not exist.</value>
@@ -616,11 +613,11 @@
<data name="frmGameManager_lblCompany" xml:space="preserve"> <data name="frmGameManager_lblCompany" xml:space="preserve">
<value>Company:</value> <value>Company:</value>
</data> </data>
<data name="frmGameManager_lblCurrentBackup" xml:space="preserve"> <data name="frmGameManager_lblRemote" xml:space="preserve">
<value>Current Backup:</value> <value>Backup Data:</value>
</data> </data>
<data name="frmGameManager_lblFileSize" xml:space="preserve"> <data name="frmGameManager_lblBackupFile" xml:space="preserve">
<value>Backup Size:</value> <value>Backup File:</value>
</data> </data>
<data name="frmGameManager_lblGamePath" xml:space="preserve"> <data name="frmGameManager_lblGamePath" xml:space="preserve">
<value>Game Path:</value> <value>Game Path:</value>
@@ -631,8 +628,8 @@
<data name="frmGameManager_lblIcon" xml:space="preserve"> <data name="frmGameManager_lblIcon" xml:space="preserve">
<value>Icon:</value> <value>Icon:</value>
</data> </data>
<data name="frmGameManager_lblLastBackup" xml:space="preserve"> <data name="frmGameManager_lblLocalData" xml:space="preserve">
<value>Local Backup:</value> <value>Local Data:</value>
</data> </data>
<data name="frmGameManager_lblName" xml:space="preserve"> <data name="frmGameManager_lblName" xml:space="preserve">
<value>Name:</value> <value>Name:</value>
@@ -649,8 +646,8 @@
<data name="frmGameManager_lblVersion" xml:space="preserve"> <data name="frmGameManager_lblVersion" xml:space="preserve">
<value>Version:</value> <value>Version:</value>
</data> </data>
<data name="frmGameManager_Never" xml:space="preserve"> <data name="frmGameManager_None" xml:space="preserve">
<value>Never</value> <value>None</value>
</data> </data>
<data name="frmGameManager_optAllGames" xml:space="preserve"> <data name="frmGameManager_optAllGames" xml:space="preserve">
<value>All</value> <value>All</value>
@@ -704,10 +701,10 @@
<value>...</value> <value>...</value>
</data> </data>
<data name="frmAddWizard_chkFolderSave" xml:space="preserve"> <data name="frmAddWizard_chkFolderSave" xml:space="preserve">
<value>Save Entire Folder</value> <value>Save entire folder</value>
</data> </data>
<data name="frmAddWizard_chkTimeStamp" xml:space="preserve"> <data name="frmAddWizard_chkTimeStamp" xml:space="preserve">
<value>Time Stamp Backup</value> <value>Save multiple backups</value>
</data> </data>
<data name="frmAddWizard_ChooseProcess" xml:space="preserve"> <data name="frmAddWizard_ChooseProcess" xml:space="preserve">
<value>Choose exe file that starts the game</value> <value>Choose exe file that starts the game</value>
@@ -772,12 +769,6 @@
<data name="frmAddWizard_ItemsSelectedNone" xml:space="preserve"> <data name="frmAddWizard_ItemsSelectedNone" xml:space="preserve">
<value>0 item(s) selected</value> <value>0 item(s) selected</value>
</data> </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"> <data name="frmAddWizard_lblExcludePath" xml:space="preserve">
<value>Save Path</value> <value>Save Path</value>
</data> </data>
@@ -791,7 +782,7 @@
<value>Saved Game Folder:</value> <value>Saved Game Folder:</value>
</data> </data>
<data name="frmAddWizard_lblStep1Instructions" xml:space="preserve"> <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>
<data name="frmAddWizard_lblStep1Intro" xml:space="preserve"> <data name="frmAddWizard_lblStep1Intro" xml:space="preserve">
<value>Enter the name of the game to monitor:</value> <value>Enter the name of the game to monitor:</value>
@@ -800,7 +791,7 @@
<value>Game Name</value> <value>Game Name</value>
</data> </data>
<data name="frmAddWizard_lblStep2Instructions" xml:space="preserve"> <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>
<data name="frmAddWizard_lblStep2Intro" xml:space="preserve"> <data name="frmAddWizard_lblStep2Intro" xml:space="preserve">
<value>Choose the game's executable file or shortcut:</value> <value>Choose the game's executable file or shortcut:</value>
@@ -815,7 +806,7 @@
<value>Choose Files to Backup</value> <value>Choose Files to Backup</value>
</data> </data>
<data name="frmAddWizard_lblStep3Instructions" xml:space="preserve"> <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>
<data name="frmAddWizard_lblStep3Intro" xml:space="preserve"> <data name="frmAddWizard_lblStep3Intro" xml:space="preserve">
<value>Choose the location of your game's save files:</value> <value>Choose the location of your game's save files:</value>
@@ -860,7 +851,7 @@
<value>Save Path</value> <value>Save Path</value>
</data> </data>
<data name="frmAddWizard_Summary_Timestamp" xml:space="preserve"> <data name="frmAddWizard_Summary_Timestamp" xml:space="preserve">
<value>Timestamp</value> <value>Multiple Backups</value>
</data> </data>
<data name="frmAdvancedImport_btnCancel" xml:space="preserve"> <data name="frmAdvancedImport_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value> <value>&amp;Cancel</value>
@@ -871,11 +862,11 @@
<data name="frmAdvancedImport_FormName" xml:space="preserve"> <data name="frmAdvancedImport_FormName" xml:space="preserve">
<value>Import Game Configurations</value> <value>Import Game Configurations</value>
</data> </data>
<data name="frmAdvancedImport_NewConfigs" xml:space="preserve"> <data name="frmAdvancedImport_Configs" xml:space="preserve">
<value>[PARAM] new configurations available.</value> <value>Configurations ([PARAM])</value>
</data> </data>
<data name="frmAdvancedImport_Selected" xml:space="preserve"> <data name="frmAdvancedImport_Selected" xml:space="preserve">
<value>[PARAM] Selected</value> <value>Selected ([PARAM])</value>
</data> </data>
<data name="frmChooseGame_btnCancel" xml:space="preserve"> <data name="frmChooseGame_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value> <value>&amp;Cancel</value>
@@ -896,7 +887,7 @@
<value>Search</value> <value>Search</value>
</data> </data>
<data name="frmFileFolderSearch_SwitchDrives" xml:space="preserve"> <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>
<data name="frmFilter_btnAdd" xml:space="preserve"> <data name="frmFilter_btnAdd" xml:space="preserve">
<value>&gt;</value> <value>&gt;</value>
@@ -1112,7 +1103,7 @@
<value>Backup only when session time exceeds</value> <value>Backup only when session time exceeds</value>
</data> </data>
<data name="frmSettings_chkSync" xml:space="preserve"> <data name="frmSettings_chkSync" xml:space="preserve">
<value>Sync game list data with backup folder</value> <value>Enable syncing</value>
</data> </data>
<data name="frmSettings_chkTimeTracking" xml:space="preserve"> <data name="frmSettings_chkTimeTracking" xml:space="preserve">
<value>Enable time tracking</value> <value>Enable time tracking</value>
@@ -1123,17 +1114,14 @@
<data name="frmSettings_FormName" xml:space="preserve"> <data name="frmSettings_FormName" xml:space="preserve">
<value>Settings</value> <value>Settings</value>
</data> </data>
<data name="frmSettings_grpBackup" xml:space="preserve"> <data name="frmSettings_grpStartup" xml:space="preserve">
<value>Backup and Restore</value> <value>Startup</value>
</data> </data>
<data name="frmSettings_grpGeneral" xml:space="preserve"> <data name="frmSettings_grpFolderOptions" xml:space="preserve">
<value>General</value> <value>Folders</value>
</data>
<data name="frmSettings_grpPaths" xml:space="preserve">
<value>Paths</value>
</data> </data>
<data name="frmSettings_lblBackupFolder" xml:space="preserve"> <data name="frmSettings_lblBackupFolder" xml:space="preserve">
<value>Backup Folder</value> <value>Backup Folder:</value>
</data> </data>
<data name="frmSettings_lblMinutes" xml:space="preserve"> <data name="frmSettings_lblMinutes" xml:space="preserve">
<value>minutes</value> <value>minutes</value>
@@ -1307,13 +1295,13 @@
<value>Do you wish to manually set the game path? (Path will be saved)</value> <value>Do you wish to manually set the game path? (Path will be saved)</value>
</data> </data>
<data name="mgrBackup_ActionComplete" xml:space="preserve"> <data name="mgrBackup_ActionComplete" xml:space="preserve">
<value>[PARAM] backup completed</value> <value>[PARAM] backup completed.</value>
</data> </data>
<data name="mgrBackup_ActionFailed" xml:space="preserve"> <data name="mgrBackup_ActionFailed" xml:space="preserve">
<value>[PARAM] backup failed</value> <value>[PARAM] backup failed.</value>
</data> </data>
<data name="mgrBackup_BackupComplete" xml:space="preserve"> <data name="mgrBackup_BackupComplete" xml:space="preserve">
<value>[PARAM] backup completed.</value> <value>[PARAM] backup ([PARAM]) completed. </value>
</data> </data>
<data name="mgrBackup_BackupInProgress" xml:space="preserve"> <data name="mgrBackup_BackupInProgress" xml:space="preserve">
<value>Backup of [PARAM] in progress...</value> <value>Backup of [PARAM] in progress...</value>
@@ -1355,7 +1343,7 @@
<value>Generating SHA-256 hash for [PARAM] backup file.</value> <value>Generating SHA-256 hash for [PARAM] backup file.</value>
</data> </data>
<data name="mgrCommon_FilesFilter" xml:space="preserve"> <data name="mgrCommon_FilesFilter" xml:space="preserve">
<value>[PARAM] files (*.[PARAM])|*.[PARAM]</value> <value>[PARAM] files (*.[PARAM])|*.[PARAM]|All files (*.*)|*.*</value>
</data> </data>
<data name="mgrCommon_No" xml:space="preserve"> <data name="mgrCommon_No" xml:space="preserve">
<value>No</value> <value>No</value>
@@ -1367,7 +1355,7 @@
<value>Would you like to apply a filter to your export?</value> <value>Would you like to apply a filter to your export?</value>
</data> </data>
<data name="mgrMonitorList_ConfirmExistingData" xml:space="preserve"> <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>
<data name="mgrMonitorList_ExportComplete" xml:space="preserve"> <data name="mgrMonitorList_ExportComplete" xml:space="preserve">
<value>Export Complete. [PARAM] item(s) have been exported.</value> <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> <value>[PARAM] was located in the following folder:[BR][BR][PARAM][BR][BR]Is this correct?</value>
</data> </data>
<data name="mgrRestore_ActionComplete" xml:space="preserve"> <data name="mgrRestore_ActionComplete" xml:space="preserve">
<value>[PARAM] backup restored</value> <value>[PARAM] backup restored.</value>
</data> </data>
<data name="mgrRestore_ActionFailed" xml:space="preserve"> <data name="mgrRestore_ActionFailed" xml:space="preserve">
<value>[PARAM] restore failed</value> <value>[PARAM] restore failed.</value>
</data> </data>
<data name="mgrRestore_ConfirmCreatePath" xml:space="preserve"> <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> <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"> <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> <value>The XML file cannot be read, it may be an invalid format or corrupted.[BR][BR][PARAM]</value>
</data> </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>&amp;Clear</value>
</data>
<data name="frmMain_gMonLogSave" xml:space="preserve">
<value>&amp;Save</value>
</data>
<data name="frmMain_gMonToolsLog" xml:space="preserve">
<value>&amp;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>&amp;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 &amp;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 &amp;Optional Fields...</value>
</data>
<data name="frmSyncFields_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="frmSyncFields_btnSave" xml:space="preserve">
<value>&amp;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>&amp;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>&amp;All Files</value>
</data>
<data name="frmGameManager_cmsDeleteOne" xml:space="preserve">
<value>&amp;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> </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
View File
@@ -1,36 +1,33 @@
Game Backup Monitor v0.95 Readme Game Backup Monitor v0.98 Readme
http://mikemaximus.github.io/gbm-web/ http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com gamebackupmonitor@gmail.com
January 1, 2016 September 1, 2016
Disclaimer: Disclaimer:
This is beta release software. You may still encounter some bugs. 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. - (All) Redesigned GBM's ability to manage multiple backups per game.
- 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. - The "Timestamp each backup" option has been renamed "Save multiple backups".
- For example, Capitalism Plus using a process of "dosbox:CAPPLUS" and DOSBox.exe would become just "DOSBox". - You can limit the amount of backups you keep for each game by setting a limit (2 to 100).
- You can use the new "Custom" filter to easily find and update all your DOSBox games in the Game Manager. - GBM will keep your backup folder clean by automatically deleting old backups as limits are reached or modified.
- 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. - The Game Manager now allows you to browse and manage ALL backups for each game, not just the latest backup.
- Official configurations for DOSBox games are updated for this change. - (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 v0.98 Game Manager will not detect old backup files made using the "Timestamp each backup" setting in prior versions.
- 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. - Configurations using the "Timestamp each backup" option will have "Save multiple backups" automatically enabled with a backup limit of 5.
- Added the ability to trigger backups only after a certain session time has elapsed (Global Setting), this setting will be disabled by default. - If "Timestamp each backup" is currently set to sync, then "Save multiple backups" will also be set to sync after upgrading.
- 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. For more information regarding Linux support read the FAQ at http://mikemaximus.github.io/gbm-web/linux.html
- 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 entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.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.
+3 -2
View File
@@ -2,12 +2,13 @@
![Screenshot] (http://mikemaximus.github.io/gbm-web/images/manual/manual_01.jpg) ![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 /> **License**: GNU General Public License version 3.0 (GPLv3)<br />
**Language**: English Only<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 FAQ] (http://mikemaximus.github.io/gbm-web/faq.html) <br />
[Game Backup Monitor Manual] (http://mikemaximus.github.io/gbm-web/manual.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 /> [List of Preconfigured Games] (http://mikemaximus.github.io/gbm-web/GBM_Official.xml) <br /> <br />