107 Commits

Author SHA1 Message Date
MikeMaximus
96eac6a100 Merge pull request #96 from MikeMaximus/v104
Merge v104 into master
2017-09-26 10:29:40 -06:00
MikeMaximus
af13d51557 Updates and tweaks for v104 release 2017-09-26 10:27:12 -06:00
Michael J. Seiferling
59748309ad Merge branch 'v104' of https://github.com/MikeMaximus/gbm into v104 2017-09-23 15:21:23 -06:00
Michael J. Seiferling
0f874ae74a Enhancement for issue #83 2017-09-23 15:20:53 -06:00
MikeMaximus
19de263050 Fixed another ui problem with issue #89 2017-08-11 10:36:18 -06:00
MikeMaximus
34a9159719 Fixed various problems caused by issue #89 2017-08-10 22:38:14 -06:00
MikeMaximus
f0bd3db4ad Revert "Disabled Monitor only restore for issue #89"
This reverts commit 0003ee1f11.
2017-08-10 22:22:20 -06:00
MikeMaximus
0003ee1f11 Disabled Monitor only restore for issue #89 2017-08-10 22:18:15 -06:00
MikeMaximus
a4fff6b900 Fixed missing control for issue #89 2017-08-10 22:13:27 -06:00
MikeMaximus
e3bfc6adb1 Changes for issue #89 2017-08-10 22:02:31 -06:00
Michael J. Seiferling
2ef141ee9b Fixed possible filter crash 2017-08-06 19:18:38 -06:00
Michael J. Seiferling
94086d0c05 Operator feature change and minor bug fixes 2017-08-05 14:00:52 -06:00
Michael J. Seiferling
6e2298df49 Custom Filter Enhancement Final Phase 2017-08-05 12:49:10 -06:00
Michael J. Seiferling
c0d6a79aa7 Custom Filter Enhancement Phase #3 2017-08-04 23:31:48 -06:00
Michael J. Seiferling
19812d1cd2 Custom Filter Enhancement Phase #2 2017-08-04 23:13:35 -06:00
Michael J. Seiferling
11cc244b18 Custom Filter Enhancement Phase #1 2017-08-04 18:17:07 -06:00
MikeMaximus
8e82024c29 Merge pull request #95 from MikeMaximus/v103
Merge v103 into master
2017-08-02 12:29:11 -06:00
Michael J. Seiferling
89aa57e6d6 Final v103 changes 2017-08-02 12:27:19 -06:00
Michael J. Seiferling
44fdc4160e Fixed some long standing system tray bugs 2017-08-02 11:39:19 -06:00
MikeMaximus
b5859d6541 Cleaned up fix for issue #94 2017-07-15 10:54:15 -06:00
MikeMaximus
d3d6482bfd Fix for issue #94 2017-07-15 10:46:37 -06:00
MikeMaximus
9c8cbad7d5 Fix for issue #93 2017-07-13 13:57:28 -06:00
Michael J. Seiferling
e09e38a5c4 Updated .gitignore for Visual Studio 2017 2017-07-07 18:45:15 -06:00
Michael J. Seiferling
f245dee781 Updated .gitignore for Visual Studio 2017 2017-07-07 18:19:59 -06:00
Michael J. Seiferling
fd815f0c46 Fixed incorrect tray menu options 2017-07-06 09:17:14 -06:00
Michael J. Seiferling
708e9ce1fe Cleaned up filter function 2017-07-04 20:46:59 -06:00
MikeMaximus
a68d2b718f Fixed Windows Alt-Tab issue 2017-07-03 17:01:17 -06:00
MikeMaximus
d11f468add Some final v102 changes 2017-07-01 12:23:28 -06:00
MikeMaximus
ef6997a2ab Fixed prevent shutdown while minimized bug with issue #77 2017-06-28 11:50:50 -06:00
MikeMaximus
9386da4a2a Enhancement for issue #91 2017-06-26 10:46:11 -06:00
MikeMaximus
d4210053ad Fix for issue #78 & #84 2017-06-26 10:23:57 -06:00
MikeMaximus
41d11cca8e Tweak for issue #84 2017-06-25 16:53:16 -06:00
MikeMaximus
22df153513 Fixed selection after saving bug caused by issue #80 2017-06-25 16:45:47 -06:00
MikeMaximus
2548d0dceb Fix for issue #90 2017-06-25 11:38:25 -06:00
MikeMaximus
4b0d4a62c8 Fixed hide to tray while maximized bug with issue #77 2017-06-23 22:02:57 -06:00
MikeMaximus
11d8e4594c Merge pull request #88 from MikeMaximus/v102
Merge v102 into master
2017-06-23 16:19:05 -06:00
MikeMaximus
7259f92ec1 Updated readme.txt for v102 2017-06-23 08:38:10 -06:00
MikeMaximus
024f17abe9 Updated readme.txt for v102 2017-06-22 15:28:27 -06:00
MikeMaximus
97cf2618e3 Tweaks for issue #79 2017-06-22 11:43:03 -06:00
MikeMaximus
5fa746da8e Enhancement for issue #87 2017-06-22 09:53:34 -06:00
MikeMaximus
91b9554f40 Enhancement for issue #79 2017-06-21 16:56:57 -06:00
MikeMaximus
b5c977e66c Fix for issue #77 2017-06-21 14:42:01 -06:00
MikeMaximus
15c33ca039 Changes for issue #77 2017-06-21 10:53:05 -06:00
Michael J. Seiferling
aa3237d0fa Enhancement for issue #76 2017-06-14 10:16:29 -06:00
Michael J. Seiferling
1f291bbcd8 Fixed bug found while testing issue #81 2017-06-14 09:06:53 -06:00
Michael J. Seiferling
9cd786c303 Enhancement for issue #78 2017-06-13 09:38:06 -06:00
Michael J. Seiferling
e701d67d79 Fix for issue #80 2017-06-12 10:31:10 -06:00
Michael J. Seiferling
be8cb66136 Enhancement for issue #81 2017-06-12 09:59:04 -06:00
Michael J. Seiferling
50563e3be0 Fix for issue #81 2017-06-12 08:35:45 -06:00
MikeMaximus
2623bf7f7a Fixed timer problem with issue #73 2017-03-24 12:22:10 -06:00
Michael J. Seiferling
6230d2f888 Added new change to the v101 readme 2017-03-23 11:32:10 -06:00
Michael J. Seiferling
adc857fe5e Cleaned up changes for issue #73 2017-03-23 11:10:25 -06:00
Michael J. Seiferling
bddf07ee44 Changes for issue #73 2017-03-23 10:57:11 -06:00
Michael J. Seiferling
63ed3dac67 Redesigned notifications for issue #67 2017-03-23 10:30:03 -06:00
Michael J. Seiferling
922103e5aa Reverted change on About display 2017-03-23 01:14:05 -06:00
Michael J. Seiferling
d0fe33e953 Fixed restore path mismatch with issue #67 2017-03-21 13:25:18 -06:00
MikeMaximus
934d17de47 Merge branch 'master' of https://github.com/MikeMaximus/gbm.git 2017-03-16 17:12:16 -06:00
MikeMaximus
2ccc10bb9c Fixed sync setting conflict with issue #67 2017-03-16 17:12:01 -06:00
Michael J. Seiferling
cc1db7e524 Updated readme for v101 2017-03-16 12:17:47 -06:00
Michael J. Seiferling
c2a9d3ee77 Fixed tab order on settings form 2017-03-15 17:31:29 -06:00
MikeMaximus
65fe7214eb Merge pull request #72 from MikeMaximus/v101
Merge v101 into master
2017-03-15 17:16:31 -06:00
MikeMaximus
71d09126c2 Update README.md 2017-03-14 20:17:20 -06:00
MikeMaximus
2eb0c30702 Update README.md 2017-03-14 20:14:21 -06:00
MikeMaximus
24e1c4b92f Changes for issue #71 2017-03-09 14:46:07 -06:00
Michael J. Seiferling
4e7eb58463 More label updates 2017-02-28 15:41:57 -06:00
MikeMaximus
3ae0d1ba82 Label changes in Game Manager 2017-02-28 14:42:35 -06:00
MikeMaximus
6f3ed9ab81 Added build date and removed revision in About display 2017-02-26 16:01:44 -06:00
MikeMaximus
a490e6d1f2 Fixed timer problem with issue #67 2017-02-26 15:48:48 -06:00
Michael J. Seiferling
a5dd1d547b Relative path fix for issue #67 2017-02-22 12:49:19 -06:00
MikeMaximus
974aaa3638 Updates for issue #67 2017-02-21 16:36:34 -06:00
MikeMaximus
c3b73a9953 Fixed event broken by last commit 2017-02-19 21:34:45 -06:00
MikeMaximus
3bd4cbd0bd Updates for issue #67 2017-02-19 21:22:57 -06:00
MikeMaximus
5a9b3c99b3 Changes for Issue #67 & #70 2017-02-19 14:36:52 -06:00
MikeMaximus
8ce1b00a8c Working fix for issue #68 2017-01-06 08:20:03 -06:00
Michael J. Seiferling
e4237a74bb Modified fix for issue #68 2017-01-05 09:01:40 -06:00
MikeMaximus
72f520f333 Fix for issue #68 2016-12-22 09:20:05 -06:00
Michael J. Seiferling
dc9ec7f190 Merge branch 'master' 2016-12-15 09:09:12 -06:00
Michael J. Seiferling
c0dbd95504 Updated readme.txt for release 2016-12-15 08:49:10 -06:00
MikeMaximus
6c5c54ea1b Merge Master into v101 2016-12-06 13:08:09 -06:00
MikeMaximus
d0c40fd341 Changed button sub-menu placement calculations 2016-12-06 09:25:33 -06:00
MikeMaximus
68855077cf Minor updates for 1.0 release 2016-12-05 10:23:31 -06:00
Michael J. Seiferling
3184cb61ec Removed some unused code 2016-11-14 15:43:16 -06:00
Michael J. Seiferling
8ebfed7ab7 Added experimental "Clean folder on restore" feature 2016-11-14 15:37:44 -06:00
MikeMaximus
229afa92fd Update README.md 2016-10-24 12:25:43 -06:00
MikeMaximus
db6c96a80b Changes for issue #64 2016-10-24 10:04:06 -06:00
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
53 changed files with 4580 additions and 2131 deletions
Vendored
+2
View File
@@ -186,3 +186,5 @@ FakesAssemblies/
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
/.vs/slnx.sqlite
/.vs/VSWorkspaceState.json
+20
View File
@@ -1,11 +1,13 @@
Public Class Game
Private sGameName As String
Private sProcessName As String
Private sParameter As String
Private sPath As String
Private bAbsolutePath As Boolean
Private bFolderSave As Boolean
Private sFileType As String
Private sExcludeList As String
Private bMonitorOnly As Boolean
Private oTags As List(Of Tag)
Property Name As String
@@ -26,6 +28,15 @@
End Get
End Property
Property Parameter As String
Set(value As String)
sParameter = value
End Set
Get
Return sParameter
End Get
End Property
Property Path As String
Set(value As String)
sPath = value
@@ -71,6 +82,15 @@
End Get
End Property
Property MonitorOnly As Boolean
Set(value As Boolean)
bMonitorOnly = value
End Set
Get
Return bMonitorOnly
End Get
End Property
Property Tags As List(Of Tag)
Get
Return oTags
+2 -1
View File
@@ -1,4 +1,5 @@
Public Class Tag
<Serializable()>
Public Class Tag
Private sTagName As String
Property Name As String
-20
View File
@@ -7,8 +7,6 @@
Private sRelativeRestorePath As String = String.Empty
Private dDateUpdated As DateTime = Date.Now
Private sUpdatedBy As String = String.Empty
Private dLastDateUpdated As DateTime = Date.Now
Private sLastUpdatedBy As String = String.Empty
Private sCheckSum As String = String.Empty
Property ID As String
@@ -109,24 +107,6 @@
End Set
End Property
Property LastDateUpdated As DateTime
Get
Return dLastDateUpdated
End Get
Set(value As DateTime)
dLastDateUpdated = value
End Set
End Property
Property LastUpdatedBy As String
Get
Return sLastUpdatedBy
End Get
Set(value As String)
sLastUpdatedBy = value
End Set
End Property
Property CheckSum As String
Get
Return sCheckSum
+69 -1
View File
@@ -1,12 +1,16 @@
Public Class clsGame
<Serializable()>
Public Class clsGame
Private sGameID As String = Guid.NewGuid.ToString
Private sGameName As String = String.Empty
Private sProcessName As String = String.Empty
Private sParameter As String = String.Empty
Private sPath As String = String.Empty
Private bAbsolutePath As Boolean = False
Private bFolderSave As Boolean = False
Private sFileType As String = String.Empty
Private bAppendTimeStamp As Boolean = False
Private iBackupLimit As Integer = 2
Private bCleanFolder As Boolean = False
Private sExcludeList As String = String.Empty
Private sProcessPath As String = String.Empty
Private sIcon As String = String.Empty
@@ -72,6 +76,15 @@
End Get
End Property
Property Parameter As String
Set(value As String)
sParameter = value
End Set
Get
Return sParameter
End Get
End Property
Property Path As String
Set(value As String)
sPath = mgrPath.ReverseSpecialPaths(value)
@@ -117,6 +130,24 @@
End Set
End Property
Property BackupLimit As Integer
Get
Return iBackupLimit
End Get
Set(value As Integer)
iBackupLimit = value
End Set
End Property
Property CleanFolder As Boolean
Get
Return bCleanFolder
End Get
Set(value As Boolean)
bCleanFolder = value
End Set
End Property
Property ExcludeList As String
Set(value As String)
sExcludeList = value
@@ -228,6 +259,26 @@
End Set
End Property
ReadOnly Property IncludeArray As String()
Get
If FileType = String.Empty Then
Return New String() {}
Else
Return FileType.Split(":")
End If
End Get
End Property
ReadOnly Property ExcludeArray As String()
Get
If ExcludeList = String.Empty Then
Return New String() {}
Else
Return ExcludeList.Split(":")
End If
End Get
End Property
Public Function SyncEquals(obj As Object, eSyncFields As eOptionalSyncFields) As Boolean
Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then
@@ -243,6 +294,9 @@
If ProcessName <> oGame.ProcessName Then
Return False
End If
If Parameter <> oGame.Parameter Then
Return False
End If
If Path <> oGame.Path Then
Return False
End If
@@ -258,6 +312,9 @@
If FolderSave <> oGame.FolderSave Then
Return False
End If
If CleanFolder <> oGame.CleanFolder Then
Return False
End If
If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False
End If
@@ -293,6 +350,9 @@
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
@@ -346,4 +406,12 @@
Return sProcessName
End Function
Public Shared Function SetSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields
Return eSyncFields Or eSyncField
End Function
Public Shared Function RemoveSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields
Return eSyncFields And (Not eSyncField)
End Function
End Class
+71
View File
@@ -0,0 +1,71 @@
Public Class clsGameFilter
Private sID As String
Private oField As clsGameFilterField
Private oData As Object
Private eNumericOperator As eNumericOperators = eNumericOperators.Equals
Public Enum eNumericOperators
Equals = 1
Greater = 2
Lesser = 3
GreaterEquals = 4
LesserEquals = 5
End Enum
Public Property ID As String
Get
Return sID
End Get
Set(value As String)
sID = value
End Set
End Property
Public Property Field As clsGameFilterField
Get
Return oField
End Get
Set(value As clsGameFilterField)
oField = value
End Set
End Property
Public Property Data As Object
Get
Return oData
End Get
Set(value As Object)
oData = value
End Set
End Property
Public Property NumericOperator As eNumericOperators
Get
Return eNumericOperator
End Get
Set(value As eNumericOperators)
eNumericOperator = value
End Set
End Property
Public ReadOnly Property NumericOperatorAsString As String
Get
Select Case eNumericOperator
Case eNumericOperators.Equals
Return "="
Case eNumericOperators.Greater
Return ">"
Case eNumericOperators.GreaterEquals
Return ">="
Case eNumericOperators.Lesser
Return "<"
Case eNumericOperators.LesserEquals
Return "<="
Case Else
Return String.Empty
End Select
End Get
End Property
End Class
+77
View File
@@ -0,0 +1,77 @@
Public Class clsGameFilterField
Public Enum eDataType As Integer
fString = 1
fNumeric = 2
fBool = 3
End Enum
<Flags()> Public Enum eFieldStatus
None = 0
ValidFilter = 1
ValidSort = 2
End Enum
Private sFieldName As String
Private sFriendlyFieldName As String
Private eType As eDataType
Private eStatus As eFieldStatus
Public Property FieldName As String
Get
Return sFieldName
End Get
Set(value As String)
sFieldName = value
End Set
End Property
Public Property FriendlyFieldName As String
Get
Return sFriendlyFieldName
End Get
Set(value As String)
sFriendlyFieldName = value
End Set
End Property
Public Property Type As eDataType
Get
Return eType
End Get
Set(value As eDataType)
eType = value
End Set
End Property
'This is a flag property - Setting a value will toggle that flag on and off.
Public Property Status As eFieldStatus
Get
Return eStatus
End Get
Set(value As eFieldStatus)
If (eStatus And value) = value Then
eStatus = RemoveFieldStatus(value)
Else
eStatus = SetFieldStatus(value)
End If
End Set
End Property
Private Function SetFieldStatus(ByVal eFlag As eFieldStatus) As eFieldStatus
Return eStatus Or eFlag
End Function
Private Function RemoveFieldStatus(ByVal eFlag As eFieldStatus) As eFieldStatus
Return eStatus And (Not eFlag)
End Function
Public Function CheckStatus(ByVal eFlag As eFieldStatus) As Boolean
If (eStatus And eFlag) = eFlag Then
Return True
Else
Return False
End If
End Function
End Class
@@ -1,13 +1,13 @@
Public Class clsRestoreCache
Private sName As String
Private sPath As String
Public Class clsSavedPath
Private sPathName As String = String.Empty
Private sPath As String = String.Empty
Property Name As String
Property PathName As String
Get
Return sName
Return sPathName
End Get
Set(value As String)
sName = value
sPathName = value
End Set
End Property
@@ -19,5 +19,4 @@
sPath = value
End Set
End Property
End Class
+42 -14
View File
@@ -36,6 +36,8 @@ Partial Class frmAddWizard
Me.txtProcessPath = New System.Windows.Forms.TextBox()
Me.lblStep2Intro = New System.Windows.Forms.Label()
Me.tbPage3 = New System.Windows.Forms.TabPage()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
Me.lblStep3Title = New System.Windows.Forms.Label()
Me.lblStep3Instructions = New System.Windows.Forms.Label()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
@@ -70,6 +72,7 @@ Partial Class frmAddWizard
Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout()
Me.tbPage3.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tbPage3a.SuspendLayout()
Me.tbPage4.SuspendLayout()
Me.tbPage5.SuspendLayout()
@@ -121,8 +124,8 @@ Partial Class frmAddWizard
Me.lblStep1Instructions.Name = "lblStep1Instructions"
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 85)
Me.lblStep1Instructions.TabIndex = 6
Me.lblStep1Instructions.Text = "The name will be automatically filtered for length and invalid characters. You m" & _
"ay drag and drop a shortcut here to complete this step, only Windows shortcuts a" & _
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
@@ -205,6 +208,8 @@ Partial Class frmAddWizard
'tbPage3
'
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3.Controls.Add(Me.lblLimit)
Me.tbPage3.Controls.Add(Me.nudLimit)
Me.tbPage3.Controls.Add(Me.lblStep3Title)
Me.tbPage3.Controls.Add(Me.lblStep3Instructions)
Me.tbPage3.Controls.Add(Me.chkTimeStamp)
@@ -218,6 +223,26 @@ Partial Class frmAddWizard
Me.tbPage3.TabIndex = 2
Me.tbPage3.Text = "TabPage3"
'
'lblLimit
'
Me.lblLimit.AutoSize = True
Me.lblLimit.Location = New System.Drawing.Point(203, 109)
Me.lblLimit.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
Me.lblLimit.TabIndex = 15
Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False
'
'nudLimit
'
Me.nudLimit.Location = New System.Drawing.Point(157, 107)
Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 14
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Visible = False
'
'lblStep3Title
'
Me.lblStep3Title.AutoSize = True
@@ -230,32 +255,32 @@ Partial Class frmAddWizard
'
'lblStep3Instructions
'
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 116)
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 139)
Me.lblStep3Instructions.Name = "lblStep3Instructions"
Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep3Instructions.TabIndex = 9
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save Entire Folder " & _
"is checked. You can also time stamp your backup files to make incremental backu" & _
"ps."
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save entire folder " &
"is checked. You can also choose to save multiple backups and set a limit on how" &
" many to keep."
'
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(139, 87)
Me.chkTimeStamp.Location = New System.Drawing.Point(18, 108)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(122, 17)
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 8
Me.chkTimeStamp.Text = "Time Stamp Backup"
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
'
Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(17, 87)
Me.chkFolderSave.Location = New System.Drawing.Point(18, 87)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(113, 17)
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 7
Me.chkFolderSave.Text = "Save Entire Folder"
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
'btnSaveBrowse
@@ -352,7 +377,7 @@ Partial Class frmAddWizard
Me.lblStep3aInstructions.Name = "lblStep3aInstructions"
Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56)
Me.lblStep3aInstructions.TabIndex = 5
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" & _
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" &
"up. If you're unsure, go back a step and choose to save the entire folder. "
'
'txtFileTypes
@@ -434,7 +459,7 @@ Partial Class frmAddWizard
Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59)
Me.lblStep4Instructions.TabIndex = 5
Me.lblStep4Instructions.Text = "Choose any file types, specific files or folders you wish to exclude from the ba" & _
Me.lblStep4Instructions.Text = "Choose any file types, specific files or folders you wish to exclude from the ba" &
"ckup. You may choose multiple items to exclude. This step can be skipped."
'
'txtExcludeList
@@ -539,6 +564,7 @@ Partial Class frmAddWizard
Me.tbPage2.PerformLayout()
Me.tbPage3.ResumeLayout(False)
Me.tbPage3.PerformLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
Me.tbPage3a.ResumeLayout(False)
Me.tbPage3a.PerformLayout()
Me.tbPage4.ResumeLayout(False)
@@ -591,4 +617,6 @@ Partial Class frmAddWizard
Friend WithEvents lblExcludePath As Label
Friend WithEvents lblIncludePathTitle As Label
Friend WithEvents lblExcludePathTitle As Label
Friend WithEvents lblLimit As Label
Friend WithEvents nudLimit As NumericUpDown
End Class
+48 -5
View File
@@ -46,6 +46,7 @@ Public Class frmAddWizard
lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions
chkTimeStamp.Text = frmAddWizard_chkTimeStamp
chkFolderSave.Text = frmAddWizard_chkFolderSave
lblLimit.Text = frmAddWizard_lblLimit
btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse
lblStep3Intro.Text = frmAddWizard_lblStep3Intro
lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle
@@ -68,6 +69,28 @@ Public Class frmAddWizard
StepHandler()
End Sub
Private Sub ShowHideLimit()
If chkTimeStamp.Checked Then
nudLimit.Visible = True
lblLimit.Visible = True
nudLimit.Value = 5
Else
nudLimit.Visible = False
nudLimit.Value = nudLimit.Minimum
lblLimit.Visible = False
End If
End Sub
Private Function ShowSummaryLimit(ByVal bTimeStamp As Boolean, ByVal iLimit As Integer) As String
Dim sLimit As String = String.Empty
If bTimeStamp Then
Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & iLimit & ")"
Else
Return mgrCommon.BooleanYesNo(bTimeStamp)
End If
End Function
Private Function StringEmptyText(ByVal sString As String) As String
If sString = String.Empty Then
Return frmAddWizard_None
@@ -81,19 +104,31 @@ Public Class frmAddWizard
Dim sName As String = txtName.Text
Dim sProcessFullPath As String = txtProcessPath.Text
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
Dim sSavePath As String = txtSavePath.Text
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
Dim bFolderBackup As Boolean = chkFolderSave.Checked
Dim bTimeStamp As Boolean = chkTimeStamp.Checked
Dim iLimit As Integer = nudLimit.Value
Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text
Dim sProcess As String
Dim sItem As String()
Dim sItems As String()
Dim sValues As String()
Dim lstItem As ListViewItem
'Handle Process
If Path.HasExtension(sProcessFullPath) Then
If sProcessFullPath.ToLower.EndsWith(".exe") Then
sProcess = Path.GetFileNameWithoutExtension(sProcessFullPath)
Else
sProcess = Path.GetFileName(sProcessFullPath)
End If
Else
sProcess = Path.GetFileName(sProcessFullPath)
End If
If Not bIsAbsolute Then
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
End If
@@ -106,7 +141,7 @@ Public Class frmAddWizard
lstSummary.Columns(1).Width = 210
sItems = {frmAddWizard_Summary_Name, frmAddWizard_Summary_Process, frmAddWizard_Summary_AbsolutePath, frmAddWizard_Summary_SavePath, frmAddWizard_Summary_FolderSave, frmAddWizard_Summary_Timestamp, frmAddWizard_Summary_Include, frmAddWizard_Summary_Exclude}
sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), mgrCommon.BooleanYesNo(bTimeStamp), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), ShowSummaryLimit(bTimeStamp, iLimit), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
For i = 0 To sItems.Length - 1
sItem = {sItems(i), sValues(i)}
@@ -122,7 +157,9 @@ Public Class frmAddWizard
oGame.FolderSave = bFolderBackup
oGame.FileType = sFileType
oGame.AppendTimeStamp = bTimeStamp
oGame.BackupLimit = iLimit
oGame.ExcludeList = sExcludeList
oGame.ProcessPath = sProcessPath
Return oGame
End Function
@@ -388,8 +425,8 @@ Public Class frmAddWizard
End If
End If
sNewPath = mgrCommon.OpenFileBrowser(frmAddWizard_ChooseProcess, "exe",
frmAddWizard_Executable, sDefaultFolder, False)
sNewPath = mgrCommon.OpenFileBrowser("Wizard_Process_Path", frmAddWizard_ChooseProcess, "exe",
frmAddWizard_Executable, sDefaultFolder, False, False)
If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath
End Sub
@@ -405,7 +442,7 @@ Public Class frmAddWizard
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmAddWizard_ChooseSavePath, sDefaultFolder, False)
sNewPath = mgrCommon.OpenFolderBrowser("Wizard_Save_Path", frmAddWizard_ChooseSavePath, sDefaultFolder, False, False)
If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub
@@ -490,6 +527,10 @@ Public Class frmAddWizard
txtFileTypes.Clear()
End Sub
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
ShowHideLimit()
End Sub
Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
OpenBuilder(frmAddWizard_Include, txtFileTypes)
UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes)
@@ -499,4 +540,6 @@ Public Class frmAddWizard
OpenBuilder(frmAddWizard_Exclude, txtExcludeList)
UpdateBuilderLabel(txtExcludeList.Text, lblExclude)
End Sub
End Class
+18 -4
View File
@@ -1,10 +1,11 @@
Imports GBM.My.Resources
Imports System.IO
Public Class frmAdvancedImport
Private hshImportData As Hashtable
Private hshFinalData As New Hashtable
Private bSelectAll As Boolean = False
Private bSelectAll As Boolean = True
Private bIsLoading As Boolean = False
Private iCurrentSort As Integer = 0
Private WithEvents tmFilterTimer As Timer
@@ -44,7 +45,7 @@ Public Class frmAdvancedImport
End If
End Sub
Private Sub LoadData(Optional ByVal sFilter As String = "")
Private Sub LoadData(Optional ByVal sFilter As String = "", Optional ByVal bAutoDetect As Boolean = False)
Dim oApp As clsGame
Dim oListViewItem As ListViewItem
Dim sTags As String
@@ -79,6 +80,19 @@ Public Class frmAdvancedImport
oListViewItem.Checked = False
End If
If bAutoDetect Then
If oApp.AbsolutePath Then
If Directory.Exists(oApp.Path) Then
oListViewItem.Checked = True
SaveChecked(oListViewItem)
Else
oListViewItem.Checked = False
End If
Else
oListViewItem.Checked = False
End If
End If
If sFilter = String.Empty Then
bAddItem = True
Else
@@ -142,8 +156,7 @@ Public Class frmAdvancedImport
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bIsLoading = True
SetForm()
LoadData()
SelectToggle()
LoadData(String.Empty, True)
bIsLoading = False
End Sub
@@ -184,6 +197,7 @@ Public Class frmAdvancedImport
tmFilterTimer.Stop()
tmFilterTimer.Enabled = False
End Sub
End Class
' Column Sorter
+282 -124
View File
@@ -22,8 +22,6 @@ Partial Class frmFilter
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.optGameInfo = New System.Windows.Forms.RadioButton()
Me.optTag = New System.Windows.Forms.RadioButton()
Me.grpTagFilter = New System.Windows.Forms.GroupBox()
Me.grpTagOptions = New System.Windows.Forms.GroupBox()
Me.optAll = New System.Windows.Forms.RadioButton()
@@ -32,45 +30,42 @@ Partial Class frmFilter
Me.lblTags = New System.Windows.Forms.Label()
Me.btnRemove = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.lstFilter = New System.Windows.Forms.ListBox()
Me.lstTagFilter = New System.Windows.Forms.ListBox()
Me.lstTags = New System.Windows.Forms.ListBox()
Me.btnOK = New System.Windows.Forms.Button()
Me.grpGameFilter = New System.Windows.Forms.GroupBox()
Me.grpGameInfoOptions = New System.Windows.Forms.GroupBox()
Me.cboBoolFilter = New System.Windows.Forms.ComboBox()
Me.numFilter = New System.Windows.Forms.NumericUpDown()
Me.cboNumericOps = New System.Windows.Forms.ComboBox()
Me.lblCurrentFilters = New System.Windows.Forms.Label()
Me.lblFilterData = New System.Windows.Forms.Label()
Me.lblFields = New System.Windows.Forms.Label()
Me.btnRemoveFilter = New System.Windows.Forms.Button()
Me.lstFilter = New System.Windows.Forms.ListBox()
Me.btnAddFilter = New System.Windows.Forms.Button()
Me.cboFilterField = New System.Windows.Forms.ComboBox()
Me.grpFilterType = New System.Windows.Forms.GroupBox()
Me.optOr = New System.Windows.Forms.RadioButton()
Me.optAnd = New System.Windows.Forms.RadioButton()
Me.txtCompany = New System.Windows.Forms.TextBox()
Me.lblCompany = New System.Windows.Forms.Label()
Me.txtProcess = New System.Windows.Forms.TextBox()
Me.lblProcess = New System.Windows.Forms.Label()
Me.lblName = New System.Windows.Forms.Label()
Me.txtName = New System.Windows.Forms.TextBox()
Me.txtStringFilter = New System.Windows.Forms.TextBox()
Me.grpSorting = New System.Windows.Forms.GroupBox()
Me.grpSortOptions = New System.Windows.Forms.GroupBox()
Me.optSortAsc = New System.Windows.Forms.RadioButton()
Me.optSortDesc = New System.Windows.Forms.RadioButton()
Me.lblSortFields = New System.Windows.Forms.Label()
Me.cboSortField = New System.Windows.Forms.ComboBox()
Me.chkTag = New System.Windows.Forms.CheckBox()
Me.chkGameInfo = New System.Windows.Forms.CheckBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.grpTagFilter.SuspendLayout()
Me.grpTagOptions.SuspendLayout()
Me.grpGameFilter.SuspendLayout()
Me.grpGameInfoOptions.SuspendLayout()
CType(Me.numFilter, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpFilterType.SuspendLayout()
Me.grpSorting.SuspendLayout()
Me.grpSortOptions.SuspendLayout()
Me.SuspendLayout()
'
'optGameInfo
'
Me.optGameInfo.AutoSize = True
Me.optGameInfo.Location = New System.Drawing.Point(12, 12)
Me.optGameInfo.Name = "optGameInfo"
Me.optGameInfo.Size = New System.Drawing.Size(108, 17)
Me.optGameInfo.TabIndex = 0
Me.optGameInfo.Text = "Game Information"
Me.optGameInfo.UseVisualStyleBackColor = True
'
'optTag
'
Me.optTag.AutoSize = True
Me.optTag.Location = New System.Drawing.Point(12, 190)
Me.optTag.Name = "optTag"
Me.optTag.Size = New System.Drawing.Size(44, 17)
Me.optTag.TabIndex = 2
Me.optTag.Text = "Tag"
Me.optTag.UseVisualStyleBackColor = True
'
'grpTagFilter
'
Me.grpTagFilter.Controls.Add(Me.grpTagOptions)
@@ -78,11 +73,11 @@ Partial Class frmFilter
Me.grpTagFilter.Controls.Add(Me.lblTags)
Me.grpTagFilter.Controls.Add(Me.btnRemove)
Me.grpTagFilter.Controls.Add(Me.btnAdd)
Me.grpTagFilter.Controls.Add(Me.lstFilter)
Me.grpTagFilter.Controls.Add(Me.lstTagFilter)
Me.grpTagFilter.Controls.Add(Me.lstTags)
Me.grpTagFilter.Location = New System.Drawing.Point(12, 213)
Me.grpTagFilter.Location = New System.Drawing.Point(12, 236)
Me.grpTagFilter.Name = "grpTagFilter"
Me.grpTagFilter.Size = New System.Drawing.Size(385, 265)
Me.grpTagFilter.Size = New System.Drawing.Size(385, 198)
Me.grpTagFilter.TabIndex = 3
Me.grpTagFilter.TabStop = False
'
@@ -90,7 +85,7 @@ Partial Class frmFilter
'
Me.grpTagOptions.Controls.Add(Me.optAll)
Me.grpTagOptions.Controls.Add(Me.optAny)
Me.grpTagOptions.Location = New System.Drawing.Point(6, 211)
Me.grpTagOptions.Location = New System.Drawing.Point(6, 146)
Me.grpTagOptions.Name = "grpTagOptions"
Me.grpTagOptions.Size = New System.Drawing.Size(150, 46)
Me.grpTagOptions.TabIndex = 6
@@ -138,7 +133,7 @@ Partial Class frmFilter
'
'btnRemove
'
Me.btnRemove.Location = New System.Drawing.Point(162, 122)
Me.btnRemove.Location = New System.Drawing.Point(162, 88)
Me.btnRemove.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(61, 23)
Me.btnRemove.TabIndex = 3
@@ -147,22 +142,22 @@ Partial Class frmFilter
'
'btnAdd
'
Me.btnAdd.Location = New System.Drawing.Point(162, 93)
Me.btnAdd.Location = New System.Drawing.Point(162, 59)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(61, 23)
Me.btnAdd.TabIndex = 2
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'lstFilter
'lstTagFilter
'
Me.lstFilter.FormattingEnabled = True
Me.lstFilter.Location = New System.Drawing.Point(229, 32)
Me.lstFilter.Name = "lstFilter"
Me.lstFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstFilter.Size = New System.Drawing.Size(150, 173)
Me.lstFilter.Sorted = True
Me.lstFilter.TabIndex = 5
Me.lstTagFilter.FormattingEnabled = True
Me.lstTagFilter.Location = New System.Drawing.Point(229, 32)
Me.lstTagFilter.Name = "lstTagFilter"
Me.lstTagFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstTagFilter.Size = New System.Drawing.Size(150, 108)
Me.lstTagFilter.Sorted = True
Me.lstTagFilter.TabIndex = 5
'
'lstTags
'
@@ -170,124 +165,270 @@ Partial Class frmFilter
Me.lstTags.Location = New System.Drawing.Point(6, 32)
Me.lstTags.Name = "lstTags"
Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstTags.Size = New System.Drawing.Size(150, 173)
Me.lstTags.Size = New System.Drawing.Size(150, 108)
Me.lstTags.Sorted = True
Me.lstTags.TabIndex = 1
'
'btnOK
'
Me.btnOK.Location = New System.Drawing.Point(322, 484)
Me.btnOK.Location = New System.Drawing.Point(322, 526)
Me.btnOK.Name = "btnOK"
Me.btnOK.Size = New System.Drawing.Size(75, 23)
Me.btnOK.TabIndex = 4
Me.btnOK.TabIndex = 6
Me.btnOK.Text = "&OK"
Me.btnOK.UseVisualStyleBackColor = True
'
'grpGameFilter
'
Me.grpGameFilter.Controls.Add(Me.grpGameInfoOptions)
Me.grpGameFilter.Controls.Add(Me.txtCompany)
Me.grpGameFilter.Controls.Add(Me.lblCompany)
Me.grpGameFilter.Controls.Add(Me.txtProcess)
Me.grpGameFilter.Controls.Add(Me.lblProcess)
Me.grpGameFilter.Controls.Add(Me.lblName)
Me.grpGameFilter.Controls.Add(Me.txtName)
Me.grpGameFilter.Controls.Add(Me.cboBoolFilter)
Me.grpGameFilter.Controls.Add(Me.numFilter)
Me.grpGameFilter.Controls.Add(Me.cboNumericOps)
Me.grpGameFilter.Controls.Add(Me.lblCurrentFilters)
Me.grpGameFilter.Controls.Add(Me.lblFilterData)
Me.grpGameFilter.Controls.Add(Me.lblFields)
Me.grpGameFilter.Controls.Add(Me.btnRemoveFilter)
Me.grpGameFilter.Controls.Add(Me.lstFilter)
Me.grpGameFilter.Controls.Add(Me.btnAddFilter)
Me.grpGameFilter.Controls.Add(Me.cboFilterField)
Me.grpGameFilter.Controls.Add(Me.grpFilterType)
Me.grpGameFilter.Controls.Add(Me.txtStringFilter)
Me.grpGameFilter.Location = New System.Drawing.Point(12, 35)
Me.grpGameFilter.Name = "grpGameFilter"
Me.grpGameFilter.Size = New System.Drawing.Size(385, 150)
Me.grpGameFilter.Size = New System.Drawing.Size(385, 172)
Me.grpGameFilter.TabIndex = 1
Me.grpGameFilter.TabStop = False
'
'grpGameInfoOptions
'cboBoolFilter
'
Me.grpGameInfoOptions.Controls.Add(Me.optOr)
Me.grpGameInfoOptions.Controls.Add(Me.optAnd)
Me.grpGameInfoOptions.Location = New System.Drawing.Point(14, 97)
Me.grpGameInfoOptions.Name = "grpGameInfoOptions"
Me.grpGameInfoOptions.Size = New System.Drawing.Size(106, 46)
Me.grpGameInfoOptions.TabIndex = 6
Me.grpGameInfoOptions.TabStop = False
Me.grpGameInfoOptions.Text = "Options"
Me.cboBoolFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboBoolFilter.FormattingEnabled = True
Me.cboBoolFilter.Location = New System.Drawing.Point(162, 36)
Me.cboBoolFilter.Name = "cboBoolFilter"
Me.cboBoolFilter.Size = New System.Drawing.Size(136, 21)
Me.cboBoolFilter.TabIndex = 3
'
'numFilter
'
Me.numFilter.DecimalPlaces = 1
Me.numFilter.Location = New System.Drawing.Point(233, 37)
Me.numFilter.Maximum = New Decimal(New Integer() {1000000, 0, 0, 0})
Me.numFilter.Name = "numFilter"
Me.numFilter.Size = New System.Drawing.Size(65, 20)
Me.numFilter.TabIndex = 4
'
'cboNumericOps
'
Me.cboNumericOps.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboNumericOps.FormattingEnabled = True
Me.cboNumericOps.Location = New System.Drawing.Point(162, 36)
Me.cboNumericOps.Name = "cboNumericOps"
Me.cboNumericOps.Size = New System.Drawing.Size(65, 21)
Me.cboNumericOps.TabIndex = 3
'
'lblCurrentFilters
'
Me.lblCurrentFilters.AutoSize = True
Me.lblCurrentFilters.Location = New System.Drawing.Point(94, 65)
Me.lblCurrentFilters.Name = "lblCurrentFilters"
Me.lblCurrentFilters.Size = New System.Drawing.Size(71, 13)
Me.lblCurrentFilters.TabIndex = 6
Me.lblCurrentFilters.Text = "Current Filters"
'
'lblFilterData
'
Me.lblFilterData.AutoSize = True
Me.lblFilterData.Location = New System.Drawing.Point(214, 20)
Me.lblFilterData.Name = "lblFilterData"
Me.lblFilterData.Size = New System.Drawing.Size(32, 13)
Me.lblFilterData.TabIndex = 2
Me.lblFilterData.Text = "Filter "
'
'lblFields
'
Me.lblFields.AutoSize = True
Me.lblFields.Location = New System.Drawing.Point(41, 20)
Me.lblFields.Name = "lblFields"
Me.lblFields.Size = New System.Drawing.Size(80, 13)
Me.lblFields.TabIndex = 0
Me.lblFields.Text = "Available Fields"
'
'btnRemoveFilter
'
Me.btnRemoveFilter.Location = New System.Drawing.Point(259, 140)
Me.btnRemoveFilter.Name = "btnRemoveFilter"
Me.btnRemoveFilter.Size = New System.Drawing.Size(75, 23)
Me.btnRemoveFilter.TabIndex = 9
Me.btnRemoveFilter.Text = "Remove"
Me.btnRemoveFilter.UseVisualStyleBackColor = True
'
'lstFilter
'
Me.lstFilter.FormattingEnabled = True
Me.lstFilter.Location = New System.Drawing.Point(6, 81)
Me.lstFilter.Name = "lstFilter"
Me.lstFilter.Size = New System.Drawing.Size(247, 82)
Me.lstFilter.TabIndex = 7
'
'btnAddFilter
'
Me.btnAddFilter.Location = New System.Drawing.Point(304, 34)
Me.btnAddFilter.Name = "btnAddFilter"
Me.btnAddFilter.Size = New System.Drawing.Size(75, 23)
Me.btnAddFilter.TabIndex = 5
Me.btnAddFilter.Text = "Add"
Me.btnAddFilter.UseVisualStyleBackColor = True
'
'cboFilterField
'
Me.cboFilterField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboFilterField.FormattingEnabled = True
Me.cboFilterField.Location = New System.Drawing.Point(6, 36)
Me.cboFilterField.Name = "cboFilterField"
Me.cboFilterField.Size = New System.Drawing.Size(150, 21)
Me.cboFilterField.TabIndex = 1
'
'grpFilterType
'
Me.grpFilterType.Controls.Add(Me.optOr)
Me.grpFilterType.Controls.Add(Me.optAnd)
Me.grpFilterType.Location = New System.Drawing.Point(259, 81)
Me.grpFilterType.Name = "grpFilterType"
Me.grpFilterType.Size = New System.Drawing.Size(105, 46)
Me.grpFilterType.TabIndex = 8
Me.grpFilterType.TabStop = False
Me.grpFilterType.Text = "Filter Type"
'
'optOr
'
Me.optOr.Location = New System.Drawing.Point(56, 19)
Me.optOr.Checked = True
Me.optOr.Location = New System.Drawing.Point(6, 19)
Me.optOr.Name = "optOr"
Me.optOr.Size = New System.Drawing.Size(36, 17)
Me.optOr.TabIndex = 1
Me.optOr.Size = New System.Drawing.Size(44, 17)
Me.optOr.TabIndex = 0
Me.optOr.TabStop = True
Me.optOr.Text = "Or"
Me.optOr.Text = "Any"
Me.optOr.UseVisualStyleBackColor = True
'
'optAnd
'
Me.optAnd.Checked = True
Me.optAnd.Location = New System.Drawing.Point(6, 19)
Me.optAnd.Location = New System.Drawing.Point(56, 19)
Me.optAnd.Name = "optAnd"
Me.optAnd.Size = New System.Drawing.Size(44, 17)
Me.optAnd.TabIndex = 0
Me.optAnd.TabStop = True
Me.optAnd.Text = "And"
Me.optAnd.TabIndex = 1
Me.optAnd.Text = "All"
Me.optAnd.UseVisualStyleBackColor = True
'
'txtCompany
'txtStringFilter
'
Me.txtCompany.Location = New System.Drawing.Point(70, 71)
Me.txtCompany.Name = "txtCompany"
Me.txtCompany.Size = New System.Drawing.Size(309, 20)
Me.txtCompany.TabIndex = 5
Me.txtStringFilter.Location = New System.Drawing.Point(162, 36)
Me.txtStringFilter.Name = "txtStringFilter"
Me.txtStringFilter.Size = New System.Drawing.Size(136, 20)
Me.txtStringFilter.TabIndex = 3
'
'lblCompany
'grpSorting
'
Me.lblCompany.AutoSize = True
Me.lblCompany.Location = New System.Drawing.Point(11, 74)
Me.lblCompany.Name = "lblCompany"
Me.lblCompany.Size = New System.Drawing.Size(54, 13)
Me.lblCompany.TabIndex = 4
Me.lblCompany.Text = "Company:"
Me.grpSorting.Controls.Add(Me.grpSortOptions)
Me.grpSorting.Controls.Add(Me.lblSortFields)
Me.grpSorting.Controls.Add(Me.cboSortField)
Me.grpSorting.Location = New System.Drawing.Point(12, 440)
Me.grpSorting.Name = "grpSorting"
Me.grpSorting.Size = New System.Drawing.Size(385, 80)
Me.grpSorting.TabIndex = 4
Me.grpSorting.TabStop = False
Me.grpSorting.Text = "Sorting"
'
'txtProcess
'grpSortOptions
'
Me.txtProcess.Location = New System.Drawing.Point(70, 45)
Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(309, 20)
Me.txtProcess.TabIndex = 3
Me.grpSortOptions.Controls.Add(Me.optSortAsc)
Me.grpSortOptions.Controls.Add(Me.optSortDesc)
Me.grpSortOptions.Location = New System.Drawing.Point(162, 19)
Me.grpSortOptions.Name = "grpSortOptions"
Me.grpSortOptions.Size = New System.Drawing.Size(189, 43)
Me.grpSortOptions.TabIndex = 3
Me.grpSortOptions.TabStop = False
Me.grpSortOptions.Text = "Sort Options"
'
'lblProcess
'optSortAsc
'
Me.lblProcess.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(11, 48)
Me.lblProcess.Name = "lblProcess"
Me.lblProcess.Size = New System.Drawing.Size(48, 13)
Me.lblProcess.TabIndex = 2
Me.lblProcess.Text = "Process:"
Me.optSortAsc.AutoSize = True
Me.optSortAsc.Location = New System.Drawing.Point(6, 17)
Me.optSortAsc.Name = "optSortAsc"
Me.optSortAsc.Size = New System.Drawing.Size(75, 17)
Me.optSortAsc.TabIndex = 0
Me.optSortAsc.TabStop = True
Me.optSortAsc.Text = "Ascending"
Me.optSortAsc.UseVisualStyleBackColor = True
'
'lblName
'optSortDesc
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(11, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 0
Me.lblName.Text = "Name:"
Me.optSortDesc.AutoSize = True
Me.optSortDesc.Location = New System.Drawing.Point(90, 17)
Me.optSortDesc.Name = "optSortDesc"
Me.optSortDesc.Size = New System.Drawing.Size(82, 17)
Me.optSortDesc.TabIndex = 1
Me.optSortDesc.TabStop = True
Me.optSortDesc.Text = "Descending"
Me.optSortDesc.UseVisualStyleBackColor = True
'
'txtName
'lblSortFields
'
Me.txtName.Location = New System.Drawing.Point(70, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(309, 20)
Me.txtName.TabIndex = 1
Me.lblSortFields.AutoSize = True
Me.lblSortFields.Location = New System.Drawing.Point(41, 19)
Me.lblSortFields.Name = "lblSortFields"
Me.lblSortFields.Size = New System.Drawing.Size(80, 13)
Me.lblSortFields.TabIndex = 1
Me.lblSortFields.Text = "Available Fields"
'
'cboSortField
'
Me.cboSortField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboSortField.FormattingEnabled = True
Me.cboSortField.Location = New System.Drawing.Point(6, 35)
Me.cboSortField.Name = "cboSortField"
Me.cboSortField.Size = New System.Drawing.Size(150, 21)
Me.cboSortField.TabIndex = 2
'
'chkTag
'
Me.chkTag.AutoSize = True
Me.chkTag.Location = New System.Drawing.Point(12, 213)
Me.chkTag.Name = "chkTag"
Me.chkTag.Size = New System.Drawing.Size(45, 17)
Me.chkTag.TabIndex = 2
Me.chkTag.Text = "Tag"
Me.chkTag.UseVisualStyleBackColor = True
'
'chkGameInfo
'
Me.chkGameInfo.AutoSize = True
Me.chkGameInfo.Location = New System.Drawing.Point(12, 12)
Me.chkGameInfo.Name = "chkGameInfo"
Me.chkGameInfo.Size = New System.Drawing.Size(109, 17)
Me.chkGameInfo.TabIndex = 0
Me.chkGameInfo.Text = "Game Information"
Me.chkGameInfo.UseVisualStyleBackColor = True
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(12, 531)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(249, 13)
Me.Label1.TabIndex = 5
Me.Label1.Text = "* Indicates a field that may give unexpected results."
'
'frmFilter
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(409, 516)
Me.ClientSize = New System.Drawing.Size(409, 561)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.grpSorting)
Me.Controls.Add(Me.chkTag)
Me.Controls.Add(Me.grpGameFilter)
Me.Controls.Add(Me.chkGameInfo)
Me.Controls.Add(Me.grpTagFilter)
Me.Controls.Add(Me.btnOK)
Me.Controls.Add(Me.optTag)
Me.Controls.Add(Me.optGameInfo)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
@@ -300,13 +441,16 @@ Partial Class frmFilter
Me.grpTagOptions.ResumeLayout(False)
Me.grpGameFilter.ResumeLayout(False)
Me.grpGameFilter.PerformLayout()
Me.grpGameInfoOptions.ResumeLayout(False)
CType(Me.numFilter, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpFilterType.ResumeLayout(False)
Me.grpSorting.ResumeLayout(False)
Me.grpSorting.PerformLayout()
Me.grpSortOptions.ResumeLayout(False)
Me.grpSortOptions.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents optGameInfo As System.Windows.Forms.RadioButton
Friend WithEvents optTag As System.Windows.Forms.RadioButton
Friend WithEvents grpTagFilter As System.Windows.Forms.GroupBox
Friend WithEvents grpTagOptions As System.Windows.Forms.GroupBox
Friend WithEvents optAll As System.Windows.Forms.RadioButton
@@ -315,17 +459,31 @@ Partial Class frmFilter
Friend WithEvents lblTags As System.Windows.Forms.Label
Friend WithEvents btnRemove As System.Windows.Forms.Button
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents lstFilter As System.Windows.Forms.ListBox
Friend WithEvents lstTagFilter As System.Windows.Forms.ListBox
Friend WithEvents lstTags As System.Windows.Forms.ListBox
Friend WithEvents btnOK As System.Windows.Forms.Button
Friend WithEvents grpGameFilter As System.Windows.Forms.GroupBox
Friend WithEvents txtProcess As System.Windows.Forms.TextBox
Friend WithEvents lblProcess As System.Windows.Forms.Label
Friend WithEvents lblName As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents txtCompany As System.Windows.Forms.TextBox
Friend WithEvents lblCompany As System.Windows.Forms.Label
Friend WithEvents grpGameInfoOptions As System.Windows.Forms.GroupBox
Friend WithEvents txtStringFilter As System.Windows.Forms.TextBox
Friend WithEvents grpFilterType As System.Windows.Forms.GroupBox
Friend WithEvents optOr As System.Windows.Forms.RadioButton
Friend WithEvents optAnd As System.Windows.Forms.RadioButton
Friend WithEvents grpSorting As GroupBox
Friend WithEvents optSortDesc As RadioButton
Friend WithEvents optSortAsc As RadioButton
Friend WithEvents cboSortField As ComboBox
Friend WithEvents chkTag As CheckBox
Friend WithEvents chkGameInfo As CheckBox
Friend WithEvents cboFilterField As ComboBox
Friend WithEvents lstFilter As ListBox
Friend WithEvents btnAddFilter As Button
Friend WithEvents btnRemoveFilter As Button
Friend WithEvents lblCurrentFilters As Label
Friend WithEvents lblFilterData As Label
Friend WithEvents lblFields As Label
Friend WithEvents cboNumericOps As ComboBox
Friend WithEvents numFilter As NumericUpDown
Friend WithEvents cboBoolFilter As ComboBox
Friend WithEvents lblSortFields As Label
Friend WithEvents Label1 As Label
Friend WithEvents grpSortOptions As GroupBox
End Class
+454 -51
View File
@@ -3,36 +3,74 @@
Public Class frmFilter
Public Enum eFilterType As Integer
NoFilter = 1
BaseFilter = 1
AnyTag = 2
AllTags = 3
NoTags = 4
FieldAnd = 5
FieldOr = 6
End Enum
Dim oTagFilters As New List(Of clsTag)
Dim hshStringFilters As New Hashtable
Dim eCurrentFilterType As eFilterType = eFilterType.AnyTag
Dim oGameFilters As New List(Of clsGameFilter)
Dim oValidFields As New List(Of clsGameFilterField)
Dim eCurrentFilterType As eFilterType = eFilterType.BaseFilter
Dim bAndOperator As Boolean = False
Dim bSortAsc As Boolean = True
Dim sSortField As String = "Name"
Dim hshTags As New Hashtable
Dim bShutdown As Boolean = False
Public ReadOnly Property StringFilters As Hashtable
Public Property GameFilters As List(Of clsGameFilter)
Get
Return hshStringFilters
Return oGameFilters
End Get
Set(value As List(Of clsGameFilter))
oGameFilters = value
End Set
End Property
Public ReadOnly Property TagFilters As List(Of clsTag)
Public Property TagFilters As List(Of clsTag)
Get
Return oTagFilters
End Get
Set(value As List(Of clsTag))
oTagFilters = value
End Set
End Property
Public ReadOnly Property FilterType As eFilterType
Public Property FilterType As eFilterType
Get
Return eCurrentFilterType
End Get
Set(value As eFilterType)
eCurrentFilterType = value
End Set
End Property
Public Property AndOperator As Boolean
Get
Return bAndOperator
End Get
Set(value As Boolean)
bAndOperator = value
End Set
End Property
Public Property SortAsc As Boolean
Get
Return bSortAsc
End Get
Set(value As Boolean)
bSortAsc = value
End Set
End Property
Public Property SortField As String
Get
Return sSortField
End Get
Set(value As String)
sSortField = value
End Set
End Property
Private Sub AddTag()
@@ -41,7 +79,7 @@ Public Class frmFilter
If lstTags.SelectedItems.Count = 1 Then
oData = lstTags.SelectedItems(0)
lstFilter.Items.Add(oData)
lstTagFilter.Items.Add(oData)
lstTags.Items.Remove(oData)
ElseIf lstTags.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
@@ -51,7 +89,7 @@ Public Class frmFilter
Next
For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Add(kp)
lstTagFilter.Items.Add(kp)
lstTags.Items.Remove(kp)
Next
End If
@@ -62,26 +100,173 @@ Public Class frmFilter
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
If lstFilter.SelectedItems.Count = 1 Then
oData = lstFilter.SelectedItems(0)
lstFilter.Items.Remove(oData)
If lstTagFilter.SelectedItems.Count = 1 Then
oData = lstTagFilter.SelectedItems(0)
lstTagFilter.Items.Remove(oData)
lstTags.Items.Add(oData)
ElseIf lstFilter.SelectedItems.Count > 1 Then
ElseIf lstTagFilter.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstFilter.SelectedItems
For Each oData In lstTagFilter.SelectedItems
oTags.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Remove(kp)
lstTagFilter.Items.Remove(kp)
lstTags.Items.Add(kp)
Next
End If
End Sub
Private Sub LoadData()
Private Sub LoadFilterFields()
Dim oField As clsGameFilterField
'Name
oField = New clsGameFilterField
oField.FieldName = "Name"
oField.FriendlyFieldName = frmFilter_FieldName
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Process
oField = New clsGameFilterField
oField.FieldName = "Process"
oField.FriendlyFieldName = frmFilter_FieldProcess
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Parameter
oField = New clsGameFilterField
oField.FieldName = "Parameter"
oField.FriendlyFieldName = frmFilter_FieldParameter
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Save Path
oField = New clsGameFilterField
oField.FieldName = "Path"
oField.FriendlyFieldName = frmFilter_FieldPath
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Include Items
oField = New clsGameFilterField
oField.FieldName = "FileType"
oField.FriendlyFieldName = frmFilter_FieldFileType
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Exclude Items
oField = New clsGameFilterField
oField.FieldName = "ExcludeList"
oField.FriendlyFieldName = frmFilter_FieldExcludeList
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Save Entire Folder
oField = New clsGameFilterField
oField.FieldName = "FolderSave"
oField.FriendlyFieldName = frmFilter_FieldFolderSave
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Delete Folder on Restore
oField = New clsGameFilterField
oField.FieldName = "CleanFolder"
oField.FriendlyFieldName = frmFilter_FieldCleanFolder
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Save Multiple Backups
oField = New clsGameFilterField
oField.FieldName = "TimeStamp"
oField.FriendlyFieldName = frmFilter_FieldTimeStamp
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Backup Limit
oField = New clsGameFilterField
oField.FieldName = "BackupLimit"
oField.FriendlyFieldName = frmFilter_FieldBackupLimit
oField.Type = clsGameFilterField.eDataType.fNumeric
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Game Path
oField = New clsGameFilterField
oField.FieldName = "ProcessPath"
oField.FriendlyFieldName = frmFilter_FieldProcessPath
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Company
oField = New clsGameFilterField
oField.FieldName = "Company"
oField.FriendlyFieldName = frmFilter_FieldCompany
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Version
oField = New clsGameFilterField
oField.FieldName = "Version"
oField.FriendlyFieldName = frmFilter_FieldVersion
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Icon
oField = New clsGameFilterField
oField.FieldName = "Icon"
oField.FriendlyFieldName = frmFilter_FieldIcon
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Hours
oField = New clsGameFilterField
oField.FieldName = "Hours"
oField.FriendlyFieldName = frmFilter_FieldHours
oField.Type = clsGameFilterField.eDataType.fNumeric
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Enabled
oField = New clsGameFilterField
oField.FieldName = "Enabled"
oField.FriendlyFieldName = frmFilter_FieldEnabled
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Monitor Only
oField = New clsGameFilterField
oField.FieldName = "MonitorOnly"
oField.FriendlyFieldName = frmFilter_FieldMonitorOnly
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
End Sub
Private Sub LoadTagData()
Dim oTag As clsTag
Dim oData As KeyValuePair(Of String, String)
@@ -90,12 +275,13 @@ Public Class frmFilter
'Handle Lists
lstTags.Items.Clear()
lstFilter.Items.Clear()
lstTagFilter.Items.Clear()
lstTags.ValueMember = "Key"
lstTags.DisplayMember = "Value"
lstFilter.ValueMember = "Key"
lstFilter.DisplayMember = "Value"
lstTagFilter.ValueMember = "Key"
lstTagFilter.DisplayMember = "Value"
For Each de As DictionaryEntry In hshTags
oTag = DirectCast(de.Value, clsTag)
@@ -105,32 +291,140 @@ Public Class frmFilter
End Sub
Private Sub LoadExistingFilters()
Dim sFilter As String = String.Empty
Dim oListTag As KeyValuePair(Of String, String)
'Game Filters
If bAndOperator Then
optAnd.Checked = True
Else
optOr.Checked = True
End If
If oGameFilters.Count > 0 Then
chkGameInfo.Checked = True
For Each oFilter As clsGameFilter In oGameFilters
Select Case oFilter.Field.Type
Case clsGameFilterField.eDataType.fString
sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """"
Case clsGameFilterField.eDataType.fNumeric
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select
lstFilter.Items.Add(New KeyValuePair(Of clsGameFilter, String)(oFilter, sFilter))
Next
End If
'Tag Filters
If oTagFilters.Count > 0 Then
chkTag.Checked = True
For Each oTag As clsTag In oTagFilters
oListTag = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name)
lstTagFilter.Items.Add(oListTag)
lstTags.Items.Remove(oListTag)
Next
If eCurrentFilterType = eFilterType.AllTags Then
optAll.Checked = True
Else
optAny.Checked = True
End If
End If
'Sorting
cboSortField.SelectedValue = sSortField
If bSortAsc Then
optSortAsc.Checked = True
Else
optSortDesc.Checked = True
End If
End Sub
Private Sub ChangeFilterMode()
Dim oFilterType As clsGameFilterField.eDataType = DirectCast(cboFilterField.SelectedValue, clsGameFilterField).Type
'Reset
cboNumericOps.SelectedIndex = 0
cboBoolFilter.SelectedIndex = 0
numFilter.Value = 0
txtStringFilter.Text = String.Empty
'Reset Visibilty
cboBoolFilter.Visible = False
cboNumericOps.Visible = False
numFilter.Visible = False
txtStringFilter.Visible = False
'Set Visiblity
Select Case oFilterType
Case clsGameFilterField.eDataType.fString
txtStringFilter.Visible = True
Case clsGameFilterField.eDataType.fNumeric
cboNumericOps.Visible = True
numFilter.Visible = True
txtStringFilter.Visible = False
Case clsGameFilterField.eDataType.fBool
cboBoolFilter.Visible = True
End Select
End Sub
Private Sub AddFilter()
Dim oFilter As New clsGameFilter
Dim sFilter As String = String.Empty
'Build Filter
oFilter.ID = Guid.NewGuid.ToString.Split("-")(0)
oFilter.Field = cboFilterField.SelectedValue
Select Case oFilter.Field.Type
Case clsGameFilterField.eDataType.fString
oFilter.Data = txtStringFilter.Text
sFilter = oFilter.Field.FriendlyFieldName & " " & frmFilter_lstFilterContains & " """ & oFilter.Data & """"
Case clsGameFilterField.eDataType.fNumeric
oFilter.Data = numFilter.Value
oFilter.NumericOperator = DirectCast(cboNumericOps.SelectedValue, clsGameFilter.eNumericOperators)
sFilter = oFilter.Field.FriendlyFieldName & " " & oFilter.NumericOperatorAsString & " " & oFilter.Data
Case clsGameFilterField.eDataType.fBool
oFilter.Data = cboBoolFilter.SelectedValue
sFilter = oFilter.Field.FriendlyFieldName & " = " & oFilter.Data
End Select
oGameFilters.Add(oFilter)
lstFilter.Items.Add(New KeyValuePair(Of clsGameFilter, String)(oFilter, sFilter))
End Sub
Private Sub RemoveFilter()
Dim oFilter As Object
If lstFilter.SelectedIndex <> -1 Then
oFilter = lstFilter.SelectedItem
oGameFilters.Remove(DirectCast(oFilter, KeyValuePair(Of clsGameFilter, String)).Key)
lstFilter.Items.Remove(oFilter)
End If
End Sub
Private Sub GetFilters()
Dim oData As KeyValuePair(Of String, String)
Dim oTag As clsTag
If optGameInfo.Checked Then
'Set Filter Type
If optAnd.Checked Then
eCurrentFilterType = eFilterType.FieldAnd
Else
eCurrentFilterType = eFilterType.FieldOr
If chkGameInfo.Checked Then
'Set Filter Type(s)
eCurrentFilterType = eFilterType.BaseFilter
bAndOperator = optAnd.Checked
End If
'Set String Filter
If txtName.Text <> String.Empty Then
hshStringFilters.Add("Name", txtName.Text)
End If
If txtProcess.Text <> String.Empty Then
hshStringFilters.Add("Process", txtProcess.Text)
End If
If txtCompany.Text <> String.Empty Then
hshStringFilters.Add("Company", txtCompany.Text)
End If
Else
If chkTag.Checked Then
'Set Tags
For Each oData In lstFilter.Items
TagFilters.Clear()
For Each oData In lstTagFilter.Items
oTag = DirectCast(hshTags(oData.Value), clsTag)
TagFilters.Add(oTag)
Next
@@ -145,6 +439,72 @@ Public Class frmFilter
End If
End If
'Sorting
If optSortAsc.Checked Then
bSortAsc = True
Else
bSortAsc = False
End If
sSortField = cboSortField.SelectedValue
End Sub
Private Sub LoadCombos()
Dim oFilterFields As New List(Of KeyValuePair(Of clsGameFilterField, String))
Dim oSortFields As New List(Of KeyValuePair(Of String, String))
Dim oNumericOperators As New List(Of KeyValuePair(Of clsGameFilter.eNumericOperators, String))
Dim oBoolOperators As New List(Of KeyValuePair(Of Boolean, String))
'cboBoolFilter
cboBoolFilter.ValueMember = "Key"
cboBoolFilter.DisplayMember = "Value"
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(True, frmFilter_cboBoolFilterEnabled))
oBoolOperators.Add(New KeyValuePair(Of Boolean, String)(False, frmFilter_cboBoolFilterDisabled))
cboBoolFilter.DataSource = oBoolOperators
'cboNumericOps
cboNumericOps.ValueMember = "Key"
cboNumericOps.DisplayMember = "Value"
oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Equals, "="))
oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Greater, ">"))
oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.Lesser, "<"))
oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.GreaterEquals, ">="))
oNumericOperators.Add(New KeyValuePair(Of clsGameFilter.eNumericOperators, String)(clsGameFilter.eNumericOperators.LesserEquals, "<="))
cboNumericOps.DataSource = oNumericOperators
'cboFilterField
cboFilterField.ValueMember = "Key"
cboFilterField.DisplayMember = "Value"
For Each oField As clsGameFilterField In oValidFields
If oField.CheckStatus(clsGameFilterField.eFieldStatus.ValidFilter) Then
oFilterFields.Add(New KeyValuePair(Of clsGameFilterField, String)(oField, oField.FriendlyFieldName))
End If
Next
cboFilterField.DataSource = oFilterFields
'cboSortField
cboSortField.ValueMember = "Key"
cboSortField.DisplayMember = "Value"
For Each oField As clsGameFilterField In oValidFields
If oField.CheckStatus(clsGameFilterField.eFieldStatus.ValidSort) Then
oSortFields.Add(New KeyValuePair(Of String, String)(oField.FieldName, oField.FriendlyFieldName))
End If
Next
cboSortField.DataSource = oSortFields
'Select Defaults
cboNumericOps.SelectedIndex = 0
cboFilterField.SelectedIndex = 0
cboSortField.SelectedIndex = 0
End Sub
Private Sub SetForm()
@@ -154,10 +514,7 @@ Public Class frmFilter
'Set Form Text
optOr.Text = frmFilter_optOr
optAnd.Text = frmFilter_optAnd
lblCompany.Text = frmFilter_lblCompany
lblProcess.Text = frmFilter_lblProcess
lblName.Text = frmFilter_lblName
grpGameInfoOptions.Text = frmFilter_grpGameInfoOptions
grpFilterType.Text = frmFilter_grpFilterType
optAll.Text = frmFilter_optAll
optAny.Text = frmFilter_optAny
lblGameTags.Text = frmFilter_lblGameTags
@@ -166,14 +523,36 @@ Public Class frmFilter
btnAdd.Text = frmFilter_btnAdd
btnOK.Text = frmFilter_btnOK
grpTagOptions.Text = frmFilter_grpTagOptions
optTag.Text = frmFilter_optTag
optGameInfo.Text = frmFilter_optGameInfo
chkTag.Text = frmFilter_chkTag
chkGameInfo.Text = frmFilter_chkGameInfo
grpSorting.Text = frmFilter_grpSorting
lblSortFields.Text = frmFilter_lblSortsFields
optSortAsc.Text = frmFilter_optSortAsc
optSortDesc.Text = frmFilter_optSortDesc
btnAddFilter.Text = frmFilter_btnAddFilter
btnRemoveFilter.Text = frmFilter_btnRemoveFilter
lblCurrentFilters.Text = frmFilter_lblCurrentFilters
lblFields.Text = frmFilter_lblFields
lblFilterData.Text = frmFilter_lblFilterData
grpSortOptions.Text = frmFilter_grpSortOptions
'Defaults
optOr.Checked = True
optSortAsc.Checked = True
grpGameFilter.Enabled = False
grpTagFilter.Enabled = False
'Init Game Filter
lstFilter.ValueMember = "Key"
lstFilter.DisplayMember = "Value"
End Sub
Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
optGameInfo.Checked = True
LoadData()
LoadFilterFields()
LoadCombos()
LoadTagData()
LoadExistingFilters()
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
@@ -196,13 +575,37 @@ Public Class frmFilter
End If
End Sub
Private Sub optGameInfo_Click(sender As Object, e As EventArgs) Handles optGameInfo.Click, optTag.Click
If optGameInfo.Checked = True Then
Private Sub chkGameInfo_CheckedChanged(sender As Object, e As EventArgs) Handles chkGameInfo.CheckedChanged
If chkGameInfo.Checked Then
grpGameFilter.Enabled = True
grpTagFilter.Enabled = False
Else
optOr.Checked = True
grpGameFilter.Enabled = False
grpTagFilter.Enabled = True
oGameFilters.Clear()
lstFilter.Items.Clear()
End If
End Sub
Private Sub chkTag_CheckedChanged(sender As Object, e As EventArgs) Handles chkTag.CheckedChanged
If chkTag.Checked Then
grpTagFilter.Enabled = True
Else
grpTagFilter.Enabled = False
oTagFilters.Clear()
LoadTagData()
End If
End Sub
Private Sub btnAddFilter_Click(sender As Object, e As EventArgs) Handles btnAddFilter.Click
AddFilter()
End Sub
Private Sub btnRemoveFilter_Click(sender As Object, e As EventArgs) Handles btnRemoveFilter.Click
RemoveFilter()
End Sub
Private Sub cboFilterField_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFilterField.SelectedIndexChanged
ChangeFilterMode()
End Sub
End Class
+206 -122
View File
@@ -28,6 +28,11 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox()
Me.txtParameter = New System.Windows.Forms.TextBox()
Me.lblParameter = New System.Windows.Forms.Label()
Me.chkCleanFolder = New System.Windows.Forms.CheckBox()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
Me.btnExclude = New System.Windows.Forms.Button()
Me.btnInclude = New System.Windows.Forms.Button()
Me.txtID = New System.Windows.Forms.TextBox()
@@ -61,18 +66,17 @@ Partial Class frmGameManager
Me.lblHours = New System.Windows.Forms.Label()
Me.btnTags = New System.Windows.Forms.Button()
Me.grpStats = New System.Windows.Forms.GroupBox()
Me.cboRemoteBackup = New System.Windows.Forms.ComboBox()
Me.lblRestorePathData = New System.Windows.Forms.Label()
Me.lblBackupFileData = New System.Windows.Forms.Label()
Me.lblLocalBackupData = New System.Windows.Forms.Label()
Me.lblRestorePath = New System.Windows.Forms.Label()
Me.txtRestorePath = New System.Windows.Forms.TextBox()
Me.btnOpenRestorePath = New System.Windows.Forms.Button()
Me.btnOpenBackupFile = New System.Windows.Forms.Button()
Me.txtFileSize = New System.Windows.Forms.TextBox()
Me.btnDeleteBackup = New System.Windows.Forms.Button()
Me.lblFileSize = New System.Windows.Forms.Label()
Me.lblSync = New System.Windows.Forms.Label()
Me.txtCurrentBackup = New System.Windows.Forms.TextBox()
Me.lblCurrentBackup = New System.Windows.Forms.Label()
Me.txtLocalBackup = New System.Windows.Forms.TextBox()
Me.lblLastBackup = New System.Windows.Forms.Label()
Me.lblBackupFile = New System.Windows.Forms.Label()
Me.lblRemote = New System.Windows.Forms.Label()
Me.lblLocalData = New System.Windows.Forms.Label()
Me.btnMarkAsRestored = New System.Windows.Forms.Button()
Me.btnRestore = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
@@ -91,13 +95,18 @@ Partial Class frmGameManager
Me.cmsFile = New System.Windows.Forms.ToolStripMenuItem()
Me.txtQuickFilter = New System.Windows.Forms.TextBox()
Me.lblQuickFilter = New System.Windows.Forms.Label()
Me.cmsDeleteBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsDeleteOne = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.nudHours, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpStats.SuspendLayout()
Me.grpFilter.SuspendLayout()
Me.cmsImport.SuspendLayout()
Me.cmsDeleteBackup.SuspendLayout()
Me.SuspendLayout()
'
'btnAdd
@@ -125,26 +134,31 @@ Partial Class frmGameManager
'btnBackup
'
Me.btnBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnBackup.Location = New System.Drawing.Point(616, 525)
Me.btnBackup.Location = New System.Drawing.Point(616, 526)
Me.btnBackup.Name = "btnBackup"
Me.btnBackup.Size = New System.Drawing.Size(75, 23)
Me.btnBackup.TabIndex = 18
Me.btnBackup.TabIndex = 19
Me.btnBackup.Text = "&Backup"
Me.btnBackup.UseVisualStyleBackColor = True
'
'btnClose
'
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnClose.Location = New System.Drawing.Point(697, 525)
Me.btnClose.Location = New System.Drawing.Point(697, 526)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 19
Me.btnClose.TabIndex = 20
Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True
'
'grpConfig
'
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.txtParameter)
Me.grpConfig.Controls.Add(Me.lblParameter)
Me.grpConfig.Controls.Add(Me.chkCleanFolder)
Me.grpConfig.Controls.Add(Me.lblLimit)
Me.grpConfig.Controls.Add(Me.nudLimit)
Me.grpConfig.Controls.Add(Me.btnExclude)
Me.grpConfig.Controls.Add(Me.btnInclude)
Me.grpConfig.Controls.Add(Me.txtID)
@@ -168,12 +182,58 @@ Partial Class frmGameManager
Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration"
'
'txtParameter
'
Me.txtParameter.Location = New System.Drawing.Point(333, 45)
Me.txtParameter.Name = "txtParameter"
Me.txtParameter.Size = New System.Drawing.Size(150, 20)
Me.txtParameter.TabIndex = 7
'
'lblParameter
'
Me.lblParameter.AutoSize = True
Me.lblParameter.Location = New System.Drawing.Point(269, 48)
Me.lblParameter.Name = "lblParameter"
Me.lblParameter.Size = New System.Drawing.Size(58, 13)
Me.lblParameter.TabIndex = 6
Me.lblParameter.Text = "Parameter:"
'
'chkCleanFolder
'
Me.chkCleanFolder.AutoSize = True
Me.chkCleanFolder.Location = New System.Drawing.Point(329, 101)
Me.chkCleanFolder.Name = "chkCleanFolder"
Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17)
Me.chkCleanFolder.TabIndex = 13
Me.chkCleanFolder.Text = "Delete folder on restore"
Me.chkCleanFolder.UseVisualStyleBackColor = True
'
'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 = 16
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 = 15
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Visible = False
'
'btnExclude
'
Me.btnExclude.Location = New System.Drawing.Point(9, 125)
Me.btnExclude.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23)
Me.btnExclude.TabIndex = 13
Me.btnExclude.TabIndex = 11
Me.btnExclude.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True
'
@@ -192,7 +252,7 @@ Partial Class frmGameManager
Me.txtID.Location = New System.Drawing.Point(489, 19)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(30, 20)
Me.txtID.TabIndex = 16
Me.txtID.TabIndex = 0
Me.txtID.TabStop = False
Me.txtID.Visible = False
'
@@ -207,10 +267,10 @@ Partial Class frmGameManager
'
'btnProcessBrowse
'
Me.btnProcessBrowse.Location = New System.Drawing.Point(489, 45)
Me.btnProcessBrowse.Location = New System.Drawing.Point(225, 44)
Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnProcessBrowse.TabIndex = 7
Me.btnProcessBrowse.TabIndex = 5
Me.btnProcessBrowse.Text = "..."
Me.btnProcessBrowse.UseVisualStyleBackColor = True
'
@@ -243,18 +303,18 @@ Partial Class frmGameManager
'
'txtExclude
'
Me.txtExclude.Location = New System.Drawing.Point(363, 128)
Me.txtExclude.Location = New System.Drawing.Point(489, 122)
Me.txtExclude.Name = "txtExclude"
Me.txtExclude.Size = New System.Drawing.Size(156, 20)
Me.txtExclude.Size = New System.Drawing.Size(30, 20)
Me.txtExclude.TabIndex = 0
Me.txtExclude.TabStop = False
Me.txtExclude.Visible = False
'
'txtFileType
'
Me.txtFileType.Location = New System.Drawing.Point(363, 99)
Me.txtFileType.Location = New System.Drawing.Point(489, 99)
Me.txtFileType.Name = "txtFileType"
Me.txtFileType.Size = New System.Drawing.Size(156, 20)
Me.txtFileType.Size = New System.Drawing.Size(30, 20)
Me.txtFileType.TabIndex = 0
Me.txtFileType.TabStop = False
Me.txtFileType.Visible = False
@@ -264,9 +324,9 @@ Partial Class frmGameManager
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(146, 17)
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 14
Me.chkTimeStamp.Text = "Time stamp each backup"
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
@@ -275,7 +335,7 @@ Partial Class frmGameManager
Me.chkFolderSave.Location = New System.Drawing.Point(190, 101)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 11
Me.chkFolderSave.TabIndex = 12
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
@@ -290,24 +350,24 @@ Partial Class frmGameManager
'
Me.txtProcess.Location = New System.Drawing.Point(69, 45)
Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(414, 20)
Me.txtProcess.TabIndex = 6
Me.txtProcess.Size = New System.Drawing.Size(150, 20)
Me.txtProcess.TabIndex = 4
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(69, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(414, 20)
Me.txtName.TabIndex = 5
Me.txtName.TabIndex = 3
'
'chkMonitorOnly
'
Me.chkMonitorOnly.AutoSize = True
Me.chkMonitorOnly.Location = New System.Drawing.Point(362, 340)
Me.chkMonitorOnly.Name = "chkMonitorOnly"
Me.chkMonitorOnly.Size = New System.Drawing.Size(145, 17)
Me.chkMonitorOnly.Size = New System.Drawing.Size(83, 17)
Me.chkMonitorOnly.TabIndex = 11
Me.chkMonitorOnly.Text = "Monitor only (No backup)"
Me.chkMonitorOnly.Text = "Monitor only"
Me.chkMonitorOnly.UseVisualStyleBackColor = True
'
'grpExtra
@@ -468,18 +528,17 @@ Partial Class frmGameManager
'grpStats
'
Me.grpStats.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpStats.Controls.Add(Me.cboRemoteBackup)
Me.grpStats.Controls.Add(Me.lblRestorePathData)
Me.grpStats.Controls.Add(Me.lblBackupFileData)
Me.grpStats.Controls.Add(Me.lblLocalBackupData)
Me.grpStats.Controls.Add(Me.lblRestorePath)
Me.grpStats.Controls.Add(Me.txtRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenBackupFile)
Me.grpStats.Controls.Add(Me.txtFileSize)
Me.grpStats.Controls.Add(Me.btnDeleteBackup)
Me.grpStats.Controls.Add(Me.lblFileSize)
Me.grpStats.Controls.Add(Me.lblSync)
Me.grpStats.Controls.Add(Me.txtCurrentBackup)
Me.grpStats.Controls.Add(Me.lblCurrentBackup)
Me.grpStats.Controls.Add(Me.txtLocalBackup)
Me.grpStats.Controls.Add(Me.lblLastBackup)
Me.grpStats.Controls.Add(Me.lblBackupFile)
Me.grpStats.Controls.Add(Me.lblRemote)
Me.grpStats.Controls.Add(Me.lblLocalData)
Me.grpStats.Location = New System.Drawing.Point(247, 365)
Me.grpStats.Name = "grpStats"
Me.grpStats.Size = New System.Drawing.Size(525, 154)
@@ -487,6 +546,48 @@ Partial Class frmGameManager
Me.grpStats.TabStop = False
Me.grpStats.Text = "Backup Information"
'
'cboRemoteBackup
'
Me.cboRemoteBackup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboRemoteBackup.FormattingEnabled = True
Me.cboRemoteBackup.Location = New System.Drawing.Point(96, 24)
Me.cboRemoteBackup.Name = "cboRemoteBackup"
Me.cboRemoteBackup.Size = New System.Drawing.Size(387, 21)
Me.cboRemoteBackup.TabIndex = 12
'
'lblRestorePathData
'
Me.lblRestorePathData.AutoEllipsis = True
Me.lblRestorePathData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.lblRestorePathData.Location = New System.Drawing.Point(96, 98)
Me.lblRestorePathData.Name = "lblRestorePathData"
Me.lblRestorePathData.Size = New System.Drawing.Size(387, 20)
Me.lblRestorePathData.TabIndex = 7
Me.lblRestorePathData.Tag = "wipe"
Me.lblRestorePathData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblBackupFileData
'
Me.lblBackupFileData.AutoEllipsis = True
Me.lblBackupFileData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.lblBackupFileData.Location = New System.Drawing.Point(96, 73)
Me.lblBackupFileData.Name = "lblBackupFileData"
Me.lblBackupFileData.Size = New System.Drawing.Size(387, 20)
Me.lblBackupFileData.TabIndex = 6
Me.lblBackupFileData.Tag = "wipe"
Me.lblBackupFileData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblLocalBackupData
'
Me.lblLocalBackupData.AutoEllipsis = True
Me.lblLocalBackupData.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.lblLocalBackupData.Location = New System.Drawing.Point(96, 49)
Me.lblLocalBackupData.Name = "lblLocalBackupData"
Me.lblLocalBackupData.Size = New System.Drawing.Size(387, 20)
Me.lblLocalBackupData.TabIndex = 5
Me.lblLocalBackupData.Tag = "wipe"
Me.lblLocalBackupData.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblRestorePath
'
Me.lblRestorePath.AutoSize = True
@@ -496,122 +597,77 @@ Partial Class frmGameManager
Me.lblRestorePath.TabIndex = 3
Me.lblRestorePath.Text = "Restore Path:"
'
'txtRestorePath
'
Me.txtRestorePath.Location = New System.Drawing.Point(96, 99)
Me.txtRestorePath.Name = "txtRestorePath"
Me.txtRestorePath.ReadOnly = True
Me.txtRestorePath.Size = New System.Drawing.Size(387, 20)
Me.txtRestorePath.TabIndex = 8
'
'btnOpenRestorePath
'
Me.btnOpenRestorePath.Location = New System.Drawing.Point(339, 125)
Me.btnOpenRestorePath.Location = New System.Drawing.Point(369, 125)
Me.btnOpenRestorePath.Name = "btnOpenRestorePath"
Me.btnOpenRestorePath.Size = New System.Drawing.Size(114, 23)
Me.btnOpenRestorePath.TabIndex = 12
Me.btnOpenRestorePath.TabIndex = 11
Me.btnOpenRestorePath.Text = "O&pen Restore Path"
Me.btnOpenRestorePath.UseVisualStyleBackColor = True
'
'btnOpenBackupFile
'
Me.btnOpenBackupFile.Location = New System.Drawing.Point(216, 125)
Me.btnOpenBackupFile.Location = New System.Drawing.Point(249, 125)
Me.btnOpenBackupFile.Name = "btnOpenBackupFile"
Me.btnOpenBackupFile.Size = New System.Drawing.Size(114, 23)
Me.btnOpenBackupFile.TabIndex = 11
Me.btnOpenBackupFile.TabIndex = 10
Me.btnOpenBackupFile.Text = "&Open Backup File"
Me.btnOpenBackupFile.UseVisualStyleBackColor = True
'
'txtFileSize
'
Me.txtFileSize.Location = New System.Drawing.Point(96, 74)
Me.txtFileSize.Name = "txtFileSize"
Me.txtFileSize.ReadOnly = True
Me.txtFileSize.Size = New System.Drawing.Size(387, 20)
Me.txtFileSize.TabIndex = 7
Me.txtFileSize.TabStop = False
'
'btnDeleteBackup
'
Me.btnDeleteBackup.Location = New System.Drawing.Point(96, 125)
Me.btnDeleteBackup.Location = New System.Drawing.Point(129, 125)
Me.btnDeleteBackup.Name = "btnDeleteBackup"
Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23)
Me.btnDeleteBackup.TabIndex = 10
Me.btnDeleteBackup.TabIndex = 8
Me.btnDeleteBackup.Text = "&Delete Backup"
Me.btnDeleteBackup.UseVisualStyleBackColor = True
'
'lblFileSize
'lblBackupFile
'
Me.lblFileSize.AutoSize = True
Me.lblFileSize.Location = New System.Drawing.Point(6, 77)
Me.lblFileSize.Name = "lblFileSize"
Me.lblFileSize.Size = New System.Drawing.Size(70, 13)
Me.lblFileSize.TabIndex = 2
Me.lblFileSize.Text = "Backup Size:"
Me.lblBackupFile.AutoSize = True
Me.lblBackupFile.Location = New System.Drawing.Point(6, 77)
Me.lblBackupFile.Name = "lblBackupFile"
Me.lblBackupFile.Size = New System.Drawing.Size(66, 13)
Me.lblBackupFile.TabIndex = 2
Me.lblBackupFile.Text = "Backup File:"
'
'lblSync
'lblRemote
'
Me.lblSync.AutoSize = True
Me.lblSync.Location = New System.Drawing.Point(6, 130)
Me.lblSync.Name = "lblSync"
Me.lblSync.Size = New System.Drawing.Size(62, 13)
Me.lblSync.TabIndex = 4
Me.lblSync.Text = "Up to Date!"
Me.lblSync.Visible = False
Me.lblRemote.AutoSize = True
Me.lblRemote.Location = New System.Drawing.Point(6, 27)
Me.lblRemote.Name = "lblRemote"
Me.lblRemote.Size = New System.Drawing.Size(73, 13)
Me.lblRemote.TabIndex = 0
Me.lblRemote.Text = "Backup Data:"
'
'txtCurrentBackup
'lblLocalData
'
Me.txtCurrentBackup.Location = New System.Drawing.Point(96, 24)
Me.txtCurrentBackup.Name = "txtCurrentBackup"
Me.txtCurrentBackup.ReadOnly = True
Me.txtCurrentBackup.Size = New System.Drawing.Size(387, 20)
Me.txtCurrentBackup.TabIndex = 5
Me.txtCurrentBackup.TabStop = False
'
'lblCurrentBackup
'
Me.lblCurrentBackup.AutoSize = True
Me.lblCurrentBackup.Location = New System.Drawing.Point(6, 27)
Me.lblCurrentBackup.Name = "lblCurrentBackup"
Me.lblCurrentBackup.Size = New System.Drawing.Size(84, 13)
Me.lblCurrentBackup.TabIndex = 0
Me.lblCurrentBackup.Text = "Current Backup:"
'
'txtLocalBackup
'
Me.txtLocalBackup.Location = New System.Drawing.Point(96, 50)
Me.txtLocalBackup.Name = "txtLocalBackup"
Me.txtLocalBackup.ReadOnly = True
Me.txtLocalBackup.Size = New System.Drawing.Size(387, 20)
Me.txtLocalBackup.TabIndex = 6
Me.txtLocalBackup.TabStop = False
'
'lblLastBackup
'
Me.lblLastBackup.AutoSize = True
Me.lblLastBackup.Location = New System.Drawing.Point(6, 53)
Me.lblLastBackup.Name = "lblLastBackup"
Me.lblLastBackup.Size = New System.Drawing.Size(76, 13)
Me.lblLastBackup.TabIndex = 1
Me.lblLastBackup.Text = "Local Backup:"
Me.lblLocalData.AutoSize = True
Me.lblLocalData.Location = New System.Drawing.Point(6, 53)
Me.lblLocalData.Name = "lblLocalData"
Me.lblLocalData.Size = New System.Drawing.Size(62, 13)
Me.lblLocalData.TabIndex = 1
Me.lblLocalData.Text = "Local Data:"
'
'btnMarkAsRestored
'
Me.btnMarkAsRestored.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 525)
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 526)
Me.btnMarkAsRestored.Name = "btnMarkAsRestored"
Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23)
Me.btnMarkAsRestored.TabIndex = 16
Me.btnMarkAsRestored.TabIndex = 17
Me.btnMarkAsRestored.Text = "&Mark as Restored"
Me.btnMarkAsRestored.UseVisualStyleBackColor = True
'
'btnRestore
'
Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnRestore.Location = New System.Drawing.Point(535, 525)
Me.btnRestore.Location = New System.Drawing.Point(535, 526)
Me.btnRestore.Name = "btnRestore"
Me.btnRestore.Size = New System.Drawing.Size(75, 23)
Me.btnRestore.TabIndex = 17
Me.btnRestore.TabIndex = 18
Me.btnRestore.Text = "&Restore"
Me.btnRestore.UseVisualStyleBackColor = True
'
@@ -694,10 +750,10 @@ Partial Class frmGameManager
Me.optPendingRestores.AutoSize = True
Me.optPendingRestores.Location = New System.Drawing.Point(6, 64)
Me.optPendingRestores.Name = "optPendingRestores"
Me.optPendingRestores.Size = New System.Drawing.Size(122, 17)
Me.optPendingRestores.Size = New System.Drawing.Size(134, 17)
Me.optPendingRestores.TabIndex = 2
Me.optPendingRestores.TabStop = True
Me.optPendingRestores.Text = "New Saves Pending"
Me.optPendingRestores.Text = "New Backups Pending"
Me.optPendingRestores.UseVisualStyleBackColor = True
'
'optAllGames
@@ -764,6 +820,25 @@ Partial Class frmGameManager
Me.lblQuickFilter.TabIndex = 1
Me.lblQuickFilter.Text = "Quick Filter:"
'
'cmsDeleteBackup
'
Me.cmsDeleteBackup.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsDeleteOne, Me.cmsDeleteAll})
Me.cmsDeleteBackup.Name = "cmsDeleteBackup"
Me.cmsDeleteBackup.ShowImageMargin = False
Me.cmsDeleteBackup.Size = New System.Drawing.Size(115, 48)
'
'cmsDeleteOne
'
Me.cmsDeleteOne.Name = "cmsDeleteOne"
Me.cmsDeleteOne.Size = New System.Drawing.Size(114, 22)
Me.cmsDeleteOne.Text = "&Selected File"
'
'cmsDeleteAll
'
Me.cmsDeleteAll.Name = "cmsDeleteAll"
Me.cmsDeleteAll.Size = New System.Drawing.Size(114, 22)
Me.cmsDeleteAll.Text = "&All Files"
'
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -798,6 +873,7 @@ Partial Class frmGameManager
Me.Text = "Game Manager"
Me.grpConfig.ResumeLayout(False)
Me.grpConfig.PerformLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpExtra.ResumeLayout(False)
Me.grpExtra.PerformLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
@@ -807,6 +883,7 @@ Partial Class frmGameManager
Me.grpFilter.ResumeLayout(False)
Me.grpFilter.PerformLayout()
Me.cmsImport.ResumeLayout(False)
Me.cmsDeleteBackup.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -848,14 +925,10 @@ Partial Class frmGameManager
Friend WithEvents btnIconBrowse As System.Windows.Forms.Button
Friend WithEvents txtIcon As System.Windows.Forms.TextBox
Friend WithEvents txtID As System.Windows.Forms.TextBox
Friend WithEvents txtCurrentBackup As System.Windows.Forms.TextBox
Friend WithEvents lblCurrentBackup As System.Windows.Forms.Label
Friend WithEvents txtLocalBackup As System.Windows.Forms.TextBox
Friend WithEvents lblLastBackup As System.Windows.Forms.Label
Friend WithEvents lblSync As System.Windows.Forms.Label
Friend WithEvents lblRemote As System.Windows.Forms.Label
Friend WithEvents lblLocalData As System.Windows.Forms.Label
Friend WithEvents chkEnabled As System.Windows.Forms.CheckBox
Friend WithEvents txtFileSize As System.Windows.Forms.TextBox
Friend WithEvents lblFileSize As System.Windows.Forms.Label
Friend WithEvents lblBackupFile As System.Windows.Forms.Label
Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button
Friend WithEvents btnRestore As System.Windows.Forms.Button
Friend WithEvents btnDeleteBackup As System.Windows.Forms.Button
@@ -871,7 +944,6 @@ Partial Class frmGameManager
Friend WithEvents btnInclude As System.Windows.Forms.Button
Friend WithEvents btnExclude As System.Windows.Forms.Button
Friend WithEvents lblRestorePath As Label
Friend WithEvents txtRestorePath As TextBox
Friend WithEvents btnImport As System.Windows.Forms.Button
Friend WithEvents btnExport As System.Windows.Forms.Button
Friend WithEvents cmsImport As System.Windows.Forms.ContextMenuStrip
@@ -879,4 +951,16 @@ Partial Class frmGameManager
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
Friend WithEvents chkCleanFolder As CheckBox
Friend WithEvents txtParameter As TextBox
Friend WithEvents lblParameter As Label
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">
<value>17, 17</value>
</metadata>
<metadata name="cmsDeleteBackup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>127, 17</value>
</metadata>
</root>
File diff suppressed because it is too large Load Diff
+62 -15
View File
@@ -2,8 +2,10 @@
Public Class frmGameTags
Dim sMonitorIDs As List(Of String)
Dim sGameName As String = String.Empty
Private sMonitorIDs As List(Of String)
Private sGameName As String = String.Empty
Private bNewMode As Boolean = False
Private oTagList As List(Of KeyValuePair(Of String, String))
Public Property IDList As List(Of String)
Get
@@ -23,6 +25,25 @@ Public Class frmGameTags
End Set
End Property
Public Property NewMode As Boolean
Get
Return bNewMode
End Get
Set(value As Boolean)
bNewMode = value
End Set
End Property
Public Property TagList As List(Of KeyValuePair(Of String, String))
Get
Return oTagList
End Get
Set(value As List(Of KeyValuePair(Of String, String)))
oTagList = value
End Set
End Property
Private Sub AddTag()
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
@@ -40,7 +61,7 @@ Public Class frmGameTags
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagAddBatch(oGameTags)
If Not bNewMode Then mgrGameTags.DoGameTagAddBatch(oGameTags)
lstGameTags.Items.Add(oData)
lstTags.Items.Remove(oData)
@@ -60,7 +81,7 @@ Public Class frmGameTags
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagAddBatch(oGameTags)
If Not bNewMode Then mgrGameTags.DoGameTagAddBatch(oGameTags)
lstGameTags.Items.Add(kp)
lstTags.Items.Remove(kp)
@@ -86,7 +107,7 @@ Public Class frmGameTags
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagDelete(oGameTags)
If Not bNewMode Then mgrGameTags.DoGameTagDelete(oGameTags)
lstGameTags.Items.Remove(oData)
lstTags.Items.Add(oData)
@@ -106,7 +127,7 @@ Public Class frmGameTags
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagDelete(oGameTags)
If Not bNewMode Then mgrGameTags.DoGameTagDelete(oGameTags)
lstGameTags.Items.Remove(kp)
lstTags.Items.Add(kp)
@@ -121,16 +142,8 @@ Public Class frmGameTags
Dim oTag As clsTag
Dim oData As KeyValuePair(Of String, String)
'Handle Data
'Load Tags
hshTags = mgrTags.ReadTags()
hshGameTags = mgrGameTags.GetTagsByGameMulti(IDList)
For Each de As DictionaryEntry In hshGameTags
oTag = DirectCast(de.Value, clsTag)
If hshTags.ContainsKey(oTag.Name) Then
hshTags.Remove(oTag.Name)
End If
Next
'Handle Lists
lstTags.Items.Clear()
@@ -141,11 +154,35 @@ Public Class frmGameTags
lstGameTags.ValueMember = "Key"
lstGameTags.DisplayMember = "Value"
If bNewMode Then
For Each kp As KeyValuePair(Of String, String) In oTagList
'We need to be sure the tags still exist if the "Setup Tags" form was used
If hshTags.ContainsKey(kp.Value) Then
lstGameTags.Items.Add(kp)
End If
Next
For Each kp As KeyValuePair(Of String, String) In oTagList
If hshTags.ContainsKey(kp.Value) Then
hshTags.Remove(kp.Value)
End If
Next
Else
hshGameTags = mgrGameTags.GetTagsByGameMulti(IDList)
For Each de As DictionaryEntry In hshGameTags
oTag = DirectCast(de.Value, clsTag)
If hshTags.ContainsKey(oTag.Name) Then
hshTags.Remove(oTag.Name)
End If
Next
For Each de As DictionaryEntry In hshGameTags
oTag = DirectCast(de.Value, clsTag)
oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name)
lstGameTags.Items.Add(oData)
Next
End If
For Each de As DictionaryEntry In hshTags
oTag = DirectCast(de.Value, clsTag)
@@ -155,6 +192,14 @@ Public Class frmGameTags
End Sub
Private Sub BuildTagList()
Dim oData As KeyValuePair(Of String, String)
oTagList.Clear()
For Each oData In lstGameTags.Items
oTagList.Add(oData)
Next
End Sub
Private Sub OpenTags()
Dim frm As New frmTags
frm.ShowDialog()
@@ -185,6 +230,7 @@ Public Class frmGameTags
End Sub
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
If bNewMode Then BuildTagList()
Me.Close()
End Sub
@@ -197,6 +243,7 @@ Public Class frmGameTags
End Sub
Private Sub btnOpenTags_Click(sender As Object, e As EventArgs) Handles btnOpenTags.Click
If bNewMode Then BuildTagList()
OpenTags()
End Sub
End Class
+3 -1
View File
@@ -108,7 +108,7 @@ Public Class frmIncludeExclude
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmIncludeExclude_BrowseSaveFolder, sDefaultFolder, False)
sNewPath = mgrCommon.OpenFolderBrowser("IE_Save_Path", frmIncludeExclude_BrowseSaveFolder, sDefaultFolder, False, False)
If sNewPath <> String.Empty Then txtRootFolder.Text = sNewPath
End Sub
@@ -226,6 +226,8 @@ Public Class frmIncludeExclude
sNewString = InputBox(frmIncludeExclude_RawEditInfo, mgrCommon.FormatString(frmIncludeExclude_RawEditTitle, FormName), sCurrentString)
If sNewString <> String.Empty Then
ParseBuilderString(sNewString)
Else
lstBuilder.Clear()
End If
End Sub
+17 -17
View File
@@ -75,7 +75,6 @@ Partial Class frmMain
Me.gMonHelpAbout = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonNotification = New System.Windows.Forms.ToolStripMenuItem()
Me.pbIcon = New System.Windows.Forms.PictureBox()
Me.btnLogToggle = New System.Windows.Forms.Button()
Me.lblGameTitle = New System.Windows.Forms.Label()
Me.lblLastAction = New System.Windows.Forms.Label()
Me.lblLastActionTitle = New System.Windows.Forms.Label()
@@ -222,6 +221,9 @@ Partial Class frmMain
'
'txtLog
'
Me.txtLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.txtLog.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.txtLog.Location = New System.Drawing.Point(12, 184)
Me.txtLog.MaxLength = 524288
@@ -229,7 +231,7 @@ Partial Class frmMain
Me.txtLog.Name = "txtLog"
Me.txtLog.ReadOnly = True
Me.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtLog.Size = New System.Drawing.Size(500, 177)
Me.txtLog.Size = New System.Drawing.Size(500, 186)
Me.txtLog.TabIndex = 10
Me.txtLog.TabStop = False
'
@@ -430,17 +432,11 @@ Partial Class frmMain
Me.pbIcon.TabIndex = 9
Me.pbIcon.TabStop = False
'
'btnLogToggle
'
Me.btnLogToggle.Location = New System.Drawing.Point(437, 155)
Me.btnLogToggle.Name = "btnLogToggle"
Me.btnLogToggle.Size = New System.Drawing.Size(75, 23)
Me.btnLogToggle.TabIndex = 7
Me.btnLogToggle.Text = "Show &Log"
Me.btnLogToggle.UseVisualStyleBackColor = True
'
'lblGameTitle
'
Me.lblGameTitle.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblGameTitle.AutoEllipsis = True
Me.lblGameTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblGameTitle.Location = New System.Drawing.Point(66, 36)
Me.lblGameTitle.Name = "lblGameTitle"
@@ -450,6 +446,8 @@ Partial Class frmMain
'
'lblLastAction
'
Me.lblLastAction.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblLastAction.AutoEllipsis = True
Me.lblLastAction.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLastAction.Location = New System.Drawing.Point(12, 165)
@@ -480,7 +478,8 @@ Partial Class frmMain
'
'btnCancelOperation
'
Me.btnCancelOperation.Location = New System.Drawing.Point(437, 126)
Me.btnCancelOperation.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancelOperation.Location = New System.Drawing.Point(437, 155)
Me.btnCancelOperation.Name = "btnCancelOperation"
Me.btnCancelOperation.Size = New System.Drawing.Size(75, 23)
Me.btnCancelOperation.TabIndex = 6
@@ -489,6 +488,8 @@ Partial Class frmMain
'
'lblStatus1
'
Me.lblStatus1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblStatus1.AutoEllipsis = True
Me.lblStatus1.Location = New System.Drawing.Point(66, 58)
Me.lblStatus1.Name = "lblStatus1"
@@ -497,6 +498,8 @@ Partial Class frmMain
'
'lblStatus2
'
Me.lblStatus2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblStatus2.AutoEllipsis = True
Me.lblStatus2.Location = New System.Drawing.Point(66, 74)
Me.lblStatus2.Name = "lblStatus2"
@@ -505,6 +508,8 @@ Partial Class frmMain
'
'lblStatus3
'
Me.lblStatus3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblStatus3.AutoEllipsis = True
Me.lblStatus3.Location = New System.Drawing.Point(66, 90)
Me.lblStatus3.Name = "lblStatus3"
@@ -533,17 +538,13 @@ Partial Class frmMain
Me.Controls.Add(Me.lblLastActionTitle)
Me.Controls.Add(Me.lblLastAction)
Me.Controls.Add(Me.lblGameTitle)
Me.Controls.Add(Me.btnLogToggle)
Me.Controls.Add(Me.pbIcon)
Me.Controls.Add(Me.gMonStatusStrip)
Me.Controls.Add(Me.gMonMainMenu)
Me.Controls.Add(Me.txtLog)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.KeyPreview = True
Me.MainMenuStrip = Me.gMonMainMenu
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmMain"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
@@ -586,7 +587,6 @@ Partial Class frmMain
Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents pbIcon As System.Windows.Forms.PictureBox
Friend WithEvents btnLogToggle As System.Windows.Forms.Button
Friend WithEvents lblGameTitle As System.Windows.Forms.Label
Friend WithEvents lblLastAction As System.Windows.Forms.Label
Friend WithEvents lblLastActionTitle As System.Windows.Forms.Label
+264 -103
View File
@@ -1,4 +1,5 @@
Imports GBM.My.Resources
Imports System.IO
'Name: frmMain
'Description: Game Backup Monitor Main Screen
@@ -38,12 +39,18 @@ Public Class frmMain
Private sPriorPath As String
Private sPriorCompany As String
Private sPriorVersion As String
Private iRestoreTimeOut As Integer
Private wState As FormWindowState = FormWindowState.Normal
'Developer Debug Flags
Private bProcessDebugMode As Boolean = False
WithEvents oFileWatcher As New System.IO.FileSystemWatcher
WithEvents oFileWatcher As New FileSystemWatcher
'Timers - There may only be one System.Windows.Forms.Timer and it must be tmScanTimer.
WithEvents tmScanTimer As New Timer
WithEvents tmRestoreCheck As New System.Timers.Timer
WithEvents tmFileWatcherQueue As New System.Timers.Timer
Public WithEvents oProcess As New mgrProcesses
Public WithEvents oBackup As New mgrBackup
@@ -51,6 +58,7 @@ Public Class frmMain
Public hshScanList As Hashtable
Public oSettings As New mgrSettings
Delegate Sub UpdateNotifierCallBack(ByVal iCount As Integer)
Delegate Sub UpdateLogCallBack(ByVal sLogUpdate As String, ByVal bTrayUpdate As Boolean, ByVal objIcon As System.Windows.Forms.ToolTipIcon, ByVal bTimeStamp As Boolean)
Delegate Sub WorkingGameInfoCallBack(ByVal sTitle As String, ByVal sStatus1 As String, ByVal sStatus2 As String, ByVal sStatus3 As String)
Delegate Sub UpdateStatusCallBack(ByVal sStatus As String)
@@ -77,7 +85,7 @@ Public Class frmMain
Dim sStatus3 As String
'Build Info
sStatus1 = IO.Path.GetFileName(oRestoreInfo.FileName)
sStatus1 = Path.GetFileName(oRestoreInfo.FileName)
sStatus2 = mgrCommon.FormatString(frmMain_UpdatedBy, New String() {oRestoreInfo.UpdatedBy, oRestoreInfo.DateUpdated})
If oRestoreInfo.AbsolutePath Then
sStatus3 = oRestoreInfo.RestorePath
@@ -99,7 +107,7 @@ Public Class frmMain
If oGame.AbsolutePath Then
sStatus2 = oGame.Path
Else
sStatus2 = oGame.ProcessPath & System.IO.Path.DirectorySeparatorChar & oGame.Path
sStatus2 = oGame.ProcessPath & Path.DirectorySeparatorChar & oGame.Path
End If
sStatus3 = String.Empty
@@ -157,8 +165,7 @@ Public Class frmMain
OperationEnded()
End Sub
Private Sub RunRestore(ByVal oRestoreList As List(Of clsGame))
Dim oBackupData As SortedList = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
Private Sub RunRestore(ByVal oRestoreList As Hashtable)
Dim oGame As clsGame
Dim oReadyList As New List(Of clsBackup)
Dim oRestoreInfo As clsBackup
@@ -168,9 +175,10 @@ Public Class frmMain
OperationStarted()
'Build Restore List
For Each oGame In oRestoreList
For Each de As DictionaryEntry In oRestoreList
bPathVerified = False
oRestoreInfo = oBackupData(oGame.Name)
oGame = DirectCast(de.Key, clsGame)
oRestoreInfo = DirectCast(de.Value, clsBackup)
If mgrRestore.CheckPath(oRestoreInfo, oGame, bTriggerReload) Then
bPathVerified = True
@@ -179,7 +187,7 @@ Public Class frmMain
End If
If bPathVerified Then
If oRestore.CheckRestorePrereq(oRestoreInfo) Then
If oRestore.CheckRestorePrereq(oRestoreInfo, oGame.CleanFolder) Then
oReadyList.Add(oRestoreInfo)
End If
End If
@@ -326,15 +334,17 @@ Public Class frmMain
End If
End Sub
Private Sub CheckRestore()
Dim slRestoreData As SortedList = mgrRestore.CompareManifests()
Dim sNotification As String
If slRestoreData.Count > 0 Then
If slRestoreData.Count > 1 Then
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationMulti, slRestoreData.Count)
Private Sub UpdateNotifier(ByVal iCount As Integer)
'Thread Safe
If Me.InvokeRequired = True Then
Dim d As New UpdateNotifierCallBack(AddressOf UpdateNotifier)
Me.Invoke(d, New Object() {iCount})
Else
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationSingle, slRestoreData.Count)
Dim sNotification As String
If iCount > 1 Then
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationMulti, iCount)
Else
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationSingle, iCount)
End If
gMonNotification.Image = Icon_Inbox
gMonTrayNotification.Image = Icon_Inbox
@@ -345,6 +355,149 @@ Public Class frmMain
End If
End Sub
Private Sub StartRestoreCheck()
iRestoreTimeOut = -1
tmRestoreCheck.Interval = 60000
tmRestoreCheck.AutoReset = True
tmRestoreCheck.Start()
AutoRestoreCheck()
End Sub
Private Sub AutoRestoreCheck()
Dim slRestoreData As SortedList = mgrRestore.CompareManifests()
Dim sNotReady As New List(Of String)
Dim sNotInstalled As New List(Of String)
Dim sNoCheckSum As New List(Of String)
Dim oBackup As clsBackup
Dim sFileName As String
Dim sExtractPath As String
Dim bFinished As Boolean = True
Dim hshRestore As Hashtable
Dim hshGames As Hashtable
Dim oGame As clsGame
Dim sGame As String
'Shut down the timer and bail out if there's nothing to do
If slRestoreData.Count = 0 Then
tmRestoreCheck.Stop()
Exit Sub
End If
If oSettings.AutoMark Or oSettings.AutoRestore Then
'Increment Timer
iRestoreTimeOut += 1
'Check backup files
For Each de As DictionaryEntry In slRestoreData
oBackup = DirectCast(de.Value, clsBackup)
'Check if backup file is ready to restore
If oBackup.CheckSum <> String.Empty Then
sFileName = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackup.FileName
If mgrHash.Generate_SHA256_Hash(sFileName) <> oBackup.CheckSum Then
sNotReady.Add(de.Key)
bFinished = False
End If
Else
sNoCheckSum.Add(de.Key)
End If
'Check if the restore location exists, if not we assume the game is not installed and should be auto-marked.
hshGames = mgrMonitorList.DoListGetbyName(de.Key)
If hshGames.Count = 1 Then
oGame = DirectCast(hshGames(0), clsGame)
mgrRestore.DoPathOverride(oBackup, oGame)
If oGame.ProcessPath <> String.Empty Then
oBackup.RelativeRestorePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oBackup.RestorePath
End If
End If
If oBackup.AbsolutePath Then
sExtractPath = oBackup.RestorePath
Else
sExtractPath = oBackup.RelativeRestorePath
End If
If Not Directory.Exists(sExtractPath) Then
If oSettings.AutoMark Then
If mgrManifest.DoGlobalManifestCheck(de.Key, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(de.Value, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(de.Value, mgrSQLite.Database.Local)
End If
End If
sNotInstalled.Add(de.Key)
End If
Next
'Remove any backup files that are not ready
For Each s As String In sNotReady
slRestoreData.Remove(s)
UpdateLog(mgrCommon.FormatString(frmMain_RestoreNotReady, s), False, ToolTipIcon.Info, True)
Next
'Remove any backup files that should not be automatically restored
For Each s As String In sNotInstalled
slRestoreData.Remove(s)
If oSettings.AutoMark Then
UpdateLog(mgrCommon.FormatString(frmMain_AutoMark, s), False, ToolTipIcon.Info, True)
Else
UpdateLog(mgrCommon.FormatString(frmMain_NoAutoMark, s), False, ToolTipIcon.Info, True)
End If
Next
For Each s As String In sNoCheckSum
slRestoreData.Remove(s)
UpdateLog(mgrCommon.FormatString(frmMain_NoCheckSum, s), False, ToolTipIcon.Info, True)
Next
'Automatically restore backup files
If oSettings.AutoRestore Then
If slRestoreData.Count > 0 Then
hshRestore = New Hashtable
sGame = String.Empty
For Each de As DictionaryEntry In slRestoreData
hshGames = mgrMonitorList.DoListGetbyName(de.Key)
If hshGames.Count = 1 Then
oGame = DirectCast(hshGames(0), clsGame)
sGame = oGame.CroppedName
hshRestore.Add(oGame, de.Value)
Else
UpdateLog(mgrCommon.FormatString(frmMain_AutoRestoreFailure, de.Key), False, ToolTipIcon.Info, True)
End If
Next
'Handle notifications
If oSettings.RestoreOnLaunch Then
If slRestoreData.Count > 1 Then
UpdateLog(mgrCommon.FormatString(frmMain_RestoreNotificationMulti, slRestoreData.Count), True, ToolTipIcon.Info, True)
Else
UpdateLog(mgrCommon.FormatString(frmMain_RestoreNotificationSingle, sGame), True, ToolTipIcon.Info, True)
End If
End If
RunRestore(hshRestore)
End If
End If
'Shutdown if we are finished
If bFinished Then
tmRestoreCheck.Stop()
End If
'Time out after 15 minutes
If iRestoreTimeOut = 15 Then
tmRestoreCheck.Stop()
End If
End If
'Update the menu notifier if we aren't using auto restore
If oSettings.RestoreOnLaunch And Not oSettings.AutoRestore Then
If slRestoreData.Count > 0 Then
UpdateNotifier(slRestoreData.Count)
End If
End If
End Sub
'Functions handling the display of game information
Private Sub SetIcon()
Dim sIcon As String
@@ -362,7 +515,7 @@ Public Class frmMain
End If
Try
fbBrowser.InitialDirectory = IO.Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
fbBrowser.InitialDirectory = Path.GetDirectoryName(oProcess.FoundProcess.MainModule.FileName)
Catch ex As Exception
fbBrowser.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
End Try
@@ -370,7 +523,7 @@ Public Class frmMain
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
sIcon = fbBrowser.FileName
If IO.File.Exists(sIcon) Then
If File.Exists(sIcon) Then
oProcess.GameInfo.Icon = sIcon
pbIcon.Image = Image.FromFile(sIcon)
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
@@ -380,7 +533,7 @@ Public Class frmMain
Private Sub ResetGameInfo(Optional ByVal bKeepInfo As Boolean = False)
If bKeepInfo And Not oProcess.GameInfo Is Nothing Then
lblGameTitle.Text = mgrCommon.FormatString(frmMain_LastGame, oProcess.GameInfo.CroppedName)
lblGameTitle.Text = mgrCommon.FormatString(frmMain_LastGame, oProcess.GameInfo.Name)
pbIcon.Image = oPriorImage
lblStatus1.Text = sPriorPath
lblStatus2.Text = sPriorCompany
@@ -445,7 +598,7 @@ Public Class frmMain
Else
bAllowIcon = True
bAllowDetails = True
lblGameTitle.Text = oProcess.GameInfo.CroppedName
lblGameTitle.Text = oProcess.GameInfo.Name
Try
Dim ic As Icon = System.Drawing.Icon.ExtractAssociatedIcon(oProcess.FoundProcess.MainModule.FileName)
@@ -461,7 +614,7 @@ Public Class frmMain
End Try
'Check for a custom icon & details
If IO.File.Exists(oProcess.GameInfo.Icon) Then
If File.Exists(oProcess.GameInfo.Icon) Then
pbIcon.Image = Image.FromFile(oProcess.GameInfo.Icon)
End If
If sFileName = String.Empty Then
@@ -650,6 +803,7 @@ Public Class frmMain
bProcessDebugMode = bDebugEnable
mgrCommon.ShowMessage(frmMain_CommandSucess, MsgBoxStyle.Exclamation)
End Select
Case Else
mgrCommon.ShowMessage(frmMain_ErrorCommandInvalid, sMainCommand, MsgBoxStyle.Exclamation)
End Select
@@ -659,12 +813,14 @@ Public Class frmMain
Private Sub OpenAbout()
Dim iProcessType As System.Reflection.ProcessorArchitecture = System.Reflection.AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
Dim sVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor
Dim sVersion As String = My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & "." & My.Application.Info.Version.Build
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.Revision
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSqliteVersion As String = oDatabase.ReportVersion
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, sSqliteVersion, sConstCopyright}, MsgBoxStyle.Information)
End Sub
Private Sub OpenTags()
@@ -754,8 +910,8 @@ Public Class frmMain
End Sub
Private Sub CheckForNewBackups()
If oSettings.RestoreOnLaunch Then
CheckRestore()
If oSettings.RestoreOnLaunch Or oSettings.AutoRestore Or oSettings.AutoMark Then
StartRestoreCheck()
End If
End Sub
@@ -768,32 +924,37 @@ Public Class frmMain
End Sub
Private Sub StartSyncWatcher()
If oSettings.Sync Then
oFileWatcher.EnableRaisingEvents = True
End If
End Sub
Private Sub StopSyncWatcher()
If oSettings.Sync Then
oFileWatcher.EnableRaisingEvents = False
End If
End Sub
Private Sub SetupSyncWatcher()
If oSettings.Sync Then
oFileWatcher.Path = oSettings.BackupFolder
oFileWatcher.Filter = "gbm.s3db"
oFileWatcher.NotifyFilter = IO.NotifyFilters.LastWrite
End If
oFileWatcher.NotifyFilter = NotifyFilters.LastWrite
End Sub
Private Sub HandleSyncWatcher() Handles oFileWatcher.Changed
Private Sub QueueSyncWatcher() Handles oFileWatcher.Changed
tmFileWatcherQueue.Stop()
tmFileWatcherQueue.AutoReset = False
tmFileWatcherQueue.Interval = 30000
tmFileWatcherQueue.Start()
End Sub
Private Sub HandleSyncWatcher() Handles tmFileWatcherQueue.Elapsed
tmFileWatcherQueue.Stop()
StopSyncWatcher()
If oSettings.Sync Then
UpdateLog(frmMain_MasterListChanged, False, ToolTipIcon.Info, True)
SyncGameSettings()
LoadGameSettings()
CheckForNewBackups()
End If
CheckForNewBackups()
StartSyncWatcher()
End Sub
Private Sub SyncGameSettings()
@@ -813,6 +974,13 @@ Public Class frmMain
Private Sub LoadAndVerify()
'If the default utility is missing we cannot continue
If Not oBackup.CheckForUtilities(mgrPath.Default7zLocation) Then
mgrCommon.ShowMessage(frmMain_Error7zip, MsgBoxStyle.Critical)
bInitFail = True
Exit Sub
End If
'Local Database Check
VerifyDBVersion(mgrSQLite.Database.Local)
LocalDatabaseCheck()
@@ -825,8 +993,8 @@ Public Class frmMain
If Not bFirstRun Then
'The application cannot continue if this fails
If Not VerifyBackupLocation() Then
bShutdown = True
Me.Close()
bInitFail = True
Exit Sub
End If
'Remote Database Check
@@ -857,50 +1025,27 @@ Public Class frmMain
End If
End If
'If the default utility is missing we cannot continue
If Not oBackup.CheckForUtilities(mgrPath.Default7zLocation) Then
mgrCommon.ShowMessage(frmMain_Error7zip, MsgBoxStyle.Critical)
bShutdown = True
Me.Close()
End If
End Sub
'Functions that handle buttons, menus and other GUI features on this form
Private Sub ToggleLog()
If bLogToggle = False Then
txtLog.Visible = True
'Unix Handler
If mgrCommon.IsUnix Then
Me.Size = New System.Drawing.Size(Me.Size.Width, 440)
Else
Me.Size = New System.Drawing.Size(Me.Size.Width, 425)
End If
bLogToggle = True
btnLogToggle.Text = frmMain_btnToggleLog_Hide
txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret()
Else
txtLog.Visible = False
Me.Size = New System.Drawing.Size(Me.Size.Width, 245)
bLogToggle = False
btnLogToggle.Text = frmMain_btnToggleLog_Show
End If
End Sub
Private Sub ToggleState()
'Toggle State with Tray Clicks
If Not bShowToggle Then
bShowToggle = True
Me.Visible = True
Me.WindowState = wState
Me.ShowInTaskbar = True
Me.Focus()
Else
If Me.CanFocus Then
bShowToggle = False
Me.Visible = False
wState = Me.WindowState
Me.WindowState = FormWindowState.Minimized
Me.ShowInTaskbar = False
Me.Visible = False
Else
gMonTray.ShowBalloonTip(5000, App_NameLong, App_ErrorFocus, ToolTipIcon.Info)
End If
End If
End Sub
@@ -991,7 +1136,7 @@ Public Class frmMain
End If
End Sub
Private Sub ToggleMenuEnable()
Private Sub ToggleMenuEnable(Optional ByVal bGameDetected As Boolean = False)
If bMenuEnabled Then
ToggleMenuItems(False, gMonFile)
ToggleMenuItems(False, gMonSetup)
@@ -1003,6 +1148,11 @@ Public Class frmMain
gMonNotification.Enabled = False
gMonTrayNotification.Enabled = False
gMonTraySettings.Enabled = False
If Not bGameDetected Then
gMonTrayMon.Enabled = False
gMonTrayShow.Enabled = False
gMonTrayExit.Enabled = False
End If
bMenuEnabled = False
Else
ToggleMenuItems(True, gMonFile)
@@ -1015,6 +1165,9 @@ Public Class frmMain
gMonNotification.Enabled = True
gMonTrayNotification.Enabled = True
gMonTraySettings.Enabled = True
gMonTrayMon.Enabled = True
gMonTrayShow.Enabled = True
gMonTrayExit.Enabled = True
bMenuEnabled = True
End If
End Sub
@@ -1082,7 +1235,7 @@ Public Class frmMain
txtLog.ScrollToCaret()
gMonTray.BalloonTipText = sLogUpdate
gMonTray.BalloonTipIcon = objIcon
If bTrayUpdate Then gMonTray.ShowBalloonTip(5000)
If bTrayUpdate Then gMonTray.ShowBalloonTip(10000)
End If
Application.DoEvents()
End Sub
@@ -1096,7 +1249,7 @@ Public Class frmMain
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"))
sLocation = mgrCommon.SaveFileBrowser("Log_File", 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)
@@ -1104,6 +1257,9 @@ Public Class frmMain
End Sub
Private Sub SetForm()
'Set Minimum Size
Me.MinimumSize = New Size(Me.Size.Width, Me.Size.Height - txtLog.Size.Height)
'Set Form Name
Me.Name = App_NameLong
@@ -1161,12 +1317,10 @@ Public Class frmMain
gMonStripAdminButton.ToolTipText = frmMain_RunningAsNormal
End If
btnCancelOperation.Visible = False
txtLog.Visible = False
lblLastActionTitle.Visible = False
lblLastAction.Text = String.Empty
pbTime.SizeMode = PictureBoxSizeMode.AutoSize
pbTime.Image = Icon_Clock
Me.Size = New System.Drawing.Size(Me.Size.Width, 245)
AddHandler mgrMonitorList.UpdateLog, AddressOf UpdateLog
ResetGameInfo()
End Sub
@@ -1196,7 +1350,7 @@ Public Class frmMain
ToggleMenuText()
End Sub
Private Sub PauseScan()
Private Sub PauseScan(Optional ByVal bGameDetected As Boolean = False)
If eCurrentStatus = eStatus.Running Then
StopSyncWatcher()
tmScanTimer.Stop()
@@ -1206,7 +1360,7 @@ Public Class frmMain
gMonTray.Icon = GBM_Tray_Detected
End If
ToggleMenuText()
ToggleMenuEnable()
ToggleMenuEnable(bGameDetected)
End Sub
Private Sub ResumeScan()
@@ -1261,9 +1415,9 @@ Public Class frmMain
Dim sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "/gbm"
Dim sDBLocation As String = sSettingsRoot & "/gbm.s3db"
If Not IO.Directory.Exists(sSettingsRoot) Then
If Not Directory.Exists(sSettingsRoot) Then
Try
IO.Directory.CreateDirectory(sSettingsRoot)
Directory.CreateDirectory(sSettingsRoot)
Catch ex As Exception
mgrCommon.ShowMessage(frmMain_ErrorSettingsFolder, ex.Message, MsgBoxStyle.Critical)
bShutdown = True
@@ -1271,7 +1425,7 @@ Public Class frmMain
End Try
End If
If Not IO.File.Exists(sDBLocation) Then bFirstRun = True
If Not File.Exists(sDBLocation) Then bFirstRun = True
End Sub
Private Sub VerifyDBVersion(ByVal iDB As mgrSQLite.Database)
@@ -1314,7 +1468,7 @@ Public Class frmMain
Private Sub CheckForSavedDuplicate()
For Each o As clsGame In oProcess.DuplicateList
If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower Then
If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower And o.Parameter = String.Empty Then
oProcess.GameInfo = o
oProcess.Duplicate = False
End If
@@ -1473,10 +1627,6 @@ Public Class frmMain
OpenGameManager(True)
End Sub
Private Sub btnLogToggle_Click(sender As Object, e As EventArgs) Handles btnLogToggle.Click
ToggleLog()
End Sub
Private Sub gMonStripSplitStatusButton_ButtonClick(sender As Object, e As EventArgs) Handles gMonStripStatusButton.Click
ScanToggle()
End Sub
@@ -1487,13 +1637,6 @@ Public Class frmMain
End If
End Sub
Private Sub gMonTray_BalloonTipClicked(sender As System.Object, e As System.EventArgs) Handles gMonTray.BalloonTipClicked
bShowToggle = True
Me.Visible = True
Me.ShowInTaskbar = True
Me.Focus()
End Sub
Private Sub btnCancelOperation_Click(sender As Object, e As EventArgs) Handles btnCancelOperation.Click
OperationCancel()
End Sub
@@ -1513,15 +1656,28 @@ Public Class frmMain
ShutdownApp()
End If
'Intercept Exit
Select Case e.CloseReason
Case CloseReason.UserClosing
If bShutdown = False Then
e.Cancel = True
If Not mgrCommon.IsUnix Then
bShowToggle = False
Me.Visible = False
wState = Me.WindowState
Me.WindowState = FormWindowState.Minimized
Me.ShowInTaskbar = False
Me.Visible = False
End If
End If
Case CloseReason.TaskManagerClosing, CloseReason.WindowsShutDown
'Do nothing and let the app close without warning
End Select
End Sub
Private Sub AutoRestoreEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmRestoreCheck.Elapsed
If eCurrentStatus <> eStatus.Paused Then
AutoRestoreCheck()
End If
End Sub
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
@@ -1531,7 +1687,7 @@ Public Class frmMain
Dim sErrorMessage As String = String.Empty
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode, bProcessDebugMode) Then
PauseScan()
PauseScan(True)
If bNeedsPath Then
bContinue = False
@@ -1643,6 +1799,7 @@ Public Class frmMain
SetForm()
VerifyGameDataPath()
LoadAndVerify()
If Not bInitFail Then
VerifyCustomPathVariables()
If oSettings.StartToTray And Not mgrCommon.IsUnix Then
@@ -1659,11 +1816,6 @@ Public Class frmMain
HandleScan()
CheckForNewBackups()
Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
bInitFail = True
End If
End Try
'Unix Handler
If mgrCommon.IsUnix Then
@@ -1671,7 +1823,12 @@ Public Class frmMain
Else
Me.gMonTray.Visible = True
End If
End If
Catch ex As Exception
If mgrCommon.ShowMessage(frmMain_ErrorInitFailure, ex.Message, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
bInitFail = True
End If
End Try
End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
@@ -1685,14 +1842,18 @@ Public Class frmMain
End If
End Sub
Private Sub txtGameInfo_Enter(sender As Object, e As EventArgs)
btnLogToggle.Focus()
End Sub
Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Oemtilde AndAlso e.Modifiers = Keys.Control Then
OpenDevConsole()
End If
End Sub
'This event handler lets the user clear focus from the log by clicking anywhere on the form.
'Due to txtLog being the only focusable control in most cases, it's impossible for it to lose focus unless a change is forced.
Private Sub ClearLogFocus(sender As Object, e As EventArgs) Handles MyBase.Click, lblGameTitle.Click, lblStatus1.Click, lblStatus2.Click,
lblStatus3.Click, pbTime.Click, lblTimeSpent.Click, lblLastActionTitle.Click, lblLastAction.Click, gMonMainMenu.Click, gMonStatusStrip.Click
'Move focus to first label
lblGameTitle.Focus()
End Sub
End Class
-105
View File
@@ -1,105 +0,0 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmManifestViewer
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.dgView = New System.Windows.Forms.DataGridView()
Me.btnCancel = New System.Windows.Forms.Button()
Me.lblError = New System.Windows.Forms.Label()
Me.fbBrowser = New System.Windows.Forms.FolderBrowserDialog()
Me.cboManifest = New System.Windows.Forms.ComboBox()
CType(Me.dgView, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'dgView
'
Me.dgView.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.dgView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
Me.dgView.BackgroundColor = System.Drawing.SystemColors.Window
Me.dgView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgView.Location = New System.Drawing.Point(12, 12)
Me.dgView.Name = "dgView"
Me.dgView.RowHeadersVisible = False
Me.dgView.Size = New System.Drawing.Size(960, 338)
Me.dgView.TabIndex = 0
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Location = New System.Drawing.Point(897, 356)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
Me.btnCancel.Text = "C&lose"
Me.btnCancel.UseVisualStyleBackColor = True
'
'lblError
'
Me.lblError.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblError.AutoSize = True
Me.lblError.Location = New System.Drawing.Point(139, 362)
Me.lblError.Name = "lblError"
Me.lblError.Size = New System.Drawing.Size(54, 13)
Me.lblError.TabIndex = 5
Me.lblError.Text = "Info Label"
'
'fbBrowser
'
Me.fbBrowser.ShowNewFolderButton = False
'
'cboManifest
'
Me.cboManifest.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cboManifest.FormattingEnabled = True
Me.cboManifest.Location = New System.Drawing.Point(12, 359)
Me.cboManifest.Name = "cboManifest"
Me.cboManifest.Size = New System.Drawing.Size(121, 21)
Me.cboManifest.TabIndex = 6
'
'frmManifestViewer
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(984, 392)
Me.Controls.Add(Me.cboManifest)
Me.Controls.Add(Me.lblError)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.dgView)
Me.MinimizeBox = False
Me.Name = "frmManifestViewer"
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Manifest Viewer"
CType(Me.dgView, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents dgView As System.Windows.Forms.DataGridView
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lblError As System.Windows.Forms.Label
Friend WithEvents fbBrowser As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents cboManifest As System.Windows.Forms.ComboBox
End Class
-123
View File
@@ -1,123 +0,0 @@
<?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>
<metadata name="fbBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
-149
View File
@@ -1,149 +0,0 @@
Public Class frmManifestViewer
Private bShutdown As Boolean = False
Private oLocalManifest As SortedList
Private oRemoteManfiest As SortedList
Private oRestoreInfo As clsBackup
Private oDataTable As DataTable
Property RestoreInfo As clsBackup
Get
Return oRestoreInfo
End Get
Set(value As clsBackup)
oRestoreInfo = value
End Set
End Property
Property LocalManifestData As SortedList
Get
Return oLocalManifest
End Get
Set(value As SortedList)
oLocalManifest = value
End Set
End Property
Property RemoteManifestData As SortedList
Get
Return oRemoteManfiest
End Get
Set(value As SortedList)
oRemoteManfiest = value
End Set
End Property
Private Sub FormatManifest(ByVal iManifest As Integer)
Dim oRow As Object()
Dim oLoadData As SortedList
If iManifest = 1 Then
oLoadData = LocalManifestData
Else
oLoadData = RemoteManifestData
End If
oDataTable = New DataTable
'Setup Columns
oDataTable.Columns.Add("Name")
oDataTable.Columns.Add("Backup Path")
oDataTable.Columns.Add("Restore Path")
oDataTable.Columns.Add("Absolute Path")
oDataTable.Columns.Add("Date Updated")
oDataTable.Columns.Add("Updated By")
'Setup Data Types
oDataTable.Columns(0).DataType = GetType(String)
oDataTable.Columns(1).DataType = GetType(String)
oDataTable.Columns(2).DataType = GetType(String)
oDataTable.Columns(3).DataType = GetType(Boolean)
oDataTable.Columns(4).DataType = GetType(DateTime)
oDataTable.Columns(5).DataType = GetType(String)
For Each o As clsBackup In oLoadData.Values
oRow = New Object() {o.Name, o.FileName, o.RestorePath, o.AbsolutePath, o.DateUpdated, o.UpdatedBy}
oDataTable.Rows.Add(oRow)
Next
'Sort
oDataTable.DefaultView.Sort = "Name asc"
dgView.DataSource = oDataTable
'Setup Column Widths
dgView.Columns(0).MinimumWidth = 100
dgView.Columns(1).MinimumWidth = 175
dgView.Columns(2).MinimumWidth = 175
dgView.Columns(3).MinimumWidth = 60
dgView.Columns(4).MinimumWidth = 125
dgView.Columns(5).MinimumWidth = 100
dgView.Columns(0).FillWeight = 100
dgView.Columns(1).FillWeight = 100
dgView.Columns(2).FillWeight = 100
dgView.Columns(3).FillWeight = 25
dgView.Columns(4).FillWeight = 50
dgView.Columns(5).FillWeight = 50
End Sub
Private Sub LoadCombo()
Dim oCombo As New List(Of KeyValuePair(Of Integer, String))
oCombo.Add(New KeyValuePair(Of Integer, String)(1, "Local Manifest"))
oCombo.Add(New KeyValuePair(Of Integer, String)(2, "Remote Manifest"))
cboManifest.DataSource = oCombo
cboManifest.ValueMember = "key"
cboManifest.DisplayMember = "value"
End Sub
Private Sub frmManifestInfo_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
dgView.ReadOnly = True
dgView.AllowUserToAddRows = False
lblError.Text = String.Empty
LoadCombo()
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
Private Sub dgView_CellStateChanged(sender As Object, e As DataGridViewCellStateChangedEventArgs) Handles dgView.CellStateChanged
lblError.ForeColor = Color.Black
Select Case dgView.Columns(e.Cell.ColumnIndex).Index
Case 0
lblError.Text = "The name of the application."
Case 1
lblError.Text = "The location of the backup file to restore."
Case 2
lblError.Text = "When the backup file was updated from this computer."
Case 3
lblError.Text = "The name of this computer."
Case 4
lblError.Text = "When the local backup file was last updated."
Case 5
lblError.Text = "The name of the computer that performed the last backup."
End Select
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmGameInfo_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Not bShutdown Then
If MsgBox("Are you sure you want to close?", MsgBoxStyle.YesNo, "ABM") = MsgBoxResult.Yes Then
bShutdown = True
End If
End If
If Not bShutdown Then
e.Cancel = True
End If
End Sub
Private Sub cboManifest_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboManifest.SelectionChangeCommitted
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
End Class
+136 -104
View File
@@ -23,7 +23,6 @@ Partial Class frmSettings
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
@@ -39,12 +38,6 @@ Partial Class frmSettings
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.lblMinutes = New System.Windows.Forms.Label()
Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
Me.chkCheckSum = New System.Windows.Forms.CheckBox()
Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.grp7zGeneral = New System.Windows.Forms.GroupBox()
Me.cboCompression = New System.Windows.Forms.ComboBox()
Me.lblCompression = New System.Windows.Forms.Label()
@@ -57,6 +50,15 @@ Partial Class frmSettings
Me.lbl7zProduct = New System.Windows.Forms.Label()
Me.btnDefaults = New System.Windows.Forms.Button()
Me.pnlBackup = New System.Windows.Forms.Panel()
Me.lblMinutes = New System.Windows.Forms.Label()
Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.grpBackupHandling = New System.Windows.Forms.GroupBox()
Me.chkAutoRestore = New System.Windows.Forms.CheckBox()
Me.chkRestoreNotify = New System.Windows.Forms.CheckBox()
Me.chkAutoMark = New System.Windows.Forms.CheckBox()
Me.pnl7z = New System.Windows.Forms.Panel()
Me.grp7zAdvanced = New System.Windows.Forms.GroupBox()
Me.grp7zInformation = New System.Windows.Forms.GroupBox()
@@ -65,9 +67,10 @@ Partial Class frmSettings
Me.lstSettings = New System.Windows.Forms.ListBox()
Me.grpStartup.SuspendLayout()
Me.grpFolderOptions.SuspendLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grp7zGeneral.SuspendLayout()
Me.pnlBackup.SuspendLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpBackupHandling.SuspendLayout()
Me.pnl7z.SuspendLayout()
Me.grp7zAdvanced.SuspendLayout()
Me.grp7zInformation.SuspendLayout()
@@ -85,16 +88,6 @@ Partial Class frmSettings
Me.chkMonitorOnStartup.Text = "Start monitoring at launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
'
'chkBackupConfirm
'
Me.chkBackupConfirm.AutoSize = True
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 88)
Me.chkBackupConfirm.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 1
Me.chkBackupConfirm.Text = "Disable backup confirmation"
Me.chkBackupConfirm.UseVisualStyleBackColor = True
'
'grpStartup
'
Me.grpStartup.Controls.Add(Me.chkStartWindows)
@@ -133,7 +126,7 @@ Partial Class frmSettings
Me.chkAutoSaveLog.Location = New System.Drawing.Point(6, 204)
Me.chkAutoSaveLog.Name = "chkAutoSaveLog"
Me.chkAutoSaveLog.Size = New System.Drawing.Size(231, 17)
Me.chkAutoSaveLog.TabIndex = 7
Me.chkAutoSaveLog.TabIndex = 3
Me.chkAutoSaveLog.Text = "Autosave log when max length is exceeded"
Me.chkAutoSaveLog.UseVisualStyleBackColor = True
'
@@ -142,7 +135,7 @@ Partial Class frmSettings
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.TabIndex = 2
Me.btnOptionalFields.Text = "Choose &Optional Fields..."
Me.btnOptionalFields.UseVisualStyleBackColor = True
'
@@ -152,7 +145,7 @@ Partial Class frmSettings
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.TabIndex = 0
Me.chkTimeTracking.Text = "Enable time tracking"
Me.chkTimeTracking.UseVisualStyleBackColor = True
'
@@ -162,7 +155,7 @@ Partial Class frmSettings
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.TabIndex = 1
Me.chkSync.Text = "Enable syncing"
Me.chkSync.UseVisualStyleBackColor = True
'
@@ -172,7 +165,7 @@ Partial Class frmSettings
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.TabIndex = 2
Me.chkShowDetectionTips.Text = "Show detection notifications"
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
'
@@ -185,7 +178,7 @@ Partial Class frmSettings
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.TabIndex = 0
Me.grpFolderOptions.TabStop = False
Me.grpFolderOptions.Text = "Folders"
'
@@ -194,7 +187,7 @@ Partial Class frmSettings
Me.btnBackupFolder.Location = New System.Drawing.Point(313, 17)
Me.btnBackupFolder.Name = "btnBackupFolder"
Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20)
Me.btnBackupFolder.TabIndex = 2
Me.btnBackupFolder.TabIndex = 1
Me.btnBackupFolder.Text = "..."
Me.btnBackupFolder.UseVisualStyleBackColor = True
'
@@ -212,7 +205,7 @@ Partial Class frmSettings
Me.txtBackupFolder.Location = New System.Drawing.Point(91, 17)
Me.txtBackupFolder.Name = "txtBackupFolder"
Me.txtBackupFolder.Size = New System.Drawing.Size(216, 20)
Me.txtBackupFolder.TabIndex = 1
Me.txtBackupFolder.TabIndex = 0
'
'chkCreateFolder
'
@@ -220,7 +213,7 @@ Partial Class frmSettings
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.TabIndex = 2
Me.chkCreateFolder.Text = "Create a sub-folder for each game"
Me.chkCreateFolder.UseVisualStyleBackColor = True
'
@@ -244,63 +237,6 @@ Partial Class frmSettings
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'lblMinutes
'
Me.lblMinutes.AutoSize = True
Me.lblMinutes.Location = New System.Drawing.Point(286, 181)
Me.lblMinutes.Name = "lblMinutes"
Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
Me.lblMinutes.TabIndex = 7
Me.lblMinutes.Text = "minutes"
'
'nudSupressBackupThreshold
'
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(229, 179)
Me.nudSupressBackupThreshold.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold"
Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20)
Me.nudSupressBackupThreshold.TabIndex = 6
'
'chkSupressBackup
'
Me.chkSupressBackup.AutoSize = True
Me.chkSupressBackup.Location = New System.Drawing.Point(6, 180)
Me.chkSupressBackup.Name = "chkSupressBackup"
Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17)
Me.chkSupressBackup.TabIndex = 5
Me.chkSupressBackup.Text = "Backup only when session time exceeds"
Me.chkSupressBackup.UseVisualStyleBackColor = True
'
'chkCheckSum
'
Me.chkCheckSum.AutoSize = True
Me.chkCheckSum.Location = New System.Drawing.Point(6, 134)
Me.chkCheckSum.Name = "chkCheckSum"
Me.chkCheckSum.Size = New System.Drawing.Size(195, 17)
Me.chkCheckSum.TabIndex = 3
Me.chkCheckSum.Text = "Verify backup files with a checksum"
Me.chkCheckSum.UseVisualStyleBackColor = True
'
'chkRestoreOnLaunch
'
Me.chkRestoreOnLaunch.AutoSize = True
Me.chkRestoreOnLaunch.Location = New System.Drawing.Point(6, 157)
Me.chkRestoreOnLaunch.Name = "chkRestoreOnLaunch"
Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(257, 17)
Me.chkRestoreOnLaunch.TabIndex = 4
Me.chkRestoreOnLaunch.Text = "Notify when there are new backup files to restore"
Me.chkRestoreOnLaunch.UseVisualStyleBackColor = True
'
'chkOverwriteWarning
'
Me.chkOverwriteWarning.AutoSize = True
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 111)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 2
Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
'
'grp7zGeneral
'
Me.grp7zGeneral.Controls.Add(Me.cboCompression)
@@ -319,7 +255,7 @@ Partial Class frmSettings
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
Me.cboCompression.TabIndex = 0
'
'lblCompression
'
@@ -335,7 +271,7 @@ Partial Class frmSettings
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.TabIndex = 2
Me.btn7zLocation.Text = "..."
Me.btn7zLocation.UseVisualStyleBackColor = True
'
@@ -344,7 +280,7 @@ Partial Class frmSettings
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
Me.txt7zLocation.TabIndex = 1
'
'lblLocation
'
@@ -360,7 +296,7 @@ Partial Class frmSettings
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
Me.txt7zArguments.TabIndex = 0
'
'lblArguments
'
@@ -402,17 +338,109 @@ Partial Class frmSettings
'
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.Controls.Add(Me.grpBackupHandling)
Me.pnlBackup.Controls.Add(Me.grpFolderOptions)
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
'
'lblMinutes
'
Me.lblMinutes.AutoSize = True
Me.lblMinutes.Location = New System.Drawing.Point(286, 228)
Me.lblMinutes.Name = "lblMinutes"
Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
Me.lblMinutes.TabIndex = 14
Me.lblMinutes.Text = "minutes"
'
'nudSupressBackupThreshold
'
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(229, 226)
Me.nudSupressBackupThreshold.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold"
Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20)
Me.nudSupressBackupThreshold.TabIndex = 5
'
'chkSupressBackup
'
Me.chkSupressBackup.AutoSize = True
Me.chkSupressBackup.Location = New System.Drawing.Point(6, 228)
Me.chkSupressBackup.Name = "chkSupressBackup"
Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17)
Me.chkSupressBackup.TabIndex = 4
Me.chkSupressBackup.Text = "Backup only when session time exceeds"
Me.chkSupressBackup.UseVisualStyleBackColor = True
'
'chkBackupConfirm
'
Me.chkBackupConfirm.AutoSize = True
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 180)
Me.chkBackupConfirm.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 2
Me.chkBackupConfirm.Text = "Disable backup confirmation"
Me.chkBackupConfirm.UseVisualStyleBackColor = True
'
'chkOverwriteWarning
'
Me.chkOverwriteWarning.AutoSize = True
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 204)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 3
Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
'
'grpBackupHandling
'
Me.grpBackupHandling.Controls.Add(Me.chkAutoRestore)
Me.grpBackupHandling.Controls.Add(Me.chkRestoreNotify)
Me.grpBackupHandling.Controls.Add(Me.chkAutoMark)
Me.grpBackupHandling.Location = New System.Drawing.Point(6, 88)
Me.grpBackupHandling.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.grpBackupHandling.Name = "grpBackupHandling"
Me.grpBackupHandling.Padding = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.grpBackupHandling.Size = New System.Drawing.Size(354, 87)
Me.grpBackupHandling.TabIndex = 1
Me.grpBackupHandling.TabStop = False
Me.grpBackupHandling.Text = "Backup Handling"
'
'chkAutoRestore
'
Me.chkAutoRestore.AutoSize = True
Me.chkAutoRestore.Location = New System.Drawing.Point(8, 41)
Me.chkAutoRestore.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkAutoRestore.Name = "chkAutoRestore"
Me.chkAutoRestore.Size = New System.Drawing.Size(190, 17)
Me.chkAutoRestore.TabIndex = 1
Me.chkAutoRestore.Text = "Automatically restore new backups"
Me.chkAutoRestore.UseVisualStyleBackColor = True
'
'chkRestoreNotify
'
Me.chkRestoreNotify.AutoSize = True
Me.chkRestoreNotify.Location = New System.Drawing.Point(8, 19)
Me.chkRestoreNotify.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkRestoreNotify.Name = "chkRestoreNotify"
Me.chkRestoreNotify.Size = New System.Drawing.Size(216, 17)
Me.chkRestoreNotify.TabIndex = 0
Me.chkRestoreNotify.Text = "Display notifications about new backups"
Me.chkRestoreNotify.UseVisualStyleBackColor = True
'
'chkAutoMark
'
Me.chkAutoMark.AutoSize = True
Me.chkAutoMark.Location = New System.Drawing.Point(8, 63)
Me.chkAutoMark.Name = "chkAutoMark"
Me.chkAutoMark.Size = New System.Drawing.Size(321, 17)
Me.chkAutoMark.TabIndex = 2
Me.chkAutoMark.Text = "Automatically mark new backups as restored when appropriate"
Me.chkAutoMark.UseVisualStyleBackColor = True
'
'pnl7z
'
Me.pnl7z.Controls.Add(Me.grp7zAdvanced)
@@ -433,7 +461,7 @@ Partial Class frmSettings
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.TabIndex = 1
Me.grp7zAdvanced.TabStop = False
Me.grp7zAdvanced.Text = "Advanced"
'
@@ -444,7 +472,7 @@ Partial Class frmSettings
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.TabIndex = 2
Me.grp7zInformation.TabStop = False
Me.grp7zInformation.Text = "Utility Information"
'
@@ -484,13 +512,13 @@ Partial Class frmSettings
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.pnlBackup)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
@@ -503,11 +531,13 @@ Partial Class frmSettings
Me.grpStartup.PerformLayout()
Me.grpFolderOptions.ResumeLayout(False)
Me.grpFolderOptions.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
Me.grp7zGeneral.ResumeLayout(False)
Me.grp7zGeneral.PerformLayout()
Me.pnlBackup.ResumeLayout(False)
Me.pnlBackup.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpBackupHandling.ResumeLayout(False)
Me.grpBackupHandling.PerformLayout()
Me.pnl7z.ResumeLayout(False)
Me.grp7zAdvanced.ResumeLayout(False)
Me.grp7zAdvanced.PerformLayout()
@@ -520,7 +550,6 @@ Partial Class frmSettings
End Sub
Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox
Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox
Friend WithEvents grpStartup As System.Windows.Forms.GroupBox
Friend WithEvents grpFolderOptions As System.Windows.Forms.GroupBox
Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox
@@ -530,16 +559,10 @@ Partial Class frmSettings
Friend WithEvents btnBackupFolder As System.Windows.Forms.Button
Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox
Friend WithEvents chkStartToTray As System.Windows.Forms.CheckBox
Friend WithEvents chkOverwriteWarning As System.Windows.Forms.CheckBox
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents chkRestoreOnLaunch As System.Windows.Forms.CheckBox
Friend WithEvents chkSync As System.Windows.Forms.CheckBox
Friend WithEvents chkCheckSum As System.Windows.Forms.CheckBox
Friend WithEvents chkStartWindows As System.Windows.Forms.CheckBox
Friend WithEvents chkTimeTracking As System.Windows.Forms.CheckBox
Friend WithEvents lblMinutes As Label
Friend WithEvents nudSupressBackupThreshold As NumericUpDown
Friend WithEvents chkSupressBackup As CheckBox
Friend WithEvents grp7zGeneral As GroupBox
Friend WithEvents cboCompression As ComboBox
Friend WithEvents lblCompression As Label
@@ -560,4 +583,13 @@ Partial Class frmSettings
Friend WithEvents lstSettings As ListBox
Friend WithEvents grp7zAdvanced As GroupBox
Friend WithEvents grp7zInformation As GroupBox
Friend WithEvents lblMinutes As Label
Friend WithEvents nudSupressBackupThreshold As NumericUpDown
Friend WithEvents chkSupressBackup As CheckBox
Friend WithEvents chkBackupConfirm As CheckBox
Friend WithEvents chkOverwriteWarning As CheckBox
Friend WithEvents grpBackupHandling As GroupBox
Friend WithEvents chkAutoMark As CheckBox
Friend WithEvents chkAutoRestore As CheckBox
Friend WithEvents chkRestoreNotify As CheckBox
End Class
+13 -15
View File
@@ -4,7 +4,6 @@ Imports System.IO
Public Class frmSettings
Dim bShutdown As Boolean = False
Dim bSyncSettingsChanged As Boolean = False
Dim bCheckSumDisabled As Boolean = False
Dim eCurrentSyncFields As clsGame.eOptionalSyncFields
Private oSettings As mgrSettings
@@ -48,7 +47,9 @@ Public Class frmSettings
oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
oSettings.RestoreOnLaunch = chkRestoreOnLaunch.Checked
oSettings.RestoreOnLaunch = chkRestoreNotify.Checked
oSettings.AutoRestore = chkAutoRestore.Checked
oSettings.AutoMark = chkAutoMark.Checked
oSettings.TimeTracking = chkTimeTracking.Checked
oSettings.SupressBackup = chkSupressBackup.Checked
oSettings.SupressBackupThreshold = nudSupressBackupThreshold.Value
@@ -61,12 +62,6 @@ Public Class frmSettings
oSettings.Custom7zArguments = txt7zArguments.Text.Trim
oSettings.Custom7zLocation = txt7zLocation.Text.Trim
'We need to clear all checksums its turned off
If chkCheckSum.Checked = False And oSettings.CheckSum = True Then
bCheckSumDisabled = True
End If
oSettings.CheckSum = chkCheckSum.Checked
'Turning syncing from off to on is the same as changing the backup folder
If chkSync.Checked = True And oSettings.Sync = False Then
bSyncSettingsChanged = True
@@ -106,7 +101,6 @@ Public Class frmSettings
If ValidateSettings() Then
oSettings.SaveSettings()
If bSyncSettingsChanged Then mgrMonitorList.HandleBackupLocationChange(Settings)
If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe()
Return True
Else
Return False
@@ -177,10 +171,11 @@ Public Class frmSettings
chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
chkRestoreOnLaunch.Checked = oSettings.RestoreOnLaunch
chkRestoreNotify.Checked = oSettings.RestoreOnLaunch
chkAutoRestore.Checked = oSettings.AutoRestore
chkAutoMark.Checked = oSettings.AutoMark
txtBackupFolder.Text = oSettings.BackupFolder
chkSync.Checked = oSettings.Sync
chkCheckSum.Checked = oSettings.CheckSum
chkTimeTracking.Checked = oSettings.TimeTracking
chkSupressBackup.Checked = oSettings.SupressBackup
nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold
@@ -279,8 +274,10 @@ Public Class frmSettings
'Set Form Text
lblMinutes.Text = frmSettings_lblMinutes
chkSupressBackup.Text = frmSettings_chkSupressBackup
chkCheckSum.Text = frmSettings_chkCheckSum
chkRestoreOnLaunch.Text = frmSettings_chkRestoreOnLaunch
grpBackupHandling.Text = frmSettings_grpBackupHandling
chkRestoreNotify.Text = frmSettings_chkRestoreNotify
chkAutoRestore.Text = frmSettings_chkAutoRestore
chkAutoMark.Text = frmSettings_chkAutoMark
chkOverwriteWarning.Text = frmSettings_chkOverwriteWarning
chkCreateFolder.Text = frmSettings_chkCreateFolder
chkBackupConfirm.Text = frmSettings_chkBackupConfirm
@@ -339,13 +336,13 @@ Public Class frmSettings
Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click
Dim sNewFolder As String
sNewFolder = mgrCommon.OpenFolderBrowser(frmSettings_BrowseFolder, oSettings.BackupFolder, True)
sNewFolder = mgrCommon.OpenFolderBrowser("Settings_Backup_Path", frmSettings_BrowseFolder, oSettings.BackupFolder, True, False)
If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
End Sub
Private Sub btn7zLocation_Click(sender As Object, e As EventArgs) Handles btn7zLocation.Click
Dim sNewLocation As String
sNewLocation = mgrCommon.OpenFileBrowser(frmSettings_Browse7za, "exe", frmSettings_7zaFileType, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
sNewLocation = mgrCommon.OpenFileBrowser("7z_Browse", frmSettings_Browse7za, "exe", frmSettings_7zaFileType, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
If sNewLocation <> String.Empty Then
txt7zLocation.Text = sNewLocation
GetUtilityInfo(txt7zLocation.Text)
@@ -375,4 +372,5 @@ Public Class frmSettings
Private Sub lstSettings_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstSettings.SelectedValueChanged
ChangePanel()
End Sub
End Class
+1 -1
View File
@@ -215,7 +215,7 @@ Public Class frmStartUpWizard
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmStartUpWizard_BrowseFolder, sDefaultFolder, True)
sNewPath = mgrCommon.OpenFolderBrowser("Wizard_Backup_Path", frmStartUpWizard_BrowseFolder, sDefaultFolder, True, False)
If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath
End Sub
+2 -2
View File
@@ -104,9 +104,9 @@ Partial Class frmSyncFields
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(6, 19)
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 = 0
Me.chkTimeStamp.Text = "Time stamp each backup"
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'btnCancel
+12 -12
View File
@@ -67,49 +67,49 @@ Public Class frmSyncFields
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
If chkTimeStamp.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
SyncFields = clsGame.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)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
SyncFields = clsGame.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)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
SyncFields = clsGame.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)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
SyncFields = clsGame.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)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
SyncFields = clsGame.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)
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
End If
End Sub
End Class
+1 -1
View File
@@ -54,7 +54,7 @@ Public Class frmVariableManager
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmVariableManager_PathBrowse, sDefaultFolder, False)
sNewPath = mgrCommon.OpenFolderBrowser("VM_Path", frmVariableManager_PathBrowse, sDefaultFolder, False, False)
If sNewPath <> String.Empty Then txtPath.Text = sNewPath
End Sub
+6 -1
View File
@@ -106,6 +106,7 @@
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
@@ -121,6 +122,9 @@
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\clsGameFilter.vb" />
<Compile Include="Classes\clsGameFilterField.vb" />
<Compile Include="Classes\clsSavedPath.vb" />
<Compile Include="Classes\XML Serialize Classes\Tag.vb" />
<Compile Include="Classes\XML Serialize Classes\Game.vb" />
<Compile Include="Classes\clsGameTag.vb" />
@@ -220,6 +224,7 @@
<Compile Include="Managers\mgrMonitorList.vb" />
<Compile Include="Managers\mgrPath.vb" />
<Compile Include="Managers\mgrRestore.vb" />
<Compile Include="Managers\mgrSavedPath.vb" />
<Compile Include="Managers\mgrSettings.vb" />
<Compile Include="Managers\mgrBackup.vb" />
<Compile Include="Managers\mgrSQLite.vb" />
@@ -344,6 +349,7 @@
<Content Include="Utilities\x86\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="x64\sqlite3.dll" />
<Content Include="x86\sqlite3.dll" />
<None Include="Resources\gbm.ico" />
<Content Include="Resources\Admin.png" />
@@ -356,7 +362,6 @@
<Content Include="Resources\Inbox.png" />
<Content Include="Resources\type.ico" />
<Content Include="Resources\User.png" />
<Content Include="x64\sqlite3.dll" />
<None Include="Resources\Stopped.png" />
<None Include="Resources\Detected.png" />
<None Include="Resources\Ready.png" />
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2015 Igor Pavlov.
Copyright (C) 1999-2016 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license.
+2 -2
View File
@@ -1,5 +1,5 @@
GBM - Game Backup Monitor
Copyright (C) 2015 Michael J. Seiferling
Copyright (C) 2016 Michael J. Seiferling
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,4 +16,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact Information:
mseiferling@gmail.com
gamebackupmonitor@gmail.com
+62 -11
View File
@@ -50,15 +50,15 @@ Public Class mgrBackup
oItem.CheckSum = sCheckSum
'Save Remote Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Remote)
If mgrManifest.DoSpecificManifestCheck(oItem, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote)
Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
End If
'Save Local Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Local)
If mgrManifest.DoGlobalManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oItem, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
End If
@@ -87,9 +87,25 @@ Public Class mgrBackup
Public Function CheckBackupPrereq(ByVal oGame As clsGame) As Boolean
Dim sBackupFile As String = oSettings.BackupFolder
Dim lAvailableSpace As Long = mgrCommon.GetAvailableDiskSpace(sBackupFile)
Dim lFolderSize As Long = mgrCommon.GetFolderSize(oGame.Path, oGame.IncludeArray, oGame.ExcludeArray)
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
'Show Available Space
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_AvailableDiskSpace, mgrCommon.FormatDiskSpace(lAvailableSpace)), False, ToolTipIcon.Info, True)
'Show Save Folder Size
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_SavedGameFolderSize, New String() {oGame.Name, mgrCommon.FormatDiskSpace(lFolderSize)}), False, ToolTipIcon.Info, True)
If lFolderSize >= lAvailableSpace Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmDiskSpace, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorDiskSpace, False, ToolTipIcon.Error, True)
Return False
End If
End If
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)
@@ -107,6 +123,33 @@ Public Class mgrBackup
Return True
End Function
Private Sub CheckOldBackups(ByVal oGame As clsGame)
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByName(oGame.Name, mgrSQLite.Database.Remote)
Dim oGameBackup As clsBackup
Dim sOldBackup As String
Dim iBackupCount As Integer = oGameBackups.Count
Dim iDelCount As Integer
'If we've hit or exceeded the maximum backup limit
If oGameBackups.Count >= oGame.BackupLimit Then
'How many do we need to delete
iDelCount = (oGameBackups.Count - oGame.BackupLimit) + 1
'Delete the oldest backup(s) (Manifest entry and backup file)
For i = 1 To iDelCount
oGameBackup = oGameBackups(oGameBackups.Count - i)
sOldBackup = Settings.BackupFolder & Path.DirectorySeparatorChar & oGameBackup.FileName
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Local)
mgrCommon.DeleteFile(sOldBackup)
mgrCommon.DeleteDirectoryByBackup(Settings.BackupFolder & Path.DirectorySeparatorChar, oGameBackup)
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupLimitExceeded, Path.GetFileName(sOldBackup)), False, ToolTipIcon.Info, True)
Next
End If
End Sub
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame
Dim bDoBackup As Boolean
@@ -144,6 +187,7 @@ Public Class mgrBackup
End If
If oGame.AppendTimeStamp Then
CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
@@ -194,13 +238,20 @@ Public Class mgrBackup
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.GetFileSize(sBackupFile)}), False, ToolTipIcon.Info, True)
Select Case prs7z.ExitCode
Case 0
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.FormatDiskSpace(mgrCommon.GetFileSize(sBackupFile))}), False, ToolTipIcon.Info, True)
bBackupCompleted = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
Case 1
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
bBackupCompleted = True
Case 2
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zFatalError, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
End If
Case 7
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_7zCommandFailure, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False
End Select
End If
prs7z.Dispose()
Else
@@ -214,10 +265,10 @@ Public Class mgrBackup
'Write Main Manifest
If bBackupCompleted Then
If oSettings.CheckSum Then
'Generate checksum for new backup
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True)
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
End If
If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorManifestFailure, oGame.Name), True, ToolTipIcon.Error, True)
+248 -28
View File
@@ -2,6 +2,9 @@
Imports System.Net
Imports System.IO
Imports System.Security.Principal
Imports System.Text.RegularExpressions
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Public Class mgrCommon
@@ -30,10 +33,32 @@ Public Class mgrCommon
Public Shared ReadOnly Property AppVersion As Integer
Get
Return (My.Application.Info.Version.Major * 100) + My.Application.Info.Version.Minor
Return (My.Application.Info.Version.Major * 100) + (My.Application.Info.Version.Minor * 10) + My.Application.Info.Version.Build
End Get
End Property
'Source - https://stackoverflow.com/questions/18873152/deep-copy-of-ordereddictionary
Public Shared Function GenericClone(ByVal oOriginal As Object) As Object
'Construct a temporary memory stream
Dim oStream As MemoryStream = New MemoryStream()
'Construct a serialization formatter that does all the hard work
Dim oFormatter As BinaryFormatter = New BinaryFormatter()
'This line Is explained in the "Streaming Contexts" section
oFormatter.Context = New StreamingContext(StreamingContextStates.Clone)
'Serialize the object graph into the memory stream
oFormatter.Serialize(oStream, oOriginal)
'Seek back to the start of the memory stream before deserializing
oStream.Position = 0
'Deserialize the graph into a New set of objects
'Return the root of the graph (deep copy) to the caller
Return oFormatter.Deserialize(oStream)
End Function
Public Shared Function CheckAddress(ByVal URL As String) As Boolean
Try
Dim request As WebRequest = WebRequest.Create(URL)
@@ -61,30 +86,66 @@ Public Class mgrCommon
End If
End Function
Public Shared Function SaveFileBrowser(ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String, ByVal sDefaultFile As String) As String
Public Shared Function SaveFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
ByVal sDefaultFile As String, Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New SaveFileDialog
Dim oSavedPath As New clsSavedPath
fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = FormatString(mgrCommon_FilesFilter, New String() {sFileType, sExtension, sExtension})
fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.FileName = sDefaultFile
fbBrowser.InitialDirectory = sDefaultFolder
If bSavedPath Then
oSavedPath = mgrSavedPath.GetPathByName(sName)
If oSavedPath.Path <> String.Empty Then
If Directory.Exists(oSavedPath.Path) Then
fbBrowser.InitialDirectory = oSavedPath.Path
End If
End If
End If
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
If bSavedPath Then
oSavedPath.PathName = sName
oSavedPath.Path = Path.GetDirectoryName(fbBrowser.FileName)
mgrSavedPath.AddUpdatePath(oSavedPath)
End If
Return fbBrowser.FileName
End If
Return String.Empty
End Function
Public Shared Function OpenFileBrowser(ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String, ByVal bMulti As Boolean) As String
Public Shared Function OpenFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
ByVal bMulti As Boolean, Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog
Dim oSavedPath As New clsSavedPath
fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = FormatString(mgrCommon_FilesFilter, New String() {sFileType, sExtension, sExtension})
fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.Multiselect = bMulti
fbBrowser.InitialDirectory = sDefaultFolder
If bSavedPath Then
oSavedPath = mgrSavedPath.GetPathByName(sName)
If oSavedPath.Path <> String.Empty Then
If Directory.Exists(oSavedPath.Path) Then
fbBrowser.InitialDirectory = oSavedPath.Path
End If
End If
End If
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
If bSavedPath Then
oSavedPath.PathName = sName
oSavedPath.Path = Path.GetDirectoryName(fbBrowser.FileName)
mgrSavedPath.AddUpdatePath(oSavedPath)
End If
If bMulti Then
Dim sFileNames As String = String.Empty
For Each sFileName As String In fbBrowser.FileNames
@@ -100,12 +161,31 @@ Public Class mgrCommon
Return String.Empty
End Function
Public Shared Function OpenFolderBrowser(ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean) As String
Public Shared Function OpenFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean,
Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New FolderBrowserDialog
Dim oSavedPath As New clsSavedPath
fbBrowser.Description = sTitle
fbBrowser.SelectedPath = sDefaultFolder
fbBrowser.ShowNewFolderButton = bEnableNewFolder
If bSavedPath Then
oSavedPath = mgrSavedPath.GetPathByName(sName)
If oSavedPath.Path <> String.Empty Then
If Directory.Exists(oSavedPath.Path) Then
fbBrowser.SelectedPath = oSavedPath.Path
End If
End If
End If
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
If bSavedPath Then
oSavedPath.PathName = sName
oSavedPath.Path = fbBrowser.SelectedPath
mgrSavedPath.AddUpdatePath(oSavedPath)
End If
Return fbBrowser.SelectedPath
End If
@@ -157,12 +237,152 @@ Public Class mgrCommon
oProcess.Start()
End Sub
Public Shared Function SetSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
Return eSyncFields Or eSyncField
'Get a file size
Public Shared Function GetFileSize(ByVal sFile As String) As Long
Dim oFileInfo As FileInfo
Dim dFileSize As Long = 0
Try
oFileInfo = New FileInfo(sFile)
dFileSize = oFileInfo.Length
Catch ex As Exception
'Do Nothing
End Try
Return dFileSize
End Function
Public Shared Function RemoveSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
Return eSyncFields And (Not eSyncField)
Public Shared Function WildcardToRegex(ByVal sPattern As String) As String
Dim sRegEx As String
sRegEx = sPattern.Replace("*", ".*")
sRegEx = sRegEx.Replace("?", ".")
Return sRegEx
End Function
Public Shared Function CompareValueToArrayRegEx(ByVal sValue As String, ByVal sValues As String()) As Boolean
For Each se As String In sValues
If Regex.IsMatch(sValue, WildcardToRegex(se)) Then
Return True
End If
Next
Return False
End Function
'Calculate the current size of a folder
Public Shared Function GetFolderSize(ByVal sPath As String, ByVal sInclude As String(), ByVal sExclude As String()) As Long
Dim oFolder As DirectoryInfo
Dim bInclude As Boolean
Dim bExclude As Boolean
Dim lSize As Long = 0
Try
If Not Directory.Exists(sPath) Then Return lSize
oFolder = New DirectoryInfo(sPath)
'Files
For Each fi As FileInfo In oFolder.EnumerateFiles()
If sInclude.Length > 0 Then
bInclude = CompareValueToArrayRegEx(fi.Name, sInclude) Or CompareValueToArrayRegEx(Path.GetDirectoryName(sPath), sInclude)
Else
bInclude = True
End If
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(fi.Name, sExclude) Or CompareValueToArrayRegEx(Path.GetDirectoryName(sPath), sExclude)
Else
bExclude = False
End If
If bInclude And Not bExclude Then
lSize += fi.Length
End If
Next
'Sub Folders
For Each di As DirectoryInfo In oFolder.EnumerateDirectories()
If Not ((di.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint) Then
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(di.Name, sExclude)
Else
bExclude = False
End If
If Not bExclude Then
lSize += GetFolderSize(di.FullName, sInclude, sExclude)
End If
End If
Next
Catch
'Do Nothing
End Try
Return lSize
End Function
'Format Disk Space Amounts
Public Shared Function FormatDiskSpace(ByVal lSize As Long)
Select Case lSize
Case >= 1125899906842624
Return FormatString(mgrCommon_PB, Math.Round(lSize / 1125899906842624, 2))
Case >= 1099511627776
Return FormatString(mgrCommon_TB, Math.Round(lSize / 1099511627776, 2))
Case >= 1073741824
Return FormatString(mgrCommon_GB, Math.Round(lSize / 1073741824, 2))
Case >= 1048576
Return FormatString(mgrCommon_MB, Math.Round(lSize / 1048576, 2))
Case >= 1024
Return FormatString(mgrCommon_KB, Math.Round(lSize / 1024, 2))
Case >= 0
Return FormatString(mgrCommon_B, lSize)
End Select
Return lSize
End Function
'Get available disk space on a drive (Unix)
Private Shared Function GetAvailableDiskSpaceUnix(ByVal sPath As String) As Long
Dim prsdf As Process
Dim sOutput As String
Dim sAvailableSpace As String
Try
prsdf = New Process
prsdf.StartInfo.FileName = "/bin/df"
prsdf.StartInfo.Arguments = sPath
prsdf.StartInfo.UseShellExecute = False
prsdf.StartInfo.RedirectStandardOutput = True
prsdf.StartInfo.CreateNoWindow = True
prsdf.Start()
sOutput = prsdf.StandardOutput.ReadToEnd
'Parse df output to grab "Available" value
sAvailableSpace = sOutput.Split(vbLf)(1).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(3)
'Return value in bytes
Return CLng(sAvailableSpace) * 1024
Catch
Return 0
End Try
End Function
'Get available disk space on a drive (Windows)
Private Shared Function GetAvailableDiskSpaceWindows(ByVal sPath As String) As Long
Dim oDrive As DriveInfo
Dim lAvailableSpace As Long = 0
Try
oDrive = New DriveInfo(Path.GetPathRoot(sPath))
lAvailableSpace = oDrive.AvailableFreeSpace
Catch
'Do Nothing
End Try
Return lAvailableSpace
End Function
'Get available disk space on a drive
Public Shared Function GetAvailableDiskSpace(ByVal sPath As String) As Long
If IsUnix() Then
Return GetAvailableDiskSpaceUnix(sPath)
Else
Return GetAvailableDiskSpaceWindows(sPath)
End If
End Function
'Delete file based on OS type
@@ -191,6 +411,24 @@ Public Class mgrCommon
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
@@ -206,24 +444,6 @@ Public Class mgrCommon
End Try
End Sub
'Get a file size
Public Shared Function GetFileSize(ByVal sFile As String) As String
Dim oFileInfo As FileInfo
Dim dFileSize As Double
Try
oFileInfo = New FileInfo(sFile)
dFileSize = oFileInfo.Length
If dFileSize > 1048576 Then
Return FormatString(App_MB, Math.Round(dFileSize / 1048576, 2).ToString)
Else
Return FormatString(App_KB, Math.Round(dFileSize / 1024, 2).ToString)
End If
Catch ex As Exception
Return String.Empty
End Try
End Function
'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
-4
View File
@@ -1,4 +0,0 @@
Public Class mgrGlobals
Public Shared LocalDatabaseHash As String = String.Empty
Public Shared RemoteDatabaseHash As String = String.Empty
End Class
+157 -57
View File
@@ -1,6 +1,37 @@
Public Class mgrManifest
Public Shared Function ReadManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
Private Shared Function MapToObject(ByVal dr As DataRow) As clsBackup
Dim oBackupItem As clsBackup
oBackupItem = New clsBackup
oBackupItem.ID = CStr(dr("ManifestID"))
oBackupItem.Name = CStr(dr("Name"))
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath"))
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
Return oBackupItem
End Function
Private Shared Function SetCoreParameters(ByVal oBackupItem As clsBackup) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oBackupItem.ID)
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
Return hshParams
End Function
Public Shared Function ReadFullManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
@@ -11,15 +42,26 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = New clsBackup
oBackupItem.ID = CStr(dr("ManifestID"))
oBackupItem.Name = CStr(dr("Name"))
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath"))
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
oBackupItem = MapToObject(dr)
slList.Add(oBackupItem.ID, oBackupItem)
Next
Return slList
End Function
Public Shared Function ReadLatestManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim oBackupItem As clsBackup
Dim slList As New SortedList
sSQL = "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, Max(DateUpdated) As DateUpdated, UpdatedBy, CheckSum FROM manifest GROUP BY Name ORDER By Name ASC"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
slList.Add(oBackupItem.Name, oBackupItem)
Next
@@ -27,7 +69,80 @@
End Function
Public Shared Function DoManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As List(Of clsBackup)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name ORDER BY DateUpdated Desc"
hshParams.Add("Name", sName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
oList.Add(oBackupItem)
Next
Return oList
End Function
Public Shared Function DoManifestGetByID(ByVal sID As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE ManifestID = @ID ORDER BY DateUpdated Desc"
hshParams.Add("ID", sID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
Next
Return oBackupItem
End Function
'This should only be used to update specific entries in the remote manifest
Public Shared Function DoSpecificManifestCheck(ByRef oItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name AND FileName = @FileName"
hshParams.Add("Name", oItem.Name)
hshParams.Add("FileName", oItem.FileName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
For Each dr As DataRow In oData.Tables(0).Rows
oItem.ID = CStr(dr("ManifestID"))
Next
Return True
Else
Return False
End If
End Function
'This should only be used to update entries in the local manifest
Public Shared Function DoGlobalManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
@@ -48,12 +163,11 @@
End Function
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
Public Shared Function DoManifestNameCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name"
@@ -62,82 +176,55 @@
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = New clsBackup
oBackupItem.ID = CStr(dr("ManifestID"))
oBackupItem.Name = CStr(dr("Name"))
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath"))
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
Next
If oData.Tables(0).Rows.Count > 0 Then
Return True
Else
Return False
End If
Return oBackupItem
End Function
Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "INSERT OR REPLACE 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.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
hshParams = SetCoreParameters(oBackupItem)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestUpdate(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestUpdateByName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName"
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("QueryName", oBackupItem.Name)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestNameUpdate(ByVal sOriginalName As String, ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestUpdateByID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName"
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID"
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
hshParams.Add("QueryName", sOriginalName)
hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("QueryID", oBackupItem.ID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestDelete(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestDeletebyName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
@@ -150,6 +237,19 @@
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestDeletebyID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM manifest "
sSQL &= "WHERE ManifestID = @ID"
hshParams.Add("ID", oBackupItem.ID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestHashWipe()
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -283,10 +283,10 @@ Public Class mgrPath
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
'Don't use these in Unix
If Not mgrCommon.IsUnix Then
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
End If
@@ -335,7 +335,7 @@ Public Class mgrPath
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sNewPath As String
sNewPath = mgrCommon.OpenFolderBrowser(mgrPath_ChoosePath, sDefaultFolder, False)
sNewPath = mgrCommon.OpenFolderBrowser("Manual_Game_Location", mgrPath_ChoosePath, sDefaultFolder, False)
Return sNewPath
End Function
+71 -13
View File
@@ -1,6 +1,5 @@
Imports System.Diagnostics
Imports System.IO
Imports System.Threading
Imports System.IO
Imports System.Management
Public Class mgrProcesses
@@ -11,6 +10,7 @@ Public Class mgrProcesses
Private oDuplicateGames As New ArrayList
Private bDuplicates As Boolean
Private bVerified As Boolean = False
Private sFullCommand As String = String.Empty
Property FoundProcess As Process
Get
@@ -72,17 +72,63 @@ Public Class mgrProcesses
End Set
End Property
Private Sub VerifyDuplicate(oGame As clsGame, hshScanList As Hashtable)
Property FullCommand As String
Get
Return sFullCommand
End Get
Set(value As String)
sFullCommand = value
End Set
End Property
Private Function HandleDuplicates(hshScanList As Hashtable) As Boolean
Dim sProcess As String
bDuplicates = True
oDuplicateGames.Clear()
For Each o As clsGame In hshScanList.Values
sProcess = o.ProcessName.Split(":")(0)
If o.Duplicate = True And sProcess = oGame.TrueProcess Then
If o.Parameter <> String.Empty And FullCommand.Contains(o.Parameter) Then
oGame = o.ShallowCopy
Return True
ElseIf o.Parameter = String.Empty Then
oDuplicateGames.Add(o.ShallowCopy)
End If
End If
Next
If oDuplicateGames.Count = 1 Then
oGame = DirectCast(oDuplicateGames(0), clsGame).ShallowCopy
Return True
End If
Return False
End Function
'This function will only work correctly on Windows
Private Sub GetWindowsCommand(ByVal prs As Process)
FullCommand = String.Empty
Try
Using searcher As New ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + prs.Id.ToString)
For Each o As ManagementObject In searcher.Get()
FullCommand &= o("CommandLine") & " "
Next
End Using
Catch ex As Exception
'Do Nothing
End Try
End Sub
'This function will only work correctly on Unix
Private Sub GetUnixCommand(ByVal prs As Process)
FullCommand = String.Empty
Try
FullCommand = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline").Replace(vbNullChar, " ")
Catch ex As Exception
'Do Nothing
End Try
End Sub
'This function will only work correctly on Unix
@@ -99,19 +145,18 @@ Public Class mgrProcesses
'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()
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.FileName = "/bin/readlink"
prsls.StartInfo.Arguments = "-f /proc/" & prs.Id.ToString & "/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
slsinfo = prsls.StandardOutput.ReadToEnd()
Return slsinfo.Trim()
Catch ex As Exception
Return String.Empty
End Try
@@ -130,9 +175,9 @@ Public Class mgrProcesses
'Unix Handler
'We need some special handling for Wine processes
If mgrCommon.IsUnix And sProcessCheck.ToLower = "wine-preloader" Then
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 the Unix version of the function expects a different one.
'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
@@ -153,13 +198,26 @@ Public Class mgrProcesses
prsFoundProcess = prsCurrent
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
If mgrCommon.IsUnix Then
GetUnixCommand(prsCurrent)
Else
GetWindowsCommand(prsCurrent)
End If
If oGame.Duplicate = True Then
VerifyDuplicate(oGame, hshScanList)
If HandleDuplicates(hshScanList) Then
bDuplicates = False
oDuplicateGames.Clear()
End If
Else
bDuplicates = False
oDuplicateGames.Clear()
End If
If Duplicate And DuplicateList.Count = 0 Then Return False
If oGame.Parameter <> String.Empty And Not Duplicate And Not FullCommand.Contains(oGame.Parameter) Then Return False
If Not oGame.AbsolutePath Or oGame.Duplicate Then
Try
If Not bWineProcess Then
+18 -24
View File
@@ -80,8 +80,8 @@ Public Class mgrRestore
Dim bLocal As Boolean = False
Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
If slLocalManifest.Contains(sAppName) Then
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
@@ -96,8 +96,6 @@ Public Class mgrRestore
If bLocal And bRemote Then
'Compare
If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then
oRemoteItem.LastDateUpdated = oLocalItem.DateUpdated
oRemoteItem.LastUpdatedBy = oLocalItem.UpdatedBy
Return True
End If
End If
@@ -117,26 +115,18 @@ Public Class mgrRestore
Dim bLocal As Boolean = False
Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slRemoteManifest.Values
If slLocalManifest.Contains(oItem.Name) Then
oLocalItem = DirectCast(slLocalManifest(oItem.Name), clsBackup)
If oItem.DateUpdated > oLocalItem.DateUpdated Then
oLocalItem.FileName = oItem.FileName
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
slRestoreItems.Add(oItem.Name, oItem)
End If
Else
oLocalItem = oItem
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
oLocalItem.DateUpdated = Nothing
oLocalItem.UpdatedBy = Nothing
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
slRestoreItems.Add(oItem.Name, oItem)
End If
Next
@@ -148,20 +138,20 @@ Public Class mgrRestore
Dim slRemoteManifest As SortedList
Dim slRemovedItems As New SortedList
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slLocalManifest.Values
If Not slRemoteManifest.Contains(oItem.Name) Then
slRemovedItems.Add(oItem.Name, oItem)
mgrManifest.DoManifestDelete(oItem, mgrSQLite.Database.Local)
mgrManifest.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local)
End If
Next
Return slRemovedItems
End Function
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup) As Boolean
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean
Dim sHash As String
Dim sExtractPath As String
Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
@@ -185,10 +175,14 @@ Public Class mgrRestore
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
Return False
End If
Else
If bCleanFolder Then
mgrCommon.DeleteDirectory(sExtractPath, True)
Directory.CreateDirectory(sExtractPath)
End If
End If
'Check file integrity
If oSettings.CheckSum Then
If oBackupInfo.CheckSum <> String.Empty Then
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If sHash <> oBackupInfo.CheckSum Then
@@ -203,7 +197,7 @@ Public Class mgrRestore
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_NoVerify, oBackupInfo.Name), False, ToolTipIcon.Info, True)
End If
End If
Return True
End Function
@@ -268,8 +262,8 @@ Public Class mgrRestore
If bRestoreCompleted Then
'Save Local Manifest
If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local)
If mgrManifest.DoGlobalManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
+148 -20
View File
@@ -72,15 +72,18 @@ Public Class mgrSQLite
'Add Tables (Settings)
sSql = "CREATE TABLE settings (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, CheckSum BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);"
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL);"
'Add Tables (SavedPath)
sSql &= "CREATE TABLE savedpath (PathName TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
'Add Tables (Monitor List)
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, PRIMARY KEY(Name, Process));"
'Add Tables (Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
@@ -92,7 +95,7 @@ Public Class mgrSQLite
sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
'Add Tables (Local Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Set Version
@@ -111,16 +114,16 @@ Public Class mgrSQLite
Try
'Create the DB
SQLiteConnection.CreateFile(sDatabaseLocation)
SqliteConnection.CreateFile(sDatabaseLocation)
'Add Tables (Remote Monitor List)
sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, PRIMARY KEY(Name, Process));"
'Add Tables (Remote Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Add Tables (Remote Tags)
@@ -155,7 +158,7 @@ Public Class mgrSQLite
Public Sub Connect()
If CheckDB() Then
db = New SQLiteConnection(sConnectString)
db = New SqliteConnection(sConnectString)
db.Open()
Else
CreateDB()
@@ -167,18 +170,27 @@ Public Class mgrSQLite
db.Close()
End Sub
Private Sub BuildParams(ByRef command As SQLiteCommand, ByRef hshParams As Hashtable)
Private Sub RollBack(ByRef trans As SqliteTransaction)
Try
trans.Rollback()
Catch
'SQLite may or may not perform an auto-rollback when certain failures occur, such as disk full or out of memory.
'Multiple rollbacks will cause an exception, therefore lets just do nothing when that happens.
End Try
End Sub
Private Sub BuildParams(ByRef command As SqliteCommand, ByRef hshParams As Hashtable)
For Each de As DictionaryEntry In hshParams
command.Parameters.AddWithValue(de.Key, de.Value)
Next
End Sub
Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean
Dim trans As SQLiteTransaction
Dim command As SQLiteCommand
Dim trans As SqliteTransaction
Dim command As SqliteCommand
Connect()
command = New SQLiteCommand(sSQL, db)
command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams)
trans = db.BeginTransaction()
@@ -186,7 +198,7 @@ Public Class mgrSQLite
command.ExecuteNonQuery()
trans.Commit()
Catch ex As Exception
trans.Rollback()
RollBack(trans)
mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Return False
Finally
@@ -198,11 +210,11 @@ Public Class mgrSQLite
End Function
Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean
Dim trans As SQLiteTransaction
Dim command As SQLiteCommand
Dim trans As SqliteTransaction
Dim command As SqliteCommand
Connect()
command = New SQLiteCommand(sSQL, db)
command = New SqliteCommand(sSQL, db)
trans = db.BeginTransaction()
Try
@@ -212,7 +224,7 @@ Public Class mgrSQLite
Next
trans.Commit()
Catch ex As Exception
trans.Rollback()
RollBack(trans)
mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Return False
Finally
@@ -224,12 +236,12 @@ Public Class mgrSQLite
End Function
Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet
Dim adapter As SQLiteDataAdapter
Dim command As SQLiteCommand
Dim adapter As SqliteDataAdapter
Dim command As SqliteCommand
Dim oData As New DataSet
Connect()
command = New SQLiteCommand(sSQL, db)
command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams)
Try
@@ -556,6 +568,118 @@ Public Class mgrSQLite
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
'1.01 Upgrade
If GetDatabaseVersion() < 101 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v98")
'Remove checksum field
sSQL = "CREATE TABLE settings_new (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);"
sSQL &= "INSERT INTO settings_new (SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog) " &
"SELECT SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoRestore BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoMark BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v98")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'1.02 Upgrade
If GetDatabaseVersion() < 102 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v101")
'Add Table (SavedPath)
sSQL = "CREATE TABLE savedpath (PathName TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN Parameter TEXT;"
sSQL &= "PRAGMA user_version=102"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v101")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN Parameter TEXT;"
sSQL &= "PRAGMA user_version=102"
RunParamQuery(sSQL, New Hashtable)
End If
End If
End Sub
Public Function GetDBSize() As Long
@@ -563,6 +687,10 @@ Public Class mgrSQLite
Return Math.Round(oFileInfo.Length / 1024, 2)
End Function
Public Function ReportVersion() As String
Return SqliteConnection.SQLiteVersion
End Function
Public Sub CompactDatabase()
Dim sSQL As String
Dim command As SQLiteCommand
+54
View File
@@ -0,0 +1,54 @@
Public Class mgrSavedPath
Private Shared Function MapToObject(ByVal dr As DataRow) As clsSavedPath
Dim oSavedPath As New clsSavedPath
oSavedPath.PathName = CStr(dr("PathName"))
oSavedPath.Path = CStr(dr("Path"))
Return oSavedPath
End Function
Private Shared Function SetCoreParameters(ByVal oSavedPath As clsSavedPath) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("PathName", oSavedPath.PathName)
hshParams.Add("Path", oSavedPath.Path)
Return hshParams
End Function
Public Shared Function GetPathByName(ByVal sPathName As String) As clsSavedPath
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oSavedPath As New clsSavedPath
sSQL = "SELECT PathName, Path from savedpath WHERE PathName=@PathName;"
hshParams.Add("PathName", sPathName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oSavedPath = MapToObject(dr)
Next
Return oSavedPath
End Function
Public Shared Sub AddUpdatePath(ByVal oSavedPath As clsSavedPath)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "INSERT OR REPLACE INTO savedpath (PathName, Path) VALUES (@PathName, @Path);"
hshParams = SetCoreParameters(oSavedPath)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
End Class
+26 -14
View File
@@ -9,8 +9,9 @@ Public Class mgrSettings
Private bCreateSubFolder As Boolean = False
Private bShowOverwriteWarning As Boolean = True
Private bRestoreOnLaunch As Boolean = False
Private bAutoRestore As Boolean = False
Private bAutoMark As Boolean = False
Private bSync As Boolean = True
Private bCheckSum As Boolean = True
Private bTimeTracking As Boolean = True
Private bSupressBackup As Boolean = False
Private iSupressBackupThreshold As Integer = 10
@@ -93,6 +94,24 @@ Public Class mgrSettings
End Set
End Property
Property AutoRestore As Boolean
Get
Return bAutoRestore
End Get
Set(value As Boolean)
bAutoRestore = value
End Set
End Property
Property AutoMark As Boolean
Get
Return bAutoMark
End Get
Set(value As Boolean)
bAutoMark = value
End Set
End Property
Property Sync As Boolean
Get
Return bSync
@@ -102,15 +121,6 @@ Public Class mgrSettings
End Set
End Property
Property CheckSum As Boolean
Get
Return bCheckSum
End Get
Set(value As Boolean)
bCheckSum = value
End Set
End Property
Property TimeTracking As Boolean
Get
Return bTimeTracking
@@ -249,9 +259,9 @@ Public Class mgrSettings
oDatabase.RunParamQuery(sSQL, New Hashtable)
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @CheckSum, @StartWithWindows, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @StartWithWindows, "
sSQL &= "@TimeTracking, @SupressBackup, @SupressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields,@AutoSaveLog)"
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray)
@@ -262,7 +272,6 @@ Public Class mgrSettings
hshParams.Add("RestoreOnLaunch", RestoreOnLaunch)
hshParams.Add("BackupFolder", BackupFolder)
hshParams.Add("Sync", Sync)
hshParams.Add("CheckSum", CheckSum)
hshParams.Add("StartWithWindows", StartWithWindows)
hshParams.Add("TimeTracking", TimeTracking)
hshParams.Add("SupressBackup", SupressBackup)
@@ -272,6 +281,8 @@ Public Class mgrSettings
hshParams.Add("Custom7zLocation", Custom7zLocation)
hshParams.Add("SyncFields", SyncFields)
hshParams.Add("AutoSaveLog", AutoSaveLog)
hshParams.Add("AutoRestore", AutoRestore)
hshParams.Add("AutoMark", AutoMark)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
@@ -295,7 +306,6 @@ Public Class mgrSettings
RestoreOnLaunch = CBool(dr("RestoreOnLaunch"))
BackupFolder = CStr(dr("BackupFolder"))
Sync = CBool(dr("Sync"))
CheckSum = CBool(dr("CheckSum"))
StartWithWindows = CBool(dr("StartWithWindows"))
TimeTracking = CBool(dr("TimeTracking"))
SupressBackup = CBool(dr("SupressBackup"))
@@ -305,6 +315,8 @@ Public Class mgrSettings
If Not IsDBNull(dr("Custom7zLocation")) Then Custom7zLocation = CStr(dr("Custom7zLocation"))
SyncFields = CInt(dr("SyncFields"))
AutoSaveLog = CBool(dr("AutoSaveLog"))
AutoRestore = CBool(dr("AutoRestore"))
AutoMark = CBool(dr("AutoMark"))
Next
oDatabase.Disconnect()
+27 -15
View File
@@ -1,26 +1,44 @@
Public Class mgrTags
Private Shared Function MapToObject(ByVal dr As DataRow) As clsTag
Dim oTag As New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
Return oTag
End Function
Private Shared Function SetCoreParameters(ByVal oTag As clsTag) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name)
Return hshParams
End Function
Public Shared Sub DoTagAdd(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "INSERT INTO tags VALUES (@ID, @Name)"
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name)
hshParams = SetCoreParameters(oTag)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoTagUpdate(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "UPDATE tags SET Name=@Name "
sSQL &= "WHERE TagID = @ID"
hshParams.Add("Name", oTag.Name)
hshParams.Add("ID", oTag.ID)
hshParams = SetCoreParameters(oTag)
oDatabase.RunParamQuery(sSQL, hshParams)
@@ -57,9 +75,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
oTag = MapToObject(dr)
Next
Return oTag
@@ -80,9 +96,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
oTag = MapToObject(dr)
Next
Return oTag
@@ -124,9 +138,7 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
oTag = MapToObject(dr)
hshList.Add(oTag.Name, oTag)
Next
+27 -20
View File
@@ -1,5 +1,25 @@
Public Class mgrVariables
Private Shared Function MapToObject(ByVal dr As DataRow) As clsPathVariable
Dim oCustomVariable As New clsPathVariable
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
Return oCustomVariable
End Function
Private Shared Function SetCoreParameters(ByVal oCustomVariable As clsPathVariable) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oCustomVariable.ID)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
Return hshParams
End Function
Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
@@ -15,26 +35,22 @@
Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)"
hshParams.Add("ID", oCustomVariable.ID)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
hshParams = SetCoreParameters(oCustomVariable)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim hshParams As Hashtable
sSQL = "UPDATE variables SET Name=@Name, Path = @Path "
sSQL &= "WHERE VariableID = @ID"
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
hshParams.Add("ID", oCustomVariable.ID)
hshParams = SetCoreParameters(oCustomVariable)
oDatabase.RunParamQuery(sSQL, hshParams)
@@ -69,10 +85,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
oCustomVariable = MapToObject(dr)
Next
Return oCustomVariable
@@ -93,10 +106,7 @@
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
oCustomVariable = MapToObject(dr)
Next
Return oCustomVariable
@@ -138,10 +148,7 @@
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
oCustomVariable = MapToObject(dr)
hshList.Add(oCustomVariable.Name, oCustomVariable)
Next
+2
View File
@@ -28,6 +28,8 @@ Public Class mgrXML
oGame.FolderSave = g.FolderSave
oGame.FileType = g.FileType
oGame.ExcludeList = g.ExcludeList
oGame.MonitorOnly = g.MonitorOnly
oGame.Parameter = g.Parameter
For Each t As Tag In g.Tags
oGame.ImportTags.Add(t)
Next
+3 -3
View File
@@ -14,7 +14,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyDescription("Game Backup Monitor")>
<Assembly: AssemblyCompany("Michael J. Seiferling")>
<Assembly: AssemblyProduct("Game Backup Monitor")>
<Assembly: AssemblyCopyright("Copyright © 2016 Michael J. Seiferling")>
<Assembly: AssemblyCopyright("Copyright © 2017 Michael J. Seiferling")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("0.97.*")>
<Assembly: AssemblyFileVersion("0.97.0.0")>
<Assembly: AssemblyVersion("1.0.4.*")>
<Assembly: AssemblyFileVersion("1.0.4.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")>
+680 -104
View File
File diff suppressed because it is too large Load Diff
+243 -51
View File
@@ -122,7 +122,7 @@
<value>..\Resources\Admin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="frmMain_About" xml:space="preserve">
<value>Game Backup Monitor[BR]Version: [PARAM] Beta ([PARAM])[BR]Build: [PARAM][BR][PARAM][BR][BR]This program comes with ABSOLUTELY NO WARRANTY.[BR]This is free software, and you are welcome to redistribute it under certain conditions.[BR][BR]See gpl-3.0.html in the program folder for details.</value>
<value>Game Backup Monitor[BR]Version: [PARAM] ([PARAM])[BR]Build: [PARAM][BR]SQLite: [PARAM][BR][BR][PARAM][BR][BR]This program comes with ABSOLUTELY NO WARRANTY.[BR]This is free software, and you are welcome to redistribute it under certain conditions.[BR][BR]See gpl-3.0.html in the program folder for details.</value>
</data>
<data name="frmMain_ManifestAreadyClean" xml:space="preserve">
<value>The local manifest is clean.</value>
@@ -287,10 +287,10 @@
<value>Multiple Games Detected</value>
</data>
<data name="frmMain_NewSaveNotificationMulti" xml:space="preserve">
<value>[PARAM] New Saves Pending</value>
<value>[PARAM] New Backups Pending</value>
</data>
<data name="frmMain_NewSaveNotificationSingle" xml:space="preserve">
<value>[PARAM] New Save Pending</value>
<value>[PARAM] New Backup Pending</value>
</data>
<data name="frmMain_NoDetails" xml:space="preserve">
<value>Game details are unavailable.</value>
@@ -424,14 +424,8 @@
<data name="App_ConfirmDirty" xml:space="preserve">
<value>There are unsaved changes on this form. Do you want to save?</value>
</data>
<data name="App_KB" xml:space="preserve">
<value>[PARAM] KB</value>
</data>
<data name="App_MB" xml:space="preserve">
<value>[PARAM] MB</value>
</data>
<data name="frmGameManager_BackupTimeAndName" xml:space="preserve">
<value>[PARAM] by [PARAM]</value>
<value>[PARAM] ([PARAM])</value>
</data>
<data name="frmGameManager_btnAdd" xml:space="preserve">
<value>+</value>
@@ -503,7 +497,7 @@
<value>Monitor only</value>
</data>
<data name="frmGameManager_chkTimeStamp" xml:space="preserve">
<value>Timestamp each backup</value>
<value>Save multiple backups</value>
</data>
<data name="frmGameManager_ChooseCustomIcon" xml:space="preserve">
<value>Choose a custom icon for the game</value>
@@ -527,10 +521,7 @@
<value>Are you sure you want to run a backup for [PARAM]? This will close the form.</value>
</data>
<data name="frmGameManager_ConfirmBackupDelete" xml:space="preserve">
<value>This will delete the backup file and all records of this backup. This cannot be undone. [BR][BR]Do you want to remove the data for [PARAM]?</value>
</data>
<data name="frmGameManager_ConfirmBackupFolderDelete" xml:space="preserve">
<value>The backup folder [PARAM] still contains [PARAM] directories and [PARAM] files.[BR][BR]Do you want to delete the contents and remove the sub-folder for this game?</value>
<value>This will delete the selected backup file. This cannot be undone. [BR][BR]Do you want to delete [PARAM]?</value>
</data>
<data name="frmGameManager_ConfirmGameDelete" xml:space="preserve">
<value>Are you sure you want to delete [PARAM]? This cannot be undone.[BR][BR]This will not delete any backup files that already exist for this game.</value>
@@ -616,11 +607,11 @@
<data name="frmGameManager_lblCompany" xml:space="preserve">
<value>Company:</value>
</data>
<data name="frmGameManager_lblCurrentBackup" xml:space="preserve">
<value>Current Backup:</value>
<data name="frmGameManager_lblRemote" xml:space="preserve">
<value>Backup Data:</value>
</data>
<data name="frmGameManager_lblFileSize" xml:space="preserve">
<value>Backup Size:</value>
<data name="frmGameManager_lblBackupFile" xml:space="preserve">
<value>Backup File:</value>
</data>
<data name="frmGameManager_lblGamePath" xml:space="preserve">
<value>Game Path:</value>
@@ -631,8 +622,8 @@
<data name="frmGameManager_lblIcon" xml:space="preserve">
<value>Icon:</value>
</data>
<data name="frmGameManager_lblLastBackup" xml:space="preserve">
<value>Local Backup:</value>
<data name="frmGameManager_lblLocalData" xml:space="preserve">
<value>Local Data:</value>
</data>
<data name="frmGameManager_lblName" xml:space="preserve">
<value>Name:</value>
@@ -649,8 +640,8 @@
<data name="frmGameManager_lblVersion" xml:space="preserve">
<value>Version:</value>
</data>
<data name="frmGameManager_Never" xml:space="preserve">
<value>Never</value>
<data name="frmGameManager_None" xml:space="preserve">
<value>None</value>
</data>
<data name="frmGameManager_optAllGames" xml:space="preserve">
<value>All</value>
@@ -662,7 +653,7 @@
<value>Custom</value>
</data>
<data name="frmGameManager_optPendingRestores" xml:space="preserve">
<value>New Saves Pending</value>
<value>New Backups Pending</value>
</data>
<data name="frmGameManager_OutofSync" xml:space="preserve">
<value>Out of Sync</value>
@@ -704,10 +695,10 @@
<value>...</value>
</data>
<data name="frmAddWizard_chkFolderSave" xml:space="preserve">
<value>Save Entire Folder</value>
<value>Save entire folder</value>
</data>
<data name="frmAddWizard_chkTimeStamp" xml:space="preserve">
<value>Time Stamp Backup</value>
<value>Save multiple backups</value>
</data>
<data name="frmAddWizard_ChooseProcess" xml:space="preserve">
<value>Choose exe file that starts the game</value>
@@ -809,7 +800,7 @@
<value>Choose Files to Backup</value>
</data>
<data name="frmAddWizard_lblStep3Instructions" xml:space="preserve">
<value>If you're unsure of exactly which files to backup, make sure Save Entire Folder is checked. You can also time stamp your backup files to make incremental backups.</value>
<value>If you're unsure of exactly which files to backup, make sure Save entire folder is checked. You can also choose to save multiple backups and set a limit on how many to keep.</value>
</data>
<data name="frmAddWizard_lblStep3Intro" xml:space="preserve">
<value>Choose the location of your game's save files:</value>
@@ -854,7 +845,7 @@
<value>Save Path</value>
</data>
<data name="frmAddWizard_Summary_Timestamp" xml:space="preserve">
<value>Timestamp</value>
<value>Multiple Backups</value>
</data>
<data name="frmAdvancedImport_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
@@ -904,18 +895,9 @@
<data name="frmFilter_FormName" xml:space="preserve">
<value>Custom Filter</value>
</data>
<data name="frmFilter_lblCompany" xml:space="preserve">
<value>Company:</value>
</data>
<data name="frmFilter_lblGameTags" xml:space="preserve">
<value>Current Filter</value>
</data>
<data name="frmFilter_lblName" xml:space="preserve">
<value>Name:</value>
</data>
<data name="frmFilter_lblProcess" xml:space="preserve">
<value>Process:</value>
</data>
<data name="frmFilter_lblTags" xml:space="preserve">
<value>Available Tags</value>
</data>
@@ -923,18 +905,18 @@
<value>All Tags</value>
</data>
<data name="frmFilter_optAnd" xml:space="preserve">
<value>And</value>
<value>All</value>
</data>
<data name="frmFilter_optAny" xml:space="preserve">
<value>Any Tag</value>
</data>
<data name="frmFilter_optGameInfo" xml:space="preserve">
<data name="frmFilter_chkGameInfo" xml:space="preserve">
<value>Game Information</value>
</data>
<data name="frmFilter_optOr" xml:space="preserve">
<value>Or</value>
<value>Any</value>
</data>
<data name="frmFilter_optTag" xml:space="preserve">
<data name="frmFilter_chkTag" xml:space="preserve">
<value>Tag</value>
</data>
<data name="frmGameTags_btnAdd" xml:space="preserve">
@@ -1024,8 +1006,8 @@
<data name="frmIncludeExclude_ToolTipTitle" xml:space="preserve">
<value>Saved Game Explorer</value>
</data>
<data name="frmFilter_grpGameInfoOptions" xml:space="preserve">
<value>Options</value>
<data name="frmFilter_grpFilterType" xml:space="preserve">
<value>Filter Type</value>
</data>
<data name="frmFilter_grpTagOptions" xml:space="preserve">
<value>Options</value>
@@ -1078,9 +1060,6 @@
<data name="frmSettings_chkBackupConfirm" xml:space="preserve">
<value>Disable backup confirmation</value>
</data>
<data name="frmSettings_chkCheckSum" xml:space="preserve">
<value>Verify backup files with a checksum</value>
</data>
<data name="frmSettings_chkCreateFolder" xml:space="preserve">
<value>Create a sub-folder for each game</value>
</data>
@@ -1090,8 +1069,8 @@
<data name="frmSettings_chkOverwriteWarning" xml:space="preserve">
<value>Show overwrite warning</value>
</data>
<data name="frmSettings_chkRestoreOnLaunch" xml:space="preserve">
<value>Notify when there are new backup files to restore</value>
<data name="frmSettings_chkRestoreNotify" xml:space="preserve">
<value>Display notifications about new backups</value>
</data>
<data name="frmSettings_chkShowDetectionTips" xml:space="preserve">
<value>Show detection notifications</value>
@@ -1309,8 +1288,8 @@
<data name="mgrBackup_BackupInProgress" xml:space="preserve">
<value>Backup of [PARAM] in progress...</value>
</data>
<data name="mgrBackup_BackupWarnings" xml:space="preserve">
<value>[PARAM] backup finished with warnings or errors.</value>
<data name="mgrBackup_7zWarnings" xml:space="preserve">
<value>[PARAM] backup completed with warnings.</value>
</data>
<data name="mgrBackup_ConfirmManifestConflict" xml:space="preserve">
<value>The manifest shows the backup folder contains a backup for [PARAM] that has not been restored on this computer.[BR][BR]Do you want to overwrite this file anyway?</value>
@@ -1652,7 +1631,7 @@
<value>Monitor this game</value>
</data>
<data name="frmSyncFields_chkTimeStamp" xml:space="preserve">
<value>Time stamp each backup</value>
<value>Save multiple backups</value>
</data>
<data name="frmSyncFields_chkVersion" xml:space="preserve">
<value>Version</value>
@@ -1693,4 +1672,217 @@
<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>
<data name="frmGameManager_chkCleanFolder" xml:space="preserve">
<value>Delete folder on restore</value>
</data>
<data name="frmMain_AutoMark" xml:space="preserve">
<value>The saved game folder for [PARAM] does not exist or could not be determined, the backup has been automatically marked as restored.</value>
</data>
<data name="frmMain_RestoreNotReady" xml:space="preserve">
<value>The backup file for [PARAM] is not ready to restore.</value>
</data>
<data name="frmSettings_chkAutoMark" xml:space="preserve">
<value>Automatically mark new backups as restored when appropriate</value>
</data>
<data name="frmSettings_grpBackupHandling" xml:space="preserve">
<value>Backup Handling</value>
</data>
<data name="frmSettings_chkAutoRestore" xml:space="preserve">
<value>Automatically restore new backups</value>
</data>
<data name="frmMain_AutoRestoreFailure" xml:space="preserve">
<value>[PARAM] has multiple configurations and cannot be automatically restored.</value>
</data>
<data name="frmMain_RestoreNotificationMulti" xml:space="preserve">
<value>[PARAM] new saved game backups are being automatically restored.</value>
</data>
<data name="frmMain_RestoreNotificationSingle" xml:space="preserve">
<value>A new saved game backup for [PARAM] is being automatically restored.</value>
</data>
<data name="frmMain_NoAutoMark" xml:space="preserve">
<value>The saved game folder for [PARAM] does not exist or could not be determined, this backup has been skipped.</value>
</data>
<data name="frmMain_NoCheckSum" xml:space="preserve">
<value>The backup file for [PARAM] has no checksum, it cannot be automatically restored.</value>
</data>
<data name="mgrBackup_ConfirmDiskSpace" xml:space="preserve">
<value>You may not have enough disk space available to perform a backup.[BR][BR]Do you want to continue anyway?</value>
</data>
<data name="mgrBackup_ErrorDiskSpace" xml:space="preserve">
<value>Backup aborted due to lack of disk space.</value>
</data>
<data name="mgrCommon_AvailableDiskSpace" xml:space="preserve">
<value>Available Disk Space: [PARAM]</value>
</data>
<data name="mgrCommon_GB" xml:space="preserve">
<value>[PARAM] GB</value>
</data>
<data name="mgrCommon_KB" xml:space="preserve">
<value>[PARAM] KB</value>
</data>
<data name="mgrCommon_MB" xml:space="preserve">
<value>[PARAM] MB</value>
</data>
<data name="mgrCommon_PB" xml:space="preserve">
<value>[PARAM] PB</value>
</data>
<data name="mgrCommon_SavedGameFolderSize" xml:space="preserve">
<value>[PARAM] Save Folder Size: [PARAM]</value>
</data>
<data name="mgrCommon_TB" xml:space="preserve">
<value>[PARAM] TB</value>
</data>
<data name="frmGameManager_lblParameter" xml:space="preserve">
<value>Parameter:</value>
</data>
<data name="frmGameManager_ErrorProcessParameterDupe" xml:space="preserve">
<value>A game with this exact process and parameter already exists.</value>
</data>
<data name="mgrCommon_B" xml:space="preserve">
<value>[PARAM] B</value>
</data>
<data name="mgrBackup_7zCommandFailure" xml:space="preserve">
<value>[PARAM] backup failed due to a malformed command.</value>
</data>
<data name="mgrBackup_7zFatalError" xml:space="preserve">
<value>[PARAM] backup failed due to an error.</value>
</data>
<data name="App_ErrorFocus" xml:space="preserve">
<value>GBM is busy with an open window on your desktop.</value>
</data>
<data name="frmFilter_grpSorting" xml:space="preserve">
<value>Sorting</value>
</data>
<data name="frmFilter_optSortAsc" xml:space="preserve">
<value>Ascending</value>
</data>
<data name="frmFilter_optSortDesc" xml:space="preserve">
<value>Descending</value>
</data>
<data name="frmFilter_FieldCompany" xml:space="preserve">
<value>Company</value>
</data>
<data name="frmFilter_FieldHours" xml:space="preserve">
<value>Hours</value>
</data>
<data name="frmFilter_FieldName" xml:space="preserve">
<value>Name</value>
</data>
<data name="frmFilter_FieldProcess" xml:space="preserve">
<value>Process</value>
</data>
<data name="frmFilter_btnAddFilter" xml:space="preserve">
<value>Add</value>
</data>
<data name="frmFilter_btnRemoveFilter" xml:space="preserve">
<value>Remove</value>
</data>
<data name="frmFilter_FieldParameter" xml:space="preserve">
<value>Parameter</value>
</data>
<data name="frmFilter_FieldVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="frmFilter_lblCurrentFilters" xml:space="preserve">
<value>Current Filters</value>
</data>
<data name="frmFilter_lblFields" xml:space="preserve">
<value>Available Fields</value>
</data>
<data name="frmFilter_lblFilterData" xml:space="preserve">
<value>Filter</value>
</data>
<data name="frmFilter_cboBoolFilterDisabled" xml:space="preserve">
<value>Disabled</value>
</data>
<data name="frmFilter_cboBoolFilterEnabled" xml:space="preserve">
<value>Enabled</value>
</data>
<data name="frmFilter_FieldBackupLimit" xml:space="preserve">
<value>Backup Limit *</value>
</data>
<data name="frmFilter_FieldCleanFolder" xml:space="preserve">
<value>Delete Folder on Restore</value>
</data>
<data name="frmFilter_FieldEnabled" xml:space="preserve">
<value>Monitor Game</value>
</data>
<data name="frmFilter_FieldExcludeList" xml:space="preserve">
<value>Exclude Items</value>
</data>
<data name="frmFilter_FieldFileType" xml:space="preserve">
<value>Include Items</value>
</data>
<data name="frmFilter_FieldFolderSave" xml:space="preserve">
<value>Save Entire Folder</value>
</data>
<data name="frmFilter_FieldIcon" xml:space="preserve">
<value>Icon</value>
</data>
<data name="frmFilter_FieldMonitorOnly" xml:space="preserve">
<value>Monitor Only</value>
</data>
<data name="frmFilter_FieldPath" xml:space="preserve">
<value>Save Path *</value>
</data>
<data name="frmFilter_FieldProcessPath" xml:space="preserve">
<value>Game Path</value>
</data>
<data name="frmFilter_FieldTimeStamp" xml:space="preserve">
<value>Save Multiple Backups</value>
</data>
<data name="frmFilter_lblSortsFields" xml:space="preserve">
<value>Available Fields</value>
</data>
<data name="frmFilter_lblWarning" xml:space="preserve">
<value>* Indicates a field that may give unexpected results.</value>
</data>
<data name="frmFilter_lstFilterContains" xml:space="preserve">
<value>contains</value>
</data>
<data name="frmFilter_grpSortOptions" xml:space="preserve">
<value>Sort Options</value>
</data>
</root>
+13 -19
View File
@@ -1,26 +1,20 @@
Game Backup Monitor v0.97 Readme
Game Backup Monitor v1.04 Readme
http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
June 30, 2016
September 26, 2017
Disclaimer:
New in 1.04
This is beta release software. You may still encounter some bugs.
New in 0.97
- (All) Re-designed the Settings screen as a standard preference panel interface.
- (Windows) Updated GBM's version of 7-Zip to 16.02 (2016-05-21)
- (All) Custom arguments and switches can now be added to GBM's 7-Zip commands.
- (All) Custom versions of 7-Zip Console (7za) can now be used as a supported feature.
- (Windows) GBM's packaged version(s) of 7-Zip Console (7za) are now verified as a simple security feature.
- (All) A "Set Defaults" button is now available on the Settings screen.
- (All) Optional data fields such as "Company" and "Version" can now be included in the sync.
- (All) Reduced the maximum length of the session log to improve performance and added a setting to control log autosaves.
- (All) A "Quick Filter" has been added to the Game Manager. You can now quickly find a game by typing the name as soon as you open the window.
- (Linux) An official game list is now available for Linux, GBM will choose the official list based on your operating system.
For more information regarding Linux support read the FAQ at http://mikemaximus.github.io/gbm-web/linux.html
- (All) The import feature now detects most saved games currently on your PC and automatically selects configurations for you.
- (All) The Game Manager's "Custom Filter" feature has received a major overhaul:
- More fields are now available for use.
- Added the ability to combine different filters.
- Added the ability to set a sort field and order.
- The current filter is now saved when the Custom Filter window is closed and re-opened.
- (All) The "Monitor Only" feature has been updated. This feature allows tracking play time for games that do not require a backup, such as MMOs or CCGs.
- The Game Manager now disables and ignores validation on fields that aren't needed for a Monitor Only configuration.
- Monitor Only is now included in the XML Import / Export.
- Monitor Only configurations may now be included in the official game lists.
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.
+1 -1
View File
@@ -5,7 +5,7 @@
Game Backup Monitor is a simple, but flexible application that detects games as you play them. Once you finish playing a game, a backup of the saved games will be made automatically using 7-Zip compression. GBM can be used on a single computer, or on multiple computers to effectively add cloud support to any game or application.
**License**: GNU General Public License version 3.0 (GPLv3)<br />
**Language**: English Only<br />
**Language**: English ([Translation FAQ](http://mikemaximus.github.io/gbm-web/translations.html))<br />
**Platform**: Windows (.NET 4) & Linux (Mono)
[About Game Backup Monitor](http://mikemaximus.github.io/gbm-web/about.html) <br />