125 Commits

Author SHA1 Message Date
Michael J. Seiferling
7eab3b8841 Updated readme.txt for v1.1.2 2018-06-07 10:50:26 -06:00
Michael J. Seiferling
539009c5de Updated SQLite to 3.23.1 2018-05-20 21:07:00 -06:00
MikeMaximus
01b46107ad Fixed a possible issue with Game Manager quick filter 2018-05-12 23:14:31 -06:00
MikeMaximus
a5d2ce2255 Minor UI change for Game Manager 2018-05-07 20:59:06 -06:00
MikeMaximus
c0764d0c08 Fixed rare crash situation in Game Manager 2018-05-07 16:24:23 -06:00
MikeMaximus
35ea6fb74b Updated 7z to 18.05 / v1.1.1 Release 2018-05-04 08:45:55 -06:00
MikeMaximus
a51a7bea89 Merge pull request #128 from elonbing/master
Fixed minor typo ("manaul"=>"manual")
2018-04-25 15:45:37 -06:00
Elon Bing
b5f3408261 Fixed minor typo ("manaul"=>"manual") 2018-04-25 14:12:32 +02:00
MikeMaximus
f859449a99 Last minute database upgrade fixes 2018-04-01 08:40:17 -06:00
MikeMaximus
796f68d1a8 Added archive link to readme.txt 2018-03-31 09:30:21 -06:00
MikeMaximus
155759f7bd Minor message changes 2018-03-25 08:55:35 -06:00
MikeMaximus
405237f1d5 Fixed tab order issues on Settings 2018-03-22 09:03:23 -06:00
MikeMaximus
a0ba4637f2 Merge branch 'master' of https://github.com/MikeMaximus/gbm 2018-03-22 08:58:59 -06:00
MikeMaximus
76a11d8f2e Revert "Fixed tab order issues on Settings"
This reverts commit 48b4dbea43.
2018-03-22 08:58:42 -06:00
MikeMaximus
48b4dbea43 Fixed tab order issues on Settings 2018-03-22 08:56:52 -06:00
Michael J. Seiferling
e8b0650a9a Updated official configurations notice in readme.txt 2018-03-19 09:24:17 -06:00
Michael J. Seiferling
de157d516c Fixed a triggering spelling error 2018-03-19 08:38:26 -06:00
MikeMaximus
8ced2d157f Added "Disable sync event messages" setting and tweaked the Settings form 2018-03-18 22:33:40 -06:00
Michael J. Seiferling
4d83be9ef3 Updated some text and validation on Add Game Wizard 2018-03-17 16:10:13 -06:00
Michael J. Seiferling
52f7088ed7 Fixed some filename and path validation problems 2018-03-17 08:27:01 -06:00
Michael J. Seiferling
e07b2d226f Merge branch 'master' of https://github.com/MikeMaximus/gbm 2018-03-16 12:51:54 -06:00
Michael J. Seiferling
a5fe556108 Fixed potential issue with game ID sync 2018-03-16 12:51:05 -06:00
MikeMaximus
1d57bc0cc4 Added protection against empty syncs, fiddled with upgrade again 2018-03-16 11:04:54 -06:00
Michael J. Seiferling
907e3e309a Reverted prior database upgrade fix 2018-03-15 18:11:15 -06:00
Michael J. Seiferling
5cf6d1c270 Fixed border style on process manager 2018-03-15 16:16:07 -06:00
Michael J. Seiferling
189976e892 Fixed some database upgrade issues 2018-03-15 16:08:51 -06:00
Michael J. Seiferling
251ea3b060 Tweaks for issue #125 2018-03-13 11:58:44 -06:00
MikeMaximus
a2c96ee5e4 Merge pull request #126 from MikeMaximus/v1.1.0
Merge v1.1.0 into master
2018-03-12 20:19:16 -06:00
Michael J. Seiferling
79fd874f60 Updated readme.txt 2018-03-12 20:17:34 -06:00
MikeMaximus
2f66855166 Changes to new setting 2018-03-12 14:49:18 -06:00
Michael J. Seiferling
8e26e97fd4 Added file name option to settings 2018-03-12 13:03:32 -06:00
MikeMaximus
9eb095523e Fixed some settings and database update issues 2018-03-10 10:52:39 -06:00
MikeMaximus
5ae238360d Fixed process launching when dupes are detected 2018-03-09 09:01:16 -06:00
MikeMaximus
bba4d3a0a8 Fixed adding processes on a new game config 2018-03-09 08:50:36 -06:00
MikeMaximus
f4a54f8781 Minor label updates and updated readme.txt 2018-03-08 21:53:01 -06:00
MikeMaximus
108ab4931f Minor changes to process and tag features 2018-03-08 18:49:11 -06:00
MikeMaximus
28a260bdfc Added the ability to launch other processes when a game is detected 2018-03-08 16:02:58 -06:00
MikeMaximus
6461c80ae0 Updated import/id sync error handling and messaging 2018-03-08 09:04:48 -06:00
MikeMaximus
9807094af6 Fixed database upgrade issue 2018-03-07 12:41:21 -06:00
MikeMaximus
259cc2c5dd Removed unrequired parameter validation 2018-03-07 10:03:44 -06:00
MikeMaximus
c6ded1a349 Updated readme.txt with another known issue 2018-03-07 09:40:49 -06:00
MikeMaximus
7430551145 Added a known issue to readme.txt 2018-03-06 13:49:24 -06:00
MikeMaximus
b9244eeeae Added "Backup GBM data files on launch" feature 2018-03-06 13:19:47 -06:00
MikeMaximus
ebc185d7b8 Disable game id sync message when database is new 2018-03-06 10:24:12 -06:00
MikeMaximus
ad538da1d1 Fixed some issues with game id sync 2018-03-06 10:18:08 -06:00
MikeMaximus
95acce428a Added missing sync to tag updates 2018-03-06 10:02:47 -06:00
MikeMaximus
afb479044c Added icons to import 2018-03-06 10:02:15 -06:00
MikeMaximus
5245cc3ab3 Fixed database upgrade errors 2018-03-05 21:35:07 -06:00
MikeMaximus
4caa2df312 Fixed "Mark as Restored" functionality on Game Manager 2018-03-05 19:03:39 -06:00
MikeMaximus
7d874f0079 Added message supression support and refined game id sync 2018-03-05 18:58:51 -06:00
MikeMaximus
b23ace4b54 Updated game id sync confirmations 2018-03-05 13:51:32 -06:00
MikeMaximus
fe6b90311a Fixed duplicate check on game id sync 2018-03-05 13:06:50 -06:00
MikeMaximus
ddee737222 Added game id sync to import 2018-03-04 21:23:01 -06:00
MikeMaximus
2e5fa70f58 Fixed orphaned sessions issue when game id is changed 2018-03-04 09:43:49 -06:00
MikeMaximus
b76a7dd6ab Fixed orphaned tags issue when game id is changed 2018-03-04 09:27:00 -06:00
MikeMaximus
9907565145 Revised remote manifest updates 2018-03-03 20:04:59 -06:00
MikeMaximus
9a024349f5 Added Game ID to custom filter 2018-03-03 15:14:16 -06:00
MikeMaximus
7c73b27af0 Updated readme.txt with current changes 2018-03-03 09:22:27 -06:00
MikeMaximus
07b46f10f5 Removed "Clean Local Manifest" tool 2018-03-02 21:09:47 -06:00
MikeMaximus
c94b8b83da Fixed database upgrade for users with sync diabled 2018-03-02 19:23:07 -06:00
MikeMaximus
1b6b2fa3a0 Updates for sync becoming mandatory 2018-03-02 15:56:12 -06:00
MikeMaximus
609ee09cfa Added ability to edit game ID and updated validation 2018-03-02 12:00:00 -06:00
MikeMaximus
c2a752573a Fixed import crash when importing old xml files 2018-03-01 21:15:33 -06:00
MikeMaximus
b7b23cba4a Updated Import / Export / Sync with game id changes 2018-03-01 20:45:43 -06:00
MikeMaximus
848679c1b1 Fixed manifest issues with auto-restore and game manager 2018-03-01 13:42:26 -06:00
MikeMaximus
d07fc57dad Core changes for games and backup manifest 2018-03-01 10:11:32 -06:00
MikeMaximus
dff3432c27 Fixed possible database state problem after issue #123 2018-02-24 15:40:26 -06:00
MikeMaximus
b54f98d82b Fix for rename crash after issue #123 2018-02-24 15:09:42 -06:00
MikeMaximus
a745624e83 Tweaks for issue #125 2018-02-24 13:22:07 -06:00
MikeMaximus
2d0e4a136d Changes for #125 2018-02-24 11:13:21 -06:00
MikeMaximus
9f99b32200 Force LF for deb control and postinst script 2018-02-24 10:19:36 -06:00
MikeMaximus
866f6005dc Minor change for #125 and readme.txt update 2018-02-24 09:49:33 -06:00
MikeMaximus
dca86beebe Changes for issue #125 2018-02-24 09:28:06 -06:00
MikeMaximus
bb6e292c6f Re-done duplicate detection fixes for issue #98 2018-02-23 13:32:58 -06:00
MikeMaximus
0dbda50291 Updated CSV export for RFC 4180 2018-02-23 11:14:49 -06:00
MikeMaximus
1c54085d6c Changes for issue #123 (Pass 1) 2018-02-18 09:38:52 -06:00
Michael J. Seiferling
e897fda8e8 Force LF for makefile and sh 2018-02-17 08:36:06 -06:00
Michael J. Seiferling
978242d0dd Fixed more problems with issue #98 2018-02-14 10:23:18 -06:00
Michael J. Seiferling
1ab0e77918 Fixed detecting duplicate games with regex for issue #98 2018-02-13 20:22:03 -06:00
MikeMaximus
b3d9510edd Fixed some control locations on Game Manager 2018-02-11 10:48:58 -06:00
MikeMaximus
31b50afc84 Updated readme for v108 pre-release 2018-02-11 10:32:54 -06:00
MikeMaximus
7b17093cd8 Updated 7-Zip to 18.01 2018-02-08 10:03:47 -06:00
MikeMaximus
c63a188738 Fixed potential issue with parameter detection 2018-02-07 17:40:13 -06:00
MikeMaximus
e7b3f809f1 Added regex validation and help for issue #98 2018-02-06 09:40:57 -06:00
MikeMaximus
66d280df49 Changes for issue #98 2018-02-05 12:50:13 -06:00
MikeMaximus
7d4514c677 Merge pull request #122 from basxto/master
Fix line ending issues in shell scripts
2018-02-04 17:20:17 -06:00
Sebastian Riedel
2581883827 Fix line ending issues in shell scripts 2018-02-04 21:29:13 +01:00
MikeMaximus
248efa8878 Fixed some export issues 2018-02-02 10:28:17 -06:00
MikeMaximus
93517f5236 Updated readme.txt for v107 2018-02-02 09:32:52 -06:00
Michael J. Seiferling
5be80b2f02 Better fix for issue #94 2018-01-28 23:14:54 -06:00
Michael J. Seiferling
2f2177fb84 Fixed issue #94 again 2018-01-28 22:43:44 -06:00
MikeMaximus
636c1495a4 Fixed sessions form tab order 2018-01-20 14:09:15 -06:00
MikeMaximus
f69d10065a Changes for issue #121 2018-01-20 14:05:10 -06:00
MikeMaximus
99d70b96fb Cleaned up column sorting for cross-platform 2018-01-19 09:26:30 -06:00
MikeMaximus
f88cf1bd18 Linux sorting fix for issue #120 2018-01-18 14:08:22 -06:00
MikeMaximus
b4d9c84c36 Update version 2018-01-18 12:06:03 -06:00
MikeMaximus
5996e28edf Changes for issue #120 2018-01-18 12:04:48 -06:00
MikeMaximus
6b9ebaab36 Fixed issue #117 again 2018-01-18 09:17:14 -06:00
MikeMaximus
85588686cd Updated readme.txt for v106 2018-01-15 11:28:07 -06:00
Michael J. Seiferling
2cab8b7ec4 Stop resetting filters on session delete 2018-01-05 22:52:15 -06:00
MikeMaximus
93361bcd87 Fixed ignoring sessions 2018-01-01 10:57:23 -06:00
MikeMaximus
a89fdceb1a Fixed bad practice issues with sessions 2018-01-01 09:56:12 -06:00
MikeMaximus
fa2910e184 Updated version and copyright 2018-01-01 09:06:57 -06:00
MikeMaximus
ef6df6e89e Updated credits.txt 2018-01-01 09:05:29 -06:00
MikeMaximus
36af55cacc Added Start with Windows setting admin warning 2017-12-29 14:21:27 -06:00
MikeMaximus
f6a5d7bba1 Update makefile
Change deb DESTDIR
2017-12-29 14:05:12 -06:00
MikeMaximus
27917f5859 Merge pull request #118 from basxto/master
Add debian package
2017-12-29 14:01:35 -06:00
MikeMaximus
2c8e0a1275 Fix for session delete 2017-12-28 13:18:10 -06:00
MikeMaximus
04f7b76456 Reset settings form to normal DPI 2017-12-27 20:05:34 -06:00
MikeMaximus
477c1fa623 Changes for issue #117 2017-12-27 19:51:54 -06:00
MikeMaximus
a5d7d6697a Changes for issue #115 2017-12-27 17:03:00 -06:00
MikeMaximus
b1e6e7a9e6 Changes for issue #116 2017-12-27 16:23:50 -06:00
Sebastian Riedel
c8db7ae4e4 Correct run path for package manager installation 2017-12-27 15:31:06 +01:00
Sebastian Riedel
f9a9074e56 Adapt to changed package directory name 2017-12-27 14:42:02 +01:00
Sebastian Riedel
77df7cf3dc Merge branch 'deb' 2017-12-27 14:34:37 +01:00
Sebastian Riedel
1122499609 Update icon and application database after install 2017-12-27 14:33:31 +01:00
Sebastian Riedel
ecedda0779 Build .deb package with 'make deb' 2017-12-19 01:24:12 +01:00
MikeMaximus
40e36aaafd Merge pull request #113 from basxto/master
Start GBM via script
2017-12-18 15:41:36 -06:00
Sebastian Riedel
3c72799ceb Fix script path detection 2017-12-18 22:36:35 +01:00
Sebastian Riedel
0779132be9 Avoid wrong paths 2017-12-18 21:25:03 +01:00
Sebastian Riedel
35cb711ca1 Remove BASHisms from start script 2017-12-18 21:14:41 +01:00
Sebastian Riedel
aacda9eeb9 Use changeable paths 2017-12-15 01:20:10 +01:00
Sebastian Riedel
1ec5439c5d Fix checking for needed libraries 2017-12-14 23:19:55 +01:00
Sebastian Riedel
ebd7081b29 Merge github.com:MikeMaximus/gbm 2017-12-10 03:20:35 +01:00
Sebastian Riedel
03becc209c Run GBM.exe with a script 2017-11-19 22:31:55 +01:00
65 changed files with 5406 additions and 1048 deletions
+4
View File
@@ -1,6 +1,10 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
*.sh -text eol=lf
makefile -text eol=lf
control -text eol=lf
postinst -text eol=lf
* text=auto
###############################################################################
Vendored
+1 -2
View File
@@ -188,5 +188,4 @@ _Pvt_Extensions/
ModelManifest.xml
/.vs/slnx.sqlite
/.vs/VSWorkspaceState.json
/.vs/Game Backup Monitor/v15/sqlite3/storage.ide
/.vs/Game Backup Monitor/v15/sqlite3/storage.ide-journal
/.vs/Game Backup Monitor/v15
+20
View File
@@ -1,4 +1,5 @@
Public Class Game
Private sGameID As String
Private sGameName As String
Private sProcessName As String
Private sParameter As String
@@ -9,8 +10,18 @@
Private sExcludeList As String
Private bMonitorOnly As Boolean
Private sComments As String
Private bIsRegEx As Boolean
Private oTags As List(Of Tag)
Property ID As String
Set(value As String)
sGameID = value
End Set
Get
Return sGameID
End Get
End Property
Property Name As String
Set(value As String)
sGameName = value
@@ -101,6 +112,15 @@
End Get
End Property
Property IsRegEx As Boolean
Set(value As Boolean)
bIsRegEx = value
End Set
Get
Return bIsRegEx
End Get
End Property
Property Tags As List(Of Tag)
Get
Return oTags
@@ -0,0 +1,49 @@
Imports System.Xml.Serialization
<XmlRoot("Session")>
Public Class Session
Private sGame As String
Private sStart As String
Private sEnd As String
Private sHours As String
<XmlElement("Game")>
Public Property GameName As String
Set(value As String)
sGame = value
End Set
Get
Return sGame
End Get
End Property
<XmlElement("Start")>
Public Property StartDate As String
Set(value As String)
sStart = value
End Set
Get
Return sStart
End Get
End Property
<XmlElement("End")>
Public Property EndDate As String
Set(value As String)
sEnd = value
End Set
Get
Return sEnd
End Get
End Property
<XmlElement("Hours")>
Public Property Hours As String
Set(value As String)
sHours = value
End Set
Get
Return sHours
End Get
End Property
End Class
+11 -1
View File
@@ -1,5 +1,6 @@
Public Class clsBackup
Private sBackupID As String = Guid.NewGuid.ToString
Private sMonitorID As String = String.Empty
Private sName As String = String.Empty
Private sFileName As String = String.Empty
Private sRestorePath As String = String.Empty
@@ -9,7 +10,7 @@
Private sUpdatedBy As String = String.Empty
Private sCheckSum As String = String.Empty
Property ID As String
Property ManifestID As String
Get
Return sBackupID
End Get
@@ -18,6 +19,15 @@
End Set
End Property
Property MonitorID As String
Get
Return sMonitorID
End Get
Set(value As String)
sMonitorID = value
End Set
End Property
Property Name As String
Get
Return sName
+64 -12
View File
@@ -20,9 +20,10 @@ Public Class clsGame
Private bEnabled As Boolean = True
Private bMonitorOnly As Boolean = False
Private sComments As String = String.Empty
Private bIsRegEx As Boolean = False
Private bDuplicate As Boolean = False
Private bTempGame As Boolean = False
Private oImportTags As New List(Of Tag)
Private bImportUpdate As Boolean = False
<Flags()> Public Enum eOptionalSyncFields
None = 0
@@ -36,7 +37,9 @@ Public Class clsGame
Property ID As String
Set(value As String)
sGameID = value
If Not value Is Nothing Then
sGameID = mgrPath.ValidateFileNameForOS(value)
End If
End Set
Get
Return sGameID
@@ -45,7 +48,7 @@ Public Class clsGame
ReadOnly Property CompoundKey As String
Get
Return ProcessName & ":" & Name
Return ProcessName & ":" & ID
End Get
End Property
@@ -59,6 +62,12 @@ Public Class clsGame
End Get
End Property
ReadOnly Property FileSafeName As String
Get
Return mgrPath.ValidateFileNameForOS(sGameName)
End Get
End Property
Property Name As String
Set(value As String)
sGameName = value
@@ -230,6 +239,15 @@ Public Class clsGame
End Set
End Property
Property IsRegEx As Boolean
Get
Return bIsRegEx
End Get
Set(value As Boolean)
bIsRegEx = value
End Set
End Property
Property Duplicate As Boolean
Get
Return bDuplicate
@@ -251,15 +269,6 @@ Public Class clsGame
End Get
End Property
Property Temporary As Boolean
Get
Return bTempGame
End Get
Set(value As Boolean)
bTempGame = value
End Set
End Property
Property ImportTags As List(Of Tag)
Get
Return oImportTags
@@ -269,6 +278,15 @@ Public Class clsGame
End Set
End Property
Property ImportUpdate As Boolean
Get
Return bImportUpdate
End Get
Set(value As Boolean)
bImportUpdate = value
End Set
End Property
ReadOnly Property IncludeArray As String()
Get
If FileType = String.Empty Then
@@ -337,6 +355,9 @@ Public Class clsGame
If Comments <> oGame.Comments Then
Return False
End If
If IsRegEx <> oGame.IsRegEx Then
Return False
End If
'Optional Sync Fields
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
@@ -381,12 +402,43 @@ Public Class clsGame
If oGame Is Nothing Then
Return False
Else
'Core Fields
If ID <> oGame.ID Then
Return False
End If
If Name <> oGame.Name Then
Return False
End If
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
If FileType <> oGame.FileType Then
Return False
End If
If ExcludeList <> oGame.ExcludeList Then
Return False
End If
If AbsolutePath <> oGame.AbsolutePath Then
Return False
End If
If FolderSave <> oGame.FolderSave Then
Return False
End If
If MonitorOnly <> oGame.MonitorOnly Then
Return False
End If
If Comments <> oGame.Comments Then
Return False
End If
If IsRegEx <> oGame.IsRegEx Then
Return False
End If
Return True
End If
End Function
+22
View File
@@ -0,0 +1,22 @@
Public Class clsGameProcess
Private sProcessID As String
Private sMonitorID As String
Public Property ProcessID As String
Get
Return sProcessID
End Get
Set(value As String)
sProcessID = value
End Set
End Property
Public Property MonitorID As String
Get
Return sMonitorID
End Get
Set(value As String)
sMonitorID = value
End Set
End Property
End Class
+53
View File
@@ -0,0 +1,53 @@
<Serializable()>
Public Class clsProcess
Private sProcessID As String = Guid.NewGuid.ToString
Private sName As String = String.Empty
Private sPath As String = String.Empty
Private sArgs As String = String.Empty
Private bKill As Boolean = True
Public Property ID As String
Get
Return sProcessID
End Get
Set(value As String)
sProcessID = value
End Set
End Property
Public Property Name As String
Get
Return sName
End Get
Set(value As String)
sName = value
End Set
End Property
Public Property Path As String
Get
Return sPath
End Get
Set(value As String)
sPath = value
End Set
End Property
Public Property Args As String
Get
Return sArgs
End Get
Set(value As String)
sArgs = value
End Set
End Property
Public Property Kill As Boolean
Get
Return bKill
End Get
Set(value As Boolean)
bKill = value
End Set
End Property
End Class
+30 -17
View File
@@ -1,9 +1,8 @@
Public Class clsSession
Private sMonitorID As String
Private dStart As DateTime
Private dEnd As DateTime
Private sComputerName As String = My.Computer.Name
Private iStart As Int64
Private iEnd As Int64
Public Property MonitorID As String
Set(value As String)
@@ -14,31 +13,45 @@
End Get
End Property
Public Property SessionStart As DateTime
Public Property SessionStart As Int64
Set(value As Int64)
iStart = value
End Set
Get
Return iStart
End Get
End Property
Public WriteOnly Property SessionStartFromDate As DateTime
Set(value As DateTime)
dStart = value
iStart = mgrCommon.DateToUnix(value)
End Set
End Property
Public ReadOnly Property SessionStartFormatted As DateTime
Get
Return dStart
Return mgrCommon.UnixToDate(iStart)
End Get
End Property
Public Property SessionEnd As DateTime
Public Property SessionEnd As Int64
Set(value As Int64)
iEnd = value
End Set
Get
Return iEnd
End Get
End Property
Public WriteOnly Property SessionEndFromDate As DateTime
Set(value As DateTime)
dEnd = value
iEnd = mgrCommon.DateToUnix(value)
End Set
Get
Return dEnd
End Get
End Property
Public Property ComputerName As String
Set(value As String)
sComputerName = value
End Set
Public ReadOnly Property SessionEndFormatted As DateTime
Get
Return sComputerName
Return mgrCommon.UnixToDate(iEnd)
End Get
End Property
End Class
+2 -3
View File
@@ -124,9 +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" &
"re currently supported."
Me.lblStep1Instructions.Text = "You may drag and drop a shortcut here to complete this step, only Windows shortcu" &
"ts are currently supported."
'
'txtName
'
+8 -18
View File
@@ -195,10 +195,7 @@ Public Class frmAddWizard
End Sub
Private Function ValidateName(ByVal strName As String, ByRef sErrorMessage As String) As Boolean
If txtName.Text <> String.Empty Then
txtName.Text = mgrPath.ValidateForFileSystem(txtName.Text)
Return True
Else
If txtName.Text.Trim = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidName
txtName.Focus()
Return False
@@ -207,7 +204,9 @@ Public Class frmAddWizard
End Function
Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
strPath = mgrPath.ValidatePathForOS(strPath)
If strPath.Trim = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidProcess
txtProcessPath.Focus()
Return False
@@ -235,7 +234,9 @@ Public Class frmAddWizard
End Function
Private Function ValidateSavePath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
strPath = mgrPath.ValidatePathForOS(strPath)
If strPath.Trim = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidSavePath
txtSavePath.Focus()
Return False
@@ -257,7 +258,7 @@ Public Class frmAddWizard
End Function
Private Function ValidateSaveType(ByVal strSaveType As String, ByRef sErrorMessage As String)
If strSaveType = String.Empty Then
If strSaveType.Trim = String.Empty Then
sErrorMessage = frmAddWizard_ErrorValidSaveType
txtFileTypes.Focus()
Return False
@@ -267,22 +268,11 @@ Public Class frmAddWizard
End Function
Private Sub DoSave()
Dim hshDupeCheck As New Hashtable
Dim sNewGame As String = oGameToSave.ProcessName & ":" & oGameToSave.Name
For Each o As clsGame In GameData.Values
hshDupeCheck.Add(o.CompoundKey, String.Empty)
Next
If hshDupeCheck.Contains(sNewGame) Then
mgrCommon.ShowMessage(frmAddWizard_ErrorGameDupe, MsgBoxStyle.Exclamation)
Else
mgrMonitorList.DoListAdd(oGameToSave)
If mgrCommon.ShowMessage(frmAddWizard_ConfirmSaveTags, New String() {oGameToSave.Name, oGameToSave.Name}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
OpenTags(oGameToSave)
End If
Me.Close()
End If
End Sub
Private Sub ValidateBack()
+17 -2
View File
@@ -9,6 +9,7 @@ Public Class frmAdvancedImport
Private bSelectAll As Boolean = True
Private bIsLoading As Boolean = False
Private iCurrentSort As Integer = 0
Private oImageList As ImageList
Private WithEvents tmFilterTimer As Timer
Public Property ImportInfo As ExportData
@@ -82,9 +83,9 @@ Public Class frmAdvancedImport
sTags = sTags.TrimEnd(New Char() {",", " "})
oListViewItem = New ListViewItem(New String() {oApp.Name, oApp.TrueProcess, sTags})
oListViewItem.Tag = oApp.CompoundKey
oListViewItem.Tag = oApp.ID
If FinalData.ContainsKey(oApp.CompoundKey) Then
If FinalData.ContainsKey(oApp.ID) Then
oListViewItem.Checked = True
Else
oListViewItem.Checked = False
@@ -103,6 +104,13 @@ Public Class frmAdvancedImport
End If
End If
If oApp.ImportUpdate Then
oListViewItem.ImageIndex = 1
oListViewItem.Checked = True
Else
oListViewItem.ImageIndex = 0
End If
If sFilter = String.Empty Then
bAddItem = True
Else
@@ -156,6 +164,13 @@ Public Class frmAdvancedImport
btnImport.Text = frmAdvancedImport_btnImport
chkSelectAll.Text = frmAdvancedImport_chkSelectAll
'Set Icons
oImageList = New ImageList()
oImageList.Images.Add(Icon_New)
oImageList.Images.Add(Icon_Update)
lstGames.SmallImageList = oImageList
chkSelectAll.Checked = True
'Init Filter Timer
+3 -3
View File
@@ -2,16 +2,16 @@
Public Class frmChooseGame
Private oProcess As mgrProcesses
Private oProcess As mgrProcessDetection
Private oGame As clsGame
Private oGamesHash As New Hashtable
Private bGameSelected As Boolean = False
Property Process As mgrProcesses
Property Process As mgrProcessDetection
Get
Return oProcess
End Get
Set(value As mgrProcesses)
Set(value As mgrProcessDetection)
oProcess = value
End Set
End Property
+19
View File
@@ -132,6 +132,17 @@ Public Class frmFilter
Private Sub LoadFilterFields()
Dim oField As clsGameFilterField
'Game ID
oField = New clsGameFilterField
oField.FieldName = "MonitorID"
oField.FriendlyFieldName = frmFilter_FieldGameID
oField.Type = clsGameFilterField.eDataType.fString
oField.Status = clsGameFilterField.eFieldStatus.ValidSort
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Name
oField = New clsGameFilterField
oField.FieldName = "Name"
@@ -223,6 +234,14 @@ Public Class frmFilter
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'IsRegEx
oField = New clsGameFilterField
oField.FieldName = "IsRegEx"
oField.FriendlyFieldName = frmFilter_FieldIsRegEx
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Game Path
oField = New clsGameFilterField
oField.FieldName = "ProcessPath"
+97 -60
View File
@@ -28,6 +28,8 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox()
Me.btnGameID = New System.Windows.Forms.Button()
Me.chkRegEx = New System.Windows.Forms.CheckBox()
Me.lblComments = New System.Windows.Forms.Label()
Me.txtComments = New System.Windows.Forms.TextBox()
Me.txtParameter = New System.Windows.Forms.TextBox()
@@ -100,6 +102,7 @@ Partial Class frmGameManager
Me.cmsDeleteBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsDeleteOne = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
Me.btnProcesses = New System.Windows.Forms.Button()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
@@ -115,7 +118,7 @@ Partial Class frmGameManager
'
Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnAdd.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnAdd.Location = New System.Drawing.Point(12, 586)
Me.btnAdd.Location = New System.Drawing.Point(12, 626)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 4
@@ -126,7 +129,7 @@ Partial Class frmGameManager
'
Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDelete.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnDelete.Location = New System.Drawing.Point(48, 586)
Me.btnDelete.Location = New System.Drawing.Point(48, 626)
Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 5
@@ -136,7 +139,7 @@ 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, 586)
Me.btnBackup.Location = New System.Drawing.Point(616, 626)
Me.btnBackup.Name = "btnBackup"
Me.btnBackup.Size = New System.Drawing.Size(75, 23)
Me.btnBackup.TabIndex = 18
@@ -146,7 +149,7 @@ Partial Class frmGameManager
'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, 586)
Me.btnClose.Location = New System.Drawing.Point(697, 626)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 19
@@ -156,6 +159,8 @@ Partial Class frmGameManager
'grpConfig
'
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.btnGameID)
Me.grpConfig.Controls.Add(Me.chkRegEx)
Me.grpConfig.Controls.Add(Me.lblComments)
Me.grpConfig.Controls.Add(Me.txtComments)
Me.grpConfig.Controls.Add(Me.txtParameter)
@@ -181,97 +186,116 @@ Partial Class frmGameManager
Me.grpConfig.Enabled = False
Me.grpConfig.Location = New System.Drawing.Point(247, 12)
Me.grpConfig.Name = "grpConfig"
Me.grpConfig.Size = New System.Drawing.Size(525, 215)
Me.grpConfig.Size = New System.Drawing.Size(525, 258)
Me.grpConfig.TabIndex = 8
Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration"
'
'btnGameID
'
Me.btnGameID.Location = New System.Drawing.Point(402, 17)
Me.btnGameID.Name = "btnGameID"
Me.btnGameID.Size = New System.Drawing.Size(117, 23)
Me.btnGameID.TabIndex = 2
Me.btnGameID.Text = "&Game ID..."
Me.btnGameID.UseVisualStyleBackColor = True
'
'chkRegEx
'
Me.chkRegEx.AutoSize = True
Me.chkRegEx.Location = New System.Drawing.Point(402, 46)
Me.chkRegEx.Name = "chkRegEx"
Me.chkRegEx.Size = New System.Drawing.Size(117, 17)
Me.chkRegEx.TabIndex = 6
Me.chkRegEx.Text = "Regular Expression"
Me.chkRegEx.UseVisualStyleBackColor = True
'
'lblComments
'
Me.lblComments.AutoSize = True
Me.lblComments.Location = New System.Drawing.Point(7, 157)
Me.lblComments.Location = New System.Drawing.Point(7, 181)
Me.lblComments.Name = "lblComments"
Me.lblComments.Size = New System.Drawing.Size(59, 13)
Me.lblComments.TabIndex = 18
Me.lblComments.TabIndex = 19
Me.lblComments.Text = "Comments:"
'
'txtComments
'
Me.txtComments.Location = New System.Drawing.Point(70, 154)
Me.txtComments.Location = New System.Drawing.Point(70, 181)
Me.txtComments.Multiline = True
Me.txtComments.Name = "txtComments"
Me.txtComments.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtComments.Size = New System.Drawing.Size(413, 54)
Me.txtComments.TabIndex = 17
Me.txtComments.Size = New System.Drawing.Size(413, 71)
Me.txtComments.TabIndex = 20
'
'txtParameter
'
Me.txtParameter.Location = New System.Drawing.Point(333, 45)
Me.txtParameter.Location = New System.Drawing.Point(70, 71)
Me.txtParameter.Name = "txtParameter"
Me.txtParameter.Size = New System.Drawing.Size(150, 20)
Me.txtParameter.TabIndex = 7
Me.txtParameter.Size = New System.Drawing.Size(414, 20)
Me.txtParameter.TabIndex = 8
'
'lblParameter
'
Me.lblParameter.AutoSize = True
Me.lblParameter.Location = New System.Drawing.Point(269, 48)
Me.lblParameter.Location = New System.Drawing.Point(7, 74)
Me.lblParameter.Name = "lblParameter"
Me.lblParameter.Size = New System.Drawing.Size(58, 13)
Me.lblParameter.TabIndex = 6
Me.lblParameter.TabIndex = 7
Me.lblParameter.Text = "Parameter:"
'
'chkCleanFolder
'
Me.chkCleanFolder.AutoSize = True
Me.chkCleanFolder.Location = New System.Drawing.Point(329, 101)
Me.chkCleanFolder.Location = New System.Drawing.Point(330, 127)
Me.chkCleanFolder.Name = "chkCleanFolder"
Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17)
Me.chkCleanFolder.TabIndex = 13
Me.chkCleanFolder.TabIndex = 14
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.Location = New System.Drawing.Point(376, 157)
Me.lblLimit.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
Me.lblLimit.TabIndex = 16
Me.lblLimit.TabIndex = 18
Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False
'
'nudLimit
'
Me.nudLimit.Location = New System.Drawing.Point(329, 128)
Me.nudLimit.Location = New System.Drawing.Point(330, 155)
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.TabIndex = 17
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.Location = New System.Drawing.Point(10, 152)
Me.btnExclude.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23)
Me.btnExclude.TabIndex = 11
Me.btnExclude.TabIndex = 15
Me.btnExclude.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True
'
'btnInclude
'
Me.btnInclude.Location = New System.Drawing.Point(9, 97)
Me.btnInclude.Location = New System.Drawing.Point(10, 123)
Me.btnInclude.Name = "btnInclude"
Me.btnInclude.Size = New System.Drawing.Size(175, 23)
Me.btnInclude.TabIndex = 10
Me.btnInclude.TabIndex = 12
Me.btnInclude.Text = "In&clude Items..."
Me.btnInclude.UseVisualStyleBackColor = True
'
'txtID
'
Me.txtID.Enabled = False
Me.txtID.Location = New System.Drawing.Point(489, 19)
Me.txtID.Location = New System.Drawing.Point(489, 180)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(30, 20)
Me.txtID.TabIndex = 0
@@ -280,16 +304,16 @@ Partial Class frmGameManager
'
'btnSavePathBrowse
'
Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71)
Me.btnSavePathBrowse.Location = New System.Drawing.Point(490, 97)
Me.btnSavePathBrowse.Name = "btnSavePathBrowse"
Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnSavePathBrowse.TabIndex = 9
Me.btnSavePathBrowse.TabIndex = 11
Me.btnSavePathBrowse.Text = "..."
Me.btnSavePathBrowse.UseVisualStyleBackColor = True
'
'btnProcessBrowse
'
Me.btnProcessBrowse.Location = New System.Drawing.Point(225, 44)
Me.btnProcessBrowse.Location = New System.Drawing.Point(366, 44)
Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnProcessBrowse.TabIndex = 5
@@ -299,25 +323,25 @@ Partial Class frmGameManager
'lblSavePath
'
Me.lblSavePath.AutoSize = True
Me.lblSavePath.Location = New System.Drawing.Point(6, 74)
Me.lblSavePath.Location = New System.Drawing.Point(7, 101)
Me.lblSavePath.Name = "lblSavePath"
Me.lblSavePath.Size = New System.Drawing.Size(60, 13)
Me.lblSavePath.TabIndex = 2
Me.lblSavePath.TabIndex = 9
Me.lblSavePath.Text = "Save Path:"
'
'lblProcess
'
Me.lblProcess.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(6, 48)
Me.lblProcess.Location = New System.Drawing.Point(7, 47)
Me.lblProcess.Name = "lblProcess"
Me.lblProcess.Size = New System.Drawing.Size(48, 13)
Me.lblProcess.TabIndex = 1
Me.lblProcess.TabIndex = 3
Me.lblProcess.Text = "Process:"
'
'lblName
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(6, 22)
Me.lblName.Location = New System.Drawing.Point(7, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 0
@@ -325,7 +349,7 @@ Partial Class frmGameManager
'
'txtExclude
'
Me.txtExclude.Location = New System.Drawing.Point(489, 122)
Me.txtExclude.Location = New System.Drawing.Point(489, 154)
Me.txtExclude.Name = "txtExclude"
Me.txtExclude.Size = New System.Drawing.Size(30, 20)
Me.txtExclude.TabIndex = 0
@@ -334,7 +358,7 @@ Partial Class frmGameManager
'
'txtFileType
'
Me.txtFileType.Location = New System.Drawing.Point(489, 99)
Me.txtFileType.Location = New System.Drawing.Point(489, 125)
Me.txtFileType.Name = "txtFileType"
Me.txtFileType.Size = New System.Drawing.Size(30, 20)
Me.txtFileType.TabIndex = 0
@@ -344,48 +368,48 @@ Partial Class frmGameManager
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129)
Me.chkTimeStamp.Location = New System.Drawing.Point(191, 156)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 14
Me.chkTimeStamp.TabIndex = 16
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
'
Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(190, 101)
Me.chkFolderSave.Location = New System.Drawing.Point(191, 127)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 12
Me.chkFolderSave.TabIndex = 13
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
'txtSavePath
'
Me.txtSavePath.Location = New System.Drawing.Point(69, 71)
Me.txtSavePath.Location = New System.Drawing.Point(70, 97)
Me.txtSavePath.Name = "txtSavePath"
Me.txtSavePath.Size = New System.Drawing.Size(414, 20)
Me.txtSavePath.TabIndex = 8
Me.txtSavePath.TabIndex = 10
'
'txtProcess
'
Me.txtProcess.Location = New System.Drawing.Point(69, 45)
Me.txtProcess.Location = New System.Drawing.Point(70, 44)
Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(150, 20)
Me.txtProcess.Size = New System.Drawing.Size(290, 20)
Me.txtProcess.TabIndex = 4
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(69, 19)
Me.txtName.Location = New System.Drawing.Point(70, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(414, 20)
Me.txtName.TabIndex = 3
Me.txtName.Size = New System.Drawing.Size(326, 20)
Me.txtName.TabIndex = 1
'
'chkMonitorOnly
'
Me.chkMonitorOnly.AutoSize = True
Me.chkMonitorOnly.Location = New System.Drawing.Point(363, 398)
Me.chkMonitorOnly.Location = New System.Drawing.Point(363, 441)
Me.chkMonitorOnly.Name = "chkMonitorOnly"
Me.chkMonitorOnly.Size = New System.Drawing.Size(83, 17)
Me.chkMonitorOnly.TabIndex = 11
@@ -409,7 +433,7 @@ Partial Class frmGameManager
Me.grpExtra.Controls.Add(Me.txtAppPath)
Me.grpExtra.Controls.Add(Me.nudHours)
Me.grpExtra.Controls.Add(Me.lblHours)
Me.grpExtra.Location = New System.Drawing.Point(248, 233)
Me.grpExtra.Location = New System.Drawing.Point(248, 276)
Me.grpExtra.Name = "grpExtra"
Me.grpExtra.Size = New System.Drawing.Size(525, 155)
Me.grpExtra.TabIndex = 9
@@ -540,7 +564,7 @@ Partial Class frmGameManager
'
'btnTags
'
Me.btnTags.Location = New System.Drawing.Point(535, 394)
Me.btnTags.Location = New System.Drawing.Point(535, 437)
Me.btnTags.Name = "btnTags"
Me.btnTags.Size = New System.Drawing.Size(75, 23)
Me.btnTags.TabIndex = 12
@@ -561,7 +585,7 @@ Partial Class frmGameManager
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, 423)
Me.grpStats.Location = New System.Drawing.Point(248, 466)
Me.grpStats.Name = "grpStats"
Me.grpStats.Size = New System.Drawing.Size(525, 154)
Me.grpStats.TabIndex = 15
@@ -676,7 +700,7 @@ Partial Class frmGameManager
'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, 586)
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 626)
Me.btnMarkAsRestored.Name = "btnMarkAsRestored"
Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23)
Me.btnMarkAsRestored.TabIndex = 16
@@ -686,7 +710,7 @@ Partial Class frmGameManager
'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, 586)
Me.btnRestore.Location = New System.Drawing.Point(535, 626)
Me.btnRestore.Name = "btnRestore"
Me.btnRestore.Size = New System.Drawing.Size(75, 23)
Me.btnRestore.TabIndex = 17
@@ -696,7 +720,7 @@ Partial Class frmGameManager
'btnSave
'
Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnSave.Location = New System.Drawing.Point(616, 394)
Me.btnSave.Location = New System.Drawing.Point(616, 437)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 13
@@ -709,13 +733,13 @@ Partial Class frmGameManager
Me.lstGames.Location = New System.Drawing.Point(12, 160)
Me.lstGames.Name = "lstGames"
Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstGames.Size = New System.Drawing.Size(228, 420)
Me.lstGames.Size = New System.Drawing.Size(228, 459)
Me.lstGames.TabIndex = 3
'
'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(697, 394)
Me.btnCancel.Location = New System.Drawing.Point(697, 437)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 14
@@ -725,7 +749,7 @@ Partial Class frmGameManager
'chkEnabled
'
Me.chkEnabled.AutoSize = True
Me.chkEnabled.Location = New System.Drawing.Point(248, 398)
Me.chkEnabled.Location = New System.Drawing.Point(248, 441)
Me.chkEnabled.Name = "chkEnabled"
Me.chkEnabled.Size = New System.Drawing.Size(109, 17)
Me.chkEnabled.TabIndex = 10
@@ -791,7 +815,7 @@ Partial Class frmGameManager
'
'btnImport
'
Me.btnImport.Location = New System.Drawing.Point(84, 586)
Me.btnImport.Location = New System.Drawing.Point(84, 626)
Me.btnImport.Name = "btnImport"
Me.btnImport.Size = New System.Drawing.Size(75, 23)
Me.btnImport.TabIndex = 6
@@ -800,7 +824,7 @@ Partial Class frmGameManager
'
'btnExport
'
Me.btnExport.Location = New System.Drawing.Point(165, 586)
Me.btnExport.Location = New System.Drawing.Point(165, 626)
Me.btnExport.Name = "btnExport"
Me.btnExport.Size = New System.Drawing.Size(75, 23)
Me.btnExport.TabIndex = 7
@@ -861,11 +885,21 @@ Partial Class frmGameManager
Me.cmsDeleteAll.Size = New System.Drawing.Size(114, 22)
Me.cmsDeleteAll.Text = "&All Files"
'
'btnProcesses
'
Me.btnProcesses.Location = New System.Drawing.Point(454, 437)
Me.btnProcesses.Name = "btnProcesses"
Me.btnProcesses.Size = New System.Drawing.Size(75, 23)
Me.btnProcesses.TabIndex = 20
Me.btnProcesses.Text = "Processes..."
Me.btnProcesses.UseVisualStyleBackColor = True
'
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(784, 621)
Me.ClientSize = New System.Drawing.Size(784, 661)
Me.Controls.Add(Me.btnProcesses)
Me.Controls.Add(Me.lblQuickFilter)
Me.Controls.Add(Me.txtQuickFilter)
Me.Controls.Add(Me.btnExport)
@@ -987,4 +1021,7 @@ Partial Class frmGameManager
Friend WithEvents lblParameter As Label
Friend WithEvents lblComments As Label
Friend WithEvents txtComments As TextBox
Friend WithEvents chkRegEx As CheckBox
Friend WithEvents btnGameID As Button
Friend WithEvents btnProcesses As Button
End Class
+214 -127
View File
@@ -4,11 +4,13 @@ Imports System.IO
Public Class frmGameManager
Private oSettings As mgrSettings
Private sBackupFolder As String
Private bPendingRestores As Boolean = False
Private oCurrentBackupItem As clsBackup
Private oCurrentGame As clsGame
Private oTagsToSave As New List(Of KeyValuePair(Of String, String))
Private oProcessesToSave As New List(Of KeyValuePair(Of String, String))
Private bDisableExternalFunctions As Boolean = False
Private bTriggerBackup As Boolean = False
Private bTriggerRestore As Boolean = False
@@ -34,17 +36,16 @@ Public Class frmGameManager
Add = 3
Disabled = 4
MultiSelect = 5
ViewTemp = 6
End Enum
Private eCurrentMode As eModes = eModes.Disabled
Property BackupFolder As String
Property Settings As mgrSettings
Get
Return sBackupFolder & Path.DirectorySeparatorChar
Return oSettings
End Get
Set(value As String)
sBackupFolder = value
Set(value As mgrSettings)
oSettings = value
End Set
End Property
@@ -75,6 +76,15 @@ Public Class frmGameManager
End Set
End Property
Private Property BackupFolder As String
Get
Return Settings.BackupFolder & Path.DirectorySeparatorChar
End Get
Set(value As String)
sBackupFolder = value
End Set
End Property
Private Property GameData As OrderedDictionary
Get
Return oGameData
@@ -172,48 +182,46 @@ Public Class frmGameManager
Dim sFileName As String
Dim sNewFileName As String
'If there is a name change, check and update the manifest
If oNewApp.Name <> oOriginalApp.Name Then
'If there is an ID change, check and update the manifest
If oNewApp.ID <> oOriginalApp.ID Then
'Local
If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then
oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local)
If mgrManifest.DoManifestCheck(oOriginalApp.ID, mgrSQLite.Database.Local) Then
oBackupItems = mgrManifest.DoManifestGetByMonitorID(oOriginalApp.ID, mgrSQLite.Database.Local)
'The local manifest will only have one entry per game, therefore this runs only once
For Each oBackupItem As clsBackup In oBackupItems
'Rename Current Backup File & Folder
sFileName = BackupFolder & oBackupItem.FileName
'Rename Backup File
sNewFileName = Path.GetDirectoryName(sFileName) & Path.DirectorySeparatorChar & Path.GetFileName(sFileName).Replace(oOriginalApp.Name, oNewApp.Name)
If File.Exists(sFileName) Then
sNewFileName = Path.GetDirectoryName(sFileName) & Path.DirectorySeparatorChar & Path.GetFileName(sFileName).Replace(oOriginalApp.ID, oNewApp.ID)
If File.Exists(sFileName) And Not sFileName = sNewFileName Then
FileSystem.Rename(sFileName, sNewFileName)
End If
'Rename Directory
sDirectory = Path.GetDirectoryName(sFileName)
sNewDirectory = sDirectory.Replace(oOriginalApp.Name, oNewApp.Name)
sNewDirectory = sDirectory.Replace(oOriginalApp.ID, oNewApp.ID)
If sDirectory <> sNewDirectory Then
If Directory.Exists(sDirectory) Then
If Directory.Exists(sDirectory) And Not sDirectory = sNewDirectory Then
FileSystem.Rename(sDirectory, sNewDirectory)
End If
End If
oBackupItem.Name = oNewApp.Name
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Local)
oBackupItem.MonitorID = oNewApp.ID
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.ID, oNewApp.ID)
mgrManifest.DoManifestUpdateByManifestID(oBackupItem, mgrSQLite.Database.Local)
Next
oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
End If
'Remote
If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then
oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote)
If mgrManifest.DoManifestCheck(oOriginalApp.ID, mgrSQLite.Database.Remote) Then
oBackupItems = mgrManifest.DoManifestGetByMonitorID(oOriginalApp.ID, mgrSQLite.Database.Remote)
For Each oBackupItem As clsBackup In oBackupItems
oBackupItem.Name = oNewApp.Name
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name)
mgrManifest.DoManifestUpdateByID(oBackupItem, mgrSQLite.Database.Remote)
oBackupItem.MonitorID = oNewApp.ID
oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.ID, oNewApp.ID)
mgrManifest.DoManifestUpdateByManifestID(oBackupItem, mgrSQLite.Database.Remote)
Next
oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
End If
End If
End Sub
@@ -221,7 +229,6 @@ Public Class frmGameManager
Private Sub LoadData(Optional ByVal bRetainFilter As Boolean = True)
Dim oRestoreData As New SortedList
Dim oGame As clsGame
Dim oBackup As clsBackup
Dim frm As frmFilter
If optCustom.Checked Then
@@ -264,10 +271,10 @@ Public Class frmGameManager
Dim oTemporaryList As OrderedDictionary = mgrCommon.GenericClone(GameData)
For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame)
If Not oRestoreData.ContainsKey(oGame.Name) Then
If Not oRestoreData.ContainsKey(oGame.ID) Then
GameData.Remove(de.Key)
Else
oRestoreData.Remove(oGame.Name)
oRestoreData.Remove(oGame.ID)
End If
Next
ElseIf optBackupData.Checked Then
@@ -277,24 +284,14 @@ Public Class frmGameManager
For Each de As DictionaryEntry In oTemporaryList
oGame = DirectCast(de.Value, clsGame)
If Not oRemoteBackupData.ContainsKey(oGame.Name) Then
If Not oRemoteBackupData.ContainsKey(oGame.ID) Then
GameData.Remove(de.Key)
Else
oRestoreData.Remove(oGame.Name)
oRestoreData.Remove(oGame.ID)
End If
Next
End If
'Handle any orphaned backup files and add them to list
If oRestoreData.Count <> 0 Then
For Each oBackup In oRestoreData.Values
oGame = New clsGame
oGame.Name = oBackup.Name
oGame.Temporary = True
GameData.Add(oGame.ID, oGame)
Next
End If
lstGames.DataSource = Nothing
FormatAndFillList()
End Sub
@@ -441,6 +438,28 @@ Public Class frmGameManager
IsLoading = False
End Sub
Private Sub OpenGameIDEdit()
Dim sCurrentID As String
Dim sNewID As String
If txtID.Text = String.Empty Then
txtID.Text = Guid.NewGuid.ToString
End If
sCurrentID = txtID.Text
sNewID = InputBox(frmGameManager_GameIDEditInfo, frmGameManager_GameIDEditTitle, sCurrentID)
If sNewID <> String.Empty Then
txtID.Text = sNewID
If sCurrentID <> sNewID Then
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, True)
End If
End If
End Sub
Private Sub OpenBackupFile()
Dim sFileName As String
Dim oProcessStartInfo As ProcessStartInfo
@@ -474,6 +493,16 @@ Public Class frmGameManager
End If
End Sub
Private Sub UpdateGenericButtonLabel(ByVal sLabel As String, ByVal btn As Button, ByVal bDirty As Boolean)
btn.Text = sLabel
If bDirty Then
btn.Font = New Font(FontFamily.GenericSansSerif, 8.25, FontStyle.Bold)
Else
btn.Font = New Font(FontFamily.GenericSansSerif, 8.25, FontStyle.Regular)
End If
End Sub
Private Function GetBuilderRoot() As String
Dim sRoot As String = String.Empty
@@ -552,6 +581,36 @@ Public Class frmGameManager
End If
End Sub
Private Sub OpenProcesses()
Dim frm As New frmGameProcesses
Dim oApp As clsGame
Dim sMonitorIDS As New List(Of String)
If eCurrentMode = eModes.Add Then
'Use a dummy ID
sMonitorIDS.Add(Guid.NewGuid.ToString)
frm.GameName = txtName.Text
frm.NewMode = True
frm.ProcessList = oProcessesToSave
Else
For Each oData In lstGames.SelectedItems
oApp = DirectCast(GameData(oData.Key), clsGame)
sMonitorIDS.Add(oApp.ID)
Next
frm.GameName = CurrentGame.Name
frm.NewMode = False
End If
frm.IDList = sMonitorIDS
frm.ShowDialog()
If eCurrentMode = eModes.Add Then
oProcessesToSave = frm.ProcessList
Else
ModeChange()
End If
End Sub
Private Sub OpenTags()
Dim frm As New frmGameTags
Dim oApp As clsGame
@@ -579,6 +638,9 @@ Public Class frmGameManager
oTagsToSave = frm.TagList
FillTagsbyList(frm.TagList)
Else
'Sync
mgrMonitorList.SyncMonitorLists(Settings)
'Only update visible tags if one item is selected
If lstGames.SelectedItems.Count = 1 Then FillTagsbyID(CurrentGame.ID)
@@ -598,7 +660,7 @@ Public Class frmGameManager
Dim sFileName As String
If sManifestID <> String.Empty Then
CurrentBackupItem = mgrManifest.DoManifestGetByID(sManifestID, mgrSQLite.Database.Remote)
CurrentBackupItem = mgrManifest.DoManifestGetByManifestID(sManifestID, mgrSQLite.Database.Remote)
sFileName = BackupFolder & CurrentBackupItem.FileName
@@ -608,7 +670,6 @@ Public Class frmGameManager
lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
End If
mgrRestore.DoPathOverride(CurrentBackupItem, CurrentGame)
lblRestorePathData.Text = CurrentBackupItem.RestorePath
End If
@@ -627,15 +688,15 @@ Public Class frmGameManager
cboRemoteBackup.ValueMember = "Key"
cboRemoteBackup.DisplayMember = "Value"
If oRemoteBackupData.Contains(oApp.Name) Then
If oRemoteBackupData.Contains(oApp.ID) Then
bRemoteData = True
oCurrentBackups = mgrManifest.DoManifestGetByName(oApp.Name, mgrSQLite.Database.Remote)
oCurrentBackups = mgrManifest.DoManifestGetByMonitorID(oApp.ID, mgrSQLite.Database.Remote)
For Each oCurrentBackup In oCurrentBackups
oComboItems.Add(New KeyValuePair(Of String, String)(oCurrentBackup.ID, mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oCurrentBackup.DateUpdated, oCurrentBackup.UpdatedBy})))
oComboItems.Add(New KeyValuePair(Of String, String)(oCurrentBackup.ManifestID, mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oCurrentBackup.DateUpdated, oCurrentBackup.UpdatedBy})))
Next
CurrentBackupItem = DirectCast(oRemoteBackupData(oApp.Name), clsBackup)
CurrentBackupItem = DirectCast(oRemoteBackupData(oApp.ID), clsBackup)
sFileName = BackupFolder & CurrentBackupItem.FileName
@@ -650,7 +711,6 @@ Public Class frmGameManager
lblBackupFileData.Text = frmGameManager_ErrorNoBackupExists
End If
mgrRestore.DoPathOverride(CurrentBackupItem, oApp)
lblRestorePathData.Text = CurrentBackupItem.RestorePath
Else
oComboItems.Add(New KeyValuePair(Of String, String)(String.Empty, frmGameManager_None))
@@ -664,9 +724,9 @@ Public Class frmGameManager
cboRemoteBackup.DataSource = oComboItems
If oLocalBackupData.Contains(oApp.Name) Then
If oLocalBackupData.Contains(oApp.ID) Then
bLocalData = True
oBackupInfo = DirectCast(oLocalBackupData(oApp.Name), clsBackup)
oBackupInfo = DirectCast(oLocalBackupData(oApp.ID), clsBackup)
lblLocalBackupData.Text = mgrCommon.FormatString(frmGameManager_BackupTimeAndName, New String() {oBackupInfo.DateUpdated, oBackupInfo.UpdatedBy})
Else
lblLocalBackupData.Text = frmGameManager_Unknown
@@ -693,11 +753,11 @@ Public Class frmGameManager
Dim oBackup As clsBackup
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDeleteAll, CurrentGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
oBackupData = mgrManifest.DoManifestGetByName(CurrentGame.Name, mgrSQLite.Database.Remote)
oBackupData = mgrManifest.DoManifestGetByMonitorID(CurrentGame.ID, mgrSQLite.Database.Remote)
For Each oBackup In oBackupData
'Delete the specific remote manifest entry
mgrManifest.DoManifestDeletebyID(oBackup, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeletebyManifestID(oBackup, mgrSQLite.Database.Remote)
'Delete referenced backup file from the backup folder
mgrCommon.DeleteFile(BackupFolder & oBackup.FileName)
'Check for sub-directory and delete if empty (we need to do this every pass just in case the user had a mix of settings at one point)
@@ -705,28 +765,21 @@ Public Class frmGameManager
Next
'Delete local manifest entry
mgrManifest.DoManifestDeletebyName(CurrentBackupItem, mgrSQLite.Database.Local)
mgrManifest.DoManifestDeletebyMonitorID(CurrentBackupItem, mgrSQLite.Database.Local)
LoadBackupData()
If oCurrentGame.Temporary Then
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
Else
FillData()
End If
End If
End Sub
Private Sub DeleteBackup()
If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDelete, Path.GetFileName(CurrentBackupItem.FileName), MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
'Delete the specific remote manifest entry
mgrManifest.DoManifestDeletebyID(CurrentBackupItem, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeleteByManifestID(CurrentBackupItem, mgrSQLite.Database.Remote)
'If a remote manifest entry no longer exists for this game, delete the local entry
If Not mgrManifest.DoGlobalManifestCheck(CurrentBackupItem.Name, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestDeletebyName(CurrentBackupItem, mgrSQLite.Database.Local)
If Not mgrManifest.DoManifestCheck(CurrentBackupItem.MonitorID, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestDeleteByMonitorID(CurrentBackupItem, mgrSQLite.Database.Local)
End If
'Delete referenced backup file from the backup folder
@@ -736,15 +789,8 @@ Public Class frmGameManager
mgrCommon.DeleteDirectoryByBackup(BackupFolder, CurrentBackupItem)
LoadBackupData()
If oCurrentGame.Temporary Then
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
Else
FillData()
End If
End If
End Sub
Private Sub FillData()
@@ -757,6 +803,7 @@ Public Class frmGameManager
txtID.Text = oApp.ID
txtName.Text = oApp.Name
txtProcess.Text = oApp.TrueProcess
chkRegEx.Checked = oApp.IsRegEx
txtParameter.Text = oApp.Parameter
txtSavePath.Text = oApp.Path
txtFileType.Text = oApp.FileType
@@ -772,6 +819,7 @@ Public Class frmGameManager
'Update Buttons
UpdateBuilderButtonLabel(oApp.FileType, frmGameManager_IncludeShortcut, btnInclude, False)
UpdateBuilderButtonLabel(oApp.ExcludeList, frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
'Extra
txtAppPath.Text = oApp.ProcessPath
@@ -795,12 +843,6 @@ Public Class frmGameManager
'Set Current
CurrentGame = oApp
'Change view to temporary if we only have backup data for the game
If CurrentGame.Temporary Then
eCurrentMode = eModes.ViewTemp
ModeChange()
End If
IsLoading = False
End Sub
@@ -871,12 +913,13 @@ Public Class frmGameManager
Next
End Sub
Private Sub ModeChange()
Private Sub ModeChange(Optional ByVal bNoFocusChange As Boolean = False)
IsLoading = True
Select Case eCurrentMode
Case eModes.Add
oTagsToSave.Clear()
oProcessesToSave.Clear()
grpFilter.Enabled = False
lstGames.Enabled = False
lblQuickFilter.Enabled = False
@@ -905,6 +948,7 @@ Public Class frmGameManager
chkEnabled.Checked = True
chkMonitorOnly.Checked = False
btnTags.Enabled = True
btnProcesses.Enabled = True
lblTags.Text = String.Empty
lblTags.Visible = True
btnInclude.Text = frmGameManager_btnInclude
@@ -932,6 +976,7 @@ Public Class frmGameManager
btnOpenBackupFile.Enabled = False
btnOpenRestorePath.Enabled = False
btnTags.Enabled = True
btnProcesses.Enabled = True
lblTags.Visible = True
btnImport.Enabled = False
btnExport.Enabled = False
@@ -951,31 +996,10 @@ Public Class frmGameManager
btnDelete.Enabled = True
btnBackup.Enabled = True
btnTags.Enabled = True
btnProcesses.Enabled = True
lblTags.Visible = True
btnImport.Enabled = True
btnExport.Enabled = True
Case eModes.ViewTemp
grpFilter.Enabled = True
lstGames.Enabled = True
lblQuickFilter.Enabled = True
txtQuickFilter.Enabled = True
grpConfig.Enabled = False
chkEnabled.Enabled = False
chkMonitorOnly.Enabled = False
grpExtra.Enabled = False
grpStats.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = False
btnBackup.Enabled = False
btnOpenRestorePath.Enabled = False
btnTags.Enabled = False
lblTags.Visible = False
btnInclude.Text = frmGameManager_btnInclude
btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = True
btnExport.Enabled = True
Case eModes.Disabled
grpFilter.Enabled = True
lstGames.Enabled = True
@@ -998,11 +1022,15 @@ Public Class frmGameManager
btnRestore.Enabled = False
btnMarkAsRestored.Enabled = False
btnTags.Enabled = False
btnProcesses.Enabled = False
lblTags.Visible = False
btnInclude.Text = frmGameManager_btnInclude
btnExclude.Text = frmGameManager_btnExclude
btnImport.Enabled = True
btnExport.Enabled = True
UpdateGenericButtonLabel(frmGameManager_IncludeShortcut, btnInclude, False)
UpdateGenericButtonLabel(frmGameManager_ExcludeShortcut, btnExclude, False)
UpdateGenericButtonLabel(frmGameManager_btnGameID, btnGameID, False)
Case eModes.MultiSelect
lstGames.Enabled = True
lblQuickFilter.Enabled = False
@@ -1026,12 +1054,13 @@ Public Class frmGameManager
btnRestore.Enabled = True
btnMarkAsRestored.Enabled = True
btnTags.Enabled = True
btnProcesses.Enabled = True
lblTags.Visible = False
btnImport.Enabled = True
btnExport.Enabled = True
End Select
lstGames.Focus()
If Not bNoFocusChange Then lstGames.Focus()
IsLoading = False
End Sub
@@ -1135,6 +1164,22 @@ Public Class frmGameManager
End If
End Sub
Private Sub SaveProcesses(ByVal sID As String)
Dim oGameProcess As clsGameProcess
Dim oGameProcesses As List(Of clsGameProcess)
If oProcessesToSave.Count > 0 Then
oGameProcesses = New List(Of clsGameProcess)
For Each kp As KeyValuePair(Of String, String) In oProcessesToSave
oGameProcess = New clsGameProcess
oGameProcess.MonitorID = sID
oGameProcess.ProcessID = kp.Key
oGameProcesses.Add(oGameProcess)
Next
mgrGameProcesses.DoGameProcessAddBatch(oGameProcesses)
End If
End Sub
Private Sub SaveTags(ByVal sID As String)
Dim oGameTag As clsGameTag
Dim oGameTags As List(Of clsGameTag)
@@ -1159,20 +1204,24 @@ Public Class frmGameManager
If txtID.Text <> String.Empty Then
oApp.ID = txtID.Text
End If
oApp.Name = mgrPath.ValidateForFileSystem(txtName.Text)
oApp.Name = txtName.Text
oApp.IsRegEx = chkRegEx.Checked
If Not oApp.IsRegEx Then
txtProcess.Text = mgrPath.ValidateFileNameForOS(txtProcess.Text)
If Path.HasExtension(txtProcess.Text) Then
If txtProcess.Text.ToLower.EndsWith(".exe") Then
oApp.ProcessName = Path.GetFileNameWithoutExtension(txtProcess.Text)
Else
oApp.ProcessName = txtProcess.Text
txtProcess.Text = Path.GetFileNameWithoutExtension(txtProcess.Text)
End If
Else
oApp.ProcessName = txtProcess.Text
End If
End If
oApp.ProcessName = txtProcess.Text
oApp.Parameter = txtParameter.Text
oApp.Path = txtSavePath.Text
oApp.Path = mgrPath.ValidatePathForOS(txtSavePath.Text)
'Only do a simple root check here in case the user doesn't really understand creating a proper configuration
oApp.AbsolutePath = Path.IsPathRooted(txtSavePath.Text)
oApp.AbsolutePath = Path.IsPathRooted(oApp.Path)
oApp.FileType = txtFileType.Text
oApp.ExcludeList = txtExclude.Text
oApp.FolderSave = chkFolderSave.Checked
@@ -1182,7 +1231,7 @@ Public Class frmGameManager
oApp.Comments = txtComments.Text
oApp.Enabled = chkEnabled.Checked
oApp.MonitorOnly = chkMonitorOnly.Checked
oApp.ProcessPath = txtAppPath.Text
oApp.ProcessPath = mgrPath.ValidatePathForOS(txtAppPath.Text)
oApp.Company = txtCompany.Text
oApp.Version = txtVersion.Text
oApp.Icon = txtIcon.Text
@@ -1190,17 +1239,18 @@ Public Class frmGameManager
Select Case eCurrentMode
Case eModes.Add
If CoreValidatation(oApp) Then
If CoreValidatation(oApp, True) Then
bSuccess = True
mgrMonitorList.DoListAdd(oApp)
SaveTags(oApp.ID)
SaveProcesses(oApp.ID)
eCurrentMode = eModes.View
End If
Case eModes.Edit
If CoreValidatation(oApp) Then
If CoreValidatation(oApp, False) Then
bSuccess = True
mgrMonitorList.DoListUpdate(oApp)
CheckManifestandUpdate(oCurrentGame, oApp)
mgrMonitorList.DoListUpdate(oApp, CurrentGame.ID)
eCurrentMode = eModes.View
End If
Case eModes.MultiSelect
@@ -1217,6 +1267,8 @@ Public Class frmGameManager
End Select
If bSuccess Then
mgrMonitorList.SyncMonitorLists(Settings)
LoadBackupData()
IsDirty = False
LoadData()
If eCurrentMode = eModes.View Then
@@ -1242,6 +1294,7 @@ Public Class frmGameManager
If mgrCommon.ShowMessage(frmGameManager_ConfirmGameDelete, oApp.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.DoListDelete(oApp.ID)
mgrMonitorList.SyncMonitorLists(Settings)
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
@@ -1256,6 +1309,7 @@ Public Class frmGameManager
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiGameDelete, sMonitorIDs.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.DoListDeleteMulti(sMonitorIDs)
mgrMonitorList.SyncMonitorLists(Settings)
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
@@ -1277,14 +1331,22 @@ Public Class frmGameManager
End If
End Sub
Private Function CoreValidatation(ByVal oApp As clsGame) As Boolean
If txtName.Text = String.Empty Then
Private Function CoreValidatation(ByVal oApp As clsGame, ByVal bNewGame As Boolean) As Boolean
Dim sCurrentID As String
If bNewGame Then
sCurrentID = String.Empty
Else
sCurrentID = CurrentGame.ID
End If
If txtName.Text.Trim = String.Empty Then
mgrCommon.ShowMessage(frmGameManager_ErrorValidName, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
If txtProcess.Text = String.Empty Then
If txtProcess.Text.Trim = String.Empty Then
mgrCommon.ShowMessage(frmGameManager_ErrorValidProcess, MsgBoxStyle.Exclamation)
txtProcess.Focus()
Return False
@@ -1296,15 +1358,17 @@ Public Class frmGameManager
Return False
End If
If mgrMonitorList.DoDuplicateListCheck(oApp.Name, oApp.ProcessName, , oApp.ID) Then
mgrCommon.ShowMessage(frmGameManager_ErrorGameDupe, MsgBoxStyle.Exclamation)
If mgrMonitorList.DoDuplicateListCheck(oApp.ID, , sCurrentID) Then
mgrCommon.ShowMessage(frmGameManager_ErrorGameDupe, oApp.ID, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
If oApp.Parameter <> String.Empty Then
If mgrMonitorList.DoDuplicateParameterCheck(oApp.ProcessName, oApp.Parameter, , oApp.ID) Then
mgrCommon.ShowMessage(frmGameManager_ErrorProcessParameterDupe, MsgBoxStyle.Exclamation)
If oApp.IsRegEx Then
If Not mgrCommon.IsRegExValid(oApp.ProcessName) Then
If mgrCommon.ShowMessage(frmGameManager_ErrorRegExFailure, MsgBoxStyle.Exclamation, MsgBoxStyle.YesNoCancel) = MsgBoxResult.Yes Then
Process.Start(mgrCommon.FormatString(AppURL_RegExr, oApp.ProcessName))
End If
Return False
End If
End If
@@ -1320,8 +1384,8 @@ Public Class frmGameManager
If lstGames.SelectedItems.Count > 0 Then
For Each oData In lstGames.SelectedItems
If oRemoteBackupData.Contains(oData.Value) Then
oGameBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup)
If oRemoteBackupData.Contains(oData.Key) Then
oGameBackup = DirectCast(oRemoteBackupData(oData.Key), clsBackup)
oMarkList.Add(oGameBackup)
End If
Next
@@ -1329,8 +1393,8 @@ Public Class frmGameManager
If oMarkList.Count = 1 Then
If mgrCommon.ShowMessage(frmGameManager_ConfirmMark, oMarkList(0).Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
bWasUpdated = True
If mgrManifest.DoGlobalManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oMarkList(0), mgrSQLite.Database.Local)
If mgrManifest.DoManifestCheck(oMarkList(0).MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oMarkList(0), mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oMarkList(0), mgrSQLite.Database.Local)
End If
@@ -1339,8 +1403,8 @@ Public Class frmGameManager
If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiMark, oMarkList.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
bWasUpdated = True
For Each oGameBackup In oMarkList
If mgrManifest.DoGlobalManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oGameBackup, mgrSQLite.Database.Local)
If mgrManifest.DoManifestCheck(oGameBackup.MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oGameBackup, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oGameBackup, mgrSQLite.Database.Local)
End If
@@ -1417,9 +1481,9 @@ Public Class frmGameManager
For Each oData In lstGames.SelectedItems
If oRemoteBackupData.Contains(oData.Value) Then
If oRemoteBackupData.Contains(oData.Key) Then
oGame = DirectCast(GameData(oData.Key), clsGame)
oBackup = DirectCast(oRemoteBackupData(oData.Value), clsBackup)
oBackup = DirectCast(oRemoteBackupData(oData.Key), clsBackup)
If Not oGame.MonitorOnly Then RestoreList.Add(oGame, oBackup)
End If
Next
@@ -1462,8 +1526,10 @@ Public Class frmGameManager
sLocation = mgrCommon.OpenFileBrowser("XML_Import", frmGameManager_ChooseImportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
If sLocation <> String.Empty Then
If mgrMonitorList.DoImport(sLocation) Then
If mgrMonitorList.DoImport(sLocation, False, Settings) Then
mgrMonitorList.SyncMonitorLists(Settings)
LoadData()
LoadBackupData()
End If
End If
@@ -1490,8 +1556,10 @@ Public Class frmGameManager
End If
If mgrCommon.ShowMessage(frmGameManager_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(sImportURL) Then
If mgrMonitorList.DoImport(sImportURL, True, Settings) Then
mgrMonitorList.SyncMonitorLists(Settings)
LoadData()
LoadBackupData()
End If
End If
End Sub
@@ -1553,6 +1621,9 @@ Public Class frmGameManager
lblLimit.Text = frmGameManager_lblLimit
cmsDeleteOne.Text = frmGameManager_cmsDeleteOne
cmsDeleteAll.Text = frmGameManager_cmsDeleteAll
lblComments.Text = frmGameManager_lblComments
chkRegEx.Text = frmGameManager_chkRegEx
btnGameID.Text = frmGameManager_btnGameID
'Init Filter Timer
tmFilterTimer = New Timer()
@@ -1659,6 +1730,10 @@ Public Class frmGameManager
OpenTags()
End Sub
Private Sub btnProcesses_Click(sender As Object, e As EventArgs) Handles btnProcesses.Click
OpenProcesses()
End Sub
Private Sub btnDeleteBackup_Click(sender As Object, e As EventArgs) Handles btnDeleteBackup.Click
If cboRemoteBackup.Items.Count > 1 Then
cmsDeleteBackup.Show(btnDeleteBackup, New Drawing.Point(btnDeleteBackup.Size.Width - Math.Floor(btnDeleteBackup.Size.Width * 0.1), btnDeleteBackup.Size.Height - Math.Floor(btnDeleteBackup.Size.Height * 0.5)), ToolStripDropDownDirection.AboveRight)
@@ -1732,8 +1807,19 @@ Public Class frmGameManager
ExportGameList()
End Sub
Private Sub btnGameID_Click(sender As Object, e As EventArgs) Handles btnGameID.Click
OpenGameIDEdit()
End Sub
Private Sub txtQuickFilter_TextChanged(sender As Object, e As EventArgs) Handles txtQuickFilter.TextChanged
If Not eCurrentMode = eModes.Disabled Then
eCurrentMode = eModes.Disabled
ModeChange(True)
lstGames.ClearSelected()
End If
If Not tmFilterTimer.Enabled Then
lstGames.Enabled = False
tmFilterTimer.Enabled = True
tmFilterTimer.Start()
End If
@@ -1748,6 +1834,7 @@ Public Class frmGameManager
FormatAndFillList()
tmFilterTimer.Stop()
tmFilterTimer.Enabled = False
lstGames.Enabled = True
End Sub
Private Sub frmGameManager_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
+142
View File
@@ -0,0 +1,142 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmGameProcesses
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.btnOpenProcesses = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.lblGameProcesses = New System.Windows.Forms.Label()
Me.lblProcesses = New System.Windows.Forms.Label()
Me.btnRemove = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.lstGameProcesses = New System.Windows.Forms.ListBox()
Me.lstProcesses = New System.Windows.Forms.ListBox()
Me.SuspendLayout()
'
'btnOpenProcesses
'
Me.btnOpenProcesses.Location = New System.Drawing.Point(12, 229)
Me.btnOpenProcesses.Name = "btnOpenProcesses"
Me.btnOpenProcesses.Size = New System.Drawing.Size(110, 23)
Me.btnOpenProcesses.TabIndex = 4
Me.btnOpenProcesses.Text = "&Process Manager..."
Me.btnOpenProcesses.UseVisualStyleBackColor = True
'
'btnClose
'
Me.btnClose.Location = New System.Drawing.Point(297, 229)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 5
Me.btnClose.Text = "&Close"
Me.btnClose.UseVisualStyleBackColor = True
'
'lblGameProcesses
'
Me.lblGameProcesses.AutoSize = True
Me.lblGameProcesses.Location = New System.Drawing.Point(251, 8)
Me.lblGameProcesses.Name = "lblGameProcesses"
Me.lblGameProcesses.Size = New System.Drawing.Size(93, 13)
Me.lblGameProcesses.TabIndex = 0
Me.lblGameProcesses.Text = "Current Processes"
'
'lblProcesses
'
Me.lblProcesses.AutoSize = True
Me.lblProcesses.Location = New System.Drawing.Point(36, 8)
Me.lblProcesses.Name = "lblProcesses"
Me.lblProcesses.Size = New System.Drawing.Size(102, 13)
Me.lblProcesses.TabIndex = 0
Me.lblProcesses.Text = "Available Processes"
'
'btnRemove
'
Me.btnRemove.Location = New System.Drawing.Point(168, 114)
Me.btnRemove.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(48, 23)
Me.btnRemove.TabIndex = 2
Me.btnRemove.Text = "<"
Me.btnRemove.UseVisualStyleBackColor = True
'
'btnAdd
'
Me.btnAdd.Location = New System.Drawing.Point(168, 85)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(48, 23)
Me.btnAdd.TabIndex = 1
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'lstGameProcesses
'
Me.lstGameProcesses.FormattingEnabled = True
Me.lstGameProcesses.Location = New System.Drawing.Point(222, 24)
Me.lstGameProcesses.Name = "lstGameProcesses"
Me.lstGameProcesses.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstGameProcesses.Size = New System.Drawing.Size(150, 199)
Me.lstGameProcesses.Sorted = True
Me.lstGameProcesses.TabIndex = 3
'
'lstProcesses
'
Me.lstProcesses.FormattingEnabled = True
Me.lstProcesses.Location = New System.Drawing.Point(12, 24)
Me.lstProcesses.Name = "lstProcesses"
Me.lstProcesses.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstProcesses.Size = New System.Drawing.Size(150, 199)
Me.lstProcesses.Sorted = True
Me.lstProcesses.TabIndex = 0
'
'frmGameProcesses
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(384, 261)
Me.Controls.Add(Me.btnOpenProcesses)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.lblGameProcesses)
Me.Controls.Add(Me.lblProcesses)
Me.Controls.Add(Me.btnRemove)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstGameProcesses)
Me.Controls.Add(Me.lstProcesses)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmGameProcesses"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Edit Processes"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents btnOpenProcesses As Button
Friend WithEvents btnClose As Button
Friend WithEvents lblGameProcesses As Label
Friend WithEvents lblProcesses As Label
Friend WithEvents btnRemove As Button
Friend WithEvents btnAdd As Button
Friend WithEvents lstGameProcesses As ListBox
Friend WithEvents lstProcesses As ListBox
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+247
View File
@@ -0,0 +1,247 @@
Imports GBM.My.Resources
Public Class frmGameProcesses
Private sMonitorIDs As List(Of String)
Private sGameName As String = String.Empty
Private bNewMode As Boolean = False
Private oProcessList As List(Of KeyValuePair(Of String, String))
Public Property IDList As List(Of String)
Get
Return sMonitorIDs
End Get
Set(value As List(Of String))
sMonitorIDs = value
End Set
End Property
Public Property GameName As String
Get
Return sGameName
End Get
Set(value As String)
sGameName = value
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 ProcessList As List(Of KeyValuePair(Of String, String))
Get
Return oProcessList
End Get
Set(value As List(Of KeyValuePair(Of String, String)))
oProcessList = value
End Set
End Property
Private Sub AddProcess()
Dim oData As KeyValuePair(Of String, String)
Dim oProcesss As List(Of KeyValuePair(Of String, String))
Dim oGameProcess As clsGameProcess
Dim oGameProcesses As List(Of clsGameProcess)
If lstProcesses.SelectedItems.Count = 1 Then
oData = lstProcesses.SelectedItems(0)
oGameProcesses = New List(Of clsGameProcess)
For Each sID As String In IDList
oGameProcess = New clsGameProcess
oGameProcess.MonitorID = sID
oGameProcess.ProcessID = oData.Key
oGameProcesses.Add(oGameProcess)
Next
If Not bNewMode Then mgrGameProcesses.DoGameProcessAddBatch(oGameProcesses)
lstGameProcesses.Items.Add(oData)
lstProcesses.Items.Remove(oData)
ElseIf lstProcesses.SelectedItems.Count > 1 Then
oProcesss = New List(Of KeyValuePair(Of String, String))
For Each oData In lstProcesses.SelectedItems
oProcesss.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oProcesss
oGameProcesses = New List(Of clsGameProcess)
For Each sID As String In IDList
oGameProcess = New clsGameProcess
oGameProcess.MonitorID = sID
oGameProcess.ProcessID = kp.Key
oGameProcesses.Add(oGameProcess)
Next
If Not bNewMode Then mgrGameProcesses.DoGameProcessAddBatch(oGameProcesses)
lstGameProcesses.Items.Add(kp)
lstProcesses.Items.Remove(kp)
Next
End If
End Sub
Private Sub RemoveProcess()
Dim oData As KeyValuePair(Of String, String)
Dim oProcesses As List(Of KeyValuePair(Of String, String))
Dim oGameProcess As clsGameProcess
Dim oGameProcesses As List(Of clsGameProcess)
If lstGameProcesses.SelectedItems.Count = 1 Then
oData = lstGameProcesses.SelectedItems(0)
oGameProcesses = New List(Of clsGameProcess)
For Each sID As String In IDList
oGameProcess = New clsGameProcess
oGameProcess.MonitorID = sID
oGameProcess.ProcessID = oData.Key
oGameProcesses.Add(oGameProcess)
Next
If Not bNewMode Then mgrGameProcesses.DoGameProcessDelete(oGameProcesses)
lstGameProcesses.Items.Remove(oData)
lstProcesses.Items.Add(oData)
ElseIf lstGameProcesses.SelectedItems.Count > 1 Then
oProcesses = New List(Of KeyValuePair(Of String, String))
For Each oData In lstGameProcesses.SelectedItems
oProcesses.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oProcesses
oGameProcesses = New List(Of clsGameProcess)
For Each sID As String In IDList
oGameProcess = New clsGameProcess
oGameProcess.MonitorID = sID
oGameProcess.ProcessID = kp.Key
oGameProcesses.Add(oGameProcess)
Next
If Not bNewMode Then mgrGameProcesses.DoGameProcessDelete(oGameProcesses)
lstGameProcesses.Items.Remove(kp)
lstProcesses.Items.Add(kp)
Next
End If
End Sub
Private Sub LoadData()
Dim hshProcesses As Hashtable
Dim hshGameProcesses As Hashtable
Dim oProcess As clsProcess
Dim oData As KeyValuePair(Of String, String)
'Load Processes
hshProcesses = mgrProcess.ReadProcesses()
'Handle Lists
lstProcesses.Items.Clear()
lstGameProcesses.Items.Clear()
lstProcesses.ValueMember = "Key"
lstProcesses.DisplayMember = "Value"
lstGameProcesses.ValueMember = "Key"
lstGameProcesses.DisplayMember = "Value"
If bNewMode Then
For Each kp As KeyValuePair(Of String, String) In oProcessList
'We need to be sure the tags still exist if the "Process Manager" form was used
If hshProcesses.ContainsKey(kp.Value) Then
lstGameProcesses.Items.Add(kp)
End If
Next
For Each kp As KeyValuePair(Of String, String) In oProcessList
If hshProcesses.ContainsKey(kp.Value) Then
hshProcesses.Remove(kp.Value)
End If
Next
Else
hshGameProcesses = mgrGameProcesses.GetProcessesByGameMulti(IDList)
For Each de As DictionaryEntry In hshGameProcesses
oProcess = DirectCast(de.Value, clsProcess)
If hshProcesses.ContainsKey(oProcess.Name) Then
hshProcesses.Remove(oProcess.Name)
End If
Next
For Each de As DictionaryEntry In hshGameProcesses
oProcess = DirectCast(de.Value, clsProcess)
oData = New KeyValuePair(Of String, String)(oProcess.ID, oProcess.Name)
lstGameProcesses.Items.Add(oData)
Next
End If
For Each de As DictionaryEntry In hshProcesses
oProcess = DirectCast(de.Value, clsProcess)
oData = New KeyValuePair(Of String, String)(oProcess.ID, oProcess.Name)
lstProcesses.Items.Add(oData)
Next
End Sub
Private Sub BuildProcessList()
Dim oData As KeyValuePair(Of String, String)
oProcessList.Clear()
For Each oData In lstGameProcesses.Items
oProcessList.Add(oData)
Next
End Sub
Private Sub OpenProcessManager()
Dim frm As New frmProcessManager
frm.ShowDialog()
LoadData()
End Sub
Private Sub SetForm()
'Set Form Name
If IDList.Count > 1 Then
Me.Text = frmGameProcesses_FormNameMulti
Else
Me.Text = mgrCommon.FormatString(frmGameProcesses_FormNameSingle, GameName)
End If
'Set Form Text
btnOpenProcesses.Text = frmGameProcesses_btnOpenProcesses
btnClose.Text = frmGameProcesses_btnClose
lblGameProcesses.Text = frmGameProcesses_lblGameProccesses
lblProcesses.Text = frmGameProcesses_lblProcesses
btnRemove.Text = frmGameProcesses_btnRemove
btnAdd.Text = frmGameProcesses_btnAdd
End Sub
Private Sub frmGameProcesses_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData()
SetForm()
End Sub
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
If bNewMode Then BuildProcessList()
Me.Close()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddProcess()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
RemoveProcess()
End Sub
Private Sub btnOpenProcesses_Click(sender As Object, e As EventArgs) Handles btnOpenProcesses.Click
If bNewMode Then BuildProcessList()
OpenProcessManager()
End Sub
End Class
+89 -39
View File
@@ -36,12 +36,16 @@ Partial Class frmMain
Me.gMonTraySetupGameManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupTags = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupProcessManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsLog = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayLogClear = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayLogSave = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSessions = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSyncGameID = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSyncGameIDOfficial = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSyncGameIDFile = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem()
Me.bwMonitor = New System.ComponentModel.BackgroundWorker()
@@ -62,13 +66,16 @@ Partial Class frmMain
Me.gMonSetupAddWizard = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupTags = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupProcessManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsLog = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonLogClear = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonLogSave = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSessions = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSyncGameID = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSyncGameIDOfficial = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSyncGameIDFile = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem()
@@ -85,7 +92,6 @@ Partial Class frmMain
Me.lblStatus2 = New System.Windows.Forms.Label()
Me.lblStatus3 = New System.Windows.Forms.Label()
Me.pbTime = New System.Windows.Forms.PictureBox()
Me.gMonTrayToolsSessions = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayMenu.SuspendLayout()
Me.gMonStatusStrip.SuspendLayout()
Me.gMonMainMenu.SuspendLayout()
@@ -105,7 +111,7 @@ Partial Class frmMain
'
Me.gMonTrayMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayNotification, Me.gMonTrayShow, Me.gMonTraySep2, Me.gMonTrayMon, Me.gMonTraySettings, Me.gMonTraySetup, Me.gMonTrayTools, Me.gMonTraySep1, Me.gMonTrayExit})
Me.gMonTrayMenu.Name = "gMonTrayMenu"
Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 192)
Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 170)
'
'gMonTrayNotification
'
@@ -139,7 +145,7 @@ Partial Class frmMain
'
'gMonTraySetup
'
Me.gMonTraySetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTraySetupAddWizard, Me.gMonTraySetupGameManager, Me.gMonTraySetupCustomVariables, Me.gMonTraySetupTags})
Me.gMonTraySetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTraySetupAddWizard, Me.gMonTraySetupGameManager, Me.gMonTraySetupTags, Me.gMonTraySetupProcessManager, Me.gMonTraySetupCustomVariables})
Me.gMonTraySetup.Name = "gMonTraySetup"
Me.gMonTraySetup.Size = New System.Drawing.Size(161, 22)
Me.gMonTraySetup.Text = "&Setup"
@@ -160,52 +166,77 @@ Partial Class frmMain
'
Me.gMonTraySetupCustomVariables.Name = "gMonTraySetupCustomVariables"
Me.gMonTraySetupCustomVariables.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupCustomVariables.Text = "Custom &Path Variables..."
Me.gMonTraySetupCustomVariables.Text = "Custom Path &Variables..."
'
'gMonTraySetupTags
'
Me.gMonTraySetupTags.Name = "gMonTraySetupTags"
Me.gMonTraySetupTags.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupTags.Text = "&Tags..."
Me.gMonTraySetupTags.Text = "&Tag Manager..."
'
'gMonTraySetupProcessManager
'
Me.gMonTraySetupProcessManager.Name = "gMonTraySetupProcessManager"
Me.gMonTraySetupProcessManager.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupProcessManager.Text = "&Process Manager..."
'
'gMonTrayTools
'
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog, Me.gMonTrayToolsSessions})
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog, Me.gMonTrayToolsSessions, Me.gMonTrayToolsSyncGameID})
Me.gMonTrayTools.Name = "gMonTrayTools"
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayTools.Text = "&Tools"
'
'gMonTrayToolsCleanMan
'
Me.gMonTrayToolsCleanMan.Name = "gMonTrayToolsCleanMan"
Me.gMonTrayToolsCleanMan.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsCleanMan.Text = "Clean Local Ma&nifest"
'
'gMonTrayToolsCompact
'
Me.gMonTrayToolsCompact.Name = "gMonTrayToolsCompact"
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsCompact.Text = "&Compact Databases"
'
'gMonTrayToolsLog
'
Me.gMonTrayToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayLogClear, Me.gMonTrayLogSave})
Me.gMonTrayToolsLog.Name = "gMonTrayToolsLog"
Me.gMonTrayToolsLog.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsLog.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsLog.Text = "&Log"
'
'gMonTrayLogClear
'
Me.gMonTrayLogClear.Name = "gMonTrayLogClear"
Me.gMonTrayLogClear.Size = New System.Drawing.Size(152, 22)
Me.gMonTrayLogClear.Size = New System.Drawing.Size(101, 22)
Me.gMonTrayLogClear.Text = "&Clear"
'
'gMonTrayLogSave
'
Me.gMonTrayLogSave.Name = "gMonTrayLogSave"
Me.gMonTrayLogSave.Size = New System.Drawing.Size(152, 22)
Me.gMonTrayLogSave.Size = New System.Drawing.Size(101, 22)
Me.gMonTrayLogSave.Text = "&Save"
'
'gMonTrayToolsSessions
'
Me.gMonTrayToolsSessions.Name = "gMonTrayToolsSessions"
Me.gMonTrayToolsSessions.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsSessions.Text = "&Session Viewer..."
'
'gMonTrayToolsSyncGameID
'
Me.gMonTrayToolsSyncGameID.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsSyncGameIDOfficial, Me.gMonTrayToolsSyncGameIDFile})
Me.gMonTrayToolsSyncGameID.Name = "gMonTrayToolsSyncGameID"
Me.gMonTrayToolsSyncGameID.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsSyncGameID.Text = "S&ync Game IDs"
'
'gMonTrayToolsSyncGameIDOfficial
'
Me.gMonTrayToolsSyncGameIDOfficial.Name = "gMonTrayToolsSyncGameIDOfficial"
Me.gMonTrayToolsSyncGameIDOfficial.Size = New System.Drawing.Size(142, 22)
Me.gMonTrayToolsSyncGameIDOfficial.Text = "&Official List..."
'
'gMonTrayToolsSyncGameIDFile
'
Me.gMonTrayToolsSyncGameIDFile.Name = "gMonTrayToolsSyncGameIDFile"
Me.gMonTrayToolsSyncGameIDFile.Size = New System.Drawing.Size(142, 22)
Me.gMonTrayToolsSyncGameIDFile.Text = "&File..."
'
'gMonTraySep1
'
Me.gMonTraySep1.Name = "gMonTraySep1"
@@ -319,7 +350,7 @@ Partial Class frmMain
'
'gMonSetup
'
Me.gMonSetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonSetupGameManager, Me.gMonSetupAddWizard, Me.gMonSetupCustomVariables, Me.gMonSetupTags})
Me.gMonSetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonSetupGameManager, Me.gMonSetupAddWizard, Me.gMonSetupTags, Me.gMonSetupProcessManager, Me.gMonSetupCustomVariables})
Me.gMonSetup.Name = "gMonSetup"
Me.gMonSetup.Size = New System.Drawing.Size(49, 20)
Me.gMonSetup.Text = "&Setup"
@@ -340,38 +371,38 @@ Partial Class frmMain
'
Me.gMonSetupCustomVariables.Name = "gMonSetupCustomVariables"
Me.gMonSetupCustomVariables.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupCustomVariables.Text = "Custom &Path Variables..."
Me.gMonSetupCustomVariables.Text = "Custom Path &Variables..."
'
'gMonSetupTags
'
Me.gMonSetupTags.Name = "gMonSetupTags"
Me.gMonSetupTags.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupTags.Text = "&Tags..."
Me.gMonSetupTags.Text = "&Tag Manager..."
'
'gMonSetupProcessManager
'
Me.gMonSetupProcessManager.Name = "gMonSetupProcessManager"
Me.gMonSetupProcessManager.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupProcessManager.Text = "&Process Manager..."
'
'gMonTools
'
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog, Me.gMonToolsSessions})
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCompact, Me.gMonToolsLog, Me.gMonToolsSessions, Me.gMonToolsSyncGameID})
Me.gMonTools.Name = "gMonTools"
Me.gMonTools.Size = New System.Drawing.Size(47, 20)
Me.gMonTools.Text = "&Tools"
'
'gMonToolsCleanMan
'
Me.gMonToolsCleanMan.Name = "gMonToolsCleanMan"
Me.gMonToolsCleanMan.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsCleanMan.Text = "Clean Local Ma&nifest"
'
'gMonToolsCompact
'
Me.gMonToolsCompact.Name = "gMonToolsCompact"
Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsCompact.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsCompact.Text = "&Compact Databases"
'
'gMonToolsLog
'
Me.gMonToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonLogClear, Me.gMonLogSave})
Me.gMonToolsLog.Name = "gMonToolsLog"
Me.gMonToolsLog.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsLog.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsLog.Text = "&Log"
'
'gMonLogClear
@@ -389,9 +420,28 @@ Partial Class frmMain
'gMonToolsSessions
'
Me.gMonToolsSessions.Name = "gMonToolsSessions"
Me.gMonToolsSessions.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsSessions.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsSessions.Text = "&Session Viewer..."
'
'gMonToolsSyncGameID
'
Me.gMonToolsSyncGameID.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsSyncGameIDOfficial, Me.gMonToolsSyncGameIDFile})
Me.gMonToolsSyncGameID.Name = "gMonToolsSyncGameID"
Me.gMonToolsSyncGameID.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsSyncGameID.Text = "S&ync Game IDs"
'
'gMonToolsSyncGameIDOfficial
'
Me.gMonToolsSyncGameIDOfficial.Name = "gMonToolsSyncGameIDOfficial"
Me.gMonToolsSyncGameIDOfficial.Size = New System.Drawing.Size(142, 22)
Me.gMonToolsSyncGameIDOfficial.Text = "&Official List..."
'
'gMonToolsSyncGameIDFile
'
Me.gMonToolsSyncGameIDFile.Name = "gMonToolsSyncGameIDFile"
Me.gMonToolsSyncGameIDFile.Size = New System.Drawing.Size(142, 22)
Me.gMonToolsSyncGameIDFile.Text = "&File..."
'
'gMonHelp
'
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout})
@@ -532,12 +582,6 @@ Partial Class frmMain
Me.pbTime.TabIndex = 18
Me.pbTime.TabStop = False
'
'gMonTrayToolsSessions
'
Me.gMonTrayToolsSessions.Name = "gMonTrayToolsSessions"
Me.gMonTrayToolsSessions.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsSessions.Text = "&Session Viewer..."
'
'frmMain
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -625,8 +669,6 @@ Partial Class frmMain
Friend WithEvents gMonTrayNotification As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpWebSite As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents pbTime As System.Windows.Forms.PictureBox
Friend WithEvents gMonTrayToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsLog As ToolStripMenuItem
Friend WithEvents gMonLogClear As ToolStripMenuItem
Friend WithEvents gMonLogSave As ToolStripMenuItem
@@ -637,4 +679,12 @@ Partial Class frmMain
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripStatusLabel
Friend WithEvents gMonToolsSessions As ToolStripMenuItem
Friend WithEvents gMonTrayToolsSessions As ToolStripMenuItem
Friend WithEvents gMonToolsSyncGameID As ToolStripMenuItem
Friend WithEvents gMonToolsSyncGameIDOfficial As ToolStripMenuItem
Friend WithEvents gMonToolsSyncGameIDFile As ToolStripMenuItem
Friend WithEvents gMonTrayToolsSyncGameID As ToolStripMenuItem
Friend WithEvents gMonTrayToolsSyncGameIDOfficial As ToolStripMenuItem
Friend WithEvents gMonTrayToolsSyncGameIDFile As ToolStripMenuItem
Friend WithEvents gMonTraySetupProcessManager As ToolStripMenuItem
Friend WithEvents gMonSetupProcessManager As ToolStripMenuItem
End Class
+233 -72
View File
@@ -40,6 +40,7 @@ Public Class frmMain
Private sPriorCompany As String
Private sPriorVersion As String
Private iRestoreTimeOut As Integer
Private oChildProcesses As New Hashtable
Private wState As FormWindowState = FormWindowState.Normal
'Developer Debug Flags
@@ -52,7 +53,7 @@ Public Class frmMain
WithEvents tmRestoreCheck As New System.Timers.Timer
WithEvents tmFileWatcherQueue As New System.Timers.Timer
Public WithEvents oProcess As New mgrProcesses
Public WithEvents oProcess As New mgrProcessDetection
Public WithEvents oBackup As New mgrBackup
Public WithEvents oRestore As New mgrRestore
Public hshScanList As Hashtable
@@ -294,7 +295,7 @@ Public Class frmMain
OperationStarted(False)
If oProcess.GameInfo.MonitorOnly = False Then
If SupressBackup() Then
If SuppressSession() Then
bDoBackup = False
UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.Name), False)
SetLastAction(mgrCommon.FormatString(frmMain_ErrorBackupSessionLength, oProcess.GameInfo.CroppedName))
@@ -365,9 +366,9 @@ Public Class frmMain
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 oNotReady As New List(Of clsBackup)
Dim oNotInstalled As New List(Of clsBackup)
Dim oNoCheckSum As New List(Of clsBackup)
Dim oBackup As clsBackup
Dim sFileName As String
Dim sExtractPath As String
@@ -395,18 +396,17 @@ Public Class frmMain
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)
oNotReady.Add(oBackup)
bFinished = False
End If
Else
sNoCheckSum.Add(de.Key)
oNoCheckSum.Add(oBackup)
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)
hshGames = mgrMonitorList.DoListGetbyMonitorID(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
@@ -420,34 +420,34 @@ Public Class frmMain
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)
If mgrManifest.DoManifestCheck(de.Key, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(de.Value, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(de.Value, mgrSQLite.Database.Local)
End If
End If
sNotInstalled.Add(de.Key)
oNotInstalled.Add(oBackup)
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)
For Each o As clsBackup In oNotReady
slRestoreData.Remove(o.MonitorID)
UpdateLog(mgrCommon.FormatString(frmMain_RestoreNotReady, o.Name), 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)
For Each o As clsBackup In oNotInstalled
slRestoreData.Remove(o.MonitorID)
If oSettings.AutoMark Then
UpdateLog(mgrCommon.FormatString(frmMain_AutoMark, s), False, ToolTipIcon.Info, True)
UpdateLog(mgrCommon.FormatString(frmMain_AutoMark, o.Name), False, ToolTipIcon.Info, True)
Else
UpdateLog(mgrCommon.FormatString(frmMain_NoAutoMark, s), False, ToolTipIcon.Info, True)
UpdateLog(mgrCommon.FormatString(frmMain_NoAutoMark, o.Name), 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)
For Each o As clsBackup In oNoCheckSum
slRestoreData.Remove(o.MonitorID)
UpdateLog(mgrCommon.FormatString(frmMain_NoCheckSum, o.Name), False, ToolTipIcon.Info, True)
Next
'Automatically restore backup files
@@ -456,13 +456,14 @@ Public Class frmMain
hshRestore = New Hashtable
sGame = String.Empty
For Each de As DictionaryEntry In slRestoreData
hshGames = mgrMonitorList.DoListGetbyName(de.Key)
oBackup = DirectCast(de.Value, clsBackup)
hshGames = mgrMonitorList.DoListGetbyMonitorID(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)
UpdateLog(mgrCommon.FormatString(frmMain_AutoRestoreFailure, oBackup.Name), False, ToolTipIcon.Info, True)
End If
Next
@@ -709,27 +710,30 @@ Public Class frmMain
End If
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours)
End Sub
Private Sub HandleSession()
Dim oSession As New clsSession
Dim oSession As clsSession
If Not SuppressSession() Then
'Record Session
oSession = New clsSession
oSession.MonitorID = oProcess.GameInfo.ID
oSession.SessionStart = oProcess.StartTime
oSession.SessionEnd = oProcess.EndTime
oSession.SessionStartFromDate = oProcess.StartTime
oSession.SessionEndFromDate = oProcess.EndTime
mgrSessions.AddSession(oSession)
End If
End Sub
Private Function SupressBackup() As Boolean
Private Function SuppressSession() As Boolean
Dim iSession As Integer
If oSettings.SupressBackup Then
If oSettings.SuppressBackup Then
iSession = Math.Ceiling(oProcess.TimeSpent.TotalMinutes)
If iSession > oSettings.SupressBackupThreshold Then
If iSession > oSettings.SuppressBackupThreshold Then
Return False
Else
Return True
@@ -837,18 +841,24 @@ Public Class frmMain
Dim frm As New frmTags
PauseScan()
frm.ShowDialog()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
ResumeScan()
End Sub
Private Sub OpenProcessManager()
Dim frm As New frmProcessManager
PauseScan()
frm.ShowDialog()
ResumeScan()
End Sub
Private Sub OpenGameManager(Optional ByVal bPendingRestores As Boolean = False)
Dim frm As New frmGameManager
PauseScan()
frm.BackupFolder = oSettings.BackupFolder
frm.Settings = oSettings
frm.PendingRestores = bPendingRestores
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan()
'Handle backup trigger
@@ -898,7 +908,7 @@ Public Class frmMain
frm.GameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
ResumeScan()
End Sub
@@ -907,7 +917,7 @@ Public Class frmMain
PauseScan()
frm.ShowDialog()
mgrPath.CustomVariablesReload()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
ResumeScan()
End Sub
@@ -972,18 +982,42 @@ Public Class frmMain
Private Sub HandleSyncWatcher() Handles tmFileWatcherQueue.Elapsed
tmFileWatcherQueue.Stop()
StopSyncWatcher()
If oSettings.Sync Then
UpdateLog(frmMain_MasterListChanged, False, ToolTipIcon.Info, True)
SyncGameSettings()
LoadGameSettings()
End If
CheckForNewBackups()
StartSyncWatcher()
End Sub
Private Sub SyncGameSettings()
'Sync Monitor List
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
mgrMonitorList.SyncMonitorLists(oSettings, False)
End Sub
Private Sub SyncGameIDs(ByVal bOfficial As Boolean)
Dim sLocation As String
PauseScan()
If mgrCommon.IsUnix Then
sLocation = App_URLImportLinux
Else
sLocation = App_URLImport
End If
If bOfficial Then
mgrMonitorList.SyncGameIDs(sLocation, oSettings, True)
Else
sLocation = mgrCommon.OpenFileBrowser("XML_Import", frmGameManager_ChooseImportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
If sLocation <> String.Empty Then
mgrMonitorList.SyncGameIDs(sLocation, oSettings, False)
End If
End If
ResumeScan()
End Sub
Private Sub LocalDatabaseCheck()
@@ -996,6 +1030,13 @@ Public Class frmMain
oRemoteDatabase.DatabaseUpgrade()
End Sub
Private Sub BackupDatabases()
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
oLocalDatabase.BackupDB(App_BackupOnLaunchFileDescription, True)
oRemoteDatabase.BackupDB(App_BackupOnLaunchFileDescription, True)
End Sub
Private Sub LoadAndVerify()
'If the default utility is missing we cannot continue
@@ -1025,6 +1066,11 @@ Public Class frmMain
VerifyDBVersion(mgrSQLite.Database.Remote)
RemoteDatabaseCheck()
'Backup GBM data
If oSettings.BackupOnLaunch Then
BackupDatabases()
End If
'Sync Game Settings
SyncGameSettings()
End If
@@ -1221,7 +1267,52 @@ Public Class frmMain
End If
End Sub
Private Function NotifySendUnix(ByVal sLogUpdate As String, ByVal objIcon As System.Windows.Forms.ToolTipIcon) As Boolean
Dim prsNotify As Process
Dim sUrgency As String
Dim sNotifyArgs As String
Dim bNotifyFailed As Boolean
'Build args for notify-send
Select Case objIcon
Case ToolTipIcon.Error
sUrgency = "critical"
Case ToolTipIcon.Warning
sUrgency = "normal"
Case ToolTipIcon.Info
sUrgency = "low"
Case Else
sUrgency = "low"
End Select
sNotifyArgs = "-i gbm " & "-u " & sUrgency & " """ & App_NameLong & """ ""<i>" & sLogUpdate.Replace("""", "\""") & "</i>"""
Try
'Execute notify-send
prsNotify = New Process
prsNotify.StartInfo.FileName = "/usr/bin/notify-send"
prsNotify.StartInfo.Arguments = sNotifyArgs
prsNotify.StartInfo.UseShellExecute = False
prsNotify.StartInfo.RedirectStandardOutput = True
prsNotify.StartInfo.CreateNoWindow = True
prsNotify.Start()
prsNotify.WaitForExit()
Select Case prsNotify.ExitCode
Case 0
bNotifyFailed = False
Case Else
bNotifyFailed = True
End Select
Catch
bNotifyFailed = True
End Try
Return bNotifyFailed
End Function
Public Sub UpdateLog(sLogUpdate As String, Optional bTrayUpdate As Boolean = True, Optional objIcon As System.Windows.Forms.ToolTipIcon = ToolTipIcon.Info, Optional bTimeStamp As Boolean = True) Handles oBackup.UpdateLog, oRestore.UpdateLog
Dim bNotifyFailed As Boolean
'Thread Safe (If one control requires an invoke assume they all do)
If txtLog.InvokeRequired = True Then
Dim d As New UpdateLogCallBack(AddressOf UpdateLog)
@@ -1257,9 +1348,18 @@ Public Class frmMain
txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret()
If bTrayUpdate Then
If mgrCommon.IsUnix Then
bNotifyFailed = NotifySendUnix(sLogUpdate, objIcon)
End If
If Not mgrCommon.IsUnix Or bNotifyFailed Then
gMonTray.BalloonTipText = sLogUpdate
gMonTray.BalloonTipIcon = objIcon
If bTrayUpdate Then gMonTray.ShowBalloonTip(10000)
gMonTray.ShowBalloonTip(10000)
End If
End If
End If
Application.DoEvents()
End Sub
@@ -1297,11 +1397,14 @@ Public Class frmMain
gMonSetupAddWizard.Text = frmMain_gMonSetupAddWizard
gMonSetupCustomVariables.Text = frmMain_gMonSetupCustomVariables
gMonSetupTags.Text = frmMain_gMonSetupTags
gMonSetupProcessManager.Text = frmMain_gMonSetupProcessManager
gMonTools.Text = frmMain_gMonTools
gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonToolsCompact.Text = frmMain_gMonToolsCompact
gMonToolsLog.Text = frmMain_gMonToolsLog
gMonToolsSessions.Text = frmMain_gMonToolsSessions
gMonToolsSyncGameID.Text = frmMain_gMonToolsSyncGameID
gMonToolsSyncGameIDOfficial.Text = frmMain_gMonToolsSyncGameIDOfficial
gMonToolsSyncGameIDFile.Text = frmMain_gMonToolsSyncGameIDFile
gMonLogClear.Text = frmMain_gMonLogClear
gMonLogSave.Text = frmMain_gMonLogSave
gMonHelp.Text = frmMain_gMonHelp
@@ -1319,11 +1422,14 @@ Public Class frmMain
gMonTraySetupAddWizard.Text = frmMain_gMonSetupAddWizard
gMonTraySetupCustomVariables.Text = frmMain_gMonSetupCustomVariables
gMonTraySetupTags.Text = frmMain_gMonSetupTags
gMonTraySetupProcessManager.Text = frmMain_gMonSetupProcessManager
gMonTrayTools.Text = frmMain_gMonTools
gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact
gMonTrayToolsLog.Text = frmMain_gMonToolsLog
gMonTrayToolsSessions.Text = frmMain_gMonToolsSessions
gMonTrayToolsSyncGameID.Text = frmMain_gMonToolsSyncGameID
gMonTrayToolsSyncGameIDOfficial.Text = frmMain_gMonToolsSyncGameIDOfficial
gMonTrayToolsSyncGameIDFile.Text = frmMain_gMonToolsSyncGameIDFile
gMonTrayLogClear.Text = frmMain_gMonLogClear
gMonTrayLogSave.Text = frmMain_gMonLogSave
gMonTrayExit.Text = frmMain_gMonFileExit
@@ -1351,6 +1457,67 @@ Public Class frmMain
ResetGameInfo()
End Sub
Private Function BuildChildProcesses() As Integer
Dim oCurrentProcess As clsProcess
Dim oProcessList As Hashtable
Dim prsChild As Process
oChildProcesses.Clear()
oProcessList = mgrGameProcesses.GetProcessesByGame(oProcess.GameInfo.ID)
If oProcessList.Count > 0 Then
For Each oCurrentProcess In oProcessList.Values
prsChild = New Process
prsChild.StartInfo.Arguments = oCurrentProcess.Args
prsChild.StartInfo.FileName = oCurrentProcess.Path
prsChild.StartInfo.UseShellExecute = False
prsChild.StartInfo.RedirectStandardOutput = True
prsChild.StartInfo.CreateNoWindow = True
oChildProcesses.Add(oCurrentProcess, prsChild)
Next
End If
Return oChildProcesses.Count
End Function
Private Sub StartChildProcesses()
Dim oCurrentProcess As clsProcess
Dim prsChild As Process
Try
For Each de As DictionaryEntry In oChildProcesses
oCurrentProcess = DirectCast(de.Key, clsProcess)
prsChild = DirectCast(de.Value, Process)
prsChild.Start()
UpdateLog(mgrCommon.FormatString(frmMain_ProcessStarted, oCurrentProcess.Name), False)
Next
Catch ex As Exception
UpdateLog(mgrCommon.FormatString(frmMain_ErrorStartChildProcess, oProcess.GameInfo.CroppedName), True, ToolTipIcon.Error)
UpdateLog(mgrCommon.FormatString(App_GenericError, ex.Message), False,, False)
End Try
End Sub
Private Sub EndChildProcesses()
Dim oCurrentProcess As clsProcess
Dim prsChild As Process
Try
For Each de As DictionaryEntry In oChildProcesses
oCurrentProcess = DirectCast(de.Key, clsProcess)
prsChild = DirectCast(de.Value, Process)
If oCurrentProcess.Kill Then
prsChild.Kill()
UpdateLog(mgrCommon.FormatString(frmMain_ProcessKilled, oCurrentProcess.Name), False)
End If
Next
Catch ex As Exception
UpdateLog(mgrCommon.FormatString(frmMain_ErrorEndChildProcess, oProcess.GameInfo.CroppedName), True, ToolTipIcon.Error)
UpdateLog(mgrCommon.FormatString(App_GenericError, ex.Message), False,, False)
End Try
End Sub
'Functions that control the scanning for games
Private Sub StartScan()
tmScanTimer.Interval = 5000
@@ -1428,7 +1595,7 @@ Public Class frmMain
oSettings.BackupFolder = sBackupPath
oSettings.SaveSettings()
oSettings.LoadSettings()
If oSettings.Sync Then mgrMonitorList.HandleBackupLocationChange(oSettings)
mgrMonitorList.HandleBackupLocationChange(oSettings)
End If
Return True
Else
@@ -1494,7 +1661,7 @@ Public Class frmMain
Private Sub CheckForSavedDuplicate()
For Each o As clsGame In oProcess.DuplicateList
If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower And o.Parameter = String.Empty Then
If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower Then
oProcess.GameInfo = o
oProcess.Duplicate = False
End If
@@ -1527,29 +1694,6 @@ Public Class frmMain
End If
End Sub
Private Sub CleanLocalManifest()
Dim slItems As SortedList
PauseScan()
If mgrCommon.ShowMessage(frmMain_ConfirmManifestClean, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
slItems = mgrRestore.SyncLocalManifest()
If slItems.Count > 0 Then
For Each oItem As clsBackup In slItems.Values
UpdateLog(mgrCommon.FormatString(frmMain_ManifestRemovedEntry, oItem.Name), False)
Next
mgrCommon.ShowMessage(frmMain_ManifestTotalRemoved, slItems.Count, MsgBoxStyle.Information)
Else
mgrCommon.ShowMessage(frmMain_ManifestAreadyClean, MsgBoxStyle.Information)
End If
End If
ResumeScan()
End Sub
Private Sub CompactDatabases()
Dim oLocalDatabase As mgrSQLite
Dim oRemoteDatabase As mgrSQLite
@@ -1603,10 +1747,6 @@ Public Class frmMain
OpenGameManager()
End Sub
Private Sub gMonToolsSync_Click(sender As Object, e As EventArgs) Handles gMonTrayToolsCleanMan.Click, gMonToolsCleanMan.Click
CleanLocalManifest()
End Sub
Private Sub gMonToolsCompact_Click(sender As Object, e As EventArgs) Handles gMonToolsCompact.Click, gMonTrayToolsCompact.Click
CompactDatabases()
End Sub
@@ -1623,6 +1763,10 @@ Public Class frmMain
OpenTags()
End Sub
Private Sub gMonSetupProcessManager_Click(sender As Object, e As EventArgs) Handles gMonSetupProcessManager.Click, gMonTraySetupProcessManager.Click
OpenProcessManager()
End Sub
Private Sub gMonHelpAbout_Click(sender As Object, e As EventArgs) Handles gMonHelpAbout.Click
OpenAbout()
End Sub
@@ -1651,6 +1795,14 @@ Public Class frmMain
OpenSessions()
End Sub
Private Sub gMonToolsSyncGameIDOfficial_Click(sender As Object, e As EventArgs) Handles gMonToolsSyncGameIDOfficial.Click, gMonTrayToolsSyncGameIDOfficial.Click
SyncGameIDs(True)
End Sub
Private Sub gMonToolsSyncGameIDFile_Click(sender As Object, e As EventArgs) Handles gMonToolsSyncGameIDFile.Click, gMonTrayToolsSyncGameIDFile.Click
SyncGameIDs(False)
End Sub
Private Sub gMonNotification_Click(sender As Object, e As EventArgs) Handles gMonNotification.Click, gMonTrayNotification.Click
gMonNotification.Visible = False
gMonTrayNotification.Visible = False
@@ -1757,6 +1909,11 @@ Public Class frmMain
UpdateStatus(mgrCommon.FormatString(frmMain_GameDetected, oProcess.GameInfo.CroppedName))
SetGameInfo()
End If
If BuildChildProcesses() > 0 And Not oProcess.Duplicate Then
StartChildProcesses()
End If
oProcess.StartTime = Now
bwMonitor.RunWorkerAsync()
Else
@@ -1782,6 +1939,11 @@ Public Class frmMain
Private Sub bwMain_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMonitor.RunWorkerCompleted
Dim bContinue As Boolean = True
If oChildProcesses.Count > 0 And Not oProcess.Duplicate Then
EndChildProcesses()
End If
oProcess.EndTime = Now
If Not bCancelledByUser Then
@@ -1887,5 +2049,4 @@ Public Class frmMain
'Move focus to first label
lblGameTitle.Focus()
End Sub
End Class
+242
View File
@@ -0,0 +1,242 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmProcessManager
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.grpProcess = New System.Windows.Forms.GroupBox()
Me.chkKillProcess = New System.Windows.Forms.CheckBox()
Me.txtArguments = New System.Windows.Forms.TextBox()
Me.lblArguments = New System.Windows.Forms.Label()
Me.btnProcessBrowse = New System.Windows.Forms.Button()
Me.txtName = New System.Windows.Forms.TextBox()
Me.txtPath = New System.Windows.Forms.TextBox()
Me.lblProcess = New System.Windows.Forms.Label()
Me.lblName = New System.Windows.Forms.Label()
Me.btnClose = New System.Windows.Forms.Button()
Me.btnDelete = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.lstProcesses = New System.Windows.Forms.ListBox()
Me.txtID = New System.Windows.Forms.TextBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
Me.grpProcess.SuspendLayout()
Me.SuspendLayout()
'
'grpProcess
'
Me.grpProcess.Controls.Add(Me.chkKillProcess)
Me.grpProcess.Controls.Add(Me.txtArguments)
Me.grpProcess.Controls.Add(Me.lblArguments)
Me.grpProcess.Controls.Add(Me.btnProcessBrowse)
Me.grpProcess.Controls.Add(Me.txtName)
Me.grpProcess.Controls.Add(Me.txtPath)
Me.grpProcess.Controls.Add(Me.lblProcess)
Me.grpProcess.Controls.Add(Me.lblName)
Me.grpProcess.Location = New System.Drawing.Point(238, 12)
Me.grpProcess.Name = "grpProcess"
Me.grpProcess.Size = New System.Drawing.Size(334, 120)
Me.grpProcess.TabIndex = 3
Me.grpProcess.TabStop = False
Me.grpProcess.Text = "Configuration"
'
'chkKillProcess
'
Me.chkKillProcess.AutoSize = True
Me.chkKillProcess.Location = New System.Drawing.Point(72, 96)
Me.chkKillProcess.Name = "chkKillProcess"
Me.chkKillProcess.Size = New System.Drawing.Size(181, 17)
Me.chkKillProcess.TabIndex = 4
Me.chkKillProcess.Text = "Kill process when game is closed"
Me.chkKillProcess.UseVisualStyleBackColor = True
'
'txtArguments
'
Me.txtArguments.Location = New System.Drawing.Point(72, 70)
Me.txtArguments.Name = "txtArguments"
Me.txtArguments.Size = New System.Drawing.Size(256, 20)
Me.txtArguments.TabIndex = 3
'
'lblArguments
'
Me.lblArguments.AutoSize = True
Me.lblArguments.Location = New System.Drawing.Point(6, 73)
Me.lblArguments.Name = "lblArguments"
Me.lblArguments.Size = New System.Drawing.Size(60, 13)
Me.lblArguments.TabIndex = 0
Me.lblArguments.Text = "Arguments:"
'
'btnProcessBrowse
'
Me.btnProcessBrowse.Location = New System.Drawing.Point(298, 45)
Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnProcessBrowse.TabIndex = 2
Me.btnProcessBrowse.Text = "..."
Me.btnProcessBrowse.UseVisualStyleBackColor = True
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(72, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(256, 20)
Me.txtName.TabIndex = 0
'
'txtPath
'
Me.txtPath.Location = New System.Drawing.Point(72, 45)
Me.txtPath.Name = "txtPath"
Me.txtPath.Size = New System.Drawing.Size(220, 20)
Me.txtPath.TabIndex = 1
'
'lblProcess
'
Me.lblProcess.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(6, 48)
Me.lblProcess.Name = "lblProcess"
Me.lblProcess.Size = New System.Drawing.Size(48, 13)
Me.lblProcess.TabIndex = 0
Me.lblProcess.Text = "Process:"
'
'lblName
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(6, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 0
Me.lblName.Text = "Name:"
'
'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(497, 226)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 6
Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True
'
'btnDelete
'
Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDelete.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnDelete.Location = New System.Drawing.Point(48, 226)
Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 2
Me.btnDelete.Text = "-"
Me.btnDelete.UseVisualStyleBackColor = True
'
'btnAdd
'
Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnAdd.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnAdd.Location = New System.Drawing.Point(12, 226)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 1
Me.btnAdd.Text = "+"
Me.btnAdd.UseVisualStyleBackColor = True
'
'lstProcesses
'
Me.lstProcesses.FormattingEnabled = True
Me.lstProcesses.Location = New System.Drawing.Point(12, 12)
Me.lstProcesses.Name = "lstProcesses"
Me.lstProcesses.Size = New System.Drawing.Size(220, 212)
Me.lstProcesses.Sorted = True
Me.lstProcesses.TabIndex = 0
'
'txtID
'
Me.txtID.Enabled = False
Me.txtID.Location = New System.Drawing.Point(374, 150)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(33, 20)
Me.txtID.TabIndex = 0
Me.txtID.TabStop = False
Me.txtID.Visible = False
'
'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(494, 149)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 5
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'btnSave
'
Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnSave.Location = New System.Drawing.Point(413, 149)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 4
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'frmProcessManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(584, 261)
Me.Controls.Add(Me.grpProcess)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.btnDelete)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstProcesses)
Me.Controls.Add(Me.txtID)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmProcessManager"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Process Manager"
Me.grpProcess.ResumeLayout(False)
Me.grpProcess.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents grpProcess As GroupBox
Friend WithEvents txtArguments As TextBox
Friend WithEvents lblArguments As Label
Friend WithEvents btnProcessBrowse As Button
Friend WithEvents txtName As TextBox
Friend WithEvents txtPath As TextBox
Friend WithEvents lblProcess As Label
Friend WithEvents lblName As Label
Friend WithEvents btnClose As Button
Friend WithEvents btnDelete As Button
Friend WithEvents btnAdd As Button
Friend WithEvents lstProcesses As ListBox
Friend WithEvents txtID As TextBox
Friend WithEvents btnCancel As Button
Friend WithEvents btnSave As Button
Friend WithEvents chkKillProcess As CheckBox
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+371
View File
@@ -0,0 +1,371 @@
Imports GBM.My.Resources
Imports System.IO
Public Class frmProcessManager
Dim hshProcessData As Hashtable
Private bIsDirty As Boolean = False
Private bIsLoading As Boolean = False
Private oCurrentProcess As clsProcess
Private Property IsDirty As Boolean
Get
Return bIsDirty
End Get
Set(value As Boolean)
bIsDirty = value
End Set
End Property
Private Property IsLoading As Boolean
Get
Return bIsLoading
End Get
Set(value As Boolean)
bIsLoading = value
End Set
End Property
Private Enum eModes As Integer
View = 1
Edit = 2
Add = 3
Disabled = 4
End Enum
Private eCurrentMode As eModes = eModes.Disabled
Private Property ProcessData As Hashtable
Get
Return hshProcessData
End Get
Set(value As Hashtable)
hshProcessData = value
End Set
End Property
Private Sub ProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String = txtPath.Text
Dim sNewPath As String
If sCurrentPath <> String.Empty Then
sCurrentPath = Path.GetDirectoryName(txtPath.Text)
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFileBrowser("PM_Process", frmProcessManager_ChooseProcess, "exe",
frmProcessManager_Executable, sDefaultFolder, False, True)
If sNewPath <> String.Empty Then
txtPath.Text = sNewPath
End If
End Sub
Private Sub LoadData()
ProcessData = mgrProcess.ReadProcesses
lstProcesses.Items.Clear()
FormatAndFillList()
End Sub
Private Function HandleDirty() As MsgBoxResult
Dim oResult As MsgBoxResult
oResult = mgrCommon.ShowMessage(App_ConfirmDirty, MsgBoxStyle.YesNoCancel)
Select Case oResult
Case MsgBoxResult.Yes
IsDirty = False
Case MsgBoxResult.No
IsDirty = False
Case MsgBoxResult.Cancel
'No Change
End Select
Return oResult
End Function
Private Sub FormatAndFillList()
IsLoading = True
For Each oProcess As clsProcess In ProcessData.Values
lstProcesses.Items.Add(oProcess.Name)
Next
IsLoading = False
End Sub
Private Sub FillData()
IsLoading = True
oCurrentProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
txtID.Text = oCurrentProcess.ID
txtName.Text = oCurrentProcess.Name
txtPath.Text = oCurrentProcess.Path
txtArguments.Text = oCurrentProcess.Args
chkKillProcess.Checked = oCurrentProcess.Kill
IsLoading = False
End Sub
Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
If Not IsLoading Then
IsDirty = True
If Not eCurrentMode = eModes.Add Then EditProcess()
End If
End Sub
Private Sub AssignDirtyHandlers(ByVal oCtls As GroupBox.ControlCollection)
For Each ctl As Control In oCtls
If TypeOf ctl Is TextBox Then
AddHandler DirectCast(ctl, TextBox).TextChanged, AddressOf DirtyCheck_ValueChanged
End If
Next
End Sub
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
For Each ctl As Control In oCtls
If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Text = String.Empty
End If
Next
txtID.Text = String.Empty
End Sub
Private Sub ModeChange()
IsLoading = True
Select Case eCurrentMode
Case eModes.Add
grpProcess.Enabled = True
WipeControls(grpProcess.Controls)
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
lstProcesses.Enabled = False
chkKillProcess.Checked = True
Case eModes.Edit
lstProcesses.Enabled = False
grpProcess.Enabled = True
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
Case eModes.View
lstProcesses.Enabled = True
grpProcess.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
Case eModes.Disabled
lstProcesses.Enabled = True
WipeControls(grpProcess.Controls)
grpProcess.Enabled = False
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
End Select
IsLoading = False
End Sub
Private Sub EditProcess()
eCurrentMode = eModes.Edit
ModeChange()
End Sub
Private Sub AddProcess()
eCurrentMode = eModes.Add
ModeChange()
txtName.Focus()
End Sub
Private Sub CancelEdit()
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveProcess()
Case MsgBoxResult.No
If lstProcesses.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstProcesses.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
Case MsgBoxResult.Cancel
'Do Nothing
End Select
Else
If lstProcesses.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstProcesses.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SaveProcess()
Dim oProcess As New clsProcess
Dim bSuccess As Boolean = False
If txtID.Text <> String.Empty Then
oProcess.ID = txtID.Text
End If
oProcess.Name = txtName.Text
oProcess.Path = txtPath.Text
oProcess.Args = txtArguments.Text
oProcess.Kill = chkKillProcess.Checked
Select Case eCurrentMode
Case eModes.Add
If CoreValidatation(oProcess) Then
bSuccess = True
mgrProcess.DoProcessAdd(oProcess)
eCurrentMode = eModes.View
End If
Case eModes.Edit
If CoreValidatation(oProcess) Then
bSuccess = True
mgrProcess.DoProcessUpdate(oProcess)
eCurrentMode = eModes.View
End If
End Select
If bSuccess Then
IsDirty = False
LoadData()
ModeChange()
If eCurrentMode = eModes.View Then lstProcesses.SelectedIndex = lstProcesses.Items.IndexOf(oProcess.Name)
End If
End Sub
Private Sub DeleteProcess()
Dim oProcess As clsProcess
If lstProcesses.SelectedItems.Count > 0 Then
oProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
If mgrCommon.ShowMessage(frmProcessManager_ConfirmDelete, oProcess.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrProcess.DoProcessDelete(oProcess.ID)
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SwitchProcess()
If lstProcesses.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
FillData()
ModeChange()
End If
End Sub
Private Function CoreValidatation(ByVal oProcess As clsProcess) As Boolean
If txtName.Text.Trim = String.Empty Then
mgrCommon.ShowMessage(frmProcessManager_ErrorValidName, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
If txtPath.Text.Trim = String.Empty Then
mgrCommon.ShowMessage(frmProcessManager_ErrorValidPath, MsgBoxStyle.Exclamation)
txtPath.Focus()
Return False
Else
If Not File.Exists(txtPath.Text.Trim) Then
mgrCommon.ShowMessage(frmProcessManager_ErrorPathNotFound, MsgBoxStyle.Exclamation)
txtPath.Focus()
Return False
End If
End If
If mgrProcess.DoCheckDuplicate(oProcess.Name, oProcess.ID) Then
mgrCommon.ShowMessage(frmProcessManager_ErrorDupe, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
Return True
End Function
Private Sub SetForm()
'Set Form Name
Me.Text = frmProcessManager_FormName
'Set Form Text
btnCancel.Text = frmProcessManager_btnCancel
btnSave.Text = frmProcessManager_btnSave
grpProcess.Text = frmProcessManager_grpProcess
btnProcessBrowse.Text = frmProcessManager_btnProcessBrowse
lblProcess.Text = frmProcessManager_lblPath
lblName.Text = frmProcessManager_lblName
btnClose.Text = frmProcessManager_btnClose
btnDelete.Text = frmProcessManager_btnDelete
btnAdd.Text = frmProcessManager_btnAdd
chkKillProcess.Text = frmProcessManager_chkKillProcess
End Sub
Private Sub frmProcessManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
LoadData()
ModeChange()
AssignDirtyHandlers(grpProcess.Controls)
End Sub
Private Sub lstProcesses_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstProcesses.SelectedIndexChanged
SwitchProcess()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddProcess()
End Sub
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
DeleteProcess()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
SaveProcess()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
CancelEdit()
End Sub
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnPathBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
ProcessBrowse()
End Sub
Private Sub frmProcessManager_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveProcess()
Case MsgBoxResult.No
'Do Nothing
Case MsgBoxResult.Cancel
e.Cancel = True
End Select
End If
End Sub
End Class
+180
View File
@@ -0,0 +1,180 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmSessionExport
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.btnExport = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.grpExportType = New System.Windows.Forms.GroupBox()
Me.grpDateType = New System.Windows.Forms.GroupBox()
Me.optCSV = New System.Windows.Forms.RadioButton()
Me.optXML = New System.Windows.Forms.RadioButton()
Me.optCurrentLocale = New System.Windows.Forms.RadioButton()
Me.optUnix = New System.Windows.Forms.RadioButton()
Me.grpOptions = New System.Windows.Forms.GroupBox()
Me.chkCSVHeaders = New System.Windows.Forms.CheckBox()
Me.grpExportType.SuspendLayout()
Me.grpDateType.SuspendLayout()
Me.grpOptions.SuspendLayout()
Me.SuspendLayout()
'
'btnExport
'
Me.btnExport.Location = New System.Drawing.Point(116, 226)
Me.btnExport.Name = "btnExport"
Me.btnExport.Size = New System.Drawing.Size(75, 23)
Me.btnExport.TabIndex = 3
Me.btnExport.Text = "&Export"
Me.btnExport.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(197, 226)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'grpExportType
'
Me.grpExportType.Controls.Add(Me.optXML)
Me.grpExportType.Controls.Add(Me.optCSV)
Me.grpExportType.Location = New System.Drawing.Point(12, 12)
Me.grpExportType.Name = "grpExportType"
Me.grpExportType.Size = New System.Drawing.Size(260, 70)
Me.grpExportType.TabIndex = 0
Me.grpExportType.TabStop = False
Me.grpExportType.Text = "Export Type"
'
'grpDateType
'
Me.grpDateType.Controls.Add(Me.optUnix)
Me.grpDateType.Controls.Add(Me.optCurrentLocale)
Me.grpDateType.Location = New System.Drawing.Point(12, 88)
Me.grpDateType.Name = "grpDateType"
Me.grpDateType.Size = New System.Drawing.Size(260, 70)
Me.grpDateType.TabIndex = 1
Me.grpDateType.TabStop = False
Me.grpDateType.Text = "Date Type"
'
'optCSV
'
Me.optCSV.AutoSize = True
Me.optCSV.Location = New System.Drawing.Point(6, 19)
Me.optCSV.Name = "optCSV"
Me.optCSV.Size = New System.Drawing.Size(46, 17)
Me.optCSV.TabIndex = 0
Me.optCSV.TabStop = True
Me.optCSV.Text = "CSV"
Me.optCSV.UseVisualStyleBackColor = True
'
'optXML
'
Me.optXML.AutoSize = True
Me.optXML.Location = New System.Drawing.Point(6, 42)
Me.optXML.Name = "optXML"
Me.optXML.Size = New System.Drawing.Size(47, 17)
Me.optXML.TabIndex = 1
Me.optXML.TabStop = True
Me.optXML.Text = "XML"
Me.optXML.UseVisualStyleBackColor = True
'
'optCurrentLocale
'
Me.optCurrentLocale.AutoEllipsis = True
Me.optCurrentLocale.Location = New System.Drawing.Point(6, 19)
Me.optCurrentLocale.Name = "optCurrentLocale"
Me.optCurrentLocale.Size = New System.Drawing.Size(248, 17)
Me.optCurrentLocale.TabIndex = 0
Me.optCurrentLocale.TabStop = True
Me.optCurrentLocale.Text = "Current Locale"
Me.optCurrentLocale.UseVisualStyleBackColor = True
'
'optUnix
'
Me.optUnix.AutoEllipsis = True
Me.optUnix.Location = New System.Drawing.Point(6, 42)
Me.optUnix.Name = "optUnix"
Me.optUnix.Size = New System.Drawing.Size(248, 17)
Me.optUnix.TabIndex = 1
Me.optUnix.TabStop = True
Me.optUnix.Text = "Unix Timestamp"
Me.optUnix.UseVisualStyleBackColor = True
'
'grpOptions
'
Me.grpOptions.Controls.Add(Me.chkCSVHeaders)
Me.grpOptions.Location = New System.Drawing.Point(12, 164)
Me.grpOptions.Name = "grpOptions"
Me.grpOptions.Size = New System.Drawing.Size(260, 45)
Me.grpOptions.TabIndex = 2
Me.grpOptions.TabStop = False
Me.grpOptions.Text = "Other Options"
'
'chkCSVHeaders
'
Me.chkCSVHeaders.AutoSize = True
Me.chkCSVHeaders.Location = New System.Drawing.Point(6, 19)
Me.chkCSVHeaders.Name = "chkCSVHeaders"
Me.chkCSVHeaders.Size = New System.Drawing.Size(167, 17)
Me.chkCSVHeaders.TabIndex = 0
Me.chkCSVHeaders.Text = "Export Column Headers (CSV)"
Me.chkCSVHeaders.UseVisualStyleBackColor = True
'
'frmSessionExport
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(284, 261)
Me.Controls.Add(Me.grpOptions)
Me.Controls.Add(Me.grpDateType)
Me.Controls.Add(Me.grpExportType)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnExport)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmSessionExport"
Me.ShowIcon = False
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Session Export Options"
Me.grpExportType.ResumeLayout(False)
Me.grpExportType.PerformLayout()
Me.grpDateType.ResumeLayout(False)
Me.grpOptions.ResumeLayout(False)
Me.grpOptions.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents btnExport As Button
Friend WithEvents btnCancel As Button
Friend WithEvents grpExportType As GroupBox
Friend WithEvents optXML As RadioButton
Friend WithEvents optCSV As RadioButton
Friend WithEvents grpDateType As GroupBox
Friend WithEvents optUnix As RadioButton
Friend WithEvents optCurrentLocale As RadioButton
Friend WithEvents grpOptions As GroupBox
Friend WithEvents chkCSVHeaders As CheckBox
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+90
View File
@@ -0,0 +1,90 @@
Imports GBM.My.Resources
Public Class frmSessionExport
Private bXML As Boolean = True
Private bUnix As Boolean = False
Private bCSVHeaders As Boolean = True
Public ReadOnly Property XML As Boolean
Get
Return bXML
End Get
End Property
Public ReadOnly Property Unix As Boolean
Get
Return bUnix
End Get
End Property
Public ReadOnly Property Headers As Boolean
Get
Return bCSVHeaders
End Get
End Property
Private Sub SetOptions()
If optXML.Checked Then
bXML = True
Else
bXML = False
End If
If optUnix.Checked Then
bUnix = True
Else
bUnix = False
End If
If chkCSVHeaders.Checked Then
bCSVHeaders = True
Else
bCSVHeaders = False
End If
End Sub
Private Sub SetForm()
Me.Text = frmSessionExport_FormName
grpExportType.Text = frmSessionExport_grpExportType
grpDateType.Text = frmSessionExport_grpDateType
grpOptions.Text = frmSessionExport_grpOptions
optCSV.Text = frmSessionExport_optCSV
optXML.Text = frmSessionExport_optXML
optCurrentLocale.Text = frmSessionExport_optCurrentLocale & " - " & Now
optUnix.Text = frmSessionExport_optUnix & " - " & mgrCommon.DateToUnix(Now)
chkCSVHeaders.Text = frmSessionExport_chkCSVHeaders
btnExport.Text = frmSessionExport_btnExport
btnCancel.Text = frmSessionExport_btnCancel
optCSV.Checked = True
optCurrentLocale.Checked = True
End Sub
Private Sub frmSessionExport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
End Sub
Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
SetOptions()
Me.DialogResult = DialogResult.OK
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.DialogResult = DialogResult.Cancel
End Sub
Private Sub optCSV_CheckedChanged(sender As Object, e As EventArgs) Handles optCSV.CheckedChanged
If Not optCSV.Checked Then
chkCSVHeaders.Checked = False
chkCSVHeaders.Enabled = False
Else
chkCSVHeaders.Checked = True
chkCSVHeaders.Enabled = True
End If
End Sub
End Class
+31 -4
View File
@@ -32,6 +32,8 @@ Partial Class frmSessions
Me.btnDelete = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.lblDateRange = New System.Windows.Forms.Label()
Me.lblTotalHours = New System.Windows.Forms.Label()
Me.btnExport = New System.Windows.Forms.Button()
CType(Me.dgSessions, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
@@ -41,7 +43,7 @@ Partial Class frmSessions
Me.lblFilter.Location = New System.Drawing.Point(12, 9)
Me.lblFilter.Name = "lblFilter"
Me.lblFilter.Size = New System.Drawing.Size(63, 13)
Me.lblFilter.TabIndex = 0
Me.lblFilter.TabIndex = 1
Me.lblFilter.Text = "Game Filter:"
'
'txtFilter
@@ -100,7 +102,7 @@ Partial Class frmSessions
Me.btnReset.Location = New System.Drawing.Point(591, 526)
Me.btnReset.Name = "btnReset"
Me.btnReset.Size = New System.Drawing.Size(100, 23)
Me.btnReset.TabIndex = 2
Me.btnReset.TabIndex = 10
Me.btnReset.Text = "&Reset Filters"
Me.btnReset.UseVisualStyleBackColor = True
'
@@ -120,7 +122,7 @@ Partial Class frmSessions
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 = 8
Me.btnClose.TabIndex = 11
Me.btnClose.Text = "&Close"
Me.btnClose.UseVisualStyleBackColor = True
'
@@ -131,14 +133,37 @@ Partial Class frmSessions
Me.lblDateRange.Location = New System.Drawing.Point(310, 9)
Me.lblDateRange.Name = "lblDateRange"
Me.lblDateRange.Size = New System.Drawing.Size(68, 13)
Me.lblDateRange.TabIndex = 9
Me.lblDateRange.TabIndex = 2
Me.lblDateRange.Text = "Date Range:"
'
'lblTotalHours
'
Me.lblTotalHours.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lblTotalHours.Location = New System.Drawing.Point(118, 531)
Me.lblTotalHours.Name = "lblTotalHours"
Me.lblTotalHours.Size = New System.Drawing.Size(361, 13)
Me.lblTotalHours.TabIndex = 8
Me.lblTotalHours.Text = "Total Hours:"
Me.lblTotalHours.TextAlign = System.Drawing.ContentAlignment.TopCenter
'
'btnExport
'
Me.btnExport.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnExport.Location = New System.Drawing.Point(485, 526)
Me.btnExport.Name = "btnExport"
Me.btnExport.Size = New System.Drawing.Size(100, 23)
Me.btnExport.TabIndex = 9
Me.btnExport.Text = "&Export Grid"
Me.btnExport.UseVisualStyleBackColor = True
'
'frmSessions
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(784, 561)
Me.Controls.Add(Me.btnExport)
Me.Controls.Add(Me.lblTotalHours)
Me.Controls.Add(Me.lblDateRange)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.btnDelete)
@@ -170,4 +195,6 @@ Partial Class frmSessions
Friend WithEvents btnDelete As Button
Friend WithEvents btnClose As Button
Friend WithEvents lblDateRange As Label
Friend WithEvents lblTotalHours As Label
Friend WithEvents btnExport As Button
End Class
+160 -7
View File
@@ -1,24 +1,55 @@
Imports GBM.My.Resources
Imports System.Globalization
Imports System.ComponentModel
Public Class frmSessions
Private bInitFinished As Boolean = False
Private WithEvents tmFilterTimer As Timer
Private bStartSortAsc As Boolean = True
Private iStartDataCol As Integer
Private iStartDisplayCol As Integer
Private bEndSortAsc As Boolean = True
Private iEndDataCol As Integer
Private iEndDisplayCol As Integer
Private bHoursSortAsc As Boolean = True
Private iHoursCol As Integer
Private Sub FormatGrid()
'Build Columns
dgSessions.Columns.Add("MonitorID", frmSessions_ColumnMonitorID)
dgSessions.Columns.Add("Name", frmSessions_ColumnGameName)
dgSessions.Columns.Add("StartUnix", frmSessions_ColumnStart)
dgSessions.Columns.Add("Start", frmSessions_ColumnStart)
dgSessions.Columns.Add("EndUnix", frmSessions_ColumnEnd)
dgSessions.Columns.Add("End", frmSessions_ColumnEnd)
dgSessions.Columns.Add("Hours", frmSessions_ColumnHours)
'Hide the ID
'Get Column Indexes
iStartDataCol = dgSessions.Columns.IndexOf(dgSessions.Columns("StartUnix"))
iStartDisplayCol = dgSessions.Columns.IndexOf(dgSessions.Columns("Start"))
iEndDataCol = dgSessions.Columns.IndexOf(dgSessions.Columns("EndUnix"))
iEndDisplayCol = dgSessions.Columns.IndexOf(dgSessions.Columns("End"))
iHoursCol = dgSessions.Columns.IndexOf(dgSessions.Columns("Hours"))
'Set Sorting
dgSessions.Columns("Start").SortMode = DataGridViewColumnSortMode.Programmatic
dgSessions.Columns("End").SortMode = DataGridViewColumnSortMode.Programmatic
dgSessions.Columns("Hours").SortMode = DataGridViewColumnSortMode.Programmatic
'Hide Columns
dgSessions.Columns("MonitorID").Visible = False
dgSessions.Columns("StartUnix").Visible = False
dgSessions.Columns("EndUnix").Visible = False
End Sub
Private Sub LoadData()
Dim oData As DataSet
Dim sFilter As String
Dim dStart As DateTime
Dim dEnd As DateTime
Dim dHours As Double
Dim dTotalHours As Double
If txtFilter.Text = String.Empty Then
oData = mgrSessions.GetSessionRange(dtpStart.Value, dtpEnd.Value)
@@ -30,9 +61,15 @@ Public Class frmSessions
dgSessions.Rows.Clear()
For Each dr As DataRow In oData.Tables(0).Rows
dgSessions.Rows.Add(New Object() {dr("MonitorID"), dr("Name"), mgrCommon.UnixToDate(dr("Start")), mgrCommon.UnixToDate(dr("End"))})
dStart = mgrCommon.UnixToDate(dr("Start"))
dEnd = mgrCommon.UnixToDate(dr("End"))
dHours = Math.Round(dEnd.Subtract(dStart).TotalHours, 2)
dTotalHours += dHours
dgSessions.Rows.Add(New Object() {dr("MonitorID"), dr("Name"), dr("Start"), dStart, dr("End"), dEnd, dHours})
Next
lblTotalHours.Text = mgrCommon.FormatString(frmSessions_lblTotalHours, dTotalHours)
dgSessions.AutoResizeColumns()
End Sub
@@ -51,14 +88,18 @@ Public Class frmSessions
tmFilterTimer.Interval = 1000
tmFilterTimer.Enabled = False
End Sub
Private Sub ResetFilterFields()
Dim dtMinDate As DateTime = mgrSessions.GetMinimumDateTime
Dim dtMaxDate As DateTime = mgrSessions.GetMaximumDateTime
Dim dtRecent As DateTime = dtMaxDate.Subtract(TimeSpan.FromDays(7))
Dim sDateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern & " " & CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern
If dtRecent < dtMinDate Then
dtRecent = dtMinDate
End If
bInitFinished = False
'Init Date Fields
@@ -75,7 +116,7 @@ Public Class frmSessions
dtpEnd.MaxDate = dtMaxDate
End If
dtpStart.Value = dtMinDate
dtpStart.Value = dtRecent
dtpEnd.Value = dtMaxDate
'Init Text Filter
@@ -85,6 +126,7 @@ Public Class frmSessions
End Sub
Private Sub Reset()
ClearManualSortGlyphs()
ResetFilterFields()
LoadData()
End Sub
@@ -96,8 +138,8 @@ Public Class frmSessions
For Each dgvRow As DataGridViewRow In dgSessions.SelectedRows
oSession = New clsSession
oSession.MonitorID = dgvRow.Cells(0).Value
oSession.SessionStart = dgvRow.Cells(2).Value
oSession.SessionEnd = dgvRow.Cells(3).Value
oSession.SessionStart = CInt(dgvRow.Cells(iStartDataCol).Value)
oSession.SessionEnd = CInt(dgvRow.Cells(iEndDataCol).Value)
oSessions.Add(oSession)
Next
@@ -106,6 +148,60 @@ Public Class frmSessions
End If
End Sub
Private Sub ClearManualSortGlyphs()
dgSessions.Columns(iStartDisplayCol).HeaderCell.SortGlyphDirection = SortOrder.None
dgSessions.Columns(iEndDisplayCol).HeaderCell.SortGlyphDirection = SortOrder.None
dgSessions.Columns(iHoursCol).HeaderCell.SortGlyphDirection = SortOrder.None
End Sub
Private Sub DoSort(ByRef bToggle As Boolean, ByVal iCol As Integer, ByVal iType As RowCompareHelper.iDataType)
bToggle = Not bToggle
If bToggle Then
dgSessions.Sort(New RowCompareHelper(SortOrder.Ascending, iCol, iType))
dgSessions.Columns(iCol).HeaderCell.SortGlyphDirection = SortOrder.Ascending
Else
dgSessions.Sort(New RowCompareHelper(SortOrder.Descending, iCol, iType))
dgSessions.Columns(iCol).HeaderCell.SortGlyphDirection = SortOrder.Descending
End If
End Sub
Private Sub HandleSort(ByVal iCol As Integer)
ClearManualSortGlyphs()
Select Case iCol
Case iStartDisplayCol
DoSort(bStartSortAsc, iStartDisplayCol, RowCompareHelper.iDataType.DateTimeType)
Case iEndDisplayCol
DoSort(bEndSortAsc, iEndDisplayCol, RowCompareHelper.iDataType.DateTimeType)
Case iHoursCol
DoSort(bHoursSortAsc, iHoursCol, RowCompareHelper.iDataType.DecimalType)
End Select
End Sub
Private Sub ExportGrid()
Dim frm As New frmSessionExport
Dim sLocation As String
frm.ShowDialog()
If frm.DialogResult = DialogResult.OK Then
If frm.XML Then
sLocation = mgrCommon.SaveFileBrowser("Session_Export", frmSessions_ChooseExportLocation, "xml", frmSessions_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmSessions_DefaultExportFileName)
Else
sLocation = mgrCommon.SaveFileBrowser("Session_Export", frmSessions_ChooseExportLocation, "csv", frmSessions_CSV, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmSessions_DefaultExportFileName)
End If
If sLocation <> String.Empty Then
If frm.XML Then
mgrSessions.ExportAsXML(sLocation, frm.Unix, dgSessions)
Else
mgrSessions.ExportAsCSV(sLocation, frm.Unix, frm.Headers, dgSessions)
End If
End If
End If
End Sub
Private Sub frmSession_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
ResetFilterFields()
@@ -146,8 +242,65 @@ Public Class frmSessions
If dgSessions.SelectedRows.Count > 0 Then
If mgrCommon.ShowMessage(frmSessions_ConfirmDelete, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
DeleteSession()
Reset()
LoadData()
End If
End If
End Sub
Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
ExportGrid()
End Sub
Private Sub dgSessions_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgSessions.ColumnHeaderMouseClick
HandleSort(e.ColumnIndex)
End Sub
'The Mono version of the DataGridView control automatically treats all data as a string for sorting purposes.
'This class manually handles column sorting by data type.
Private Class RowCompareHelper
Implements System.Collections.IComparer
'We need to manually define data types as the column ValueType doesn't work in Mono either.
Public Enum iDataType As Integer
StringType = 1
DateTimeType = 2
IntType = 3
DecimalType = 4
End Enum
Private iSortOrderModifier As Integer = 1
Private iSortCol As Integer = 0
Private iDataTypeCol As iDataType = iDataType.StringType
Public Sub New(ByVal sortOrder As SortOrder, ByVal iCol As Integer, ByVal iType As iDataType)
iSortCol = iCol
iDataTypeCol = iType
If sortOrder = SortOrder.Descending Then
iSortOrderModifier = -1
ElseIf sortOrder = SortOrder.Ascending Then
iSortOrderModifier = 1
End If
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim iCompareResult As Integer
Dim dgRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim dgRow2 As DataGridViewRow = CType(y, DataGridViewRow)
Select Case iDataTypeCol
Case iDataType.DecimalType
iCompareResult = If(CDec(dgRow1.Cells(iSortCol).Value) < CDec(dgRow2.Cells(iSortCol).Value), -1, 1)
Case iDataType.IntType
iCompareResult = If(CInt(dgRow1.Cells(iSortCol).Value) < CInt(dgRow2.Cells(iSortCol).Value), -1, 1)
Case iDataType.StringType
iCompareResult = String.Compare(CStr(dgRow1.Cells(iSortCol).Value), CStr(dgRow2.Cells(iSortCol).Value))
Case iDataType.DateTimeType
iCompareResult = Date.Compare(CDate(dgRow1.Cells(iSortCol).Value), CDate(dgRow2.Cells(iSortCol).Value))
End Select
Return iCompareResult * iSortOrderModifier
End Function
End Class
End Class
+236 -143
View File
@@ -22,16 +22,12 @@ Partial Class frmSettings
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
Me.chkAutoSaveLog = New System.Windows.Forms.CheckBox()
Me.btnOptionalFields = New System.Windows.Forms.Button()
Me.chkTimeTracking = New System.Windows.Forms.CheckBox()
Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox()
Me.grpFolderOptions = New System.Windows.Forms.GroupBox()
Me.chkUseGameID = New System.Windows.Forms.CheckBox()
Me.btnBackupFolder = New System.Windows.Forms.Button()
Me.lblBackupFolder = New System.Windows.Forms.Label()
Me.txtBackupFolder = New System.Windows.Forms.TextBox()
@@ -50,9 +46,7 @@ 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.grpBackupConfirmations = New System.Windows.Forms.GroupBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.grpBackupHandling = New System.Windows.Forms.GroupBox()
@@ -63,81 +57,56 @@ Partial Class frmSettings
Me.grp7zAdvanced = New System.Windows.Forms.GroupBox()
Me.grp7zInformation = New System.Windows.Forms.GroupBox()
Me.pnlGeneral = New System.Windows.Forms.Panel()
Me.grpGameMonitoringOptions = New System.Windows.Forms.GroupBox()
Me.chkSuppressBackup = New System.Windows.Forms.CheckBox()
Me.lblMinutes = New System.Windows.Forms.Label()
Me.nudSuppressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.grpLogOptions = New System.Windows.Forms.GroupBox()
Me.chkDisableSyncMessages = New System.Windows.Forms.CheckBox()
Me.grpGameData = New System.Windows.Forms.GroupBox()
Me.lstSettings = New System.Windows.Forms.ListBox()
Me.chkSessionTracking = New System.Windows.Forms.CheckBox()
Me.grpStartup.SuspendLayout()
Me.lstSettings = New System.Windows.Forms.ListBox()
Me.btnResetMessages = New System.Windows.Forms.Button()
Me.pnlStartup = New System.Windows.Forms.Panel()
Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.chkBackupOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.grpFolderOptions.SuspendLayout()
Me.grp7zGeneral.SuspendLayout()
Me.pnlBackup.SuspendLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpBackupConfirmations.SuspendLayout()
Me.grpBackupHandling.SuspendLayout()
Me.pnl7z.SuspendLayout()
Me.grp7zAdvanced.SuspendLayout()
Me.grp7zInformation.SuspendLayout()
Me.pnlGeneral.SuspendLayout()
Me.grpGameMonitoringOptions.SuspendLayout()
CType(Me.nudSuppressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpLogOptions.SuspendLayout()
Me.grpGameData.SuspendLayout()
Me.pnlStartup.SuspendLayout()
Me.grpStartup.SuspendLayout()
Me.SuspendLayout()
'
'chkMonitorOnStartup
'
Me.chkMonitorOnStartup.AutoSize = True
Me.chkMonitorOnStartup.Location = New System.Drawing.Point(6, 65)
Me.chkMonitorOnStartup.Name = "chkMonitorOnStartup"
Me.chkMonitorOnStartup.Size = New System.Drawing.Size(146, 17)
Me.chkMonitorOnStartup.TabIndex = 2
Me.chkMonitorOnStartup.Text = "Start monitoring at launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
'
'grpStartup
'
Me.grpStartup.Controls.Add(Me.chkStartWindows)
Me.grpStartup.Controls.Add(Me.chkStartToTray)
Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.grpStartup.Name = "grpStartup"
Me.grpStartup.Size = New System.Drawing.Size(354, 90)
Me.grpStartup.TabIndex = 0
Me.grpStartup.TabStop = False
Me.grpStartup.Text = "Startup"
'
'chkStartWindows
'
Me.chkStartWindows.AutoSize = True
Me.chkStartWindows.Location = New System.Drawing.Point(6, 19)
Me.chkStartWindows.Name = "chkStartWindows"
Me.chkStartWindows.Size = New System.Drawing.Size(117, 17)
Me.chkStartWindows.TabIndex = 0
Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True
'
'chkStartToTray
'
Me.chkStartToTray.AutoSize = True
Me.chkStartToTray.Location = New System.Drawing.Point(6, 42)
Me.chkStartToTray.Name = "chkStartToTray"
Me.chkStartToTray.Size = New System.Drawing.Size(115, 17)
Me.chkStartToTray.TabIndex = 1
Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True
'
'chkAutoSaveLog
'
Me.chkAutoSaveLog.AutoSize = True
Me.chkAutoSaveLog.Location = New System.Drawing.Point(12, 228)
Me.chkAutoSaveLog.Location = New System.Drawing.Point(6, 42)
Me.chkAutoSaveLog.Name = "chkAutoSaveLog"
Me.chkAutoSaveLog.Size = New System.Drawing.Size(231, 17)
Me.chkAutoSaveLog.TabIndex = 3
Me.chkAutoSaveLog.TabIndex = 1
Me.chkAutoSaveLog.Text = "Autosave log when max length is exceeded"
Me.chkAutoSaveLog.UseVisualStyleBackColor = True
'
'btnOptionalFields
'
Me.btnOptionalFields.Location = New System.Drawing.Point(103, 61)
Me.btnOptionalFields.Location = New System.Drawing.Point(6, 65)
Me.btnOptionalFields.Name = "btnOptionalFields"
Me.btnOptionalFields.Size = New System.Drawing.Size(134, 23)
Me.btnOptionalFields.TabIndex = 2
Me.btnOptionalFields.Text = "Choose &Optional Fields..."
Me.btnOptionalFields.Size = New System.Drawing.Size(216, 23)
Me.btnOptionalFields.TabIndex = 3
Me.btnOptionalFields.Text = "Choose &Optional Sync Fields..."
Me.btnOptionalFields.UseVisualStyleBackColor = True
'
'chkTimeTracking
@@ -150,38 +119,39 @@ Partial Class frmSettings
Me.chkTimeTracking.Text = "Enable time tracking"
Me.chkTimeTracking.UseVisualStyleBackColor = True
'
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(6, 65)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(98, 17)
Me.chkSync.TabIndex = 1
Me.chkSync.Text = "Enable syncing"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkShowDetectionTips
'
Me.chkShowDetectionTips.AutoSize = True
Me.chkShowDetectionTips.Location = New System.Drawing.Point(12, 205)
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 41)
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
Me.chkShowDetectionTips.Size = New System.Drawing.Size(159, 17)
Me.chkShowDetectionTips.TabIndex = 2
Me.chkShowDetectionTips.TabIndex = 4
Me.chkShowDetectionTips.Text = "Show detection notifications"
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
'
'grpFolderOptions
'
Me.grpFolderOptions.Controls.Add(Me.chkUseGameID)
Me.grpFolderOptions.Controls.Add(Me.btnBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.lblBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.txtBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.chkCreateFolder)
Me.grpFolderOptions.Location = New System.Drawing.Point(6, 12)
Me.grpFolderOptions.Name = "grpFolderOptions"
Me.grpFolderOptions.Size = New System.Drawing.Size(354, 70)
Me.grpFolderOptions.Size = New System.Drawing.Size(354, 90)
Me.grpFolderOptions.TabIndex = 0
Me.grpFolderOptions.TabStop = False
Me.grpFolderOptions.Text = "Folders"
Me.grpFolderOptions.Text = "Files and Folders"
'
'chkUseGameID
'
Me.chkUseGameID.AutoSize = True
Me.chkUseGameID.Location = New System.Drawing.Point(9, 65)
Me.chkUseGameID.Name = "chkUseGameID"
Me.chkUseGameID.Size = New System.Drawing.Size(205, 17)
Me.chkUseGameID.TabIndex = 3
Me.chkUseGameID.Text = "Use Game ID for folder and file names"
Me.chkUseGameID.UseVisualStyleBackColor = True
'
'btnBackupFolder
'
@@ -224,7 +194,7 @@ Partial Class frmSettings
Me.btnSave.Location = New System.Drawing.Point(384, 321)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 5
Me.btnSave.TabIndex = 7
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
@@ -234,7 +204,7 @@ Partial Class frmSettings
Me.btnCancel.Location = New System.Drawing.Point(465, 321)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 6
Me.btnCancel.TabIndex = 8
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
@@ -331,68 +301,48 @@ Partial Class frmSettings
Me.btnDefaults.Location = New System.Drawing.Point(12, 321)
Me.btnDefaults.Name = "btnDefaults"
Me.btnDefaults.Size = New System.Drawing.Size(110, 23)
Me.btnDefaults.TabIndex = 4
Me.btnDefaults.TabIndex = 5
Me.btnDefaults.Text = "Set &Defaults"
Me.btnDefaults.UseVisualStyleBackColor = True
'
'pnlBackup
'
Me.pnlBackup.Controls.Add(Me.lblMinutes)
Me.pnlBackup.Controls.Add(Me.nudSupressBackupThreshold)
Me.pnlBackup.Controls.Add(Me.chkSupressBackup)
Me.pnlBackup.Controls.Add(Me.chkBackupConfirm)
Me.pnlBackup.Controls.Add(Me.chkOverwriteWarning)
Me.pnlBackup.Controls.Add(Me.grpBackupConfirmations)
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
Me.pnlBackup.TabIndex = 2
'
'lblMinutes
'grpBackupConfirmations
'
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
Me.grpBackupConfirmations.Controls.Add(Me.chkBackupConfirm)
Me.grpBackupConfirmations.Controls.Add(Me.chkOverwriteWarning)
Me.grpBackupConfirmations.Location = New System.Drawing.Point(6, 200)
Me.grpBackupConfirmations.Name = "grpBackupConfirmations"
Me.grpBackupConfirmations.Size = New System.Drawing.Size(354, 65)
Me.grpBackupConfirmations.TabIndex = 2
Me.grpBackupConfirmations.TabStop = False
Me.grpBackupConfirmations.Text = "Backup Confirmations"
'
'chkBackupConfirm
'
Me.chkBackupConfirm.AutoSize = True
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 180)
Me.chkBackupConfirm.Location = New System.Drawing.Point(9, 18)
Me.chkBackupConfirm.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 2
Me.chkBackupConfirm.TabIndex = 0
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.Location = New System.Drawing.Point(9, 41)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 3
Me.chkOverwriteWarning.TabIndex = 1
Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
'
@@ -401,7 +351,7 @@ Partial Class frmSettings
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.Location = New System.Drawing.Point(6, 107)
Me.grpBackupHandling.Margin = New System.Windows.Forms.Padding(2)
Me.grpBackupHandling.Name = "grpBackupHandling"
Me.grpBackupHandling.Padding = New System.Windows.Forms.Padding(2)
@@ -450,7 +400,7 @@ Partial Class frmSettings
Me.pnl7z.Location = New System.Drawing.Point(180, 0)
Me.pnl7z.Name = "pnl7z"
Me.pnl7z.Size = New System.Drawing.Size(367, 314)
Me.pnl7z.TabIndex = 2
Me.pnl7z.TabIndex = 4
'
'grp7zAdvanced
'
@@ -479,27 +429,96 @@ Partial Class frmSettings
'
'pnlGeneral
'
Me.pnlGeneral.Controls.Add(Me.chkAutoSaveLog)
Me.pnlGeneral.Controls.Add(Me.grpGameMonitoringOptions)
Me.pnlGeneral.Controls.Add(Me.grpLogOptions)
Me.pnlGeneral.Controls.Add(Me.grpGameData)
Me.pnlGeneral.Controls.Add(Me.chkShowDetectionTips)
Me.pnlGeneral.Controls.Add(Me.grpStartup)
Me.pnlGeneral.Location = New System.Drawing.Point(180, 0)
Me.pnlGeneral.Name = "pnlGeneral"
Me.pnlGeneral.Size = New System.Drawing.Size(367, 314)
Me.pnlGeneral.TabIndex = 1
'
'grpGameMonitoringOptions
'
Me.grpGameMonitoringOptions.Controls.Add(Me.chkSuppressBackup)
Me.grpGameMonitoringOptions.Controls.Add(Me.lblMinutes)
Me.grpGameMonitoringOptions.Controls.Add(Me.chkShowDetectionTips)
Me.grpGameMonitoringOptions.Controls.Add(Me.nudSuppressBackupThreshold)
Me.grpGameMonitoringOptions.Location = New System.Drawing.Point(6, 115)
Me.grpGameMonitoringOptions.Name = "grpGameMonitoringOptions"
Me.grpGameMonitoringOptions.Size = New System.Drawing.Size(354, 65)
Me.grpGameMonitoringOptions.TabIndex = 1
Me.grpGameMonitoringOptions.TabStop = False
Me.grpGameMonitoringOptions.Text = "Game Monitoring Options"
'
'chkSuppressBackup
'
Me.chkSuppressBackup.AutoSize = True
Me.chkSuppressBackup.Location = New System.Drawing.Point(6, 18)
Me.chkSuppressBackup.Name = "chkSuppressBackup"
Me.chkSuppressBackup.Size = New System.Drawing.Size(158, 17)
Me.chkSuppressBackup.TabIndex = 2
Me.chkSuppressBackup.Text = "Ignore sessions shorter than"
Me.chkSuppressBackup.UseVisualStyleBackColor = True
'
'lblMinutes
'
Me.lblMinutes.AutoSize = True
Me.lblMinutes.Location = New System.Drawing.Point(226, 19)
Me.lblMinutes.Name = "lblMinutes"
Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
Me.lblMinutes.TabIndex = 17
Me.lblMinutes.Text = "minutes"
'
'nudSuppressBackupThreshold
'
Me.nudSuppressBackupThreshold.Location = New System.Drawing.Point(170, 17)
Me.nudSuppressBackupThreshold.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
Me.nudSuppressBackupThreshold.Name = "nudSuppressBackupThreshold"
Me.nudSuppressBackupThreshold.Size = New System.Drawing.Size(51, 20)
Me.nudSuppressBackupThreshold.TabIndex = 3
'
'grpLogOptions
'
Me.grpLogOptions.Controls.Add(Me.chkDisableSyncMessages)
Me.grpLogOptions.Controls.Add(Me.chkAutoSaveLog)
Me.grpLogOptions.Location = New System.Drawing.Point(6, 186)
Me.grpLogOptions.Name = "grpLogOptions"
Me.grpLogOptions.Size = New System.Drawing.Size(354, 65)
Me.grpLogOptions.TabIndex = 2
Me.grpLogOptions.TabStop = False
Me.grpLogOptions.Text = "Log Options"
'
'chkDisableSyncMessages
'
Me.chkDisableSyncMessages.AutoSize = True
Me.chkDisableSyncMessages.Location = New System.Drawing.Point(6, 19)
Me.chkDisableSyncMessages.Name = "chkDisableSyncMessages"
Me.chkDisableSyncMessages.Size = New System.Drawing.Size(166, 17)
Me.chkDisableSyncMessages.TabIndex = 0
Me.chkDisableSyncMessages.Text = "Disable sync event messages"
Me.chkDisableSyncMessages.UseVisualStyleBackColor = True
'
'grpGameData
'
Me.grpGameData.Controls.Add(Me.chkSessionTracking)
Me.grpGameData.Controls.Add(Me.chkTimeTracking)
Me.grpGameData.Controls.Add(Me.chkSync)
Me.grpGameData.Controls.Add(Me.btnOptionalFields)
Me.grpGameData.Location = New System.Drawing.Point(6, 106)
Me.grpGameData.Location = New System.Drawing.Point(6, 12)
Me.grpGameData.Name = "grpGameData"
Me.grpGameData.Size = New System.Drawing.Size(354, 92)
Me.grpGameData.TabIndex = 1
Me.grpGameData.Size = New System.Drawing.Size(354, 97)
Me.grpGameData.TabIndex = 0
Me.grpGameData.TabStop = False
Me.grpGameData.Text = "Game Data"
Me.grpGameData.Text = "Game Data Options"
'
'chkSessionTracking
'
Me.chkSessionTracking.AutoSize = True
Me.chkSessionTracking.Location = New System.Drawing.Point(6, 42)
Me.chkSessionTracking.Name = "chkSessionTracking"
Me.chkSessionTracking.Size = New System.Drawing.Size(138, 17)
Me.chkSessionTracking.TabIndex = 1
Me.chkSessionTracking.Text = "Enable session tracking"
Me.chkSessionTracking.UseVisualStyleBackColor = True
'
'lstSettings
'
@@ -509,15 +528,75 @@ Partial Class frmSettings
Me.lstSettings.Size = New System.Drawing.Size(162, 303)
Me.lstSettings.TabIndex = 0
'
'chkSessionTracking
'btnResetMessages
'
Me.chkSessionTracking.AutoSize = True
Me.chkSessionTracking.Location = New System.Drawing.Point(6, 42)
Me.chkSessionTracking.Name = "chkSessionTracking"
Me.chkSessionTracking.Size = New System.Drawing.Size(138, 17)
Me.chkSessionTracking.TabIndex = 3
Me.chkSessionTracking.Text = "Enable session tracking"
Me.chkSessionTracking.UseVisualStyleBackColor = True
Me.btnResetMessages.Location = New System.Drawing.Point(128, 321)
Me.btnResetMessages.Name = "btnResetMessages"
Me.btnResetMessages.Size = New System.Drawing.Size(110, 23)
Me.btnResetMessages.TabIndex = 6
Me.btnResetMessages.Text = "&Reset Warnings"
Me.btnResetMessages.UseVisualStyleBackColor = True
'
'pnlStartup
'
Me.pnlStartup.Controls.Add(Me.grpStartup)
Me.pnlStartup.Location = New System.Drawing.Point(180, 0)
Me.pnlStartup.Name = "pnlStartup"
Me.pnlStartup.Size = New System.Drawing.Size(367, 314)
Me.pnlStartup.TabIndex = 3
'
'grpStartup
'
Me.grpStartup.Controls.Add(Me.chkBackupOnLaunch)
Me.grpStartup.Controls.Add(Me.chkStartWindows)
Me.grpStartup.Controls.Add(Me.chkStartToTray)
Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.grpStartup.Name = "grpStartup"
Me.grpStartup.Size = New System.Drawing.Size(354, 112)
Me.grpStartup.TabIndex = 1
Me.grpStartup.TabStop = False
Me.grpStartup.Text = "Startup Options"
'
'chkBackupOnLaunch
'
Me.chkBackupOnLaunch.AutoSize = True
Me.chkBackupOnLaunch.Location = New System.Drawing.Point(6, 88)
Me.chkBackupOnLaunch.Name = "chkBackupOnLaunch"
Me.chkBackupOnLaunch.Size = New System.Drawing.Size(185, 17)
Me.chkBackupOnLaunch.TabIndex = 3
Me.chkBackupOnLaunch.Text = "Backup GBM data files on launch"
Me.chkBackupOnLaunch.UseVisualStyleBackColor = True
'
'chkStartWindows
'
Me.chkStartWindows.AutoSize = True
Me.chkStartWindows.Location = New System.Drawing.Point(6, 19)
Me.chkStartWindows.Name = "chkStartWindows"
Me.chkStartWindows.Size = New System.Drawing.Size(117, 17)
Me.chkStartWindows.TabIndex = 0
Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True
'
'chkStartToTray
'
Me.chkStartToTray.AutoSize = True
Me.chkStartToTray.Location = New System.Drawing.Point(6, 42)
Me.chkStartToTray.Name = "chkStartToTray"
Me.chkStartToTray.Size = New System.Drawing.Size(115, 17)
Me.chkStartToTray.TabIndex = 1
Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True
'
'chkMonitorOnStartup
'
Me.chkMonitorOnStartup.AutoSize = True
Me.chkMonitorOnStartup.Location = New System.Drawing.Point(6, 65)
Me.chkMonitorOnStartup.Name = "chkMonitorOnStartup"
Me.chkMonitorOnStartup.Size = New System.Drawing.Size(149, 17)
Me.chkMonitorOnStartup.TabIndex = 2
Me.chkMonitorOnStartup.Text = "Start monitoring on launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
'
'frmSettings
'
@@ -525,8 +604,10 @@ Partial Class frmSettings
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.pnlStartup)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.btnResetMessages)
Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults)
Me.Controls.Add(Me.btnCancel)
@@ -539,15 +620,13 @@ Partial Class frmSettings
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Settings"
Me.grpStartup.ResumeLayout(False)
Me.grpStartup.PerformLayout()
Me.grpFolderOptions.ResumeLayout(False)
Me.grpFolderOptions.PerformLayout()
Me.grp7zGeneral.ResumeLayout(False)
Me.grp7zGeneral.PerformLayout()
Me.pnlBackup.ResumeLayout(False)
Me.pnlBackup.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpBackupConfirmations.ResumeLayout(False)
Me.grpBackupConfirmations.PerformLayout()
Me.grpBackupHandling.ResumeLayout(False)
Me.grpBackupHandling.PerformLayout()
Me.pnl7z.ResumeLayout(False)
@@ -555,14 +634,19 @@ Partial Class frmSettings
Me.grp7zAdvanced.PerformLayout()
Me.grp7zInformation.ResumeLayout(False)
Me.pnlGeneral.ResumeLayout(False)
Me.pnlGeneral.PerformLayout()
Me.grpGameMonitoringOptions.ResumeLayout(False)
Me.grpGameMonitoringOptions.PerformLayout()
CType(Me.nudSuppressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpLogOptions.ResumeLayout(False)
Me.grpLogOptions.PerformLayout()
Me.grpGameData.ResumeLayout(False)
Me.grpGameData.PerformLayout()
Me.pnlStartup.ResumeLayout(False)
Me.grpStartup.ResumeLayout(False)
Me.grpStartup.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents chkMonitorOnStartup 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
Friend WithEvents btnSave As System.Windows.Forms.Button
@@ -570,10 +654,7 @@ Partial Class frmSettings
Friend WithEvents lblBackupFolder As System.Windows.Forms.Label
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 chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents chkSync As System.Windows.Forms.CheckBox
Friend WithEvents chkStartWindows As System.Windows.Forms.CheckBox
Friend WithEvents chkTimeTracking As System.Windows.Forms.CheckBox
Friend WithEvents grp7zGeneral As GroupBox
Friend WithEvents cboCompression As ComboBox
@@ -595,9 +676,6 @@ 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
@@ -605,4 +683,19 @@ Partial Class frmSettings
Friend WithEvents chkAutoRestore As CheckBox
Friend WithEvents chkRestoreNotify As CheckBox
Friend WithEvents chkSessionTracking As CheckBox
Friend WithEvents lblMinutes As Label
Friend WithEvents nudSuppressBackupThreshold As NumericUpDown
Friend WithEvents chkSuppressBackup As CheckBox
Friend WithEvents btnResetMessages As Button
Friend WithEvents chkUseGameID As CheckBox
Friend WithEvents grpBackupConfirmations As GroupBox
Friend WithEvents grpLogOptions As GroupBox
Friend WithEvents chkDisableSyncMessages As CheckBox
Friend WithEvents pnlStartup As Panel
Friend WithEvents grpStartup As GroupBox
Friend WithEvents chkBackupOnLaunch As CheckBox
Friend WithEvents chkStartWindows As CheckBox
Friend WithEvents chkStartToTray As CheckBox
Friend WithEvents chkMonitorOnStartup As CheckBox
Friend WithEvents grpGameMonitoringOptions As GroupBox
End Class
+49 -34
View File
@@ -34,6 +34,11 @@ Public Class frmSettings
Private Function ValidateSettings() As Boolean
'Show Start with Windows warning if running as admin
If chkStartWindows.Checked And mgrCommon.IsElevated Then
mgrCommon.ShowMessage(frmSettings_WarningAdminStart, MsgBoxStyle.Exclamation)
End If
'Only modify registry key when the value changed
If chkStartWindows.Checked <> oSettings.StartWithWindows Then
HandleRegistryUpdate(chkStartWindows.Checked)
@@ -42,18 +47,21 @@ Public Class frmSettings
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked
oSettings.BackupOnLaunch = chkBackupOnLaunch.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.DisableSyncMessages = chkDisableSyncMessages.Checked
oSettings.AutoSaveLog = chkAutoSaveLog.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.UseGameID = chkUseGameID.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
oSettings.RestoreOnLaunch = chkRestoreNotify.Checked
oSettings.AutoRestore = chkAutoRestore.Checked
oSettings.AutoMark = chkAutoMark.Checked
oSettings.TimeTracking = chkTimeTracking.Checked
oSettings.SessionTracking = chkSessionTracking.Checked
oSettings.SupressBackup = chkSupressBackup.Checked
oSettings.SupressBackupThreshold = nudSupressBackupThreshold.Value
oSettings.SuppressBackup = chkSuppressBackup.Checked
oSettings.SuppressBackupThreshold = nudSuppressBackupThreshold.Value
oSettings.CompressionLevel = cboCompression.SelectedValue
If oSettings.Custom7zArguments <> txt7zArguments.Text.Trim And txt7zArguments.Text.Trim <> String.Empty Then
@@ -63,15 +71,9 @@ Public Class frmSettings
oSettings.Custom7zArguments = txt7zArguments.Text.Trim
oSettings.Custom7zLocation = txt7zLocation.Text.Trim
'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
End If
oSettings.Sync = chkSync.Checked
If Directory.Exists(txtBackupFolder.Text) Then
If oSettings.BackupFolder <> txtBackupFolder.Text Then
If chkSync.Checked Then bSyncSettingsChanged = True
bSyncSettingsChanged = True
End If
oSettings.BackupFolder = txtBackupFolder.Text
Else
@@ -91,7 +93,7 @@ Public Class frmSettings
End If
'We must trigger a sync if optional fields have changed
If Settings.Sync And (eCurrentSyncFields <> Settings.SyncFields) Then
If eCurrentSyncFields <> Settings.SyncFields Then
bSyncSettingsChanged = True
End If
@@ -163,25 +165,33 @@ Public Class frmSettings
End If
End Sub
Private Sub ResetMessages()
If mgrCommon.ShowMessage(frmSettings_ConfirmMessageReset, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
oSettings.SuppressMessages = mgrSettings.eSuppressMessages.None
End If
End Sub
Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray
chkBackupOnLaunch.Checked = oSettings.BackupOnLaunch
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkDisableSyncMessages.Checked = oSettings.DisableSyncMessages
chkAutoSaveLog.Checked = oSettings.AutoSaveLog
chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkUseGameID.Checked = oSettings.UseGameID
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
chkRestoreNotify.Checked = oSettings.RestoreOnLaunch
chkAutoRestore.Checked = oSettings.AutoRestore
chkAutoMark.Checked = oSettings.AutoMark
txtBackupFolder.Text = oSettings.BackupFolder
chkSync.Checked = oSettings.Sync
chkTimeTracking.Checked = oSettings.TimeTracking
chkSessionTracking.Checked = oSettings.SessionTracking
chkSupressBackup.Checked = oSettings.SupressBackup
nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
chkSuppressBackup.Checked = oSettings.SuppressBackup
nudSuppressBackupThreshold.Value = oSettings.SuppressBackupThreshold
nudSuppressBackupThreshold.Enabled = chkSuppressBackup.Checked
cboCompression.SelectedValue = oSettings.CompressionLevel
txt7zArguments.Text = oSettings.Custom7zArguments
txt7zLocation.Text = oSettings.Custom7zLocation
@@ -196,8 +206,6 @@ Public Class frmSettings
'Retrieve 7z Info
GetUtilityInfo(oSettings.Custom7zLocation)
'Toggle Sync Button
ToggleSyncButton()
End Sub
Private Sub LoadCombos()
@@ -223,7 +231,8 @@ Public Class frmSettings
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(0, frmSettings_lstSettings_General))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(1, frmSettings_lstSettings_BackupRestore))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(2, frmSettings_lstSettings_7z))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(2, frmSettings_lstSettings_Startup))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(3, frmSettings_lstSettings_7z))
lstSettings.DataSource = oSettingsItems
@@ -231,14 +240,6 @@ Public Class frmSettings
lstSettings.SelectedIndex = 0
End Sub
Private Sub ToggleSyncButton()
If chkSync.Checked Then
btnOptionalFields.Enabled = True
Else
btnOptionalFields.Enabled = False
End If
End Sub
Private Sub OpenOptionalFields()
Dim frm As New frmSyncFields
frm.SyncFields = Settings.SyncFields
@@ -255,15 +256,24 @@ Public Class frmSettings
Select Case oSettingsItem.Key
Case 0
pnlGeneral.Visible = True
pnlStartup.Visible = False
pnlBackup.Visible = False
pnl7z.Visible = False
Case 1
pnlGeneral.Visible = False
pnlBackup.Visible = True
pnlStartup.Visible = False
pnl7z.Visible = False
Case 2
pnlGeneral.Visible = False
pnlBackup.Visible = False
pnlStartup.Visible = True
pnl7z.Visible = False
Case 3
pnlGeneral.Visible = False
pnlBackup.Visible = False
pnlStartup.Visible = False
pnl7z.Visible = True
End Select
End If
@@ -275,13 +285,14 @@ Public Class frmSettings
'Set Form Text
lblMinutes.Text = frmSettings_lblMinutes
chkSupressBackup.Text = frmSettings_chkSupressBackup
chkSuppressBackup.Text = frmSettings_chkSuppressBackup
grpBackupHandling.Text = frmSettings_grpBackupHandling
chkRestoreNotify.Text = frmSettings_chkRestoreNotify
chkAutoRestore.Text = frmSettings_chkAutoRestore
chkAutoMark.Text = frmSettings_chkAutoMark
chkOverwriteWarning.Text = frmSettings_chkOverwriteWarning
chkCreateFolder.Text = frmSettings_chkCreateFolder
chkUseGameID.Text = frmSettings_chkUseGameID
chkBackupConfirm.Text = frmSettings_chkBackupConfirm
btnCancel.Text = frmSettings_btnCancel
btnSave.Text = frmSettings_btnSave
@@ -293,7 +304,6 @@ Public Class frmSettings
chkTimeTracking.Text = frmSettings_chkTimeTracking
chkSessionTracking.Text = frmSettings_chkSessionTracking
chkStartWindows.Text = frmSettings_chkStartWindows
chkSync.Text = frmSettings_chkSync
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog
chkStartToTray.Text = frmSettings_chkStartToTray
@@ -306,6 +316,12 @@ Public Class frmSettings
lblArguments.Text = frmSettings_lblArguments
lblLocation.Text = frmSettings_lblLocation
btnOptionalFields.Text = frmSettings_btnOptionalFields
btnResetMessages.Text = frmSettings_btnResetMessages
chkBackupOnLaunch.Text = frmSettings_chkBackupOnLaunch
grpBackupConfirmations.Text = frmSettings_grpBackupConfirmations
grpLogOptions.Text = frmSettings_grpLogOptions
chkDisableSyncMessages.Text = frmSettings_chkDisableSyncMessages
grpGameMonitoringOptions.Text = frmSettings_grpGameMonitoringOptions
'Unix Handler
If mgrCommon.IsUnix Then
@@ -352,8 +368,8 @@ Public Class frmSettings
End If
End Sub
Private Sub chkSupressBackup_CheckedChanged(sender As Object, e As EventArgs) Handles chkSupressBackup.CheckedChanged
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
Private Sub chkSuppressBackup_CheckedChanged(sender As Object, e As EventArgs) Handles chkSuppressBackup.CheckedChanged
nudSuppressBackupThreshold.Enabled = chkSuppressBackup.Checked
End Sub
Private Sub txt7zLocation_Leave(sender As Object, e As EventArgs) Handles txt7zLocation.Leave
@@ -364,16 +380,15 @@ Public Class frmSettings
SetDefaults()
End Sub
Private Sub btnOptionalFields_Click(sender As Object, e As EventArgs) Handles btnOptionalFields.Click
OpenOptionalFields()
Private Sub btnResetMessages_Click(sender As Object, e As EventArgs) Handles btnResetMessages.Click
ResetMessages()
End Sub
Private Sub chkSync_CheckedChanged(sender As Object, e As EventArgs) Handles chkSync.CheckedChanged
ToggleSyncButton()
Private Sub btnOptionalFields_Click(sender As Object, e As EventArgs) Handles btnOptionalFields.Click
OpenOptionalFields()
End Sub
Private Sub lstSettings_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstSettings.SelectedValueChanged
ChangePanel()
End Sub
End Class
+7 -19
View File
@@ -30,7 +30,6 @@ Partial Class frmStartUpWizard
Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.lblStep2Title = New System.Windows.Forms.Label()
Me.lblStep2Instructions = New System.Windows.Forms.Label()
@@ -91,7 +90,7 @@ Partial Class frmStartUpWizard
Me.lblStep1Instructions2.Name = "lblStep1Instructions2"
Me.lblStep1Instructions2.Size = New System.Drawing.Size(303, 53)
Me.lblStep1Instructions2.TabIndex = 2
Me.lblStep1Instructions2.Text = "If you'd like to learn about advanced features or have any other questions before" & _
Me.lblStep1Instructions2.Text = "If you'd like to learn about advanced features or have any other questions before" &
" you get started, there is a detailed online manual available."
'
'llbManual
@@ -126,7 +125,6 @@ Partial Class frmStartUpWizard
'tbPage2
'
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
Me.tbPage2.Controls.Add(Me.chkSync)
Me.tbPage2.Controls.Add(Me.chkCreateFolder)
Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
@@ -140,16 +138,6 @@ Partial Class frmStartUpWizard
Me.tbPage2.TabIndex = 1
Me.tbPage2.Text = "TabPage2"
'
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(17, 105)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(261, 17)
Me.chkSync.TabIndex = 5
Me.chkSync.Text = "Import any existing GBM data in the backup folder"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkCreateFolder
'
Me.chkCreateFolder.AutoSize = True
@@ -172,12 +160,13 @@ Partial Class frmStartUpWizard
'
'lblStep2Instructions
'
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 151)
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 103)
Me.lblStep2Instructions.Name = "lblStep2Instructions"
Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 31)
Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 50)
Me.lblStep2Instructions.TabIndex = 6
Me.lblStep2Instructions.Text = "GBM will store all your backup files along with a manifest database (gbm.s3db) in" & _
" this location. "
Me.lblStep2Instructions.Text = "GBM will store all your backup files along with a manifest database (gbm.s3db) in" &
" this location. Any existing GBM data in this folder will be automatically impo" &
"rted."
'
'btnFolderBrowse
'
@@ -283,7 +272,7 @@ Partial Class frmStartUpWizard
Me.lblStep4Instructions3.Name = "lblStep4Instructions3"
Me.lblStep4Instructions3.Size = New System.Drawing.Size(303, 33)
Me.lblStep4Instructions3.TabIndex = 18
Me.lblStep4Instructions3.Text = "You can change anything you've setup in this wizard and find more settings and fe" & _
Me.lblStep4Instructions3.Text = "You can change anything you've setup in this wizard and find more settings and fe" &
"atures by exploring the menus. Thanks!"
'
'lblStep4Instructions2
@@ -381,7 +370,6 @@ Partial Class frmStartUpWizard
Friend WithEvents btnOpenMonitorList As System.Windows.Forms.Button
Friend WithEvents lblStep4Instructions3 As System.Windows.Forms.Label
Friend WithEvents lblStep4Instructions2 As System.Windows.Forms.Label
Friend WithEvents chkSync As System.Windows.Forms.CheckBox
Friend WithEvents lblStep1Instructions2 As System.Windows.Forms.Label
Friend WithEvents llbManual As System.Windows.Forms.LinkLabel
End Class
+6 -10
View File
@@ -38,7 +38,6 @@ Public Class frmStartUpWizard
llbManual.Text = frmStartUpWizard_llbManual
lblStep1Title.Text = frmStartUpWizard_lblStep1Title
lblStep1Instructions.Text = frmStartUpWizard_lblStep1Instructions
chkSync.Text = frmStartUpWizard_chkSync
chkCreateFolder.Text = frmStartUpWizard_chkCreateFolder
lblStep2Title.Text = frmStartUpWizard_lblStep2Title
lblStep2Instructions.Text = frmStartUpWizard_lblStep2Instructions
@@ -66,7 +65,7 @@ Public Class frmStartUpWizard
If oDatabase.CheckDB() Then
'Make sure database is the latest version
oDatabase.DatabaseUpgrade()
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
mgrMonitorList.SyncMonitorLists(oSettings, False)
mgrCommon.ShowMessage(frmStartUpWizard_ExistingData, MsgBoxStyle.Information)
End If
End Sub
@@ -80,7 +79,6 @@ Public Class frmStartUpWizard
Case eSteps.Step2
txtBackupPath.Text = oSettings.BackupFolder
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkSync.Checked = oSettings.Sync
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(1)
@@ -107,9 +105,9 @@ Public Class frmStartUpWizard
End If
If mgrCommon.ShowMessage(frmStartUpWizard_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(sImportURL) Then
If mgrMonitorList.DoImport(sImportURL, True, Settings, True) Then
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
End If
End If
End Sub
@@ -124,16 +122,15 @@ Public Class frmStartUpWizard
frm.GameData = oGameData
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
End Sub
Private Sub OpenMonitorList()
Dim frm As New frmGameManager
frm.BackupFolder = oSettings.BackupFolder
frm.Settings = oSettings
frm.DisableExternalFunctions = True
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End Sub
Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
@@ -183,10 +180,9 @@ Public Class frmStartUpWizard
If ValidateBackupPath(txtBackupPath.Text, sErrorMessage) Then
oSettings.BackupFolder = txtBackupPath.Text
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.Sync = chkSync.Checked
oSettings.SaveSettings()
oSettings.LoadSettings()
If oSettings.Sync Then CheckSync()
CheckSync()
eCurrentStep = eSteps.Step3
Else
bError = True
+35 -1
View File
@@ -122,11 +122,14 @@
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\clsGameProcess.vb" />
<Compile Include="Classes\clsProcess.vb" />
<Compile Include="Classes\clsGameFilter.vb" />
<Compile Include="Classes\clsGameFilterField.vb" />
<Compile Include="Classes\clsSavedPath.vb" />
<Compile Include="Classes\clsSession.vb" />
<Compile Include="Classes\XML Serialize Classes\ExportData.vb" />
<Compile Include="Classes\XML Serialize Classes\Session.vb" />
<Compile Include="Classes\XML Serialize Classes\Tag.vb" />
<Compile Include="Classes\XML Serialize Classes\Game.vb" />
<Compile Include="Classes\clsGameTag.vb" />
@@ -158,6 +161,12 @@
<Compile Include="Forms\frmFileFolderSearch.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmGameProcesses.Designer.vb">
<DependentUpon>frmGameProcesses.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmGameProcesses.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmGameTags.Designer.vb">
<DependentUpon>frmGameTags.vb</DependentUpon>
</Compile>
@@ -170,6 +179,18 @@
<Compile Include="Forms\frmIncludeExclude.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmProcessManager.Designer.vb">
<DependentUpon>frmProcessManager.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmProcessManager.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmSessionExport.Designer.vb">
<DependentUpon>frmSessionExport.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmSessionExport.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmSessions.Designer.vb">
<DependentUpon>frmSessions.vb</DependentUpon>
</Compile>
@@ -225,6 +246,8 @@
<Compile Include="Forms\frmVariableManager.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Managers\mgrGameProcesses.vb" />
<Compile Include="Managers\mgrProcess.vb" />
<Compile Include="Managers\mgrCommon.vb" />
<Compile Include="Managers\mgrGameTags.vb" />
<Compile Include="Managers\mgrHash.vb" />
@@ -240,7 +263,7 @@
<Compile Include="Managers\mgrTags.vb" />
<Compile Include="Managers\mgrVariables.vb" />
<Compile Include="Managers\mgrXML.vb" />
<Compile Include="Managers\mgrProcesses.vb" />
<Compile Include="Managers\mgrProcessDetection.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
@@ -270,12 +293,21 @@
<EmbeddedResource Include="Forms\frmFileFolderSearch.resx">
<DependentUpon>frmFileFolderSearch.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmGameProcesses.resx">
<DependentUpon>frmGameProcesses.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmGameTags.resx">
<DependentUpon>frmGameTags.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmIncludeExclude.resx">
<DependentUpon>frmIncludeExclude.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmProcessManager.resx">
<DependentUpon>frmProcessManager.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmSessionExport.resx">
<DependentUpon>frmSessionExport.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmSessions.resx">
<DependentUpon>frmSessions.vb</DependentUpon>
</EmbeddedResource>
@@ -355,6 +387,8 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="References\Mono.Data.Sqlite.dll" />
<Content Include="Resources\New.png" />
<Content Include="Resources\Update.png" />
<Content Include="Utilities\x64\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2016 Igor Pavlov.
Copyright (C) 1999-2018 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license.
+8 -1
View File
@@ -1,5 +1,12 @@
Game Backup Monitor would like to credit the following people/organizations:
7-zip - Igor Pavlov
Contributors:
Michael J. Seiferling (MikeMaximus) - Design, Programming and Windows Game Configuration Maintainer.
Sebastian Riedel (basxto) - Linux Packaging, Installation and Game Configuration Maintainer.
Special Thanks:
7-Zip - Igor Pavlov
Sixpack Status Icons - JankoAtWarpSpeed.com
Primo Icon Set - webdesignerdepot.com
+29 -17
View File
@@ -40,25 +40,25 @@ Public Class mgrBackup
Dim oItem As New clsBackup
'Create manifest item
oItem.Name = oGameInfo.Name
oItem.MonitorID = oGameInfo.ID
'Keep the path relative to the manifest location
oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & Path.DirectorySeparatorChar, "")
oItem.RestorePath = oGameInfo.TruePath
oItem.AbsolutePath = oGameInfo.AbsolutePath
oItem.DateUpdated = dTimeStamp
oItem.UpdatedBy = My.Computer.Name
oItem.CheckSum = sCheckSum
'Save Remote Manifest
If mgrManifest.DoSpecificManifestCheck(oItem, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote)
If Not oGameInfo.AppendTimeStamp Then
If Not mgrManifest.DoUpdateLatestManifest(oItem, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
End If
Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
End If
'Save Local Manifest
If mgrManifest.DoGlobalManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oItem, mgrSQLite.Database.Local)
If mgrManifest.DoManifestCheck(oItem.MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oItem, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
End If
@@ -101,20 +101,32 @@ Public Class mgrBackup
Return sSavePath
End Function
Private Function GetFileName(ByVal oGame As clsGame) As String
Dim sName As String
If oSettings.UseGameID Then
sName = oGame.ID
Else
sName = oGame.FileSafeName
End If
Return sName
End Function
Public Function CheckBackupPrereq(ByVal oGame As clsGame) As Boolean
Dim sBackupFile As String = oSettings.BackupFolder
Dim sSavePath As String
Dim lAvailableSpace As Long
Dim lFolderSize As Long
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z"
'Verify saved game path
sSavePath = VerifySavePath(oGame)
'Calculate space
lAvailableSpace = mgrCommon.GetAvailableDiskSpace(sBackupFile)
lAvailableSpace = mgrCommon.GetAvailableDiskSpace(oSettings.BackupFolder)
lFolderSize = mgrCommon.GetFolderSize(sSavePath, oGame.IncludeArray, oGame.ExcludeArray)
'Show Available Space
@@ -130,7 +142,7 @@ Public Class mgrBackup
End If
End If
If mgrRestore.CheckManifest(oGame.Name) Then
If mgrRestore.CheckManifest(oGame.ID) Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmManifestConflict, oGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorManifestConflict, False, ToolTipIcon.Error, True)
Return False
@@ -148,7 +160,7 @@ Public Class mgrBackup
End Function
Private Sub CheckOldBackups(ByVal oGame As clsGame)
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByName(oGame.Name, mgrSQLite.Database.Remote)
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByMonitorID(oGame.ID, mgrSQLite.Database.Remote)
Dim oGameBackup As clsBackup
Dim sOldBackup As String
Dim iBackupCount As Integer = oGameBackups.Count
@@ -164,8 +176,8 @@ Public Class mgrBackup
oGameBackup = oGameBackups(oGameBackups.Count - i)
sOldBackup = Settings.BackupFolder & Path.DirectorySeparatorChar & oGameBackup.FileName
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Local)
mgrManifest.DoManifestDeleteByManifestID(oGameBackup, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeleteByManifestID(oGameBackup, mgrSQLite.Database.Local)
mgrCommon.DeleteFile(sOldBackup)
mgrCommon.DeleteDirectoryByBackup(Settings.BackupFolder & Path.DirectorySeparatorChar, oGameBackup)
@@ -199,7 +211,7 @@ Public Class mgrBackup
RaiseEvent UpdateBackupInfo(oGame)
If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
Try
If Not Directory.Exists(sBackupFile) Then
Directory.CreateDirectory(sBackupFile)
@@ -212,9 +224,9 @@ Public Class mgrBackup
If oGame.AppendTimeStamp Then
CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & sTimeStamp & ".7z"
Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z"
End If
If bDoBackup Then
+23 -12
View File
@@ -9,8 +9,8 @@ Imports System.Runtime.Serialization.Formatters.Binary
Public Class mgrCommon
'These need to be updated when upgrading the packaged 7z utility
Private Shared sUtility64Hash As String = "05ACEE3BAC0C6C4E396116EF27B953F992DE8D28DD14D317977F45692304C318" 'v16.02 7za.exe x64
Private Shared sUtility32Hash As String = "7AA7056DB4348229A288EEF49027B94C0D8D1A3C3AEDC6FA89B640334C7B37E9" 'v16.02 7za.exe x86
Private Shared sUtility64Hash As String = "8BC2A3D6C37C4DB9BD487AD35039AE0DC8A1DDF2C3B1F0B76B3E678FEBB9F223" 'v18.05 7za.exe x64
Private Shared sUtility32Hash As String = "77613CCA716EDF68B9D5BAB951463ED7FADE5BC0EC465B36190A76299C50F117" 'v18.05 7za.exe x86
Public Shared ReadOnly Property UtilityHash As String
Get
@@ -65,9 +65,16 @@ Public Class mgrCommon
Return oFormatter.Deserialize(oStream)
End Function
Public Shared Function CheckAddress(ByVal URL As String) As Boolean
Public Shared Function IsAddress(ByVal sURL As String) As Boolean
If (sURL.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or (sURL.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
Return True
End If
Return False
End Function
Public Shared Function CheckAddress(ByVal sURL As String) As Boolean
Try
Dim request As WebRequest = WebRequest.Create(URL)
Dim request As WebRequest = WebRequest.Create(sURL)
Dim response As WebResponse = request.GetResponse()
response.Close()
Catch ex As Exception
@@ -202,11 +209,6 @@ Public Class mgrCommon
Dim sExemptList As String() = {"dosbox", "scummvm"}
Dim bFound As Boolean = False
'We can't search if we don't have a configuration
If oGame.Temporary Then
Return True
End If
For Each s As String In sExemptList
If oGame.ProcessName.ToLower.Contains(s) Then bFound = True
Next
@@ -274,6 +276,16 @@ Public Class mgrCommon
Return False
End Function
Public Shared Function IsRegExValid(ByVal sPattern As String) As Boolean
Dim oRegEx As Regex
Try
oRegEx = New Regex(sPattern)
Return True
Catch ex As Exception
Return False
End Try
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
@@ -420,10 +432,10 @@ Public Class mgrCommon
'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
Dim sDir As String = sBackupFolder & oBackup.MonitorID
'Delete sub directory if it's empty
If oBackup.FileName.StartsWith(oBackup.Name & Path.DirectorySeparatorChar) Then
If oBackup.FileName.StartsWith(oBackup.MonitorID & Path.DirectorySeparatorChar) Then
If Directory.Exists(sDir) Then
'Check if there's any sub-directories or files remaining
oDir = New DirectoryInfo(sDir)
@@ -478,7 +490,6 @@ Public Class mgrCommon
Return sString
End Function
'Handles single parameter stings
Public Shared Function FormatString(ByVal sString As String, ByVal sParam As String) As String
sString = sString.Replace("[BR]", vbCrLf)
+163
View File
@@ -0,0 +1,163 @@
Public Class mgrGameProcesses
Public Shared Sub DoGameProcessAdd(ByVal oGameProcess As clsGameProcess)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "INSERT INTO gameprocesses VALUES (@ProcessID, @MonitorID)"
hshParams.Add("ProcessID", oGameProcess.ProcessID)
hshParams.Add("MonitorID", oGameProcess.MonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoGameProcessAddBatch(ByVal oGameProcesss As List(Of clsGameProcess))
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "INSERT INTO gameprocesses VALUES (@ProcessID, @MonitorID);"
For Each oGameProcess As clsGameProcess In oGameProcesss
hshParams = New Hashtable
hshParams.Add("ProcessID", oGameProcess.ProcessID)
hshParams.Add("MonitorID", oGameProcess.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoGameProcessDelete(ByVal oGameProcesss As List(Of clsGameProcess))
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "DELETE FROM gameprocesses "
sSQL &= "WHERE ProcessID = @ProcessID AND MonitorID = @MonitorID;"
For Each oGameProcess As clsGameProcess In oGameProcesss
hshParams = New Hashtable
hshParams.Add("ProcessID", oGameProcess.ProcessID)
hshParams.Add("MonitorID", oGameProcess.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoGameProcessDeleteByGame(ByVal sMonitorID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gameprocesses "
sSQL &= "WHERE MonitorID = @ID;"
hshParams.Add("ID", sMonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoGameProcessDeleteByProcess(ByVal sProcessID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gameprocesses "
sSQL &= "WHERE ProcessID = @ID;"
hshParams.Add("ID", sProcessID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function GetProcessesByGame(ByVal sMonitorID As String) As Hashtable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim hshParams As New Hashtable
Dim oProcess As clsProcess
sSQL = "SELECT ProcessID, processes.Name, processes.Path, processes.Args, processes.Kill FROM gameprocesses NATURAL JOIN processes WHERE MonitorID = @ID"
hshParams.Add("ID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oProcess = New clsProcess
oProcess.ID = CStr(dr("ProcessID"))
oProcess.Name = CStr(dr("Name"))
oProcess.Path = CStr(dr("Path"))
If Not IsDBNull(dr("Args")) Then oProcess.Args = CStr(dr("Args"))
oProcess.Kill = CBool(dr("Kill"))
hshList.Add(oProcess.ID, oProcess)
Next
Return hshList
End Function
Public Shared Function GetProcessesByGameMulti(ByVal sMonitorIDs As List(Of String)) As Hashtable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim hshParams As New Hashtable
Dim oProcess As clsProcess
Dim iCounter As Integer
sSQL = "SELECT DISTINCT ProcessID, processes.Name, processes.Path, processes.Args, processes.Kill FROM gameprocesses NATURAL JOIN processes WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ")"
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oProcess = New clsProcess
oProcess.ID = CStr(dr("ProcessID"))
oProcess.Name = CStr(dr("Name"))
oProcess.Path = CStr(dr("Path"))
If Not IsDBNull(dr("Args")) Then oProcess.Args = CStr(dr("Args"))
oProcess.Kill = CBool(dr("Kill"))
hshList.Add(oProcess.ID, oProcess)
Next
Return hshList
End Function
Public Shared Function ReadGameProcesss() As Hashtable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim sCompoundKey As String
Dim hshList As New Hashtable
Dim oGameProcess As clsGameProcess
sSQL = "SELECT * from gameprocesses"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oGameProcess = New clsGameProcess
oGameProcess.ProcessID = CStr(dr("ProcessID"))
oGameProcess.MonitorID = CStr(dr("MonitorID"))
sCompoundKey = oGameProcess.ProcessID & ":" & oGameProcess.MonitorID
hshList.Add(sCompoundKey, oGameProcess)
Next
Return hshList
End Function
End Class
+45 -71
View File
@@ -4,10 +4,11 @@
Dim oBackupItem As clsBackup
oBackupItem = New clsBackup
oBackupItem.ID = CStr(dr("ManifestID"))
oBackupItem.ManifestID = CStr(dr("ManifestID"))
oBackupItem.MonitorID = CStr(dr("MonitorID"))
oBackupItem.Name = CStr(dr("Name"))
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath"))
oBackupItem.RestorePath = CStr(dr("Path"))
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
@@ -19,11 +20,9 @@
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("ManifestID", oBackupItem.ManifestID)
hshParams.Add("MonitorID", oBackupItem.MonitorID)
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)
@@ -38,12 +37,12 @@
Dim oBackupItem As clsBackup
Dim slList As New SortedList
sSQL = "SELECT * from manifest ORDER BY Name Asc"
sSQL = "SELECT * from manifest NATURAL JOIN monitorlist 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.ID, oBackupItem)
slList.Add(oBackupItem.ManifestID, oBackupItem)
Next
Return slList
@@ -57,19 +56,19 @@
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"
sSQL = "SELECT ManifestID, MonitorID, Name, FileName, Path, AbsolutePath, Max(DateUpdated) As DateUpdated, UpdatedBy, CheckSum FROM manifest NATURAL JOIN monitorlist GROUP BY Name ORDER By Name ASC"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
slList.Add(oBackupItem.Name, oBackupItem)
slList.Add(oBackupItem.MonitorID, oBackupItem)
Next
Return slList
End Function
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As List(Of clsBackup)
Public Shared Function DoManifestGetByMonitorID(ByVal sMonitorID 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
@@ -78,10 +77,10 @@
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name ORDER BY DateUpdated Desc"
sSQL = "SELECT * FROM manifest NATURAL JOIN monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID ORDER BY DateUpdated Desc"
hshParams.Add("Name", sName)
hshParams.Add("MonitorID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -93,7 +92,7 @@
Return oList
End Function
Public Shared Function DoManifestGetByID(ByVal sID As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
Public Shared Function DoManifestGetByManifestID(ByVal sManifestID As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
@@ -101,10 +100,10 @@
Dim oBackupItem As New clsBackup
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE ManifestID = @ID ORDER BY DateUpdated Desc"
sSQL = "SELECT * FROM manifest NATURAL JOIN monitorlist "
sSQL &= "WHERE ManifestID = @ManifestID ORDER BY DateUpdated Desc"
hshParams.Add("ID", sID)
hshParams.Add("ManifestID", sManifestID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -115,25 +114,22 @@
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
Public Shared Function DoUpdateLatestManifest(ByRef oItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim oData As Object
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name AND FileName = @FileName"
sSQL = "SELECT ManifestID FROM manifest NATURAL JOIN monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID ORDER BY DateUpdated DESC LIMIT 1"
hshParams.Add("Name", oItem.Name)
hshParams.Add("FileName", oItem.FileName)
hshParams.Add("MonitorID", oItem.MonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
oData = oDatabase.ReadSingleValue(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
If Not oData Is Nothing Then
oItem.ManifestID = CStr(oData)
DoManifestUpdateByManifestID(oItem, mgrSQLite.Database.Remote)
Return True
Else
Return False
@@ -141,38 +137,16 @@
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
Public Shared Function DoManifestCheck(ByVal sMonitorID 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
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name"
sSQL = "SELECT * FROM manifest "
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("Name", sName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
Return True
Else
Return False
End If
End Function
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
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sName)
hshParams.Add("MonitorID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -189,63 +163,63 @@
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)"
sSQL = "INSERT INTO manifest VALUES (@ManifestID, @MonitorID, @FileName, @DateUpdated, @UpdatedBy, @CheckSum)"
hshParams = SetCoreParameters(oBackupItem)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestUpdateByName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestUpdateByMonitorID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
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 = "UPDATE manifest SET MonitorID = @MonitorID, FileName = @FileName, DateUpdated = @DateUpdated, "
sSQL &= "UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE MonitorID = @QueryID"
hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("QueryName", oBackupItem.Name)
hshParams.Add("QueryID", oBackupItem.MonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestUpdateByID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestUpdateByManifestID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID"
sSQL = "UPDATE manifest SET MonitorID = @MonitorID, FileName = @FileName, DateUpdated = @DateUpdated, "
sSQL &= "UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID"
hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("QueryID", oBackupItem.ID)
hshParams.Add("QueryID", oBackupItem.ManifestID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestDeletebyName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestDeleteByMonitorID(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 Name = @Name"
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("MonitorID", oBackupItem.MonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestDeletebyID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Public Shared Sub DoManifestDeleteByManifestID(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"
sSQL &= "WHERE ManifestID = @ManifestID"
hshParams.Add("ID", oBackupItem.ID)
hshParams.Add("ManifestID", oBackupItem.ManifestID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
+261 -81
View File
@@ -1,4 +1,5 @@
Imports GBM.My.Resources
Imports System.Text.RegularExpressions
Imports System.Collections.Specialized
Imports System.IO
@@ -34,6 +35,7 @@ Public Class mgrMonitorList
oGame.CleanFolder = CBool(dr("CleanFolder"))
If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter"))
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.IsRegEx = CBool(dr("IsRegEx"))
Return oGame
End Function
@@ -61,6 +63,7 @@ Public Class mgrMonitorList
hshParams.Add("CleanFolder", oGame.CleanFolder)
hshParams.Add("Parameter", oGame.Parameter)
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
Return hshParams
End Function
@@ -72,22 +75,50 @@ Public Class mgrMonitorList
Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable
Dim oGame As clsGame
Dim oCompareGame As clsGame
Dim bIsDupe As Boolean
sSQL = "Select * from monitorlist ORDER BY Name Asc"
sSQL = "Select * FROM monitorlist ORDER BY Name Asc"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = MapToObject(dr)
Select Case eListType
Case eListTypes.FullList
'Don't wrap this, if it fails there's a problem with the database
hshList.Add(oGame.ProcessName & ":" & oGame.Name, oGame)
hshList.Add(oGame.ID, oGame)
Case eListTypes.ScanList
If hshList.Contains(oGame.ProcessName) Then
DirectCast(hshList.Item(oGame.ProcessName), clsGame).Duplicate = True
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
For Each de As DictionaryEntry In hshList
bIsDupe = False
oCompareGame = DirectCast(de.Value, clsGame)
If oCompareGame.IsRegEx Then
If oGame.IsRegEx Then
If oCompareGame.ProcessName = oGame.ProcessName Then
bIsDupe = True
End If
Else
If Regex.IsMatch(oGame.ProcessName, oCompareGame.ProcessName) Then
bIsDupe = True
End If
End If
Else
If oGame.IsRegEx Then
If Regex.IsMatch(oCompareGame.ProcessName, oGame.ProcessName) Then
bIsDupe = True
End If
Else
If oGame.ProcessName = oCompareGame.ProcessName Then
bIsDupe = True
End If
End If
End If
If bIsDupe Then
DirectCast(hshList.Item(oCompareGame.ProcessName), clsGame).Duplicate = True
oGame.ProcessName = oGame.CompoundKey
oGame.Duplicate = True
End If
Next
If oGame.Enabled Then hshList.Add(oGame.ProcessName, oGame)
End Select
Next
@@ -101,7 +132,8 @@ Public Class mgrMonitorList
Dim hshParams As Hashtable
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments)"
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, "
sSQL &= "@Parameter, @Comments, @IsRegEx)"
'Parameters
hshParams = SetCoreParameters(oGame)
@@ -110,20 +142,31 @@ Public Class mgrMonitorList
End Sub
Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal sQueryID As String = "", Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL = "UPDATE monitorlist SET MonitorID=@ID, Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments WHERE MonitorID=@ID"
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, "
sSQL &= "CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments, IsRegEx=@IsRegEx WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE gametags SET MonitorID=@ID WHERE MonitorID=@QueryID;"
If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "UPDATE gameprocesses SET MonitorID=@ID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE sessions SET MonitorID=@ID WHERE MonitorID=@QueryID;"
End If
'Parameters
hshParams = SetCoreParameters(oGame)
If sQueryID <> String.Empty Then
hshParams.Add("QueryID", sQueryID)
Else
hshParams.Add("QueryID", oGame.ID)
End If
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListUpdateMulti(ByVal sMonitorIDs As List(Of String), ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
@@ -156,9 +199,13 @@ Public Class mgrMonitorList
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gametags "
sSQL = "DELETE FROM manifest "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM gametags "
sSQL &= "WHERE MonitorID = @MonitorID;"
If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "DELETE FROM gameprocesses "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM sessions "
sSQL &= "WHERE MonitorID = @MonitorID;"
End If
@@ -177,7 +224,19 @@ Public Class mgrMonitorList
Dim hshParams As New Hashtable
Dim iCounter As Integer
sSQL = "DELETE FROM gametags "
sSQL = "DELETE FROM manifest "
sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ");"
sSQL &= "DELETE FROM gametags "
sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
@@ -190,6 +249,18 @@ Public Class mgrMonitorList
sSQL &= ");"
If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "DELETE FROM gameprocesses "
sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ");"
sSQL &= "DELETE FROM sessions "
sSQL &= "WHERE MonitorID IN ("
@@ -239,7 +310,7 @@ Public Class mgrMonitorList
Return oGame
End Function
Public Shared Function DoListGetbyName(ByVal sName As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Public Shared Function DoListGetbyMonitorID(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
@@ -248,10 +319,10 @@ Public Class mgrMonitorList
Dim hshParams As New Hashtable
Dim iCounter As Integer = 0
sSQL = "SELECT * from monitorlist "
sSQL &= "WHERE Name = @Name"
sSQL = "SELECT * FROM monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("Name", sName)
hshParams.Add("MonitorID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -264,45 +335,19 @@ Public Class mgrMonitorList
Return hshGames
End Function
Public Shared Function DoDuplicateListCheck(ByVal sName As String, ByVal sProcess As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, Optional ByVal sExcludeID As String = "") As Boolean
Public Shared Function DoDuplicateListCheck(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, Optional ByVal sExcludeID As String = "") As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM monitorlist WHERE Name = @Name AND Process= @Process"
sSQL = "SELECT * FROM monitorlist WHERE MonitorID = @MonitorID"
hshParams.Add("Name", sName)
hshParams.Add("Process", sProcess)
hshParams.Add("MonitorID", sMonitorID)
If sExcludeID <> String.Empty Then
sSQL &= " AND MonitorID <> @MonitorID"
hshParams.Add("MonitorID", sExcludeID)
End If
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
Return True
Else
Return False
End If
End Function
Public Shared Function DoDuplicateParameterCheck(ByVal sProcess As String, ByVal sParameter As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, Optional ByVal sExcludeID As String = "") As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM monitorlist WHERE Process = @Process AND Parameter = @Parameter"
hshParams.Add("Process", sProcess)
hshParams.Add("Parameter", sParameter)
If sExcludeID <> String.Empty Then
sSQL &= " AND MonitorID <> @MonitorID"
hshParams.Add("MonitorID", sExcludeID)
sSQL &= " AND MonitorID <> @QueryID"
hshParams.Add("QueryID", sExcludeID)
End If
oData = oDatabase.ReadParamData(sSQL, hshParams)
@@ -365,11 +410,11 @@ Public Class mgrMonitorList
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
End If
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments) "
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx) "
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
sSQL &= sTimeStamp & ", @ExcludeList, " & sGamePath & ", "
sSQL &= sIcon & ", @Hours, " & sVersion & ", "
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ", @CleanFolder, @Parameter, @Comments);"
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ", @CleanFolder, @Parameter, @Comments, @IsRegEx);"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
@@ -388,6 +433,7 @@ Public Class mgrMonitorList
hshParams.Add("CleanFolder", oGame.CleanFolder)
hshParams.Add("Parameter", oGame.Parameter)
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
'Optional Parameters
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
@@ -423,27 +469,29 @@ Public Class mgrMonitorList
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "DELETE FROM gametags "
sSQL = "DELETE FROM manifest "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM gametags "
sSQL &= "WHERE MonitorID = @MonitorID;"
If iSelectDB = mgrSQLite.Database.Local Then
sSQL &= "DELETE FROM gameprocesses "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM sessions "
sSQL &= "WHERE MonitorID = @MonitorID;"
End If
sSQL &= "DELETE FROM monitorlist "
sSQL &= "WHERE Name = @Name AND Process= @Process;"
sSQL &= "WHERE MonitorID = @MonitorID;"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
hshParams.Add("MonitorID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub SyncMonitorLists(ByVal eSyncFields As clsGame.eOptionalSyncFields, Optional ByVal bToRemote As Boolean = True)
Public Shared Sub SyncMonitorLists(ByVal oSettings As mgrSettings, Optional ByVal bToRemote As Boolean = True)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
@@ -454,11 +502,13 @@ Public Class mgrMonitorList
Cursor.Current = Cursors.WaitCursor
If Not oSettings.DisableSyncMessages Then
If bToRemote Then
RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog(mgrMonitorList_SyncFromMaster, False, ToolTipIcon.Info, True)
End If
End If
'Add / Update Sync
If bToRemote Then
@@ -469,21 +519,30 @@ Public Class mgrMonitorList
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
'Sync Wipe Protection
If hshCompareFrom.Count = 0 And hshCompareTo.Count > 0 Then
If mgrCommon.ShowMessage(mgrMonitorList_WarningSyncProtection, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
'We will always show this one in the log regardless of setting
RaiseEvent UpdateLog(mgrMonitorList_ErrorSyncCancel, False, ToolTipIcon.Warning, True)
Exit Sub
End If
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
If oFromItem.SyncEquals(oToItem, eSyncFields) Then
hshSyncItems.Remove(oFromItem.CompoundKey)
If hshCompareTo.Contains(oFromItem.ID) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ID), clsGame)
If oFromItem.SyncEquals(oToItem, oSettings.SyncFields) Then
hshSyncItems.Remove(oFromItem.ID)
End If
End If
Next
If bToRemote Then
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote, eSyncFields)
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote, oSettings.SyncFields)
Else
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local, eSyncFields)
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local, oSettings.SyncFields)
End If
'Sync Tags
@@ -502,10 +561,10 @@ Public Class mgrMonitorList
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
If hshCompareFrom.Contains(oToItem.CompoundKey) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.CompoundKey), clsGame)
If hshCompareFrom.Contains(oToItem.ID) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.ID), clsGame)
If oToItem.MinimalEquals(oFromItem) Then
hshDeleteItems.Remove(oToItem.CompoundKey)
hshDeleteItems.Remove(oToItem.ID)
End If
End If
Next
@@ -516,7 +575,10 @@ Public Class mgrMonitorList
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
End If
If Not oSettings.DisableSyncMessages Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True)
End If
Cursor.Current = Cursors.Default
Application.DoEvents()
End Sub
@@ -527,7 +589,7 @@ Public Class mgrMonitorList
ByRef hshParams As Hashtable) As String
Dim sSQL As String = String.Empty
Dim iCounter As Integer = 0
Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments FROM monitorlist"
Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist"
Dim sSort As String = " ORDER BY " & sSortField
If bSortAsc Then
@@ -700,7 +762,6 @@ Public Class mgrMonitorList
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String = String.Empty
Dim sID As String
Dim oList As New List(Of Game)
Dim oGame As Game
Dim hshParams As New Hashtable
@@ -711,7 +772,7 @@ Public Class mgrMonitorList
For Each dr As DataRow In oData.Tables(0).Rows
oGame = New Game
sID = CStr(dr("MonitorID"))
oGame.ID = CStr(dr("MonitorID"))
oGame.Name = CStr(dr("Name"))
oGame.ProcessName = CStr(dr("Process"))
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
@@ -722,17 +783,56 @@ Public Class mgrMonitorList
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter"))
If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID)
oGame.IsRegEx = CBool(dr("IsRegEx"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(oGame.ID)
oList.Add(oGame)
Next
Return oList
End Function
Public Shared Function DoImport(ByVal sPath As String) As Boolean
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
Public Shared Function SyncGameIDs(ByVal sPath As String, ByRef oSettings As mgrSettings, ByVal bOfficial As Boolean) As Boolean
Dim sWarning As String
If bOfficial Then
If (oSettings.SuppressMessages And mgrSettings.eSuppressMessages.GameIDSync) = mgrSettings.eSuppressMessages.GameIDSync Then
sWarning = mgrMonitorList_ConfirmOfficialGameIDSync
Else
sWarning = mgrMonitorList_ConfirmInitialOfficialGameIDSync
oSettings.SuppressMessages = oSettings.SetMessageField(oSettings.SuppressMessages, mgrSettings.eSuppressMessages.GameIDSync)
oSettings.SaveSettings()
End If
Else
sWarning = mgrMonitorList_ConfirmFileGameIDSync
End If
If mgrCommon.ShowMessage(sWarning, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrCommon.IsAddress(sPath) Then
If mgrCommon.CheckAddress(sPath) Then
DoGameIDSync(sPath, True)
Else
mgrCommon.ShowMessage(mgrMonitorList_WebNoReponse, sPath, MsgBoxStyle.Exclamation)
Return False
End If
Else
If File.Exists(sPath) Then
DoGameIDSync(sPath)
Else
mgrCommon.ShowMessage(mgrMonitorList_FileNotFound, sPath, MsgBoxStyle.Exclamation)
Return False
End If
End If
End If
Return True
End Function
Public Shared Function DoImport(ByVal sPath As String, ByVal bOfficial As Boolean, ByRef oSettings As mgrSettings, Optional ByVal bStartUpWizard As Boolean = False) As Boolean
If mgrCommon.IsAddress(sPath) Then
If mgrCommon.CheckAddress(sPath) Then
If bOfficial And Not bStartUpWizard And Not ((oSettings.SuppressMessages And mgrSettings.eSuppressMessages.GameIDSync) = mgrSettings.eSuppressMessages.GameIDSync) Then
SyncGameIDs(sPath, oSettings, True)
End If
ImportMonitorList(sPath, True)
Return True
Else
@@ -752,7 +852,7 @@ Public Class mgrMonitorList
End Function
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
Dim hshCompareFrom As Hashtable
Dim hshCompareFrom As New Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim oFromItem As clsGame
@@ -761,17 +861,33 @@ Public Class mgrMonitorList
Cursor.Current = Cursors.WaitCursor
'Add / Update Sync
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, oExportInfo, bWebRead)
If Not mgrXML.ReadMonitorList(sLocation, oExportInfo, hshCompareFrom, bWebRead) Then
Exit Sub
End If
If oExportInfo.AppVer < 110 Then
If mgrCommon.ShowMessage(mgrMonitorList_ImportVersionWarning, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
Exit Sub
End If
End If
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
If hshCompareTo.Contains(oFromItem.ID) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ID), clsGame)
If oFromItem.MinimalEquals(oToItem) Then
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.CompoundKey)
hshSyncItems.Remove(oFromItem.ID)
Else
DirectCast(hshSyncItems(oFromItem.ID), clsGame).ImportUpdate = True
'These fields need to be set via the object or they will be lost when the configuration is updated
DirectCast(hshSyncItems(oFromItem.ID), clsGame).Hours = oToItem.Hours
DirectCast(hshSyncItems(oFromItem.ID), clsGame).CleanFolder = oToItem.CleanFolder
End If
End If
End If
Next
@@ -798,6 +914,70 @@ Public Class mgrMonitorList
Application.DoEvents()
End Sub
Private Shared Sub DoGameIDSync(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
Dim hshCompareFrom As New Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncIDs As New Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Dim oExportInfo As New ExportData
Cursor.Current = Cursors.WaitCursor
If Not mgrXML.ReadMonitorList(sLocation, oExportInfo, hshCompareFrom, bWebRead) Then
Exit Sub
End If
If oExportInfo.AppVer < 110 Then
mgrCommon.ShowMessage(mgrMonitorList_ErrorGameIDVerFailure, MsgBoxStyle.Exclamation)
Exit Sub
End If
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
For Each oFromItem In hshCompareFrom.Values
If Not hshCompareTo.Contains(oFromItem.ID) Then
For Each oToItem In hshCompareTo.Values
'Strip all special characters and compare names
If Regex.Replace(oToItem.Name, "[^\w]+", "").ToLower = Regex.Replace(oFromItem.Name, "[^\w]+", "").ToLower Then
'Ignore games with duplicate names
If Not hshSyncIDs.Contains(oFromItem.ID) Then
hshSyncIDs.Add(oFromItem.ID, oToItem.ID)
End If
End If
Next
End If
Next
For Each de As DictionaryEntry In hshSyncIDs
hshParams = New Hashtable
hshParams.Add("MonitorID", CStr(de.Key))
hshParams.Add("QueryID", CStr(de.Value))
oParamList.Add(hshParams)
Next
sSQL = "UPDATE monitorlist SET MonitorID=@MonitorID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE gametags SET MonitorID=@MonitorID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE manifest SET MonitorID=@MonitorID WHERE MonitorID=@QueryID;"
oRemoteDatabase.RunMassParamQuery(sSQL, oParamList)
sSQL &= "UPDATE sessions SET MonitorID=@MonitorID WHERE MonitorID=@QueryID;"
sSQL &= "UPDATE gameprocesses SET MonitorID=@MonitorID WHERE MonitorID=@QueryID;"
oLocalDatabase.RunMassParamQuery(sSQL, oParamList)
Cursor.Current = Cursors.Default
mgrCommon.ShowMessage(mgrMonitorList_GameIDSyncCompleted, hshSyncIDs.Count.ToString, MsgBoxStyle.Information)
End Sub
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
Dim oList As List(Of Game)
Dim bSuccess As Boolean = False
@@ -846,15 +1026,15 @@ Public Class mgrMonitorList
'If the remote database actually contains a list, then ask what to do
If iGameCount > 0 Then
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
mgrMonitorList.SyncMonitorLists(oSettings, False)
End If
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
End If
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrMonitorList.SyncMonitorLists(oSettings)
End If
End Sub
End Class
+12 -2
View File
@@ -99,8 +99,18 @@ Public Class mgrPath
End Set
End Property
Public Shared Function ValidateForFileSystem(ByVal sCheckString As String) As String
Dim cInvalidCharacters As Char() = {"\", "/", ":", "*", "?", """", "<", ">", "|", "."}
Public Shared Function ValidatePathForOS(ByVal sCheckString As String) As String
Dim cInvalidCharacters As Char() = Path.GetInvalidPathChars
For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "")
Next
Return sCheckString.Trim
End Function
Public Shared Function ValidateFileNameForOS(ByVal sCheckString As String) As String
Dim cInvalidCharacters As Char() = Path.GetInvalidFileNameChars
For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "")
+152
View File
@@ -0,0 +1,152 @@
Public Class mgrProcess
Private Shared Function MapToObject(ByVal dr As DataRow) As clsProcess
Dim oProcess As New clsProcess
oProcess.ID = CStr(dr("ProcessID"))
oProcess.Name = CStr(dr("Name"))
oProcess.Path = CStr(dr("Path"))
If Not IsDBNull(dr("Args")) Then oProcess.Args = CStr(dr("Args"))
oProcess.Kill = CBool(dr("Kill"))
Return oProcess
End Function
Private Shared Function SetCoreParameters(ByVal oProcess As clsProcess) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ProcessID", oProcess.ID)
hshParams.Add("Name", oProcess.Name)
hshParams.Add("Path", oProcess.Path)
hshParams.Add("Args", oProcess.Args)
hshParams.Add("Kill", oProcess.Kill)
Return hshParams
End Function
Public Shared Sub DoProcessAdd(ByVal oProcess As clsProcess)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "INSERT INTO processes VALUES (@ProcessID, @Name, @Path, @Args, @Kill)"
hshParams = SetCoreParameters(oProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoProcessUpdate(ByVal oProcess As clsProcess)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "UPDATE processes SET Name=@Name, Path=@Path, Args=@Args, Kill=@Kill "
sSQL &= "WHERE ProcessID = @ProcessID"
hshParams = SetCoreParameters(oProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoProcessDelete(ByVal sProcessID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gameprocesses "
sSQL &= "WHERE ProcessID = @ProcessID;"
sSQL &= "DELETE FROM processes "
sSQL &= "WHERE ProcessID = @ProcessID;"
hshParams.Add("ProcessID", sProcessID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function DoProcessGetbyID(ByVal sProcessID As String) As clsProcess
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oProcess As New clsProcess
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM processes "
sSQL &= "WHERE ProcessID = @ProcessID"
hshParams.Add("ProcessID", sProcessID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oProcess = MapToObject(dr)
Next
Return oProcess
End Function
Public Shared Function DoProcessGetbyName(ByVal sProcessName As String) As clsProcess
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oProcess As New clsProcess
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM processes "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sProcessName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oProcess = MapToObject(dr)
Next
Return oProcess
End Function
Public Shared Function DoCheckDuplicate(ByVal sName As String, Optional ByVal sExcludeID As String = "") As Boolean
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM processes "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sName)
If sExcludeID <> String.Empty Then
sSQL &= " AND ProcessID <> @ProcessID"
hshParams.Add("ProcessID", sExcludeID)
End If
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
Return True
Else
Return False
End If
End Function
Public Shared Function ReadProcesses() As Hashtable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim oProcess As clsProcess
sSQL = "SELECT * from processes"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oProcess = MapToObject(dr)
hshList.Add(oProcess.Name, oProcess)
Next
Return hshList
End Function
End Class
@@ -1,7 +1,8 @@
Imports System.IO
Imports System.Management
Imports System.Text.RegularExpressions
Public Class mgrProcesses
Public Class mgrProcessDetection
Private prsFoundProcess As Process
Private dStartTime As DateTime = Now, dEndTime As DateTime = Now
@@ -83,22 +84,43 @@ Public Class mgrProcesses
Private Function HandleDuplicates(hshScanList As Hashtable) As Boolean
Dim sProcess As String
Dim sParameter As String = String.Empty
Dim bParameter As Boolean = False
Dim oInitialDupes As New ArrayList
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
If o.Duplicate = True And (sProcess = oGame.TrueProcess Or Regex.IsMatch(sProcess, oGame.TrueProcess)) Then
oInitialDupes.Add(o.ShallowCopy)
End If
Next
For Each o As clsGame In oInitialDupes
If (o.Parameter <> String.Empty And FullCommand.Contains(o.Parameter)) Then
sParameter = o.Parameter
bParameter = True
Exit For
End If
Next
If bParameter Then
For Each o As clsGame In oInitialDupes
If (o.Parameter = sParameter) Then
oDuplicateGames.Add(o.ShallowCopy)
End If
Next
Else
For Each o As clsGame In oInitialDupes
If (o.Parameter = String.Empty) Then
oDuplicateGames.Add(o.ShallowCopy)
End If
Next
End If
If oDuplicateGames.Count = 1 Then
oGame = DirectCast(oDuplicateGames(0), clsGame).ShallowCopy
Return True
@@ -162,6 +184,24 @@ Public Class mgrProcesses
End Try
End Function
Private Function IsMatch(ByRef oGame As clsGame, ByRef sProcessCheck As String) As Boolean
If oGame.IsRegEx Then
Try
If Regex.IsMatch(sProcessCheck, oGame.ProcessName) Then
Return True
End If
Catch
'Ignore malformed regular expressions that may have passed validation
End Try
Else
If oGame.ProcessName = sProcessCheck Then
Return True
End If
End If
Return False
End Function
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Dim prsList() As Process = Process.GetProcesses
Dim sProcessCheck As String = String.Empty
@@ -198,9 +238,10 @@ Public Class mgrProcesses
End Try
'Detection Pass 1
If hshScanList.ContainsKey(sProcessCheck) Then
For Each oCurrentGame As clsGame In hshScanList.Values
If IsMatch(oCurrentGame, sProcessCheck) Then
prsFoundProcess = prsCurrent
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
oGame = oCurrentGame.ShallowCopy
bPass = True
If mgrCommon.IsUnix Then
@@ -222,8 +263,8 @@ Public Class mgrProcesses
If Duplicate And DuplicateList.Count = 0 Then bPass = False
If oGame.Parameter <> String.Empty And Not Duplicate And Not FullCommand.Contains(oGame.Parameter) Then bPass = False
End If
Next
'Detection Pass 2
If bPass Then
+11 -43
View File
@@ -28,25 +28,11 @@ Public Class mgrRestore
Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup)
Public Event SetLastAction(sMessage As String)
Public Shared Sub DoPathOverride(ByRef oCheckBackup As clsBackup, ByVal oCheckGame As clsGame)
'Always override the manifest restore path with the current configuration path if possible
If Not oCheckGame.Temporary Then
If Path.IsPathRooted(oCheckGame.Path) Then
oCheckBackup.AbsolutePath = True
Else
oCheckBackup.AbsolutePath = False
End If
oCheckBackup.RestorePath = oCheckGame.Path
End If
End Sub
Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame, ByRef bTriggerReload As Boolean) As Boolean
Dim sProcess As String
Dim sRestorePath As String
Dim bNoAuto As Boolean
DoPathOverride(oRestoreInfo, oGame)
If Not oRestoreInfo.AbsolutePath Then
If oGame.ProcessPath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
@@ -72,7 +58,7 @@ Public Class mgrRestore
Return True
End Function
Public Shared Function CheckManifest(ByVal sAppName As String) As Boolean
Public Shared Function CheckManifest(ByVal sMonitorID As String) As Boolean
Dim slLocalManifest As SortedList
Dim slRemoteManifest As SortedList
Dim oLocalItem As New clsBackup
@@ -83,13 +69,13 @@ Public Class mgrRestore
slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
If slLocalManifest.Contains(sAppName) Then
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
If slLocalManifest.Contains(sMonitorID) Then
oLocalItem = DirectCast(slLocalManifest(sMonitorID), clsBackup)
bLocal = True
End If
If slRemoteManifest.Contains(sAppName) Then
oRemoteItem = DirectCast(slRemoteManifest(sAppName), clsBackup)
If slRemoteManifest.Contains(sMonitorID) Then
oRemoteItem = DirectCast(slRemoteManifest(sMonitorID), clsBackup)
bRemote = True
End If
@@ -119,38 +105,20 @@ Public Class mgrRestore
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 slLocalManifest.Contains(oItem.MonitorID) Then
oLocalItem = DirectCast(slLocalManifest(oItem.MonitorID), clsBackup)
If oItem.DateUpdated > oLocalItem.DateUpdated Then
slRestoreItems.Add(oItem.Name, oItem)
slRestoreItems.Add(oItem.MonitorID, oItem)
End If
Else
slRestoreItems.Add(oItem.Name, oItem)
slRestoreItems.Add(oItem.MonitorID, oItem)
End If
Next
Return slRestoreItems
End Function
Public Shared Function SyncLocalManifest() As SortedList
Dim slLocalManifest As SortedList
Dim slRemoteManifest As SortedList
Dim slRemovedItems As New SortedList
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.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local)
End If
Next
Return slRemovedItems
End Function
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean
Dim sHash As String
Dim sExtractPath As String
@@ -262,8 +230,8 @@ Public Class mgrRestore
If bRestoreCompleted Then
'Save Local Manifest
If mgrManifest.DoGlobalManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(oBackupInfo, mgrSQLite.Database.Local)
If mgrManifest.DoManifestCheck(oBackupInfo.MonitorID, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByMonitorID(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
+131 -17
View File
@@ -27,17 +27,17 @@ Public Class mgrSQLite
End Select
End Sub
Private Sub BackupDB(ByVal sLastVer As String)
Public Sub BackupDB(ByVal sDescription As String, Optional ByVal bOverwrite As Boolean = False)
Dim sNewFile As String = String.Empty
Try
Select Case eDatabase
Case Database.Local
sNewFile = mgrPath.DatabaseLocation & "." & sLastVer & ".bak"
File.Copy(mgrPath.DatabaseLocation, sNewFile, False)
sNewFile = mgrPath.DatabaseLocation & "." & sDescription & ".bak"
File.Copy(mgrPath.DatabaseLocation, sNewFile, bOverwrite)
Case Database.Remote
sNewFile = mgrPath.RemoteDatabaseLocation & "." & sLastVer & ".bak"
File.Copy(mgrPath.RemoteDatabaseLocation, sNewFile, False)
sNewFile = mgrPath.RemoteDatabaseLocation & "." & sDescription & ".bak"
File.Copy(mgrPath.RemoteDatabaseLocation, sNewFile, bOverwrite)
End Select
Catch ex As Exception
mgrCommon.ShowMessage(mgrSQLite_ErrorBackupFailure, New String() {sNewFile, ex.Message}, MsgBoxStyle.Exclamation)
@@ -72,18 +72,19 @@ 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, 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, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL, SessionTracking BOOLEAN NOT NULL);"
"BackupFolder TEXT NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SuppressBackup BOOLEAN NOT NULL, SuppressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL, SessionTracking BOOLEAN NOT NULL, " &
"SuppressMessages INTEGER NOT NULL, BackupOnLaunch BOOLEAN NOT NULL, UseGameID BOOLEAN NOT NULL, DisableSyncMessages BOOLEAN NOT NULL);"
'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, " &
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, PRIMARY KEY(Name, Process));"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
'Add Tables (Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
@@ -95,12 +96,18 @@ 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 PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Add Tables (Sessions)
sSql &= "CREATE TABLE sessions (MonitorID TEXT NOT NULL, Start INTEGER NOT NULL, End INTEGER NOT NULL, PRIMARY KEY(MonitorID, Start));"
'Add Tables (Processes)
sSql &= "CREATE TABLE processes (ProcessID TEXT NOT NULL PRIMARY KEY, Name Text NOT NULL, Path TEXT NOT NULL, Args TEXT, Kill BOOLEAN NOT NULL);"
'Add Tables (Game Processes)
sSql &= "CREATE TABLE gameprocesses (ProcessID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(ProcessID, MonitorID));"
'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
@@ -120,14 +127,14 @@ Public Class mgrSQLite
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, " &
sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, PRIMARY KEY(Name, Process));"
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
'Add Tables (Remote Manifest)
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);"
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Add Tables (Remote Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
@@ -267,7 +274,7 @@ Public Class mgrSQLite
Dim oResult As New Object
Connect()
Command = New SqliteCommand(sSQL, db)
command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams)
Try
@@ -734,6 +741,113 @@ Public Class mgrSQLite
End If
End If
'1.08 Upgrade
If GetDatabaseVersion() < 108 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v105")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=108"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v105")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=108"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'1.10 Upgrade
If GetDatabaseVersion() < 110 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v108")
'Add Tables
sSQL = "CREATE TABLE processes (ProcessID TEXT NOT NULL PRIMARY KEY, Name Text NOT NULL, Path TEXT NOT NULL, Args TEXT, Kill BOOLEAN NOT NULL);"
sSQL &= "CREATE TABLE gameprocesses (ProcessID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(ProcessID, MonitorID));"
'Overhaul Tables
sSQL &= "CREATE TABLE settings_new (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SuppressBackup BOOLEAN NOT NULL, SuppressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL, AutoRestore BOOLEAN NOT NULL, AutoMark BOOLEAN NOT NULL, SessionTracking BOOLEAN NOT NULL, " &
"SuppressMessages INTEGER NOT NULL, BackupOnLaunch BOOLEAN NOT NULL, UseGameID BOOLEAN NOT NULL, DisableSyncMessages BOOLEAN NOT NULL);"
sSQL &= "INSERT INTO settings_new(SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, ShowOverwriteWarning, RestoreOnLaunch, " &
"BackupFolder, StartWithWindows, TimeTracking, SuppressBackup, SuppressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " &
"AutoRestore, AutoMark, SessionTracking, SuppressMessages, BackupOnLaunch, UseGameID, DisableSyncMessages) SELECT SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, ShowOverwriteWarning, RestoreOnLaunch, " &
"BackupFolder, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog, " &
"AutoRestore, AutoMark, SessionTracking, 0, 1, 0, 1 FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
sSQL &= "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist;" &
"DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " &
"SELECT ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum FROM manifest NATURAL JOIN monitorlist GROUP BY ManifestID;" &
"DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
sSQL &= "PRAGMA user_version=110"
RunParamQuery(sSQL, New Hashtable)
CompactDatabase()
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v108")
'Overhaul Tables
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL);"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx)" &
"SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, " &
"ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist;" &
"DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'We need to push the local game list against the remote database in case they had syncing disabled
Dim hshMonitorList As Hashtable = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList, mgrSQLite.Database.Local)
Dim oSettings As New mgrSettings
oSettings.LoadSettings()
mgrMonitorList.DoListAddUpdateSync(hshMonitorList, Database.Remote, oSettings.SyncFields)
mgrTags.SyncTags(True)
mgrGameTags.SyncGameTags(True)
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, MonitorID TEXT NOT NULL, FileName TEXT NOT NULL, " &
"DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum) " &
"SELECT ManifestID, MonitorID, FileName, DateUpdated, UpdatedBy, CheckSum FROM manifest NATURAL JOIN monitorlist GROUP BY ManifestID;" &
"DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
sSQL &= "PRAGMA user_version=110"
RunParamQuery(sSQL, New Hashtable)
CompactDatabase()
End If
End If
End Sub
Public Function GetDBSize() As Long
+137 -6
View File
@@ -1,11 +1,15 @@
Public Class mgrSessions
Imports GBM.My.Resources
Imports System.IO
Imports System.Xml.Serialization
Public Class mgrSessions
Private Shared Function MapToObject(ByVal dr As DataRow) As clsSession
Dim oSession As New clsSession
oSession.MonitorID = CStr(dr("MonitorID"))
oSession.SessionStart = mgrCommon.UnixToDate(CInt(dr("Start")))
oSession.SessionEnd = mgrCommon.UnixToDate(CInt(dr("End")))
oSession.SessionStart = CInt(dr("Start"))
oSession.SessionEnd = CInt(dr("End"))
Return oSession
End Function
@@ -14,8 +18,8 @@
Dim hshParams As New Hashtable
hshParams.Add("MonitorID", oSession.MonitorID)
hshParams.Add("Start", mgrCommon.DateToUnix(oSession.SessionStart))
hshParams.Add("End", mgrCommon.DateToUnix(oSession.SessionEnd))
hshParams.Add("Start", oSession.SessionStart)
hshParams.Add("End", oSession.SessionEnd)
Return hshParams
End Function
@@ -80,7 +84,7 @@
For Each oSession As clsSession In oSessions
hshParams = New Hashtable
hshParams.Add("MonitorID", oSession.MonitorID)
hshParams.Add("Start", mgrCommon.DateToUnix(oSession.SessionStart))
hshParams.Add("Start", oSession.SessionStart)
oParamList.Add(hshParams)
Next
@@ -123,4 +127,131 @@
Return iRowCount
End Function
Private Shared Function EscapeCSV(ByVal sItem As String) As String
Dim bEnclose As Boolean = False
If sItem.Contains("""") Then
sItem = sItem.Replace("""", """""")
bEnclose = True
End If
If sItem.Contains(",") Then
bEnclose = True
End If
If sItem.Contains(vbCrLf) Or sItem.Contains(vbCr) Or sItem.Contains(vbLf) Then
bEnclose = True
End If
If bEnclose Then
sItem = """" & sItem & """"
End If
Return sItem
End Function
Public Shared Function ExportAsCSV(ByVal sLocation As String, ByVal bUnixTime As Boolean, ByVal bHeaders As Boolean, ByRef dg As DataGridView) As Boolean
Dim oWriter As StreamWriter
Dim sHeader As String
Dim sCurrentRow As String
Dim oBannedColumns As New List(Of DataGridViewColumn)
Try
oWriter = New StreamWriter(sLocation)
'Set Ban Columns
oBannedColumns.Add(dg.Columns("MonitorID"))
If bUnixTime Then
oBannedColumns.Add(dg.Columns("Start"))
oBannedColumns.Add(dg.Columns("End"))
Else
oBannedColumns.Add(dg.Columns("StartUnix"))
oBannedColumns.Add(dg.Columns("EndUnix"))
End If
'Handle Headers
If bHeaders Then
sHeader = String.Empty
For Each dgCol As DataGridViewColumn In dg.Columns
If Not oBannedColumns.Contains(dgCol) Then
sHeader &= dgCol.HeaderText & ","
End If
Next
sHeader = sHeader.TrimEnd(",")
oWriter.WriteLine(sHeader)
End If
'Handle Rows
For Each dgRow As DataGridViewRow In dg.Rows
sCurrentRow = String.Empty
For Each dgCell As DataGridViewCell In dgRow.Cells
If Not oBannedColumns.Contains(dg.Columns(dgCell.ColumnIndex)) Then
sCurrentRow &= EscapeCSV(dgCell.Value.ToString) & ","
End If
Next
sCurrentRow = sCurrentRow.TrimEnd(",")
'Don't write a LF on the last row
If dg.Rows.Count = (dgRow.Index + 1) Then
oWriter.Write(sCurrentRow)
Else
oWriter.WriteLine(sCurrentRow)
End If
Next
'Finish up
oWriter.Flush()
oWriter.Close()
mgrCommon.ShowMessage(mgrSessions_ExportSuccess, MsgBoxStyle.Information)
Return True
Catch ex As Exception
mgrCommon.ShowMessage(mgrSessions_ErrorExportFailure, ex.Message, MsgBoxStyle.Exclamation)
Return False
End Try
End Function
Public Shared Function ExportAsXML(ByVal sLocation As String, ByVal bUnixTime As Boolean, ByRef dg As DataGridView) As Boolean
Dim oSerializer As XmlSerializer
Dim oWriter As StreamWriter
Dim oCurrentSession As Session
Dim oSessions As New List(Of Session)
Dim oBannedColumns As New List(Of DataGridViewColumn)
Try
'Format data for export
For Each dgRow As DataGridViewRow In dg.Rows
oCurrentSession = New Session
oCurrentSession.GameName = dgRow.Cells("Name").Value.ToString
If bUnixTime Then
oCurrentSession.StartDate = dgRow.Cells("StartUnix").Value.ToString
oCurrentSession.EndDate = dgRow.Cells("EndUnix").Value.ToString
Else
oCurrentSession.StartDate = dgRow.Cells("Start").Value.ToString
oCurrentSession.EndDate = dgRow.Cells("End").Value.ToString
End If
oCurrentSession.Hours = dgRow.Cells("Hours").Value.ToString
oSessions.Add(oCurrentSession)
Next
'Serialize
oSerializer = New XmlSerializer(oSessions.GetType, New XmlRootAttribute("Sessions"))
oWriter = New StreamWriter(sLocation)
oSerializer.Serialize(oWriter.BaseStream, oSessions)
'Finish up
oWriter.Flush()
oWriter.Close()
mgrCommon.ShowMessage(mgrSessions_ExportSuccess, MsgBoxStyle.Information)
Return True
Catch ex As Exception
mgrCommon.ShowMessage(mgrSessions_ErrorExportFailure, ex.Message, MsgBoxStyle.Exclamation)
Return False
End Try
End Function
End Class
+85 -31
View File
@@ -11,17 +11,25 @@ Public Class mgrSettings
Private bRestoreOnLaunch As Boolean = False
Private bAutoRestore As Boolean = False
Private bAutoMark As Boolean = False
Private bSync As Boolean = True
Private bTimeTracking As Boolean = True
Private bSessionTracking As Boolean = False
Private bSupressBackup As Boolean = False
Private iSupressBackupThreshold As Integer = 10
Private bSuppressBackup As Boolean = False
Private iSuppressBackupThreshold As Integer = 10
Private iCompressionLevel As Integer = 5
Private s7zArguments As String = String.Empty
Private s7zLocation As String = String.Empty
Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"})
Private eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None Or clsGame.eOptionalSyncFields.TimeStamp
Private eMessages As eSuppressMessages = eSuppressMessages.None
Private bAutoSaveLog As Boolean = False
Private bBackupOnLaunch As Boolean = True
Private bUseGameID As Boolean = False
Private bDisableSyncMessages As Boolean = True
<Flags()> Public Enum eSuppressMessages
None = 0
GameIDSync = 1
End Enum
Property StartWithWindows As Boolean
Get
@@ -113,15 +121,6 @@ Public Class mgrSettings
End Set
End Property
Property Sync As Boolean
Get
Return bSync
End Get
Set(value As Boolean)
bSync = value
End Set
End Property
Property TimeTracking As Boolean
Get
Return bTimeTracking
@@ -140,21 +139,21 @@ Public Class mgrSettings
End Set
End Property
Property SupressBackup As Boolean
Property SuppressBackup As Boolean
Get
Return bSupressBackup
Return bSuppressBackup
End Get
Set(value As Boolean)
bSupressBackup = value
bSuppressBackup = value
End Set
End Property
Property SupressBackupThreshold As Integer
Property SuppressBackupThreshold As Integer
Get
Return iSupressBackupThreshold
Return iSuppressBackupThreshold
End Get
Set(value As Integer)
iSupressBackupThreshold = value
iSuppressBackupThreshold = value
End Set
End Property
@@ -260,18 +259,57 @@ Public Class mgrSettings
End Set
End Property
Property SuppressMessages As eSuppressMessages
Get
Return eMessages
End Get
Set(value As eSuppressMessages)
eMessages = value
End Set
End Property
Property BackupOnLaunch As Boolean
Get
Return bBackupOnLaunch
End Get
Set(value As Boolean)
bBackupOnLaunch = value
End Set
End Property
Property UseGameID As Boolean
Get
Return bUseGameID
End Get
Set(value As Boolean)
bUseGameID = value
End Set
End Property
Property DisableSyncMessages As Boolean
Get
Return bDisableSyncMessages
End Get
Set(value As Boolean)
bDisableSyncMessages = value
End Set
End Property
Sub New()
'The GameIDsync message should be suppressed on all new databases
SuppressMessages = SetMessageField(SuppressMessages, eSuppressMessages.GameIDSync)
End Sub
Private Sub SaveFromClass()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM settings WHERE SettingsID = 1"
oDatabase.RunParamQuery(sSQL, New Hashtable)
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @StartWithWindows, "
sSQL &= "@TimeTracking, @SupressBackup, @SupressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark, @SessionTracking)"
sSQL = "INSERT OR REPLACE INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @StartWithWindows, "
sSQL &= "@TimeTracking, @SuppressBackup, @SuppressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark, @SessionTracking, @SuppressMessages, @BackupOnLaunch, @UseGameID, "
sSQL &= "@DisableSyncMessages)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray)
@@ -281,11 +319,10 @@ Public Class mgrSettings
hshParams.Add("ShowOverwriteWarning", ShowOverwriteWarning)
hshParams.Add("RestoreOnLaunch", RestoreOnLaunch)
hshParams.Add("BackupFolder", BackupFolder)
hshParams.Add("Sync", Sync)
hshParams.Add("StartWithWindows", StartWithWindows)
hshParams.Add("TimeTracking", TimeTracking)
hshParams.Add("SupressBackup", SupressBackup)
hshParams.Add("SupressBackupThreshold", SupressBackupThreshold)
hshParams.Add("SuppressBackup", SuppressBackup)
hshParams.Add("SuppressBackupThreshold", SuppressBackupThreshold)
hshParams.Add("CompressionLevel", CompressionLevel)
hshParams.Add("Custom7zArguments", Custom7zArguments)
hshParams.Add("Custom7zLocation", Custom7zLocation)
@@ -294,6 +331,11 @@ Public Class mgrSettings
hshParams.Add("AutoRestore", AutoRestore)
hshParams.Add("AutoMark", AutoMark)
hshParams.Add("SessionTracking", SessionTracking)
hshParams.Add("SuppressMessages", SuppressMessages)
hshParams.Add("BackupOnLaunch", BackupOnLaunch)
hshParams.Add("UseGameID", UseGameID)
hshParams.Add("DisableSyncMessages", DisableSyncMessages)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
@@ -316,11 +358,10 @@ Public Class mgrSettings
ShowOverwriteWarning = CBool(dr("ShowOverwriteWarning"))
RestoreOnLaunch = CBool(dr("RestoreOnLaunch"))
BackupFolder = CStr(dr("BackupFolder"))
Sync = CBool(dr("Sync"))
StartWithWindows = CBool(dr("StartWithWindows"))
TimeTracking = CBool(dr("TimeTracking"))
SupressBackup = CBool(dr("SupressBackup"))
SupressBackupThreshold = CInt(dr("SupressBackupThreshold"))
SuppressBackup = CBool(dr("SuppressBackup"))
SuppressBackupThreshold = CInt(dr("SuppressBackupThreshold"))
CompressionLevel = CInt(dr("CompressionLevel"))
If Not IsDBNull(dr("Custom7zArguments")) Then Custom7zArguments = CStr(dr("Custom7zArguments"))
If Not IsDBNull(dr("Custom7zLocation")) Then Custom7zLocation = CStr(dr("Custom7zLocation"))
@@ -329,6 +370,10 @@ Public Class mgrSettings
AutoRestore = CBool(dr("AutoRestore"))
AutoMark = CBool(dr("AutoMark"))
SessionTracking = CBool(dr("SessionTracking"))
SuppressMessages = CInt(dr("SuppressMessages"))
BackupOnLaunch = CBool(dr("BackupOnLaunch"))
UseGameID = CBool(dr("UseGameID"))
DisableSyncMessages = CBool(dr("DisableSyncMessages"))
Next
oDatabase.Disconnect()
@@ -347,4 +392,13 @@ Public Class mgrSettings
'Set Remote Manifest Location
mgrPath.RemoteDatabaseLocation = Me.BackupFolder
End Sub
Public Function SetMessageField(ByVal eMessages As eSuppressMessages, ByVal eMessage As eSuppressMessages) As eSuppressMessages
Return eMessages Or eMessage
End Function
Public Function RemoveMessageField(ByVal eMessages As eSuppressMessages, ByVal eMessage As eSuppressMessages) As eSuppressMessages
Return eMessages And (Not eMessage)
End Function
End Class
+1 -1
View File
@@ -153,7 +153,7 @@
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "INSERT OR REPLACE INTO tags VALUES (COALESCE((SELECT TagID FROM tags WHERE Name = @Name), @ID), @Name); INSERT INTO gametags VALUES ((SELECT TagID from tags WHERE Name=@Name), @MonitorID);"
sSQL = "INSERT OR REPLACE INTO tags VALUES (COALESCE((SELECT TagID FROM tags WHERE Name = @Name), @ID), @Name); INSERT OR REPLACE INTO gametags VALUES ((SELECT TagID from tags WHERE Name=@Name), @MonitorID);"
For Each oGame As clsGame In hshTags.Values
sMonitorID = oGame.ID
For Each t As Tag In oGame.ImportTags
+14 -11
View File
@@ -6,25 +6,28 @@ Imports System.Net
Public Class mgrXML
Public Shared Function ReadMonitorList(ByVal sLocation As String, ByRef oExportInfo As ExportData, Optional ByVal bWebRead As Boolean = False) As Hashtable
Public Shared Function ReadMonitorList(ByVal sLocation As String, ByRef oExportInfo As ExportData, ByRef hshList As Hashtable, Optional ByVal bWebRead As Boolean = False) As Boolean
Dim oList As List(Of Game)
Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable
Dim oExportData As ExportData
Dim oExportData As New ExportData
Dim oGame As clsGame
'If the file doesn't exist return an empty list
If Not File.Exists(sLocation) And Not bWebRead Then
Return hshList
Return False
End If
If Not ImportandDeserialize(sLocation, oExportData, bWebRead) Then
Return False
End If
oExportData = ImportandDeserialize(sLocation, bWebRead)
oList = oExportData.Configurations
oExportInfo = oExportData
For Each g As Game In oList
oGame = New clsGame
oGame.ID = g.ID
oGame.Name = g.Name
oGame.ProcessName = g.ProcessName
oGame.AbsolutePath = g.AbsolutePath
@@ -35,19 +38,20 @@ Public Class mgrXML
oGame.MonitorOnly = g.MonitorOnly
oGame.Parameter = g.Parameter
oGame.Comments = g.Comments
oGame.IsRegEx = g.IsRegEx
For Each t As Tag In g.Tags
oGame.ImportTags.Add(t)
Next
'This should be wrapped just in case we get some bad data
Try
hshList.Add(oGame.ProcessName & ":" & oGame.Name, oGame)
hshList.Add(oGame.ID, oGame)
Catch e As Exception
'Do Nothing
End Try
Next
Return hshList
Return True
End Function
Private Shared Function ReadImportData(ByVal sLocation As String, ByVal bWebRead As Boolean)
@@ -64,10 +68,9 @@ Public Class mgrXML
Return oReader
End Function
Public Shared Function ImportandDeserialize(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) As ExportData
Public Shared Function ImportandDeserialize(ByVal sLocation As String, ByRef oExportData As ExportData, Optional ByVal bWebRead As Boolean = False) As Boolean
Dim oReader As StreamReader
Dim oSerializer As XmlSerializer
Dim oExportData As New ExportData
Try
oReader = ReadImportData(sLocation, bWebRead)
@@ -82,12 +85,12 @@ Public Class mgrXML
oExportData.Configurations = oSerializer.Deserialize(oReader)
oReader.Close()
End If
Return True
Catch ex As Exception
mgrCommon.ShowMessage(mgrXML_ErrorImportFailure, ex.Message, MsgBoxStyle.Exclamation)
Return False
End Try
Return oExportData
End Function
Public Shared Function SerializeAndExport(ByVal oList As List(Of Game), ByVal sLocation As String) As Boolean
+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 © 2017 Michael J. Seiferling")>
<Assembly: AssemblyCopyright("Copyright © 2018 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("1.0.5.*")>
<Assembly: AssemblyFileVersion("1.0.5.0")>
<Assembly: AssemblyVersion("1.1.2.*")>
<Assembly: AssemblyFileVersion("1.1.2.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")>
+777 -46
View File
File diff suppressed because it is too large Load Diff
+270 -27
View File
@@ -269,7 +269,7 @@
<value>Last Game: [PARAM]</value>
</data>
<data name="frmMain_ManualBackup" xml:space="preserve">
<value>A manaul backup of [PARAM] was triggered.</value>
<value>A manual backup of [PARAM] was triggered.</value>
</data>
<data name="frmMain_MasterListChanged" xml:space="preserve">
<value>The master game list has been changed by a program other than GBM.</value>
@@ -392,13 +392,13 @@
<value>Add Game &amp;Wizard...</value>
</data>
<data name="frmMain_gMonSetupCustomVariables" xml:space="preserve">
<value>Custom &amp;Path Variables...</value>
<value>Custom Path &amp;Variables...</value>
</data>
<data name="frmMain_gMonSetupGameManager" xml:space="preserve">
<value>&amp;Game Manager...</value>
</data>
<data name="frmMain_gMonSetupTags" xml:space="preserve">
<value>&amp;Tags...</value>
<value>&amp;Tag Manager...</value>
</data>
<data name="frmMain_gMonStripStatusButton" xml:space="preserve">
<value>Monitor Status:</value>
@@ -406,9 +406,6 @@
<data name="frmMain_gMonTools" xml:space="preserve">
<value>&amp;Tools</value>
</data>
<data name="frmMain_gMonToolsCleanMan" xml:space="preserve">
<value>Clea&amp;n Local Manifest</value>
</data>
<data name="frmMain_gMonToolsCompact" xml:space="preserve">
<value>&amp;Compact Databases</value>
</data>
@@ -554,7 +551,7 @@
<value>[PARAM] is already up to date.[BR][BR]Would you like to restore this backup anyway?</value>
</data>
<data name="frmGameManager_ErrorGameDupe" xml:space="preserve">
<value>A game with this exact name and process already exists.</value>
<value>A game with the same ID ([PARAM]) already exists.</value>
</data>
<data name="frmGameManager_ErrorNoBackupData" xml:space="preserve">
<value>The selected game(s) have no backup data or can't be restored with their current configuration.</value>
@@ -776,7 +773,7 @@
<value>Saved Game Folder:</value>
</data>
<data name="frmAddWizard_lblStep1Instructions" xml:space="preserve">
<value>The name will be automatically filtered for length and invalid characters. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
<value>You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
</data>
<data name="frmAddWizard_lblStep1Intro" xml:space="preserve">
<value>Enter the name of the game to monitor:</value>
@@ -785,7 +782,7 @@
<value>Game Name</value>
</data>
<data name="frmAddWizard_lblStep2Instructions" xml:space="preserve">
<value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual exe file. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
<value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual executable file. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
</data>
<data name="frmAddWizard_lblStep2Intro" xml:space="preserve">
<value>Choose the game's executable file or shortcut:</value>
@@ -926,7 +923,7 @@
<value>&amp;Close</value>
</data>
<data name="frmGameTags_btnOpenTags" xml:space="preserve">
<value>Setup &amp;Tags...</value>
<value>&amp;Tag Manager...</value>
</data>
<data name="frmGameTags_btnRemove" xml:space="preserve">
<value>&lt;</value>
@@ -1081,11 +1078,8 @@
<data name="frmSettings_chkStartWindows" xml:space="preserve">
<value>Start with Windows</value>
</data>
<data name="frmSettings_chkSupressBackup" xml:space="preserve">
<value>Backup only when session time exceeds</value>
</data>
<data name="frmSettings_chkSync" xml:space="preserve">
<value>Enable syncing</value>
<data name="frmSettings_chkSuppressBackup" xml:space="preserve">
<value>Ignore sessions shorter than</value>
</data>
<data name="frmSettings_chkTimeTracking" xml:space="preserve">
<value>Enable time tracking</value>
@@ -1097,10 +1091,10 @@
<value>Settings</value>
</data>
<data name="frmSettings_grpStartup" xml:space="preserve">
<value>Startup</value>
<value>Startup Options</value>
</data>
<data name="frmSettings_grpFolderOptions" xml:space="preserve">
<value>Folders</value>
<value>Files and Folders</value>
</data>
<data name="frmSettings_lblBackupFolder" xml:space="preserve">
<value>Backup Folder:</value>
@@ -1135,9 +1129,6 @@
<data name="frmStartUpWizard_chkCreateFolder" xml:space="preserve">
<value>Create a sub-folder for each game</value>
</data>
<data name="frmStartUpWizard_chkSync" xml:space="preserve">
<value>Import any existing GBM data in the backup folder</value>
</data>
<data name="frmStartUpWizard_ConfirmOfficialImport" xml:space="preserve">
<value>Would you like to choose games to import from the official list?[BR][BR]This requires an active internet connection.</value>
</data>
@@ -1166,7 +1157,7 @@
<value>Welcome to GBM</value>
</data>
<data name="frmStartUpWizard_lblStep2Instructions" xml:space="preserve">
<value>GBM will store all your backup files along with a manifest database (gbm.s3db) in this location. </value>
<value>GBM will store all your backup files along with a manifest database (gbm.s3db) in this location. Any existing GBM data in this folder will be automatically imported.</value>
</data>
<data name="frmStartUpWizard_lblStep2Intro" xml:space="preserve">
<value>Choose where GBM saves your backup files:</value>
@@ -1220,7 +1211,7 @@
<value>You must enter a valid tag name.</value>
</data>
<data name="frmTags_FormName" xml:space="preserve">
<value>Tags</value>
<value>Tag Manager</value>
</data>
<data name="frmTags_grpTag" xml:space="preserve">
<value>Configuration</value>
@@ -1610,7 +1601,7 @@
<value>A backup cannot be run on the selected game(s) with their current configuration.</value>
</data>
<data name="frmSettings_btnOptionalFields" xml:space="preserve">
<value>Choose &amp;Optional Fields...</value>
<value>Choose &amp;Optional Sync Fields...</value>
</data>
<data name="frmSyncFields_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
@@ -1649,7 +1640,7 @@
<value>Autosave log when max length is exceeded</value>
</data>
<data name="frmSettings_grpGameData" xml:space="preserve">
<value>Game Data</value>
<value>Game Data Options</value>
</data>
<data name="frmSettings_lstSettings_7z" xml:space="preserve">
<value>7-Zip</value>
@@ -1777,9 +1768,6 @@
<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>
@@ -1945,4 +1933,259 @@
<data name="frmSettings_chkSessionTracking" xml:space="preserve">
<value>Enable session tracking</value>
</data>
<data name="frmSettings_WarningAdminStart" xml:space="preserve">
<value>Please note that GBM will not "Start with Windows" as Administrator.[BR][BR]See the Online Manual in the Help menu for details.</value>
</data>
<data name="frmSessions_ColumnHours" xml:space="preserve">
<value>Hours</value>
</data>
<data name="frmSessions_lblTotalHours" xml:space="preserve">
<value>Total Hours: [PARAM]</value>
</data>
<data name="frmSessions_ChooseExportLocation" xml:space="preserve">
<value>Choose a location for the export file</value>
</data>
<data name="frmSessions_CSV" xml:space="preserve">
<value>CSV</value>
</data>
<data name="frmSessions_DefaultExportFileName" xml:space="preserve">
<value>Game Session Export</value>
</data>
<data name="frmSessions_XML" xml:space="preserve">
<value>XML</value>
</data>
<data name="mgrSessions_ErrorExportFailure" xml:space="preserve">
<value>An error occured exporting the session data.[BR][BR][PARAM]</value>
</data>
<data name="mgrSessions_ExportSuccess" xml:space="preserve">
<value>The data has been exported successfully.</value>
</data>
<data name="frmSessionExport_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="frmSessionExport_btnExport" xml:space="preserve">
<value>&amp;Export</value>
</data>
<data name="frmSessionExport_chkCSVHeaders" xml:space="preserve">
<value>Export Column Headers (CSV)</value>
</data>
<data name="frmSessionExport_FormName" xml:space="preserve">
<value>Session Export Options</value>
</data>
<data name="frmSessionExport_grpDateType" xml:space="preserve">
<value>Date Type</value>
</data>
<data name="frmSessionExport_grpExportType" xml:space="preserve">
<value>Export Type</value>
</data>
<data name="frmSessionExport_grpOptions" xml:space="preserve">
<value>Other Options</value>
</data>
<data name="frmSessionExport_optCSV" xml:space="preserve">
<value>CSV</value>
</data>
<data name="frmSessionExport_optCurrentLocale" xml:space="preserve">
<value>Current Locale</value>
</data>
<data name="frmSessionExport_optUnix" xml:space="preserve">
<value>Unix Timestamp</value>
</data>
<data name="frmSessionExport_optXML" xml:space="preserve">
<value>XML</value>
</data>
<data name="frmSessions_btnExport" xml:space="preserve">
<value>&amp;Export Grid</value>
</data>
<data name="frmFilter_FieldIsRegEx" xml:space="preserve">
<value>Regular Expression</value>
</data>
<data name="frmGameManager_chkRegEx" xml:space="preserve">
<value>Regular Expression</value>
</data>
<data name="frmGameManager_lblComments" xml:space="preserve">
<value>Comments:</value>
</data>
<data name="AppURL_RegExr" xml:space="preserve">
<value>http://regexr.com/?expression=[PARAM]&amp;text=test</value>
</data>
<data name="frmGameManager_ErrorRegExFailure" xml:space="preserve">
<value>The process is not a a valid regular expression.[BR][BR]Would you like help validating and testing your regular expression? [BR][BR]This will open your web browser and requires the internet.</value>
</data>
<data name="frmGameManager_btnGameID" xml:space="preserve">
<value>&amp;Game ID...</value>
</data>
<data name="frmGameManager_GameIDEditInfo" xml:space="preserve">
<value>The unique Game ID is generated by GBM. Changing this value is not recommended.</value>
</data>
<data name="frmGameManager_GameIDEditTitle" xml:space="preserve">
<value>Edit Game ID</value>
</data>
<data name="frmFilter_FieldGameID" xml:space="preserve">
<value>Game ID</value>
</data>
<data name="mgrMonitorList_ConfirmInitialOfficialGameIDSync" xml:space="preserve">
<value>GBM now uses a unique identifier for each game. For the import feature to recognize game configurations from a prior version, they need to use the same identifiers.[BR][BR]Do you want to sync your game identifiers with the official list?[BR][BR]This feature is available anytime from the "Tools" menu. If you use GBM on multiple PCs, please see "Tools" section of the online manual before using this feature.</value>
</data>
<data name="mgrMonitorList_ErrorGameIDVerFailure" xml:space="preserve">
<value>This file cannot be used to sync game indentifiers. It was created with an older version of GBM.</value>
</data>
<data name="mgrMonitorList_ImportVersionWarning" xml:space="preserve">
<value>This export file was created with a version of GBM prior to 1.1.0 and does not contain unique game identifiers.[BR][BR]Do you still want to import configurations from this file? (Not Recommended)</value>
</data>
<data name="mgrMonitorList_ConfirmFileGameIDSync" xml:space="preserve">
<value>Do you want to sync your game identifiers with this export file?[BR][BR]You should only do this if you're managing your own game configurations. If you use GBM on multiple PCs, please see "Tools" section of the online manual before using this feature.</value>
</data>
<data name="frmMain_gMonToolsSyncGameID" xml:space="preserve">
<value>S&amp;ync Game IDs</value>
</data>
<data name="frmMain_gMonToolsSyncGameIDFile" xml:space="preserve">
<value>&amp;File...</value>
</data>
<data name="frmMain_gMonToolsSyncGameIDOfficial" xml:space="preserve">
<value>&amp;Official List...</value>
</data>
<data name="mgrMonitorList_ConfirmOfficialGameIDSync" xml:space="preserve">
<value>Do you want to sync your game identifiers with the official game list?[BR][BR]This allows the import feature to recognize game configurations from a prior version. If you use GBM on multiple PCs, please see "Tools" section of the online manual before using this feature.</value>
</data>
<data name="frmSettings_btnResetMessages" xml:space="preserve">
<value>&amp;Reset Warnings</value>
</data>
<data name="frmSettings_ConfirmMessageReset" xml:space="preserve">
<value>Do you want to reset all hidden warnings and messages?</value>
</data>
<data name="Icon_New" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\New.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Icon_Update" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mgrMonitorList_GameIDSyncCompleted" xml:space="preserve">
<value>Sync Complete.[BR][BR][PARAM] game configurations were matched and updated.</value>
</data>
<data name="App_BackupOnLaunchFileDescription" xml:space="preserve">
<value>launch</value>
</data>
<data name="frmSettings_chkBackupOnLaunch" xml:space="preserve">
<value>Backup GBM data files on launch</value>
</data>
<data name="frmMain_ErrorEndChildProcess" xml:space="preserve">
<value>An error occured when attempting to end a process associated with [PARAM].</value>
</data>
<data name="frmMain_ErrorStartChildProcess" xml:space="preserve">
<value>An error occured when attempting to start a process associated with [PARAM].</value>
</data>
<data name="frmProcessManager_btnAdd" xml:space="preserve">
<value>+</value>
</data>
<data name="frmProcessManager_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
</data>
<data name="frmProcessManager_btnClose" xml:space="preserve">
<value>C&amp;lose</value>
</data>
<data name="frmProcessManager_btnDelete" xml:space="preserve">
<value>-</value>
</data>
<data name="frmProcessManager_btnProcessBrowse" xml:space="preserve">
<value>...</value>
</data>
<data name="frmProcessManager_btnSave" xml:space="preserve">
<value>&amp;Save</value>
</data>
<data name="frmProcessManager_ConfirmDelete" xml:space="preserve">
<value>Are you sure you want to delete [PARAM]? This cannot be undone.</value>
</data>
<data name="frmProcessManager_ErrorDupe" xml:space="preserve">
<value>A process with this name already exists.</value>
</data>
<data name="frmProcessManager_ErrorPathNotFound" xml:space="preserve">
<value>The process does not exist.</value>
</data>
<data name="frmProcessManager_ErrorValidName" xml:space="preserve">
<value>You must enter a valid name for this process.</value>
</data>
<data name="frmProcessManager_ErrorValidPath" xml:space="preserve">
<value>You must choose a valid process.</value>
</data>
<data name="frmProcessManager_FormName" xml:space="preserve">
<value>Process Manager</value>
</data>
<data name="frmProcessManager_grpProcess" xml:space="preserve">
<value>Configuration</value>
</data>
<data name="frmProcessManager_lblName" xml:space="preserve">
<value>Name:</value>
</data>
<data name="frmProcessManager_lblPath" xml:space="preserve">
<value>Path:</value>
</data>
<data name="frmMain_gMonSetupProcessManager" xml:space="preserve">
<value>&amp;Process Manager...</value>
</data>
<data name="frmProcessManager_ChooseProcess" xml:space="preserve">
<value>Choose a file that starts the process</value>
</data>
<data name="frmProcessManager_Executable" xml:space="preserve">
<value>Executable</value>
</data>
<data name="frmProcessManager_chkKillProcess" xml:space="preserve">
<value>Kill process when game is closed</value>
</data>
<data name="frmGameProcesses_btnAdd" xml:space="preserve">
<value>&gt;</value>
</data>
<data name="frmGameProcesses_btnClose" xml:space="preserve">
<value>&amp;Close</value>
</data>
<data name="frmGameProcesses_btnOpenProcesses" xml:space="preserve">
<value>&amp;Process Manager...</value>
</data>
<data name="frmGameProcesses_btnRemove" xml:space="preserve">
<value>&lt;</value>
</data>
<data name="frmGameProcesses_FormNameMulti" xml:space="preserve">
<value>Edit Processes for Multiple Games</value>
</data>
<data name="frmGameProcesses_FormNameSingle" xml:space="preserve">
<value>Edit Processes for [PARAM]</value>
</data>
<data name="frmGameProcesses_lblGameProccesses" xml:space="preserve">
<value>Current Processes</value>
</data>
<data name="frmGameProcesses_lblProcesses" xml:space="preserve">
<value>Available Processes</value>
</data>
<data name="App_GenericError" xml:space="preserve">
<value>Error: [PARAM]</value>
</data>
<data name="frmMain_ProcessKilled" xml:space="preserve">
<value>Kill signal was sent for [PARAM].</value>
</data>
<data name="frmMain_ProcessStarted" xml:space="preserve">
<value>[PARAM] has been started.</value>
</data>
<data name="frmSettings_chkUseGameID" xml:space="preserve">
<value>Use Game ID for folder and file names</value>
</data>
<data name="mgrMonitorList_ErrorSyncCancel" xml:space="preserve">
<value>The sync was aborted by the user.</value>
</data>
<data name="mgrMonitorList_WarningSyncProtection" xml:space="preserve">
<value>The database GBM is attempting to sync with appears to be empty, syncing with this database will delete all data. Do you still want to sync with this database? (Not Recommended)</value>
</data>
<data name="frmSettings_chkDisableSyncMessages" xml:space="preserve">
<value>Disable sync event messages</value>
</data>
<data name="frmSettings_grpBackupConfirmations" xml:space="preserve">
<value>Backup Confirmations</value>
</data>
<data name="frmSettings_grpGameMonitoringOptions" xml:space="preserve">
<value>Game Monitoring Options</value>
</data>
<data name="frmSettings_grpLogOptions" xml:space="preserve">
<value>Log Options</value>
</data>
<data name="frmSettings_lstSettings_Startup" xml:space="preserve">
<value>Startup</value>
</data>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.
Binary file not shown.
+8 -19
View File
@@ -1,31 +1,20 @@
Game Backup Monitor v1.0.5 Readme
Game Backup Monitor v1.1.2 Readme
http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
December 8, 2017
June 7th, 2018
New in 1.0.5
New in 1.1.2
All Platforms:
- You can now add Comments to a game configuration.
- You can now exclude tags and use negative filters on the Game Manager.
- Fixed a bug causing backup size calculations to be incorrect when including sub-folders in a configuration.
- Fixed a bug causing GBM to calculate the backup size of an incorrect location when using a relative path configuration. This could cause very long delays when a backup was running.
- XML export files now contain the date, version and amount of configurations. The Import window will now display the date of the XML file in the title bar if applicable.
- Fixed a bug causing games not to be detected if more than one copy of the process was running.
- GBM can now save statistical data from each detected gaming session:
- This feature records the start and end time of each detected gaming session. In future versions more data may be available.
- You can view session data using the new "Session Viewer" available in the Tools menu.
- This feature is disabled by default. It can be enabled on the Setting screen.
- Session data is stored locally, it is currently not synced with the backup folder.
- Modified "Quick Filter" behavior on the Game Manager
- The game list now becomes disabled when typing in the Quick Filter and enabled only when the filter has finished running.
- When using the Quick Filter, the currently selected game will be automatically deselected.
- These changes prevent the Game Manager from entering an unstable state after using the Quick Filter.
Windows Only:
- Only one instance of GBM can now be running.
Linux Only:
- Added makefile for easy Linux installation. Thanks basxto!
- Updated SQLite to v3.23.1
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.
+10
View File
@@ -0,0 +1,10 @@
Package: gbm
Architecture: all
Maintainer: Sebastian Riedel <git@basxto.de>
Priority: optional
Version: 1.0.8
Homepage: https://mikemaximus.github.io/gbm-web/
Bugs: https://github.com/MikeMaximus/gbm/issues
Depends: mono-vbnc, libsqlite3-0, p7zip-full
Recommends: libnotify-bin
Description: Automatically backup your saved games!
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
set -e
XDG_DESKTOP_MENU="`which xdg-desktop-menu 2> /dev/null`"
XDG_ICON_RESOURCE="`which xdg-icon-resource 2> /dev/null`"
if [ -x "$XDG_DESKTOP_MENU" ]; then
xdg-desktop-menu forceupdate --mode system;
fi
if [ -x "$XDG_ICON_RESOURCE" ]; then
xdg-icon-resource forceupdate --mode system;
fi
+1 -2
View File
@@ -6,9 +6,8 @@ Name=Game Backup Monitor
Comment=Monitors games and backs up their savegames
Comment[de]=Beobachtet Spiele und sichert ihre Spielstände
Path=/usr/local/bin
TryExec=mono
Exec=mono gbm
Exec=gbm
Terminal=false
Icon=gbm
Executable
+22
View File
@@ -0,0 +1,22 @@
#!/bin/sh -e
#check for all dependencies
for prog in mono readlink df 7za;do
[ -n "`whereis -b ${prog} | cut -sd' ' -f2`" ] || (echo "Please install ${prog}" && exit 1);
done
for lib in libsqlite3;do
[ -n "`ldconfig -p | grep ${lib}`" ] || (echo "Please install ${lib}" && exit 1);
done
dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
echo "Located in ${dir}";
gbmpath='./';
#locate GBM.exe
if [ "${dir}" = '/usr/bin' ] && [ -s '/usr/share/gbm/GBM.exe' ]; then
gbmpath='/usr/share/gbm/';
elif [ "${dir}" = '/usr/local/bin' ] && [ -s '/usr/local/share/gbm/GBM.exe' ]; then
gbmpath='/usr/local/share/gbm/';
elif [ ! -s './GBM.exe' ]; then
echo 'GBM.exe not found';
exit 2;
fi
mono --desktop ${gbmpath}'GBM.exe' "$@";
exit $?;
+29 -16
View File
@@ -1,31 +1,44 @@
ICONSIZES := 16 24 32 48 64 72 96 128 256
IMGMAGICK := $(shell command -v convert 2> /dev/null)
XDGUTILS := $(shell command -v xdg-desktop-menu 2> /dev/null)
DESTDIR :=
PREFIX := usr/local
define \n
endef
install: GBM.exe $(foreach size,$(ICONSIZES),gbm_$(size)x$(size).png)
ifndef XDGUTILS
$(error "xdg-desktop-menu is not available, please install xdg-utils")
endif
#rename it in a way, it can easily started from terminal
install GBM.exe /usr/local/bin/gbm;
install -d $(DESTDIR)/$(PREFIX)/bin;
install gbm.sh $(DESTDIR)/$(PREFIX)/bin/gbm;
install -d $(DESTDIR)/$(PREFIX)/share/gbm/;
install GBM.exe $(DESTDIR)/$(PREFIX)/share/gbm/;
#install icon in different sizes
$(foreach size,$(ICONSIZES),xdg-icon-resource install --mode system --novendor --noupdate --size $(size) gbm_$(size)x$(size).png gbm;$(\n))
xdg-icon-resource forceupdate --mode system;
$(foreach size,$(ICONSIZES),install -d $(DESTDIR)/$(PREFIX)/share/icons/hicolor/$(size)x$(size)/apps/;$(\n))
$(foreach size,$(ICONSIZES),install -m644 gbm_$(size)x$(size).png $(DESTDIR)/$(PREFIX)/share/icons/hicolor/$(size)x$(size)/apps/gbm.png;$(\n))
#install .desktop file, which is used for running gbm from desktop and menus
xdg-desktop-menu install --mode system --novendor gbm.desktop;
uninstall: /usr/local/bin/gbm
ifndef XDGUTILS
$(error "xdg-desktop-menu is not available, please install xdg-utils")
install -d $(DESTDIR)/$(PREFIX)/share/applications/
install -m644 gbm.desktop $(DESTDIR)/$(PREFIX)/share/applications/gbm.desktop
ifeq ($(DESTDIR),)
-xdg-icon-resource forceupdate --mode system;
-xdg-desktop-menu forceupdate --mode system;
endif
rm /usr/local/bin/gbm;
$(foreach size,$(ICONSIZES),xdg-icon-resource uninstall --mode system --novendor --noupdate --size $(size) gbm;$(\n))
xdg-icon-resource forceupdate --mode system;
xdg-desktop-menu uninstall --mode system --novendor gbm.desktop;
uninstall: $(DESTDIR)/$(PREFIX)/bin/gbm
-rm $(DESTDIR)/$(PREFIX)/bin/gbm;
-rm -r $(DESTDIR)/$(PREFIX)/share/gbm/;
$(foreach size,$(ICONSIZES),-rm $(DESTDIR)/$(PREFIX)/share/icons/hicolor/$(size)x$(size)/apps/gbm.png;$(\n))
-rm $(DESTDIR)/$(PREFIX)/share/applications/gbm.desktop
ifeq ($(DESTDIR),)
-xdg-icon-resource forceupdate --mode system;
-xdg-desktop-menu forceupdate --mode system;
endif
#must be root
deb: DESTDIR := deb-package/gbm
deb: PREFIX := usr
deb: install
cd deb-package;dpkg-deb --build gbm
gbm_%.png: gbm.ico
ifndef IMGMAGICK