183 Commits

Author SHA1 Message Date
MikeMaximus
fe6e0d9d37 Updated readme.txt for v116 2018-11-17 12:54:28 -06:00
MikeMaximus
783bf89241 Fix #171 2018-11-16 09:52:48 -06:00
MikeMaximus
21cce19c92 Added field to Add Game Wizard for #160 2018-11-15 20:19:39 -06:00
Michael J. Seiferling
c93af8821f Added memory debug, removed GC call for #170 2018-11-13 10:13:07 -06:00
Michael J. Seiferling
7dc61e76ab Store compiled regular expressions for #170 2018-11-12 11:59:07 -06:00
Michael J. Seiferling
54b624a1cb Do not force GC on Windows for #170 2018-11-09 12:17:13 -06:00
MikeMaximus
1b0f26cea1 Changes for #170 2018-11-08 11:45:22 -06:00
MikeMaximus
2e7189f047 Merge pull request #169 from MikeMaximus/v116
V116
2018-10-30 09:50:43 -06:00
Michael J. Seiferling
5a6b7fe2c5 Fix #168 2018-10-24 09:14:37 -06:00
Michael J. Seiferling
f204f6ccc6 Some fixes for backup size calculations 2018-10-17 10:32:52 -06:00
Michael J. Seiferling
9fdc35c43d Fix #166, also includes a minor form load bug fix 2018-10-15 11:11:16 -06:00
MikeMaximus
9dc409415f Changes for #160 - Pass 1 2018-10-14 11:06:14 -06:00
MikeMaximus
4e1dc101e5 Stop detection after Wine prefix detection/path conversion failures 2018-10-12 10:27:18 -06:00
MikeMaximus
87f8840b72 Handle default wine prefix for path conversions 2018-10-12 10:18:17 -06:00
MikeMaximus
c7565f5487 Fixed folder size calculations when using sub-folders and wildcards 2018-10-12 09:35:50 -06:00
MikeMaximus
ffe34d29e7 Fix #162 2018-10-12 09:18:15 -06:00
MikeMaximus
4b201fb60e Merge pull request #165 from basxto/v116
The codes changes look fine.  I'll merge and give it some testing.
2018-10-11 14:36:43 -06:00
Sebastian Riedel
02a4a72409 Fix #164, allow paths in include list 2018-10-11 20:57:41 +02:00
MikeMaximus
376c1ad418 Added PROGRAMDATA to reserved list for #163 2018-10-11 08:44:41 -06:00
MikeMaximus
b7ebc41ba9 Added %PROGRAMDATA% support for #163 2018-10-10 23:34:05 -06:00
MikeMaximus
d8aa35491d Updated readme.txt for v115 release 2018-10-10 13:21:37 -06:00
MikeMaximus
b7d62f38af Fixed broken process debugging 2018-10-09 20:43:28 -06:00
MikeMaximus
58e4c3f3f2 Merge branch 'master' of https://github.com/MikeMaximus/gbm 2018-10-04 23:47:05 -06:00
MikeMaximus
9d439e3d12 Fixed include/exclude builder not resolving paths 2018-10-04 23:46:10 -06:00
Michael J. Seiferling
9a046bcb4c Changed label for new path setting 2018-10-04 10:33:49 -06:00
Michael J. Seiferling
a556fa5da1 Improved import backup file functionality for #150 2018-10-04 09:51:57 -06:00
MikeMaximus
42726ac0ab Merge pull request #157 from MikeMaximus/v115_linux_changes
Merge v115 changes into master
2018-10-01 10:19:50 -06:00
Michael J. Seiferling
58ac76eba0 Fixed broken filtering on import 2018-10-01 09:02:48 -06:00
Michael J. Seiferling
f9b325ae67 Import tag mods for #148 2018-09-30 14:58:53 -06:00
Michael J. Seiferling
8d82b2efd3 Updated import version warning 2018-09-30 13:37:58 -06:00
MikeMaximus
cb49434a46 Allow importing official Windows configurations in Linux for #148 2018-09-28 10:34:48 -06:00
MikeMaximus
f659edff64 Updated readme.txt with current changes 2018-09-22 11:15:32 -06:00
Michael J. Seiferling
e325678e76 Handle LocalLow save locations for #148 2018-09-14 14:41:54 -06:00
Michael J. Seiferling
854d2ed537 Changed wine save path detection for #148 2018-09-14 12:43:57 -06:00
Michael J. Seiferling
c7e3e62ce1 Fix Windows save path detection for #148 2018-09-14 12:33:14 -06:00
Michael J. Seiferling
898e72f163 Restricted backup import functionality for #150 2018-09-14 11:46:20 -06:00
Michael J. Seiferling
333f7ac36a Prevent use of reserved variable names for custom variables for #148 and #152 2018-09-14 09:50:24 -06:00
Michael J. Seiferling
ace287f42a Fixed restore path display issue with multiple backups for #152 2018-09-14 09:01:56 -06:00
MikeMaximus
0f800565fe Added one-time warning for #150 2018-09-09 11:34:25 -06:00
MikeMaximus
7a4caab5a5 FIxed broken custom variable feature 2018-09-09 11:04:02 -06:00
MikeMaximus
c1b81585a0 Fixed Include button shortcut key 2018-09-09 09:11:58 -06:00
MikeMaximus
0fcbfbe430 Minor form design fixes 2018-09-08 23:52:06 -06:00
MikeMaximus
26d33206df Changes for issue #150 - Pass 1 2018-09-08 23:35:11 -06:00
MikeMaximus
dcbfad7513 Add path display support to "Restore Path" field for #152 2018-09-08 13:44:58 -06:00
MikeMaximus
8ab209c1a9 Added path display tooltip and options for #152 2018-09-08 13:20:02 -06:00
MikeMaximus
b674e4e82b Display variable path on Game Manager for #152 2018-09-08 11:30:55 -06:00
MikeMaximus
9fc53e74b1 Use linux variables in db upgrade for issue #152 2018-09-08 09:35:46 -06:00
MikeMaximus
fd6ddd4b85 Updated path replacing for #152 2018-09-08 08:16:34 -06:00
MikeMaximus
8800c4ebf4 Merge pull request #155 from basxto/v115_linux_changes
Export with Linux variables
2018-09-07 23:37:56 -06:00
Sebastian Riedel
9b89af931f Keep Windows variables untouched on Linux 2018-09-08 06:31:46 +02:00
Sebastian Riedel
874dfd4c86 Replace ~ only outside of variables 2018-09-08 06:11:50 +02:00
Sebastian Riedel
cc8d16f4a9 Export with Linux variables for #152 2018-09-08 05:11:13 +02:00
MikeMaximus
748a921d1c Changes for issue #152 - Pass 1 2018-09-06 12:35:14 -06:00
MikeMaximus
d74a6d50b1 Detection rewrite for issue #153 - Pass 3 2018-09-04 09:16:49 -06:00
MikeMaximus
7ca4178631 Detection rewrite for issue #153 - Pass 2 2018-09-03 15:57:01 -06:00
MikeMaximus
63da6eba19 Detection rewrite for issue #153 - Pass 1 2018-09-03 12:36:25 -06:00
MikeMaximus
3e141cebb5 Changes for issue #153 2018-09-01 14:40:05 -06:00
Michael J. Seiferling
52c9fe506f More detection fixes for issue #149 2018-08-31 08:54:54 -06:00
Michael J. Seiferling
b04c1bc18b Added new strings for issue #148 and #149 2018-08-30 10:53:29 -06:00
Michael J. Seiferling
647193f933 Changes for issues #148 and#149 2018-08-30 10:26:27 -06:00
Michael J. Seiferling
e6277f1ae4 Typo and comment fixes for issue #147 2018-08-25 19:58:09 -06:00
Michael J. Seiferling
ccd6d1fd39 Changes for issue #147 2018-08-25 19:40:17 -06:00
Michael J. Seiferling
0ed067e36f Updated readme for v1.1.4 2018-08-23 13:27:53 -06:00
Michael J. Seiferling
bca2fe2239 Removed ico compression for issue #146 2018-08-23 12:42:28 -06:00
Michael J. Seiferling
fa5d03ef52 Fixed sort logic for issue #145 2018-08-23 10:26:50 -06:00
Michael J. Seiferling
998a680999 Removed icon file extraction 2018-08-22 11:18:58 -06:00
Michael J. Seiferling
f5972da9eb Prevent file locking of custom icons 2018-08-22 10:26:19 -06:00
MikeMaximus
794b0f9908 Stop useless manifest conflict checks 2018-08-01 10:02:46 -06:00
Michael J. Seiferling
daa5f928bf Fixes and changes for issue #142 2018-07-30 08:44:39 -06:00
Michael J. Seiferling
72e3ccb661 Fixed precision of total hours on session viewer 2018-07-29 16:00:57 -06:00
Michael J. Seiferling
9e7a4b5efc Tweaks to icon extraction and error handling 2018-07-29 09:06:33 -06:00
Michael J. Seiferling
692deaaef9 Changes for issue #142 2018-07-25 09:21:50 -06:00
Michael J. Seiferling
a3572abb3d Add special folder verification for issue #144 2018-07-24 13:53:52 -06:00
MikeMaximus
2680f857a9 Update README.md 2018-07-08 09:43:18 -06:00
Michael J. Seiferling
1e2f4de816 Fixed another issue with renaming backups 2018-07-05 11:04:44 -06:00
MikeMaximus
b9b959f96c Fixed renaming backup files and sub-folders 2018-07-02 10:05:58 -06:00
MikeMaximus
2ae705be18 Fixed removing sub-folders when game name includes unsafe characters 2018-07-02 09:23:39 -06:00
MikeMaximus
ccade84b65 Removed sync warning when manually deleting all game configurations 2018-07-02 09:08:56 -06:00
MikeMaximus
017c5def56 Fixed removing empty sub-folders 2018-07-02 08:39:16 -06:00
MikeMaximus
1f9dc18c49 Updated readme.txt 2018-07-01 08:53:15 -06:00
MikeMaximus
bc1630a122 Changes for issue #141 2018-07-01 08:39:27 -06:00
MikeMaximus
478721dbd1 Fixed updated import flag for issue #140 2018-06-26 09:48:57 -06:00
MikeMaximus
8ad4810011 Updated readme.txt 2018-06-26 09:32:25 -06:00
MikeMaximus
93bc974cc3 Changes for issues #138 and #140 2018-06-26 09:24:22 -06:00
MikeMaximus
c9463c3a36 Fixes for issue #138 and #139 2018-06-25 18:56:48 -06:00
MikeMaximus
8b2c5f376b Updated readme.txt 2018-06-25 14:31:21 -06:00
MikeMaximus
9e329476a2 Allow restoring selected backups for issue #138 2018-06-25 13:47:28 -06:00
MikeMaximus
626fca3e1e Allow infinite backups for issue #138 2018-06-25 13:15:20 -06:00
MikeMaximus
039f91cd6f Fixed an optional sync field issue 2018-06-25 13:02:21 -06:00
MikeMaximus
f98a98af99 Added backup file verify for issue #138 2018-06-25 12:48:42 -06:00
MikeMaximus
d9bd7f38f5 Merge pull request #136 from basxto/master
Check in linux start script whether gbm is running
2018-06-21 22:28:14 -06:00
Sebastian Riedel
4e2ab9a0fb Check in linux start script whether gbm is running
Fix #112 for linux
2018-06-22 04:45:15 +02:00
MikeMaximus
218ce3f367 Changes for issue #135 2018-06-21 11:08:10 -06:00
MikeMaximus
b3cfab7ee6 Merge pull request #134 from basxto/master
Fix info for raw edit, colon is the delimiter
2018-06-20 15:04:03 -06:00
Sebastian Riedel
39440e1f98 Fix info for raw edit, colon is the delimiter 2018-06-20 01:21:24 +02:00
MikeMaximus
9b9d3f9125 Changes for issue #131 2018-06-15 16:02:31 -06:00
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
67 changed files with 6131 additions and 1455 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 -3
View File
@@ -186,6 +186,4 @@ FakesAssemblies/
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
/.vs/slnx.sqlite
/.vs/VSWorkspaceState.json
/.vs/Game Backup Monitor/v15
/.vs
+50
View File
@@ -1,16 +1,30 @@
Public Class Game
Private sGameID As String
Private sGameName As String
Private sProcessName As String
Private sParameter As String
Private sPath As String
Private bAbsolutePath As Boolean
Private bFolderSave As Boolean
Private bAppendTimeStamp As Boolean
Private iBackupLimit As Integer
Private sFileType As String
Private sExcludeList As String
Private bMonitorOnly As Boolean
Private sComments As String
Private bIsRegEx As Boolean
Private bRecurseSubFolders 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
@@ -65,6 +79,24 @@
End Get
End Property
Property AppendTimeStamp As Boolean
Set(value As Boolean)
bAppendTimeStamp = value
End Set
Get
Return bAppendTimeStamp
End Get
End Property
Property BackupLimit As Integer
Set(value As Integer)
iBackupLimit = value
End Set
Get
Return iBackupLimit
End Get
End Property
Property FileType As String
Set(value As String)
sFileType = value
@@ -101,6 +133,24 @@
End Get
End Property
Property IsRegEx As Boolean
Set(value As Boolean)
bIsRegEx = value
End Set
Get
Return bIsRegEx
End Get
End Property
Property RecurseSubFolders As Boolean
Set(value As Boolean)
bRecurseSubFolders = value
End Set
Get
Return bRecurseSubFolders
End Get
End Property
Property Tags As List(Of Tag)
Get
Return oTags
+17 -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
@@ -37,6 +47,12 @@
End Get
End Property
ReadOnly Property FileSafeName As String
Get
Return mgrPath.ValidateFileNameForOS(sName)
End Get
End Property
Property FileName As String
Get
If mgrCommon.IsUnix Then
+100 -53
View File
@@ -1,4 +1,6 @@
<Serializable()>
Imports System.Text.RegularExpressions
<Serializable()>
Public Class clsGame
Private sGameID As String = Guid.NewGuid.ToString
Private sGameName As String = String.Empty
@@ -9,7 +11,7 @@ Public Class clsGame
Private bFolderSave As Boolean = False
Private sFileType As String = String.Empty
Private bAppendTimeStamp As Boolean = False
Private iBackupLimit As Integer = 2
Private iBackupLimit As Integer = 0
Private bCleanFolder As Boolean = False
Private sExcludeList As String = String.Empty
Private sProcessPath As String = String.Empty
@@ -20,9 +22,11 @@ Public Class clsGame
Private bEnabled As Boolean = True
Private bMonitorOnly As Boolean = False
Private sComments As String = String.Empty
Private bDuplicate As Boolean = False
Private bTempGame As Boolean = False
Private bIsRegEx As Boolean = False
Private bRecurseSubFolders As Boolean = True
Private oImportTags As New List(Of Tag)
Private bImportUpdate As Boolean = False
Private oCompiledRegEx As Regex
<Flags()> Public Enum eOptionalSyncFields
None = 0
@@ -30,25 +34,21 @@ Public Class clsGame
Company = 2
Version = 4
Icon = 16
TimeStamp = 32
Unused = 32 'Do not remove to maintain compatability, re-use for a future field.
MonitorGame = 64
End Enum
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
End Get
End Property
ReadOnly Property CompoundKey As String
Get
Return ProcessName & ":" & Name
End Get
End Property
ReadOnly Property CroppedName As String
Get
If Name.Length > 40 Then
@@ -59,6 +59,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,36 +236,33 @@ Public Class clsGame
End Set
End Property
Property Duplicate As Boolean
Property IsRegEx As Boolean
Get
Return bDuplicate
Return bIsRegEx
End Get
Set(value As Boolean)
bDuplicate = value
bIsRegEx = value
End Set
End Property
ReadOnly Property TruePath As String
Property RecurseSubFolders As Boolean
Get
Return bRecurseSubFolders
End Get
Set(value As Boolean)
bRecurseSubFolders = value
End Set
End Property
Property TruePath As String
Set(value As String)
sPath = value
End Set
Get
Return sPath
End Get
End Property
ReadOnly Property TrueProcess As String
Get
Return HandleProcessDuplicates()
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 +272,24 @@ 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
Property CompiledRegEx As Regex
Get
Return oCompiledRegEx
End Get
Set(value As Regex)
oCompiledRegEx = value
End Set
End Property
ReadOnly Property IncludeArray As String()
Get
If FileType = String.Empty Then
@@ -322,10 +343,13 @@ Public Class clsGame
If FolderSave <> oGame.FolderSave Then
Return False
End If
If CleanFolder <> oGame.CleanFolder Then
If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False
End If
If AppendTimeStamp <> oGame.AppendTimeStamp Then
If BackupLimit <> oGame.BackupLimit Then
Return False
End If
If CleanFolder <> oGame.CleanFolder Then
Return False
End If
If Hours <> oGame.Hours Then
@@ -337,6 +361,12 @@ Public Class clsGame
If Comments <> oGame.Comments Then
Return False
End If
If IsRegEx <> oGame.IsRegEx Then
Return False
End If
If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False
End If
'Optional Sync Fields
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
@@ -359,14 +389,6 @@ Public Class clsGame
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.TimeStamp) = eOptionalSyncFields.TimeStamp Then
If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False
End If
If BackupLimit <> oGame.BackupLimit Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.Version) = eOptionalSyncFields.Version Then
If Version <> oGame.Version Then
Return False
@@ -381,12 +403,49 @@ 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 AppendTimeStamp <> oGame.AppendTimeStamp 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
If RecurseSubFolders <> oGame.RecurseSubFolders Then
Return False
End If
Return True
End If
End Function
@@ -407,18 +466,6 @@ Public Class clsGame
Return DirectCast(Me.MemberwiseClone(), clsGame)
End Function
Private Function HandleProcessDuplicates() As String
Dim sProcessName As String
'Handle Duplicates
sProcessName = Me.ProcessName
If Me.Duplicate Then
sProcessName = Me.ProcessName.Split(":")(0)
End If
Return sProcessName
End Function
Public Shared Function SetSyncField(ByVal eSyncFields As eOptionalSyncFields, ByVal eSyncField As eOptionalSyncFields) As eOptionalSyncFields
Return eSyncFields Or eSyncField
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
+1 -1
View File
@@ -24,7 +24,7 @@
ReadOnly Property FormattedName As String
Get
Return "*" & sVariableName & "*"
Return "%" & sVariableName & "%"
End Get
End Property
+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
+16 -3
View File
@@ -68,6 +68,7 @@ Partial Class frmAddWizard
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnNext = New System.Windows.Forms.Button()
Me.btnBack = New System.Windows.Forms.Button()
Me.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.tabWizard.SuspendLayout()
Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout()
@@ -124,9 +125,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
'
@@ -311,6 +311,7 @@ Partial Class frmAddWizard
'tbPage3a
'
Me.tbPage3a.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3a.Controls.Add(Me.chkRecurseSubFolders)
Me.tbPage3a.Controls.Add(Me.lblIncludePathTitle)
Me.tbPage3a.Controls.Add(Me.lblIncludePath)
Me.tbPage3a.Controls.Add(Me.lblFileTypes)
@@ -541,6 +542,17 @@ Partial Class frmAddWizard
Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True
'
'chkRecurseSubFolders
'
Me.chkRecurseSubFolders.AutoSize = True
Me.chkRecurseSubFolders.Location = New System.Drawing.Point(218, 40)
Me.chkRecurseSubFolders.Name = "chkRecurseSubFolders"
Me.chkRecurseSubFolders.Size = New System.Drawing.Size(15, 14)
Me.chkRecurseSubFolders.TabIndex = 0
Me.chkRecurseSubFolders.TabStop = False
Me.chkRecurseSubFolders.UseVisualStyleBackColor = True
Me.chkRecurseSubFolders.Visible = False
'
'frmAddWizard
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -619,4 +631,5 @@ Partial Class frmAddWizard
Friend WithEvents lblExcludePathTitle As Label
Friend WithEvents lblLimit As Label
Friend WithEvents nudLimit As NumericUpDown
Friend WithEvents chkRecurseSubFolders As CheckBox
End Class
+18 -25
View File
@@ -66,6 +66,7 @@ Public Class frmAddWizard
chkFolderSave.Checked = True
chkTimeStamp.Checked = False
chkRecurseSubFolders.Checked = True
StepHandler()
End Sub
@@ -112,6 +113,7 @@ Public Class frmAddWizard
Dim iLimit As Integer = nudLimit.Value
Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text
Dim bRecurseSubFolders As Boolean = chkRecurseSubFolders.Checked
Dim sProcess As String
Dim sItem As String()
Dim sItems As String()
@@ -160,6 +162,7 @@ Public Class frmAddWizard
oGame.BackupLimit = iLimit
oGame.ExcludeList = sExcludeList
oGame.ProcessPath = sProcessPath
oGame.RecurseSubFolders = bRecurseSubFolders
Return oGame
End Function
@@ -195,10 +198,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 +207,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 +237,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 +261,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 +271,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()
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 Sub
Private Sub ValidateBack()
@@ -426,7 +419,7 @@ Public Class frmAddWizard
End If
sNewPath = mgrCommon.OpenFileBrowser("Wizard_Process_Path", frmAddWizard_ChooseProcess, "exe",
frmAddWizard_Executable, sDefaultFolder, False, False)
frmAddWizard_Executable, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath
End Sub
@@ -462,9 +455,9 @@ Public Class frmAddWizard
frm.FormName = sFormText
frm.BuilderString = txtBox.Text
frm.RootFolder = txtSavePath.Text
frm.RecurseSubFolders = chkRecurseSubFolders.Checked
frm.ShowDialog()
chkRecurseSubFolders.Checked = frm.RecurseSubFolders
txtBox.Text = frm.BuilderString
End Sub
+96 -4
View File
@@ -6,9 +6,11 @@ Public Class frmAdvancedImport
Private oImportData As ExportData
Private hshImportData As Hashtable
Private hshFinalData As New Hashtable
Private bModWinConfigsForLinux As Boolean
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
@@ -29,6 +31,15 @@ Public Class frmAdvancedImport
End Get
End Property
Public Property ModWinConfigsForLinux As Boolean
Set(value As Boolean)
bModWinConfigsForLinux = value
End Set
Get
Return bModWinConfigsForLinux
End Get
End Property
Public ReadOnly Property FinalData As Hashtable
Get
Return hshFinalData
@@ -55,6 +66,62 @@ Public Class frmAdvancedImport
End If
End Sub
Private Sub ModTags(ByRef oTags As List(Of Tag))
Dim bExists As Boolean
Dim oTag As Tag
Dim oNewTag As Tag
Dim oRemoveTag As New Tag
Dim sTag As String
Dim sAddTags() As String = {"Wine"}
Dim sRemoveTags() As String = {"Official"}
For Each sTag In sAddTags
bExists = False
For Each oTag In oTags
If oTag.Name = sTag Then
bExists = True
Exit For
End If
Next
If Not bExists Then
oNewTag = New Tag
oNewTag.Name = sTag
oTags.Add(oNewTag)
End If
Next
For Each sTag In sRemoveTags
bExists = False
For Each oTag In oTags
If oTag.Name = sTag Then
bExists = True
oRemoveTag = oTag
Exit For
End If
Next
If bExists Then
oTags.Remove(oRemoveTag)
End If
Next
End Sub
Private Function CheckIgnoreTags(ByVal oTags As List(Of Tag)) As Boolean
Dim oTag As Tag
Dim sTag As String
Dim sIgnoreTags() As String = {"DOSBox", "ScummVM"}
For Each oTag In oTags
For Each sTag In sIgnoreTags
If oTag.Name = sTag Then
Return False
End If
Next
Next
Return True
End Function
Private Sub LoadData(Optional ByVal sFilter As String = "", Optional ByVal bAutoDetect As Boolean = False)
Dim oApp As clsGame
Dim oListViewItem As ListViewItem
@@ -74,6 +141,12 @@ Public Class frmAdvancedImport
For Each de As DictionaryEntry In ImportData
bAddItem = False
oApp = DirectCast(de.Value, clsGame)
'Run any required tag mods
If ModWinConfigsForLinux Then
ModTags(oApp.ImportTags)
End If
sTags = String.Empty
oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
For Each oTag As Tag In oApp.ImportTags
@@ -81,10 +154,10 @@ Public Class frmAdvancedImport
Next
sTags = sTags.TrimEnd(New Char() {",", " "})
oListViewItem = New ListViewItem(New String() {oApp.Name, oApp.TrueProcess, sTags})
oListViewItem.Tag = oApp.CompoundKey
oListViewItem = New ListViewItem(New String() {oApp.Name, oApp.ProcessName, sTags})
oListViewItem.Tag = oApp.ID
If FinalData.ContainsKey(oApp.CompoundKey) Then
If FinalData.ContainsKey(oApp.ID) Then
oListViewItem.Checked = True
Else
oListViewItem.Checked = False
@@ -103,14 +176,26 @@ 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
If oApp.Name.ToLower.Contains(sFilter.ToLower) Or oApp.TrueProcess.ToLower.Contains(sFilter.ToLower) Or sTags.ToLower.Contains(sFilter.ToLower) Then
If oApp.Name.ToLower.Contains(sFilter.ToLower) Or oApp.ProcessName.ToLower.Contains(sFilter.ToLower) Or sTags.ToLower.Contains(sFilter.ToLower) Then
bAddItem = True
End If
End If
'Check for hardcoded ignore tags
If bAddItem And ModWinConfigsForLinux Then
bAddItem = CheckIgnoreTags(oApp.ImportTags)
End If
If bAddItem Then
If oListViewItem.Checked Then bResetSelectAll = True
lstGames.Items.Add(oListViewItem)
@@ -156,6 +241,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
+4 -4
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
@@ -38,7 +38,7 @@ Public Class frmChooseGame
End Sub
Private Sub SaveSelection()
oGame.ProcessPath = oProcess.GameInfo.ProcessPath
oGame.ProcessPath = oProcess.ProcessPath
mgrMonitorList.DoListUpdate(oGame)
End Sub
+27
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"
@@ -191,6 +202,14 @@ Public Class frmFilter
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Include Sub Folders
oField = New clsGameFilterField
oField.FieldName = "RecurseSubFolders"
oField.FriendlyFieldName = frmFilter_FieldRecurseSubFolders
oField.Type = clsGameFilterField.eDataType.fBool
oField.Status = clsGameFilterField.eFieldStatus.ValidFilter
oValidFields.Add(oField)
'Delete Folder on Restore
oField = New clsGameFilterField
oField.FieldName = "CleanFolder"
@@ -223,6 +242,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"
+160 -74
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()
@@ -68,6 +70,7 @@ Partial Class frmGameManager
Me.lblHours = New System.Windows.Forms.Label()
Me.btnTags = New System.Windows.Forms.Button()
Me.grpStats = New System.Windows.Forms.GroupBox()
Me.btnImportBackup = New System.Windows.Forms.Button()
Me.cboRemoteBackup = New System.Windows.Forms.ComboBox()
Me.lblRestorePathData = New System.Windows.Forms.Label()
Me.lblBackupFileData = New System.Windows.Forms.Label()
@@ -94,12 +97,17 @@ Partial Class frmGameManager
Me.btnExport = New System.Windows.Forms.Button()
Me.cmsImport = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsOfficial = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsOfficialWindows = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsOfficialLinux = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsFile = New System.Windows.Forms.ToolStripMenuItem()
Me.txtQuickFilter = New System.Windows.Forms.TextBox()
Me.lblQuickFilter = New System.Windows.Forms.Label()
Me.cmsDeleteBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsDeleteOne = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
Me.btnProcesses = New System.Windows.Forms.Button()
Me.ttFullPath = New System.Windows.Forms.ToolTip(Me.components)
Me.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
@@ -115,7 +123,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 +134,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,26 +144,29 @@ 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
Me.btnBackup.TabIndex = 19
Me.btnBackup.Text = "&Backup"
Me.btnBackup.UseVisualStyleBackColor = True
'
'btnClose
'
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnClose.Location = New System.Drawing.Point(697, 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
Me.btnClose.TabIndex = 20
Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True
'
'grpConfig
'
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.chkRecurseSubFolders)
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 +192,114 @@ 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.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Location = New System.Drawing.Point(330, 155)
Me.nudLimit.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 15
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.TabIndex = 17
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.Text = "In&clude Items..."
Me.btnInclude.TabIndex = 12
Me.btnInclude.Text = "Incl&ude 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 +308,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 +327,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 +353,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 +362,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 +372,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 +437,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,16 +568,17 @@ 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
Me.btnTags.Text = "Tags..."
Me.btnTags.TabIndex = 13
Me.btnTags.Text = "&Tags..."
Me.btnTags.UseVisualStyleBackColor = True
'
'grpStats
'
Me.grpStats.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpStats.Controls.Add(Me.btnImportBackup)
Me.grpStats.Controls.Add(Me.cboRemoteBackup)
Me.grpStats.Controls.Add(Me.lblRestorePathData)
Me.grpStats.Controls.Add(Me.lblBackupFileData)
@@ -561,13 +590,22 @@ 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
Me.grpStats.TabIndex = 16
Me.grpStats.TabStop = False
Me.grpStats.Text = "Backup Information"
'
'btnImportBackup
'
Me.btnImportBackup.Location = New System.Drawing.Point(9, 125)
Me.btnImportBackup.Name = "btnImportBackup"
Me.btnImportBackup.Size = New System.Drawing.Size(114, 23)
Me.btnImportBackup.TabIndex = 8
Me.btnImportBackup.Text = "Import B&ackup Files"
Me.btnImportBackup.UseVisualStyleBackColor = True
'
'cboRemoteBackup
'
Me.cboRemoteBackup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
@@ -642,7 +680,7 @@ Partial Class frmGameManager
Me.btnDeleteBackup.Location = New System.Drawing.Point(129, 125)
Me.btnDeleteBackup.Name = "btnDeleteBackup"
Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23)
Me.btnDeleteBackup.TabIndex = 8
Me.btnDeleteBackup.TabIndex = 9
Me.btnDeleteBackup.Text = "&Delete Backup"
Me.btnDeleteBackup.UseVisualStyleBackColor = True
'
@@ -676,30 +714,30 @@ 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
Me.btnMarkAsRestored.TabIndex = 17
Me.btnMarkAsRestored.Text = "&Mark as Restored"
Me.btnMarkAsRestored.UseVisualStyleBackColor = True
'
'btnRestore
'
Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnRestore.Location = New System.Drawing.Point(535, 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
Me.btnRestore.TabIndex = 18
Me.btnRestore.Text = "&Restore"
Me.btnRestore.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(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
Me.btnSave.TabIndex = 14
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
@@ -709,23 +747,23 @@ 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
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.TabIndex = 15
Me.btnCancel.Text = "Ca&ncel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'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 +829,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 +838,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
@@ -816,10 +854,23 @@ Partial Class frmGameManager
'
'cmsOfficial
'
Me.cmsOfficial.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsOfficialWindows, Me.cmsOfficialLinux})
Me.cmsOfficial.Name = "cmsOfficial"
Me.cmsOfficial.Size = New System.Drawing.Size(117, 22)
Me.cmsOfficial.Text = "&Official List..."
'
'cmsOfficialWindows
'
Me.cmsOfficialWindows.Name = "cmsOfficialWindows"
Me.cmsOfficialWindows.Size = New System.Drawing.Size(132, 22)
Me.cmsOfficialWindows.Text = "&Windows..."
'
'cmsOfficialLinux
'
Me.cmsOfficialLinux.Name = "cmsOfficialLinux"
Me.cmsOfficialLinux.Size = New System.Drawing.Size(132, 22)
Me.cmsOfficialLinux.Text = "&Linux..."
'
'cmsFile
'
Me.cmsFile.Name = "cmsFile"
@@ -861,11 +912,38 @@ 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 = 12
Me.btnProcesses.Text = "Pro&cesses..."
Me.btnProcesses.UseVisualStyleBackColor = True
'
'ttFullPath
'
Me.ttFullPath.AutoPopDelay = 5000
Me.ttFullPath.InitialDelay = 300
Me.ttFullPath.ReshowDelay = 60
'
'chkRecurseSubFolders
'
Me.chkRecurseSubFolders.AutoSize = True
Me.chkRecurseSubFolders.Location = New System.Drawing.Point(489, 206)
Me.chkRecurseSubFolders.Name = "chkRecurseSubFolders"
Me.chkRecurseSubFolders.Size = New System.Drawing.Size(15, 14)
Me.chkRecurseSubFolders.TabIndex = 0
Me.chkRecurseSubFolders.TabStop = False
Me.chkRecurseSubFolders.UseVisualStyleBackColor = True
Me.chkRecurseSubFolders.Visible = False
'
'frmGameManager
'
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 +1065,12 @@ 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
Friend WithEvents ttFullPath As ToolTip
Friend WithEvents btnImportBackup As Button
Friend WithEvents cmsOfficialWindows As ToolStripMenuItem
Friend WithEvents cmsOfficialLinux As ToolStripMenuItem
Friend WithEvents chkRecurseSubFolders As CheckBox
End Class
+3
View File
@@ -123,4 +123,7 @@
<metadata name="cmsDeleteBackup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>127, 17</value>
</metadata>
<metadata name="ttFullPath.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>275, 17</value>
</metadata>
</root>
File diff suppressed because it is too large Load Diff
+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
+28 -14
View File
@@ -37,15 +37,16 @@ Partial Class frmIncludeExclude
Me.cmsAdd = New System.Windows.Forms.ToolStripMenuItem()
Me.btnRemove = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.grpFileOptions = New System.Windows.Forms.GroupBox()
Me.grpOptions = New System.Windows.Forms.GroupBox()
Me.optFileTypes = New System.Windows.Forms.RadioButton()
Me.optIndividualFiles = New System.Windows.Forms.RadioButton()
Me.lblItems = New System.Windows.Forms.Label()
Me.btnRawEdit = New System.Windows.Forms.Button()
Me.lblSaveFolder = New System.Windows.Forms.Label()
Me.ttWarning = New System.Windows.Forms.ToolTip(Me.components)
Me.chkRecurseSubFolders = New System.Windows.Forms.CheckBox()
Me.cmsItems.SuspendLayout()
Me.grpFileOptions.SuspendLayout()
Me.grpOptions.SuspendLayout()
Me.SuspendLayout()
'
'treFiles
@@ -157,16 +158,17 @@ Partial Class frmIncludeExclude
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'grpFileOptions
'grpOptions
'
Me.grpFileOptions.Controls.Add(Me.optFileTypes)
Me.grpFileOptions.Controls.Add(Me.optIndividualFiles)
Me.grpFileOptions.Location = New System.Drawing.Point(12, 403)
Me.grpFileOptions.Name = "grpFileOptions"
Me.grpFileOptions.Size = New System.Drawing.Size(194, 46)
Me.grpFileOptions.TabIndex = 2
Me.grpFileOptions.TabStop = False
Me.grpFileOptions.Text = "File Options"
Me.grpOptions.Controls.Add(Me.chkRecurseSubFolders)
Me.grpOptions.Controls.Add(Me.optFileTypes)
Me.grpOptions.Controls.Add(Me.optIndividualFiles)
Me.grpOptions.Location = New System.Drawing.Point(12, 403)
Me.grpOptions.Name = "grpOptions"
Me.grpOptions.Size = New System.Drawing.Size(317, 46)
Me.grpOptions.TabIndex = 2
Me.grpOptions.TabStop = False
Me.grpOptions.Text = "Options"
'
'optFileTypes
'
@@ -222,6 +224,16 @@ Partial Class frmIncludeExclude
Me.ttWarning.ReshowDelay = 50
Me.ttWarning.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Warning
'
'chkRecurseSubFolders
'
Me.chkRecurseSubFolders.AutoSize = True
Me.chkRecurseSubFolders.Location = New System.Drawing.Point(185, 20)
Me.chkRecurseSubFolders.Name = "chkRecurseSubFolders"
Me.chkRecurseSubFolders.Size = New System.Drawing.Size(120, 17)
Me.chkRecurseSubFolders.TabIndex = 2
Me.chkRecurseSubFolders.Text = "Recurse sub-folders"
Me.chkRecurseSubFolders.UseVisualStyleBackColor = True
'
'frmIncludeExclude
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -230,7 +242,7 @@ Partial Class frmIncludeExclude
Me.Controls.Add(Me.lblSaveFolder)
Me.Controls.Add(Me.btnRawEdit)
Me.Controls.Add(Me.lblItems)
Me.Controls.Add(Me.grpFileOptions)
Me.Controls.Add(Me.grpOptions)
Me.Controls.Add(Me.btnRemove)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstBuilder)
@@ -247,7 +259,8 @@ Partial Class frmIncludeExclude
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Include / Exclude Builder"
Me.cmsItems.ResumeLayout(False)
Me.grpFileOptions.ResumeLayout(False)
Me.grpOptions.ResumeLayout(False)
Me.grpOptions.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -261,7 +274,7 @@ Partial Class frmIncludeExclude
Friend WithEvents lstBuilder As System.Windows.Forms.ListView
Friend WithEvents btnRemove As System.Windows.Forms.Button
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents grpFileOptions As System.Windows.Forms.GroupBox
Friend WithEvents grpOptions As System.Windows.Forms.GroupBox
Friend WithEvents optFileTypes As System.Windows.Forms.RadioButton
Friend WithEvents optIndividualFiles As System.Windows.Forms.RadioButton
Friend WithEvents lblItems As System.Windows.Forms.Label
@@ -272,4 +285,5 @@ Partial Class frmIncludeExclude
Friend WithEvents btnRawEdit As Button
Friend WithEvents lblSaveFolder As Label
Friend WithEvents ttWarning As ToolTip
Friend WithEvents chkRecurseSubFolders As CheckBox
End Class
+1 -1
View File
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
CQAAAk1TRnQBSQFMAgEBAwEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CQAAAk1TRnQBSQFMAgEBAwEAAcABAAHAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+14 -1
View File
@@ -6,6 +6,7 @@ Public Class frmIncludeExclude
Dim sFormName As String = String.Empty
Dim sRootFolder As String = String.Empty
Dim sBuilderString As String
Dim bRecurseSubFolders As Boolean
Public Property BuilderString As String
Get
@@ -34,6 +35,15 @@ Public Class frmIncludeExclude
End Set
End Property
Public Property RecurseSubFolders As Boolean
Get
Return bRecurseSubFolders
End Get
Set(value As Boolean)
bRecurseSubFolders = value
End Set
End Property
Private Sub BuildBranch(ByVal sDirectory As String, ByVal oNode As TreeNode)
Dim sFolders As String()
Dim sFiles As String()
@@ -239,9 +249,10 @@ Public Class frmIncludeExclude
lblSaveFolder.Text = frmIncludeExclude_lblSaveFolder
btnRawEdit.Text = frmIncludeExclude_btnRawEdit
lblItems.Text = mgrCommon.FormatString(frmIncludeExclude_lblItems, FormName)
grpFileOptions.Text = mgrCommon.FormatString(frmIncludeExclude_grpFileOptions, FormName)
grpOptions.Text = mgrCommon.FormatString(frmIncludeExclude_grpOptions, FormName)
optFileTypes.Text = frmIncludeExclude_optFileTypes
optIndividualFiles.Text = frmIncludeExclude_optIndividualFiles
chkRecurseSubFolders.Text = frmIncludeExclude_chkRecurseSubFolders
btnRemove.Text = frmIncludeExclude_btnRemove
btnAdd.Text = frmIncludeExclude_btnAdd
btnBrowse.Text = frmIncludeExclude_btnBrowse
@@ -254,6 +265,7 @@ Public Class frmIncludeExclude
'Set Defaults
txtRootFolder.Text = RootFolder
optFileTypes.Checked = True
chkRecurseSubFolders.Checked = bRecurseSubFolders
If BuilderString <> String.Empty Then ParseBuilderString(BuilderString)
If txtRootFolder.Text <> String.Empty Then BuildTrunk()
End Sub
@@ -285,6 +297,7 @@ Public Class frmIncludeExclude
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
BuilderString = CreateNewBuilderString()
RecurseSubFolders = chkRecurseSubFolders.Checked
Me.Close()
End Sub
+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
+339 -120
View File
@@ -40,10 +40,12 @@ 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
Private bProcessDebugMode As Boolean = False
Private bMemoryDebugMode As Boolean = False
WithEvents oFileWatcher As New FileSystemWatcher
@@ -52,7 +54,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
@@ -227,7 +229,7 @@ Public Class frmMain
If oGame.AbsolutePath = False Then
If oGame.ProcessPath = String.Empty Then
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
oGame.ProcessPath = mgrPath.ProcessPathSearch(oGame.Name, oGame.TrueProcess, mgrCommon.FormatString(frmMain_ErrorRelativePath, oGame.Name), bNoAuto)
oGame.ProcessPath = mgrPath.ProcessPathSearch(oGame.Name, oGame.ProcessName, mgrCommon.FormatString(frmMain_ErrorRelativePath, oGame.Name), bNoAuto)
End If
If oGame.ProcessPath <> String.Empty Then
@@ -257,6 +259,12 @@ Public Class frmMain
End Sub
Private Sub RunImportBackup(ByVal oImportBackupList As Hashtable)
PauseScan()
oBackup.ImportBackupFiles(oImportBackupList)
ResumeScan()
End Sub
Private Function DoMultiGameCheck() As Boolean
Dim oResult As DialogResult
@@ -265,14 +273,9 @@ Public Class frmMain
frm.Process = oProcess
oResult = frm.ShowDialog()
If oResult = DialogResult.OK Then
Dim sProcessPath As String
'Reload settings
LoadGameSettings()
'Retain the process path from old object
sProcessPath = oProcess.GameInfo.ProcessPath
oProcess.GameInfo = frm.Game
'Set the process path into the new object
oProcess.GameInfo.ProcessPath = sProcessPath
'A game was set, return and continue
Return True
Else
@@ -294,7 +297,7 @@ Public Class frmMain
OperationStarted(False)
If oProcess.GameInfo.MonitorOnly = False Then
If SupressSession() 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 +368,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 +398,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 +422,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 +458,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
@@ -525,7 +528,7 @@ Public Class frmMain
sIcon = fbBrowser.FileName
If File.Exists(sIcon) Then
oProcess.GameInfo.Icon = sIcon
pbIcon.Image = Image.FromFile(sIcon)
pbIcon.Image = mgrCommon.SafeIconFromFile(sIcon)
mgrMonitorList.DoListUpdate(oProcess.GameInfo)
End If
End If
@@ -576,6 +579,25 @@ Public Class frmMain
End If
End Sub
Private Sub SetGameIcon()
Dim ic As Icon
Dim oBitmap As Bitmap
Try
'Grab icon from the executable
ic = System.Drawing.Icon.ExtractAssociatedIcon(oProcess.FoundProcess.MainModule.FileName)
oBitmap = New Bitmap(ic.ToBitmap)
ic.Dispose()
'Set the icon, we need to use an intermediary object to prevent file locking
pbIcon.Image = oBitmap
Catch ex As Exception
UpdateLog(mgrCommon.FormatString(frmMain_ErrorGameIcon), False, ToolTipIcon.Error)
UpdateLog(mgrCommon.FormatString(App_GenericError, ex.Message), False,, False)
End Try
End Sub
Private Sub SetGameInfo(Optional ByVal bMulti As Boolean = False)
Dim sFileName As String = String.Empty
Dim sFileVersion As String = String.Empty
@@ -585,6 +607,20 @@ Public Class frmMain
lblStatus1.Text = String.Empty
lblStatus2.Text = String.Empty
lblStatus3.Text = String.Empty
pbIcon.Image = Icon_Unknown
'Set Game Icon
If Not mgrCommon.IsUnix Then SetGameIcon()
Try
'Set Game Details
sFileName = oProcess.FoundProcess.MainModule.FileName
sFileVersion = oProcess.FoundProcess.MainModule.FileVersionInfo.FileVersion
sCompanyName = oProcess.FoundProcess.MainModule.FileVersionInfo.CompanyName
Catch ex As Exception
UpdateLog(mgrCommon.FormatString(frmMain_ErrorGameDetails), False, ToolTipIcon.Error)
UpdateLog(mgrCommon.FormatString(App_GenericError, ex.Message), False,, False)
End Try
'Get Game Details
If bMulti Then
@@ -594,28 +630,19 @@ Public Class frmMain
pbTime.Visible = False
lblTimeSpent.Visible = False
pbIcon.Image = Icon_Unknown
lblStatus1.Text = frmMain_NoDetails
If sFileName = String.Empty Then
lblStatus1.Text = frmMain_NoDetails
Else
lblStatus1.Text = sFileName
End If
Else
bAllowIcon = True
bAllowDetails = True
lblGameTitle.Text = oProcess.GameInfo.Name
Try
Dim ic As Icon = System.Drawing.Icon.ExtractAssociatedIcon(oProcess.FoundProcess.MainModule.FileName)
pbIcon.Image = ic.ToBitmap
'Set Game Details
sFileName = oProcess.FoundProcess.MainModule.FileName
sFileVersion = oProcess.FoundProcess.MainModule.FileVersionInfo.FileVersion
sCompanyName = oProcess.FoundProcess.MainModule.FileVersionInfo.CompanyName
Catch ex As Exception
pbIcon.Image = Icon_Unknown
End Try
'Check for a custom icon & details
If File.Exists(oProcess.GameInfo.Icon) Then
pbIcon.Image = Image.FromFile(oProcess.GameInfo.Icon)
pbIcon.Image = mgrCommon.SafeIconFromFile(oProcess.GameInfo.Icon)
End If
If sFileName = String.Empty Then
If oProcess.GameInfo.ProcessPath <> String.Empty Then
@@ -709,7 +736,7 @@ 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
@@ -717,7 +744,7 @@ Public Class frmMain
Private Sub HandleSession()
Dim oSession As clsSession
If Not SupressSession() Then
If Not SuppressSession() Then
'Record Session
oSession = New clsSession
oSession.MonitorID = oProcess.GameInfo.ID
@@ -728,11 +755,11 @@ Public Class frmMain
End If
End Sub
Private Function SupressSession() 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
@@ -816,6 +843,11 @@ Public Class frmMain
Case "process"
bProcessDebugMode = bDebugEnable
mgrCommon.ShowMessage(frmMain_CommandSucess, MsgBoxStyle.Exclamation)
Case "memory"
bMemoryDebugMode = bDebugEnable
mgrCommon.ShowMessage(frmMain_CommandSucess, MsgBoxStyle.Exclamation)
Case Else
mgrCommon.ShowMessage(frmMain_ErrorInvalidMode, New String() {sCommand(1), sCommand(0)}, MsgBoxStyle.Exclamation)
End Select
Case Else
@@ -840,18 +872,25 @@ 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.LastPlayedGame = oProcess.GameInfo
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
ResumeScan()
'Handle backup trigger
@@ -863,6 +902,11 @@ Public Class frmMain
If frm.TriggerRestore Then
RunRestore(frm.RestoreList)
End If
'Handle import backup trigger
If frm.TriggerImportBackup Then
RunImportBackup(frm.ImportBackupList)
End If
End Sub
Private Sub OpenSettings()
@@ -901,7 +945,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
@@ -909,8 +953,8 @@ Public Class frmMain
Dim frm As New frmVariableManager
PauseScan()
frm.ShowDialog()
mgrPath.CustomVariablesReload()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
mgrPath.LoadCustomVariables()
mgrMonitorList.SyncMonitorLists(oSettings)
ResumeScan()
End Sub
@@ -975,18 +1019,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
UpdateLog(frmMain_MasterListChanged, False, ToolTipIcon.Info, True)
SyncGameSettings()
LoadGameSettings()
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()
@@ -999,6 +1067,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
@@ -1008,6 +1083,12 @@ Public Class frmMain
Exit Sub
End If
'Check Special Paths
If Not mgrPath.CheckSpecialPaths Then
bInitFail = True
Exit Sub
End If
'Local Database Check
VerifyDBVersion(mgrSQLite.Database.Local)
LocalDatabaseCheck()
@@ -1028,6 +1109,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
@@ -1224,7 +1310,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)
@@ -1260,9 +1391,18 @@ Public Class frmMain
txtLog.Select(txtLog.TextLength, 0)
txtLog.ScrollToCaret()
gMonTray.BalloonTipText = sLogUpdate
gMonTray.BalloonTipIcon = objIcon
If bTrayUpdate Then gMonTray.ShowBalloonTip(10000)
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
gMonTray.ShowBalloonTip(10000)
End If
End If
End If
Application.DoEvents()
End Sub
@@ -1300,11 +1440,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
@@ -1322,11 +1465,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
@@ -1354,6 +1500,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
@@ -1431,7 +1638,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
@@ -1495,15 +1702,6 @@ Public Class frmMain
End Function
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
oProcess.GameInfo = o
oProcess.Duplicate = False
End If
Next
End Sub
Private Function CheckForSavedPath() As Boolean
If oProcess.GameInfo.ProcessPath <> String.Empty Then
Return True
@@ -1530,29 +1728,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
@@ -1606,10 +1781,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
@@ -1626,6 +1797,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
@@ -1654,6 +1829,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
@@ -1715,11 +1898,12 @@ Public Class frmMain
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
Dim bNeedsPath As Boolean = False
Dim bWineProcess As Boolean = False
Dim bContinue As Boolean = True
Dim iErrorCode As Integer = 0
Dim sErrorMessage As String = String.Empty
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, iErrorCode, bProcessDebugMode) Then
If oProcess.SearchRunningProcesses(hshScanList, bNeedsPath, bWineProcess, iErrorCode, bProcessDebugMode) Then
PauseScan(True)
If bNeedsPath Then
@@ -1749,22 +1933,53 @@ Public Class frmMain
End If
End If
If bContinue = True Then
CheckForSavedDuplicate()
If oProcess.Duplicate Then
UpdateLog(frmMain_MultipleGamesDetected, oSettings.ShowDetectionToolTips)
UpdateStatus(frmMain_MultipleGamesDetected)
SetGameInfo(True)
If bWineProcess Then
'Attempt a path conversion if the game configuration is using an absolute windows path that we can convert
If mgrVariables.CheckForReservedVariables(oProcess.GameInfo.TruePath) Then
Dim sWinePrefix As String = mgrPath.GetWinePrefix(oProcess.FoundProcess)
Dim sWineSavePath As String
If Not sWinePrefix = String.Empty Then
UpdateLog(mgrCommon.FormatString(frmMain_WinePrefix, New String() {oProcess.GameInfo.Name, sWinePrefix}), False)
sWineSavePath = mgrPath.GetWineSavePath(sWinePrefix, oProcess.GameInfo.TruePath)
If Not sWineSavePath = oProcess.GameInfo.TruePath Then
oProcess.GameInfo.TruePath = sWineSavePath
oProcess.GameInfo.AbsolutePath = True
UpdateLog(mgrCommon.FormatString(frmMain_WineSavePath, New String() {oProcess.GameInfo.Name, sWineSavePath}), False)
Else
bContinue = False
End If
Else
UpdateLog(mgrCommon.FormatString(frmMain_GameDetected, oProcess.GameInfo.Name), oSettings.ShowDetectionToolTips)
UpdateStatus(mgrCommon.FormatString(frmMain_GameDetected, oProcess.GameInfo.CroppedName))
SetGameInfo()
bContinue = False
End If
oProcess.StartTime = Now
bwMonitor.RunWorkerAsync()
Else
StopScan()
End If
'This does required mods to include/exclude data and relative paths (if required)
mgrPath.ModWinePathData(oProcess.GameInfo)
End If
If bContinue = True Then
If oProcess.Duplicate Then
UpdateLog(frmMain_MultipleGamesDetected, oSettings.ShowDetectionToolTips)
UpdateStatus(frmMain_MultipleGamesDetected)
SetGameInfo(True)
Else
UpdateLog(mgrCommon.FormatString(frmMain_GameDetected, oProcess.GameInfo.Name), oSettings.ShowDetectionToolTips)
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
StopScan()
End If
End If
If bMemoryDebugMode Then
UpdateLog(mgrCommon.FormatString(frmMain_DebugMemoryAllocation, Math.Round(GC.GetTotalMemory(False) / 1000000, 2)), False, ToolTipIcon.Info, True)
End If
End Sub
@@ -1785,6 +2000,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
@@ -1890,5 +2110,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, 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
+15 -3
View File
@@ -68,7 +68,7 @@ Public Class frmSessions
dgSessions.Rows.Add(New Object() {dr("MonitorID"), dr("Name"), dr("Start"), dStart, dr("End"), dEnd, dHours})
Next
lblTotalHours.Text = mgrCommon.FormatString(frmSessions_lblTotalHours, dTotalHours)
lblTotalHours.Text = mgrCommon.FormatString(frmSessions_lblTotalHours, Math.Round(dTotalHours, 2))
dgSessions.AutoResizeColumns()
End Sub
@@ -290,9 +290,21 @@ Public Class frmSessions
Select Case iDataTypeCol
Case iDataType.DecimalType
iCompareResult = If(CDec(dgRow1.Cells(iSortCol).Value) < CDec(dgRow2.Cells(iSortCol).Value), -1, 1)
If (CDec(dgRow1.Cells(iSortCol).Value) = CDec(dgRow2.Cells(iSortCol).Value)) Then
iCompareResult = 0
ElseIf (CDec(dgRow1.Cells(iSortCol).Value) < CDec(dgRow2.Cells(iSortCol).Value)) Then
iCompareResult = -1
Else
iCompareResult = 1
End If
Case iDataType.IntType
iCompareResult = If(CInt(dgRow1.Cells(iSortCol).Value) < CInt(dgRow2.Cells(iSortCol).Value), -1, 1)
If (CInt(dgRow1.Cells(iSortCol).Value) = CInt(dgRow2.Cells(iSortCol).Value)) Then
iCompareResult = 0
ElseIf (CInt(dgRow1.Cells(iSortCol).Value) < CInt(dgRow2.Cells(iSortCol).Value)) Then
iCompareResult = -1
Else
iCompareResult = 1
End If
Case iDataType.StringType
iCompareResult = String.Compare(CStr(dgRow1.Cells(iSortCol).Value), CStr(dgRow2.Cells(iSortCol).Value))
Case iDataType.DateTimeType
+230 -124
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,6 +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.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()
@@ -60,84 +57,57 @@ 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.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
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.chkShowResolvedPaths = New System.Windows.Forms.CheckBox()
Me.chkSessionTracking = New System.Windows.Forms.CheckBox()
Me.lstSettings = New System.Windows.Forms.ListBox()
Me.grpStartup.SuspendLayout()
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()
Me.grpBackupConfirmations.SuspendLayout()
Me.grpBackupHandling.SuspendLayout()
Me.pnl7z.SuspendLayout()
Me.grp7zAdvanced.SuspendLayout()
Me.grp7zInformation.SuspendLayout()
Me.pnlGeneral.SuspendLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
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, 251)
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 = 5
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, 88)
Me.btnOptionalFields.Name = "btnOptionalFields"
Me.btnOptionalFields.Size = New System.Drawing.Size(134, 23)
Me.btnOptionalFields.Size = New System.Drawing.Size(216, 23)
Me.btnOptionalFields.TabIndex = 3
Me.btnOptionalFields.Text = "Choose &Optional Fields..."
Me.btnOptionalFields.Text = "Choose &Optional Sync Fields..."
Me.btnOptionalFields.UseVisualStyleBackColor = True
'
'chkTimeTracking
@@ -150,20 +120,10 @@ 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 = 2
Me.chkSync.Text = "Enable syncing"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkShowDetectionTips
'
Me.chkShowDetectionTips.AutoSize = True
Me.chkShowDetectionTips.Location = New System.Drawing.Point(12, 228)
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 = 4
@@ -172,16 +132,27 @@ Partial Class frmSettings
'
'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 +195,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 +205,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,38 +302,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.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
'
'grpBackupConfirmations
'
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(14, 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(14, 203)
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
'
@@ -371,10 +352,10 @@ 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.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
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, 2, 2, 2)
Me.grpBackupHandling.Padding = New System.Windows.Forms.Padding(2)
Me.grpBackupHandling.Size = New System.Drawing.Size(354, 87)
Me.grpBackupHandling.TabIndex = 1
Me.grpBackupHandling.TabStop = False
@@ -384,7 +365,7 @@ Partial Class frmSettings
'
Me.chkAutoRestore.AutoSize = True
Me.chkAutoRestore.Location = New System.Drawing.Point(8, 41)
Me.chkAutoRestore.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkAutoRestore.Margin = New System.Windows.Forms.Padding(2)
Me.chkAutoRestore.Name = "chkAutoRestore"
Me.chkAutoRestore.Size = New System.Drawing.Size(190, 17)
Me.chkAutoRestore.TabIndex = 1
@@ -395,7 +376,7 @@ Partial Class frmSettings
'
Me.chkRestoreNotify.AutoSize = True
Me.chkRestoreNotify.Location = New System.Drawing.Point(8, 19)
Me.chkRestoreNotify.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkRestoreNotify.Margin = New System.Windows.Forms.Padding(2)
Me.chkRestoreNotify.Name = "chkRestoreNotify"
Me.chkRestoreNotify.Size = New System.Drawing.Size(216, 17)
Me.chkRestoreNotify.TabIndex = 0
@@ -420,7 +401,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
'
@@ -449,57 +430,97 @@ Partial Class frmSettings
'
'pnlGeneral
'
Me.pnlGeneral.Controls.Add(Me.lblMinutes)
Me.pnlGeneral.Controls.Add(Me.nudSupressBackupThreshold)
Me.pnlGeneral.Controls.Add(Me.chkSupressBackup)
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, 141)
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(232, 205)
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"
'
'nudSupressBackupThreshold
'nudSuppressBackupThreshold
'
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(176, 203)
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 = 3
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
'
'chkSupressBackup
'grpLogOptions
'
Me.chkSupressBackup.AutoSize = True
Me.chkSupressBackup.Location = New System.Drawing.Point(12, 204)
Me.chkSupressBackup.Name = "chkSupressBackup"
Me.chkSupressBackup.Size = New System.Drawing.Size(158, 17)
Me.chkSupressBackup.TabIndex = 2
Me.chkSupressBackup.Text = "Ignore sessions shorter than"
Me.chkSupressBackup.UseVisualStyleBackColor = True
Me.grpLogOptions.Controls.Add(Me.chkDisableSyncMessages)
Me.grpLogOptions.Controls.Add(Me.chkAutoSaveLog)
Me.grpLogOptions.Location = New System.Drawing.Point(6, 212)
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.chkShowResolvedPaths)
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, 123)
Me.grpGameData.TabIndex = 0
Me.grpGameData.TabStop = False
Me.grpGameData.Text = "Game Data"
Me.grpGameData.Text = "Game Data Options"
'
'chkShowResolvedPaths
'
Me.chkShowResolvedPaths.AutoSize = True
Me.chkShowResolvedPaths.Location = New System.Drawing.Point(6, 65)
Me.chkShowResolvedPaths.Name = "chkShowResolvedPaths"
Me.chkShowResolvedPaths.Size = New System.Drawing.Size(238, 17)
Me.chkShowResolvedPaths.TabIndex = 2
Me.chkShowResolvedPaths.Text = "Show resolved save paths in Game Manager"
Me.chkShowResolvedPaths.UseVisualStyleBackColor = True
'
'chkSessionTracking
'
@@ -519,14 +540,86 @@ Partial Class frmSettings
Me.lstSettings.Size = New System.Drawing.Size(162, 303)
Me.lstSettings.TabIndex = 0
'
'btnResetMessages
'
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
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.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,14 +632,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()
Me.grpBackupConfirmations.ResumeLayout(False)
Me.grpBackupConfirmations.PerformLayout()
Me.grpBackupHandling.ResumeLayout(False)
Me.grpBackupHandling.PerformLayout()
Me.pnl7z.ResumeLayout(False)
@@ -554,15 +646,19 @@ Partial Class frmSettings
Me.grp7zAdvanced.PerformLayout()
Me.grp7zInformation.ResumeLayout(False)
Me.pnlGeneral.ResumeLayout(False)
Me.pnlGeneral.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
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 +666,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
@@ -603,6 +696,19 @@ Partial Class frmSettings
Friend WithEvents chkRestoreNotify As CheckBox
Friend WithEvents chkSessionTracking As CheckBox
Friend WithEvents lblMinutes As Label
Friend WithEvents nudSupressBackupThreshold As NumericUpDown
Friend WithEvents chkSupressBackup As CheckBox
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
Friend WithEvents chkShowResolvedPaths As CheckBox
End Class
+47 -34
View File
@@ -47,18 +47,22 @@ 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.ShowResolvedPaths = chkShowResolvedPaths.Checked
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
@@ -68,15 +72,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
@@ -96,7 +94,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
@@ -168,25 +166,34 @@ 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
chkShowResolvedPaths.Checked = oSettings.ShowResolvedPaths
chkSuppressBackup.Checked = oSettings.SuppressBackup
nudSuppressBackupThreshold.Value = oSettings.SuppressBackupThreshold
nudSuppressBackupThreshold.Enabled = chkSuppressBackup.Checked
cboCompression.SelectedValue = oSettings.CompressionLevel
txt7zArguments.Text = oSettings.Custom7zArguments
txt7zLocation.Text = oSettings.Custom7zLocation
@@ -201,8 +208,6 @@ Public Class frmSettings
'Retrieve 7z Info
GetUtilityInfo(oSettings.Custom7zLocation)
'Toggle Sync Button
ToggleSyncButton()
End Sub
Private Sub LoadCombos()
@@ -228,7 +233,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
@@ -236,14 +242,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
@@ -260,15 +258,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
@@ -280,13 +287,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
@@ -298,7 +306,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
@@ -311,6 +318,13 @@ 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
chkShowResolvedPaths.Text = frmSettings_chkShowResolvedPaths
'Unix Handler
If mgrCommon.IsUnix Then
@@ -357,8 +371,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
@@ -369,16 +383,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
+9 -22
View File
@@ -28,7 +28,6 @@ Partial Class frmSyncFields
Me.chkVersion = New System.Windows.Forms.CheckBox()
Me.chkCompany = New System.Windows.Forms.CheckBox()
Me.chkGamePath = New System.Windows.Forms.CheckBox()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
Me.grpFields.SuspendLayout()
@@ -41,10 +40,9 @@ Partial Class frmSyncFields
Me.grpFields.Controls.Add(Me.chkVersion)
Me.grpFields.Controls.Add(Me.chkCompany)
Me.grpFields.Controls.Add(Me.chkGamePath)
Me.grpFields.Controls.Add(Me.chkTimeStamp)
Me.grpFields.Location = New System.Drawing.Point(12, 12)
Me.grpFields.Name = "grpFields"
Me.grpFields.Size = New System.Drawing.Size(195, 162)
Me.grpFields.Size = New System.Drawing.Size(195, 135)
Me.grpFields.TabIndex = 0
Me.grpFields.TabStop = False
Me.grpFields.Text = "Available Fields"
@@ -52,7 +50,7 @@ Partial Class frmSyncFields
'chkMonitorGame
'
Me.chkMonitorGame.AutoSize = True
Me.chkMonitorGame.Location = New System.Drawing.Point(6, 134)
Me.chkMonitorGame.Location = New System.Drawing.Point(6, 111)
Me.chkMonitorGame.Name = "chkMonitorGame"
Me.chkMonitorGame.Size = New System.Drawing.Size(109, 17)
Me.chkMonitorGame.TabIndex = 5
@@ -62,7 +60,7 @@ Partial Class frmSyncFields
'chkIcon
'
Me.chkIcon.AutoSize = True
Me.chkIcon.Location = New System.Drawing.Point(6, 111)
Me.chkIcon.Location = New System.Drawing.Point(6, 88)
Me.chkIcon.Name = "chkIcon"
Me.chkIcon.Size = New System.Drawing.Size(148, 17)
Me.chkIcon.TabIndex = 4
@@ -72,7 +70,7 @@ Partial Class frmSyncFields
'chkVersion
'
Me.chkVersion.AutoSize = True
Me.chkVersion.Location = New System.Drawing.Point(6, 88)
Me.chkVersion.Location = New System.Drawing.Point(6, 65)
Me.chkVersion.Name = "chkVersion"
Me.chkVersion.Size = New System.Drawing.Size(61, 17)
Me.chkVersion.TabIndex = 3
@@ -82,7 +80,7 @@ Partial Class frmSyncFields
'chkCompany
'
Me.chkCompany.AutoSize = True
Me.chkCompany.Location = New System.Drawing.Point(6, 65)
Me.chkCompany.Location = New System.Drawing.Point(6, 42)
Me.chkCompany.Name = "chkCompany"
Me.chkCompany.Size = New System.Drawing.Size(70, 17)
Me.chkCompany.TabIndex = 2
@@ -92,27 +90,17 @@ Partial Class frmSyncFields
'chkGamePath
'
Me.chkGamePath.AutoSize = True
Me.chkGamePath.Location = New System.Drawing.Point(6, 42)
Me.chkGamePath.Location = New System.Drawing.Point(6, 19)
Me.chkGamePath.Name = "chkGamePath"
Me.chkGamePath.Size = New System.Drawing.Size(180, 17)
Me.chkGamePath.TabIndex = 1
Me.chkGamePath.Text = "Game Path (Not Recommended)"
Me.chkGamePath.UseVisualStyleBackColor = True
'
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(6, 19)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 0
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.btnCancel.Location = New System.Drawing.Point(132, 180)
Me.btnCancel.Location = New System.Drawing.Point(132, 153)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
@@ -122,7 +110,7 @@ Partial Class frmSyncFields
'btnSave
'
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
Me.btnSave.Location = New System.Drawing.Point(52, 180)
Me.btnSave.Location = New System.Drawing.Point(52, 153)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 1
@@ -133,7 +121,7 @@ Partial Class frmSyncFields
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(219, 211)
Me.ClientSize = New System.Drawing.Size(219, 186)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpFields)
@@ -157,7 +145,6 @@ Partial Class frmSyncFields
Friend WithEvents chkVersion As CheckBox
Friend WithEvents chkCompany As CheckBox
Friend WithEvents chkGamePath As CheckBox
Friend WithEvents chkTimeStamp As CheckBox
Friend WithEvents btnCancel As Button
Friend WithEvents btnSave As Button
End Class
-12
View File
@@ -26,9 +26,6 @@ Public Class frmSyncFields
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
chkMonitorGame.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
chkTimeStamp.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
chkVersion.Checked = True
End If
@@ -47,7 +44,6 @@ Public Class frmSyncFields
chkVersion.Text = frmSyncFields_chkVersion
chkCompany.Text = frmSyncFields_chkCompany
chkGamePath.Text = frmSyncFields_chkGamePath
chkTimeStamp.Text = frmSyncFields_chkTimeStamp
End Sub
Private Sub frmSyncFields_Load(sender As Object, e As EventArgs) Handles MyBase.Load
@@ -65,14 +61,6 @@ Public Class frmSyncFields
Me.Close()
End Sub
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
If chkTimeStamp.Checked Then
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
Else
SyncFields = clsGame.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
End If
End Sub
Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged
If chkGamePath.Checked Then
SyncFields = clsGame.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
+6
View File
@@ -289,6 +289,12 @@ Public Class frmVariableManager
Return False
End If
If mgrVariables.GetReservedVariables.Contains(txtName.Text.ToUpper) Then
mgrCommon.ShowMessage(frmVariableManager_ErrorVariableReserved, txtName.Text, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
Return True
End Function
+25 -1
View File
@@ -122,6 +122,8 @@
<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" />
@@ -159,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>
@@ -171,6 +179,12 @@
<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>
@@ -232,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" />
@@ -247,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>
@@ -277,12 +293,18 @@
<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>
@@ -365,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.
+151 -41
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.FileName = sBackupFile.Replace(Settings.BackupFolder & Path.DirectorySeparatorChar, String.Empty)
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)
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
@@ -66,7 +66,7 @@ Public Class mgrBackup
Return True
End Function
Private Sub BuildFileList(ByVal sBackupPath As String, ByVal sList As String, ByVal sPath As String)
Private Sub BuildFileList(ByVal sList As String, ByVal sPath As String)
Dim oStream As StreamWriter
Try
@@ -75,7 +75,7 @@ Public Class mgrBackup
Using oStream
If sList <> String.Empty Then
For Each sTypeItem As String In sList.Split(":")
oStream.WriteLine("""" & sBackupPath & Path.DirectorySeparatorChar & sTypeItem & """")
oStream.WriteLine("""" & sTypeItem & """")
Next
End If
oStream.Flush()
@@ -101,21 +101,46 @@ 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 sOverwriteMessage As String
Dim lAvailableSpace As Long
Dim lFolderSize As Long
Dim lFolderSize As Long = 0
Dim sDeepFolder As String
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(oSettings.BackupFolder)
lFolderSize = mgrCommon.GetFolderSize(sSavePath, oGame.IncludeArray, oGame.ExcludeArray)
'If any includes are using a deep path and we aren't using recursion, we need to go directly to folders to do file size calculations or they will be missed.
If Not oGame.RecurseSubFolders Then
For Each s As String In oGame.IncludeArray
If s.Contains(Path.DirectorySeparatorChar) Then
sDeepFolder = Path.GetDirectoryName(sSavePath & Path.DirectorySeparatorChar & s)
If Directory.Exists(sDeepFolder) Then
lFolderSize += mgrCommon.GetFolderSize(sDeepFolder, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
End If
End If
Next
End If
lFolderSize += mgrCommon.GetFolderSize(sSavePath, oGame.IncludeArray, oGame.ExcludeArray, oGame.RecurseSubFolders)
'Show Available Space
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrCommon_AvailableDiskSpace, mgrCommon.FormatDiskSpace(lAvailableSpace)), False, ToolTipIcon.Info, True)
@@ -130,25 +155,34 @@ Public Class mgrBackup
End If
End If
If mgrRestore.CheckManifest(oGame.Name) Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmManifestConflict, oGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorManifestConflict, False, ToolTipIcon.Error, True)
Return False
'A manifest check is only required when "Save Multiple Backups" is disabled
If Not oGame.AppendTimeStamp 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
End If
End If
End If
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) And Not oGame.AppendTimeStamp Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmOverwrite, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
If oGame.AbsolutePath Then
sOverwriteMessage = mgrBackup_ConfirmOverwrite
Else
sOverwriteMessage = mgrBackup_ConfirmOverwriteRelative
End If
If mgrCommon.ShowMessage(sOverwriteMessage, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOverwriteAbort, oGame.Name), False, ToolTipIcon.Error, True)
Return False
End If
End If
Return True
Return True
End Function
Private Sub CheckOldBackups(ByVal oGame As clsGame)
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByName(oGame.Name, mgrSQLite.Database.Remote)
Dim 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 +198,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)
@@ -174,6 +208,83 @@ Public Class mgrBackup
End If
End Sub
Private Function BuildFileTimeStamp(ByVal dDate As Date) As String
Return " " & dDate.Month & "-" & dDate.Day & "-" & dDate.Year & "-" & dDate.Hour & "-" & dDate.Minute & "-" & dDate.Second
End Function
Private Function HandleSubFolder(ByVal oGame As clsGame, ByVal sPath As String) As Boolean
Try
If Not Directory.Exists(sPath) Then
Directory.CreateDirectory(sPath)
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorSubFolderCreate, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
Return False
End Try
Return True
End Function
Public Sub ImportBackupFiles(ByVal hshImportList As Hashtable)
Dim oGame As clsGame
Dim bOverwriteCurrent As Boolean = False
Dim bContinue As Boolean = True
Dim sFileToImport As String
Dim sBackupFile As String
Dim oBackup As clsBackup
For Each de As DictionaryEntry In hshImportList
sFileToImport = CStr(de.Key)
oGame = DirectCast(de.Value, clsGame)
'Enter overwite mode if we are importing a single backup and "Save Multiple Backups" is not enabled.
If hshImportList.Count = 1 And Not oGame.AppendTimeStamp Then bOverwriteCurrent = True
If File.Exists(sFileToImport) Then
sBackupFile = oSettings.BackupFolder
If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
bContinue = HandleSubFolder(oGame, sBackupFile)
End If
If bContinue Then
oBackup = New clsBackup
oBackup.MonitorID = oGame.ID
oBackup.DateUpdated = File.GetLastWriteTime(sFileToImport)
oBackup.UpdatedBy = mgrBackup_ImportedFile
If bOverwriteCurrent Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & ".7z"
Else
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame) & BuildFileTimeStamp(oBackup.DateUpdated) & ".7z"
End If
oBackup.FileName = sBackupFile.Replace(Settings.BackupFolder & Path.DirectorySeparatorChar, String.Empty)
If bOverwriteCurrent Then
If mgrCommon.CopyFile(sFileToImport, sBackupFile, True) Then
oBackup.CheckSum = mgrHash.Generate_SHA256_Hash(sBackupFile)
If Not mgrManifest.DoUpdateLatestManifest(oBackup, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestAdd(oBackup, mgrSQLite.Database.Remote)
End If
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ImportSuccess, New String() {sFileToImport, oGame.Name}), False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorImportBackupCopy, sFileToImport), False, ToolTipIcon.Error, True)
End If
Else
If mgrCommon.CopyFile(sFileToImport, sBackupFile, False) Then
oBackup.CheckSum = mgrHash.Generate_SHA256_Hash(sBackupFile)
mgrManifest.DoManifestAdd(oBackup, mgrSQLite.Database.Remote)
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ImportSuccess, New String() {sFileToImport, oGame.Name}), False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorImportBackupCopy, sFileToImport), False, ToolTipIcon.Error, True)
End If
End If
End If
End If
Next
End Sub
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame
Dim bDoBackup As Boolean
@@ -184,6 +295,7 @@ Public Class mgrBackup
Dim dTimeStamp As DateTime
Dim sTimeStamp As String
Dim sHash As String
Dim sArguments As String
For Each oGame In oBackupList
'Init
@@ -191,7 +303,7 @@ Public Class mgrBackup
sBackupFile = oSettings.BackupFolder
sSavePath = String.Empty
dTimeStamp = Date.Now
sTimeStamp = " " & dTimeStamp.Month & "-" & dTimeStamp.Day & "-" & dTimeStamp.Year & "-" & dTimeStamp.Hour & "-" & dTimeStamp.Minute & "-" & dTimeStamp.Second
sTimeStamp = BuildFileTimeStamp(dTimeStamp)
sHash = String.Empty
bDoBackup = True
bBackupCompleted = False
@@ -199,22 +311,15 @@ Public Class mgrBackup
RaiseEvent UpdateBackupInfo(oGame)
If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
Try
If Not Directory.Exists(sBackupFile) Then
Directory.CreateDirectory(sBackupFile)
End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorSubFolderCreate, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
bDoBackup = False
End Try
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & GetFileName(oGame)
bDoBackup = HandleSubFolder(oGame, sBackupFile)
End If
If oGame.AppendTimeStamp Then
CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
If oGame.BackupLimit > 0 Then CheckOldBackups(oGame)
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
@@ -222,12 +327,16 @@ Public Class mgrBackup
sSavePath = VerifySavePath(oGame)
If oGame.FolderSave = True Then
BuildFileList(sSavePath, "*", mgrPath.IncludeFileLocation)
BuildFileList("*", mgrPath.IncludeFileLocation)
Else
BuildFileList(sSavePath, oGame.FileType, mgrPath.IncludeFileLocation)
BuildFileList(oGame.FileType, mgrPath.IncludeFileLocation)
End If
BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation)
BuildFileList(oGame.ExcludeList, mgrPath.ExcludeFileLocation)
sArguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """"
If oGame.RecurseSubFolders Then sArguments &= " -r"
Try
If Directory.Exists(sSavePath) Then
@@ -238,8 +347,9 @@ Public Class mgrBackup
File.Delete(sBackupFile)
End If
prs7z.StartInfo.Arguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
prs7z.StartInfo.Arguments = sArguments
prs7z.StartInfo.FileName = oSettings.Utility7zLocation
prs7z.StartInfo.WorkingDirectory = sSavePath
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
+130 -44
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,28 @@ Public Class mgrCommon
Return oFormatter.Deserialize(oStream)
End Function
Public Shared Function CheckAddress(ByVal URL As String) As Boolean
Public Shared Function SafeIconFromFile(ByVal sPath As String) As Image
Dim oImage As Image
Dim oReturnImage As Image
Dim oImageSize As Size = New Size(48, 48)
oImage = Image.FromFile(sPath)
oReturnImage = New Bitmap(oImage, oImageSize)
oImage.Dispose()
Return oReturnImage
End Function
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
@@ -125,9 +144,9 @@ Public Class mgrCommon
Return String.Empty
End Function
Public Shared Function OpenFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
ByVal bMulti As Boolean, Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog
Private Shared Function BuildFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
ByVal bMulti As Boolean, ByRef fbBrowser As OpenFileDialog, Optional ByVal bSavedPath As Boolean = True) As Boolean
Dim oSavedPath As New clsSavedPath
fbBrowser.Title = sTitle
@@ -152,21 +171,40 @@ Public Class mgrCommon
mgrSavedPath.AddUpdatePath(oSavedPath)
End If
If bMulti Then
Dim sFileNames As String = String.Empty
For Each sFileName As String In fbBrowser.FileNames
sFileNames &= sFileName & "|"
Next
sFileNames = sFileNames.TrimEnd("|")
Return sFileNames
Else
Return fbBrowser.FileName
End If
Return True
End If
Return False
End Function
Public Shared Function OpenFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New OpenFileDialog
Dim bResult As Boolean
bResult = BuildFileBrowser(sName, sTitle, sExtension, sFileType, sDefaultFolder, False, fbBrowser, bSavedPath)
If bResult Then
Return fbBrowser.FileName
End If
Return String.Empty
End Function
Public Shared Function OpenMultiFileBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String,
Optional ByVal bSavedPath As Boolean = True) As String()
Dim fbBrowser As New OpenFileDialog
Dim bResult As Boolean
bResult = BuildFileBrowser(sName, sTitle, sExtension, sFileType, sDefaultFolder, True, fbBrowser, bSavedPath)
If bResult Then
Return fbBrowser.FileNames
End If
Return New String() {}
End Function
Public Shared Function OpenFolderBrowser(ByVal sName As String, ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean,
Optional ByVal bSavedPath As Boolean = True) As String
Dim fbBrowser As New FolderBrowserDialog
@@ -202,16 +240,11 @@ Public Class mgrCommon
Dim sExemptList As String() = {"dosbox", "scummvm"}
Dim bFound As Boolean = False
'We can't search if we don't have a configuration
If oGame.Temporary Then
Return True
End If
For Each s As String In sExemptList
If oGame.ProcessName.ToLower.Contains(s) Then bFound = True
Next
If bFound Or oGame.Duplicate = True Then
If bFound Then
Return True
Else
Return False
@@ -260,8 +293,9 @@ Public Class mgrCommon
Public Shared Function WildcardToRegex(ByVal sPattern As String) As String
Dim sRegEx As String
sRegEx = sPattern.Replace("*", ".*")
sRegEx = sRegEx.Replace("?", ".")
sPattern = Regex.Escape(sPattern)
sRegEx = sPattern.Replace("\*", ".*")
sRegEx = sRegEx.Replace("\?", ".")
Return sRegEx
End Function
@@ -274,8 +308,18 @@ 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
Public Shared Function GetFolderSize(ByVal sPath As String, ByVal sInclude As String(), ByVal sExclude As String(), Optional ByVal b7zStyleRecurse As Boolean = True) As Long
Dim oFolder As DirectoryInfo
Dim bInclude As Boolean
Dim bExclude As Boolean
@@ -288,14 +332,15 @@ Public Class mgrCommon
'Files
For Each fi As FileInfo In oFolder.EnumerateFiles()
If sInclude.Length > 0 Then
bInclude = CompareValueToArrayRegEx(fi.Name, sInclude) Or CompareValueToArrayRegEx(fi.DirectoryName, sInclude)
bInclude = CompareValueToArrayRegEx(fi.FullName, sInclude)
Else
bInclude = True
End If
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(fi.Name, sExclude) Or CompareValueToArrayRegEx(fi.DirectoryName, sExclude)
bExclude = CompareValueToArrayRegEx(fi.FullName, sExclude)
Else
bExclude = False
End If
@@ -308,16 +353,36 @@ Public Class mgrCommon
'Sub Folders
For Each di As DirectoryInfo In oFolder.EnumerateDirectories()
If Not ((di.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint) Then
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(di.Name, sExclude)
If b7zStyleRecurse Then
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(di.FullName, sExclude)
Else
bExclude = False
End If
If Not bExclude Then
lSize += GetFolderSize(di.FullName, sInclude, sExclude)
End If
Else
bExclude = False
End If
If Not bExclude Then
lSize += GetFolderSize(di.FullName, sInclude, sExclude)
If sInclude.Length > 0 Then
bInclude = CompareValueToArrayRegEx(di.FullName, sInclude)
Else
bInclude = True
End If
If sExclude.Length > 0 Then
bExclude = CompareValueToArrayRegEx(di.FullName, sExclude)
Else
bExclude = False
End If
If bInclude And Not bExclude Then
lSize += GetFolderSize(di.FullName, sInclude, sExclude)
End If
End If
End If
Next
Catch
'Do Nothing
End Try
@@ -391,6 +456,21 @@ Public Class mgrCommon
End If
End Function
'Copy a file
Public Shared Function CopyFile(ByVal sSourcePath As String, ByVal sDestinationPath As String, ByVal bOverWrite As Boolean) As Boolean
Try
If File.Exists(sSourcePath) Then
File.Copy(sSourcePath, sDestinationPath, bOverWrite)
Else
Return False
End If
Catch
Return False
End Try
Return True
End Function
'Delete file based on OS type
Public Shared Sub DeleteFile(ByVal sPath As String, Optional ByVal bRecycle As Boolean = True)
If File.Exists(sPath) Then
@@ -420,17 +500,24 @@ 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
'Check if the sub-folder is an ID or Name
If oBackup.FileName.StartsWith(oBackup.MonitorID & Path.DirectorySeparatorChar) Then
sDir = sBackupFolder & oBackup.MonitorID
ElseIf oBackup.FileName.StartsWith(oBackup.FileSafeName & Path.DirectorySeparatorChar) Then
sDir = sBackupFolder & oBackup.FileSafeName
Else
Exit Sub
End If
'Delete sub directory if it's empty
If oBackup.FileName.StartsWith(oBackup.Name & Path.DirectorySeparatorChar) Then
If Directory.Exists(sDir) Then
'Check if there's any sub-directories or files remaining
oDir = New DirectoryInfo(sDir)
If oDir.GetDirectories.Length = 0 And oDir.GetFiles.Length = 0 Then
'Folder is empty, delete the empty sub-folder
If Directory.Exists(sDir) Then DeleteDirectory(sDir)
End If
If Directory.Exists(sDir) Then
'Check if there's any sub-directories or files remaining
oDir = New DirectoryInfo(sDir)
If oDir.GetDirectories.Length = 0 And oDir.GetFiles.Length = 0 Then
'Folder is empty, delete the empty sub-folder
If Directory.Exists(sDir) Then DeleteDirectory(sDir)
End If
End If
End Sub
@@ -478,7 +565,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
+5 -5
View File
@@ -76,11 +76,11 @@
End Sub
Public Shared Function GetTagsByGame(ByVal sMonitorID As String) As Hashtable
Public Shared Function GetTagsByGame(ByVal sMonitorID As String) As SortedList
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim slList As New SortedList
Dim hshParams As New Hashtable
Dim oTag As clsTag
@@ -94,10 +94,10 @@
oTag = New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
hshList.Add(oTag.Name, oTag)
slList.Add(oTag.Name, oTag)
Next
Return hshList
Return slList
End Function
Public Shared Function GetTagsByGameForExport(ByVal sMonitorID As String) As List(Of Tag)
@@ -108,7 +108,7 @@
Dim hshParams As New Hashtable
Dim oTag As Tag
sSQL = "SELECT TagID, tags.Name FROM gametags NATURAL JOIN tags WHERE MonitorID = @ID"
sSQL = "SELECT TagID, tags.Name FROM gametags NATURAL JOIN tags WHERE MonitorID = @ID ORDER BY tags.Name ASC"
hshParams.Add("ID", sMonitorID)
+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
+260 -109
View File
@@ -1,4 +1,5 @@
Imports GBM.My.Resources
Imports System.Text.RegularExpressions
Imports System.Collections.Specialized
Imports System.IO
@@ -34,6 +35,13 @@ 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"))
oGame.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
'Compile RegEx
If oGame.IsRegEx Then
oGame.CompiledRegEx = New Regex(oGame.ProcessName, RegexOptions.Compiled)
End If
Return oGame
End Function
@@ -43,7 +51,7 @@ Public Class mgrMonitorList
hshParams.Add("ID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Process", oGame.ProcessName)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
@@ -61,6 +69,8 @@ Public Class mgrMonitorList
hshParams.Add("CleanFolder", oGame.CleanFolder)
hshParams.Add("Parameter", oGame.Parameter)
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
Return hshParams
End Function
@@ -73,22 +83,16 @@ Public Class mgrMonitorList
Dim hshDupeList As New Hashtable
Dim oGame As clsGame
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
oGame.Duplicate = True
End If
If oGame.Enabled Then hshList.Add(oGame.ProcessName, oGame)
If oGame.Enabled Then hshList.Add(oGame.ID, oGame)
End Select
Next
@@ -101,7 +105,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, @RecurseSubFolders)"
'Parameters
hshParams = SetCoreParameters(oGame)
@@ -110,20 +115,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, RecurseSubFolders=@RecurseSubFolders 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 +172,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 +197,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 +222,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 +283,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 +292,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 +308,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)
@@ -328,8 +346,6 @@ Public Class mgrMonitorList
Dim sVersion As String
Dim sCompany As String
Dim sMonitorGame As String
Dim sTimeStamp As String
Dim sBackupLimit As String
'Setup SQL for optional fields
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
@@ -352,24 +368,17 @@ Public Class mgrMonitorList
Else
sMonitorGame = "COALESCE((SELECT Enabled FROM monitorlist WHERE MonitorID=@ID),1)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
sTimeStamp = "@TimeStamp"
sBackupLimit = "@BackupLimit"
Else
sTimeStamp = "COALESCE((SELECT TimeStamp FROM monitorlist WHERE MonitorID=@ID),0)"
sBackupLimit = "COALESCE((SELECT BackupLimit FROM monitorlist WHERE MonitorID=@ID),2)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
sVersion = "@Version"
Else
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
End If
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, 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, RecurseSubFolders) "
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
sSQL &= sTimeStamp & ", @ExcludeList, " & sGamePath & ", "
sSQL &= "@TimeStamp, @ExcludeList, " & sGamePath & ", "
sSQL &= sIcon & ", @Hours, " & sVersion & ", "
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ", @CleanFolder, @Parameter, @Comments);"
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments, @IsRegEx, @RecurseSubFolders);"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
@@ -377,10 +386,12 @@ Public Class mgrMonitorList
'Core Parameters
hshParams.Add("ID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Process", oGame.ProcessName)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("BackupLimit", oGame.BackupLimit)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("Hours", oGame.Hours)
@@ -388,6 +399,8 @@ Public Class mgrMonitorList
hshParams.Add("CleanFolder", oGame.CleanFolder)
hshParams.Add("Parameter", oGame.Parameter)
hshParams.Add("Comments", oGame.Comments)
hshParams.Add("IsRegEx", oGame.IsRegEx)
hshParams.Add("RecurseSubFolders", oGame.RecurseSubFolders)
'Optional Parameters
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
@@ -402,10 +415,6 @@ Public Class mgrMonitorList
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
hshParams.Add("Enabled", oGame.Enabled)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("BackupLimit", oGame.BackupLimit)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
hshParams.Add("Version", oGame.Version)
End If
@@ -423,27 +432,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, Optional ByVal bSyncProtection As Boolean = True)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
@@ -454,10 +465,12 @@ Public Class mgrMonitorList
Cursor.Current = Cursors.WaitCursor
If bToRemote Then
RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog(mgrMonitorList_SyncFromMaster, False, ToolTipIcon.Info, True)
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
@@ -469,21 +482,34 @@ Public Class mgrMonitorList
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
'Sync Wipe Protection
If bSyncProtection Then
If hshCompareFrom.Count = 0 And hshCompareTo.Count > 0 Then
Cursor.Current = Cursors.Default
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
Cursor.Current = Cursors.WaitCursor
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 +528,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 +542,10 @@ Public Class mgrMonitorList
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
End If
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True)
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 +556,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, RecurseSubFolders FROM monitorlist"
Dim sSort As String = " ORDER BY " & sSortField
If bSortAsc Then
@@ -700,7 +729,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,29 +739,71 @@ 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"))
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
oGame.FolderSave = CBool(dr("FolderSave"))
oGame.AppendTimeStamp = CBool(dr("TimeStamp"))
oGame.BackupLimit = CInt(dr("BackupLimit"))
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
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.RecurseSubFolders = CBool(dr("RecurseSubFolders"))
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, Optional ByVal bWinConfigsInLinux As Boolean = False) As Boolean
If mgrCommon.IsAddress(sPath) Then
If mgrCommon.CheckAddress(sPath) Then
ImportMonitorList(sPath, True)
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, bWinConfigsInLinux)
Return True
Else
mgrCommon.ShowMessage(mgrMonitorList_WebNoReponse, sPath, MsgBoxStyle.Exclamation)
@@ -741,7 +811,7 @@ Public Class mgrMonitorList
End If
Else
If File.Exists(sPath) Then
ImportMonitorList(sPath)
ImportMonitorList(sPath,, bWinConfigsInLinux)
Return True
Else
mgrCommon.ShowMessage(mgrMonitorList_FileNotFound, sPath, MsgBoxStyle.Exclamation)
@@ -751,8 +821,8 @@ Public Class mgrMonitorList
Return True
End Function
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
Dim hshCompareFrom As Hashtable
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False, Optional ByVal bWinConfigsInLinux As Boolean = False)
Dim hshCompareFrom As New Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim oFromItem As clsGame
@@ -761,17 +831,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 < 115 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 oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.CompoundKey)
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.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
@@ -782,6 +868,7 @@ Public Class mgrMonitorList
Dim frm As New frmAdvancedImport
frm.ImportInfo = oExportInfo
frm.ImportData = hshSyncItems
frm.ModWinConfigsForLinux = bWinConfigsInLinux
If frm.ShowDialog() = DialogResult.OK Then
Cursor.Current = Cursors.WaitCursor
@@ -798,6 +885,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 +997,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
+272 -57
View File
@@ -15,7 +15,8 @@ Public Class mgrPath
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
Shared Sub New()
hshCustomVariables = mgrVariables.ReadVariables
SetEnv()
LoadCustomVariables()
End Sub
Shared ReadOnly Property ReleaseType As Integer
@@ -99,8 +100,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, "")
@@ -192,14 +203,154 @@ Public Class mgrPath
Return sResult
End Function
Public Shared Function ReplaceSpecialPaths(sValue As String) As String
Dim sMyDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sPublicDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
Dim sAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim sAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable
Public Shared Sub ModWinePathData(ByRef oGame As clsGame)
If Not oGame.AbsolutePath Then oGame.Path = oGame.Path.Replace("\", Path.DirectorySeparatorChar)
oGame.FileType = oGame.FileType.Replace("\", Path.DirectorySeparatorChar)
oGame.ExcludeList = oGame.ExcludeList.Replace("\", Path.DirectorySeparatorChar)
End Sub
Private Shared Function BuildWinePath(ByVal sPath As String, ByVal sWinePrefix As String) As String
Dim sRealPath As String
Dim cDriveLetter As Char
Dim sWineDrive As String
Try
'Grab Path
sRealPath = sPath.Split("=")(1)
'Remove Quotes
sRealPath = sRealPath.TrimStart("""")
sRealPath = sRealPath.TrimEnd("""")
'Flip Seperators
sRealPath = sRealPath.Replace("\\", Path.DirectorySeparatorChar)
'Change Wine Drive
cDriveLetter = sRealPath.Chars(sRealPath.IndexOf(":") - 1)
sWineDrive = "drive_" & cDriveLetter
sRealPath = sRealPath.Replace(cDriveLetter & ":", sWineDrive.ToLower)
Return sWinePrefix & Path.DirectorySeparatorChar & sRealPath
Catch ex As Exception
mgrCommon.ShowMessage(mgrPath_ErrorBuildingWinePath, ex.Message, MsgBoxStyle.Exclamation)
Return String.Empty
End Try
End Function
Public Shared Function GetWineSavePath(ByVal sPrefix As String, ByVal sPath As String) As String
Dim sRegistry As String
Dim sWinePath As String
Dim sReplace As String
Dim oParse As Regex
Dim oMatch As Match
Try
If sPath.Contains("%APPDATA%") Then
sReplace = "%APPDATA%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""AppData""="".+?(?=\n)")
ElseIf sPath.Contains("%LOCALAPPDATA%Low") Then
sReplace = "%LOCALAPPDATA%Low"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""{A520A1A4-1780-4FF6-BD18-167343C5AF16}""="".+?(?=\n)")
ElseIf sPath.Contains("%LOCALAPPDATA%") Then
sReplace = "%LOCALAPPDATA%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Local AppData""="".+?(?=\n)")
ElseIf sPath.Contains("%USERDOCUMENTS%") Then
sReplace = "%USERDOCUMENTS%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Personal""="".+?(?=\n)")
ElseIf sPath.Contains("%COMMONDOCUMENTS%") Then
sReplace = "%COMMONDOCUMENTS%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "system.reg")
oParse = New Regex("""Common Documents""="".+?(?=\n)")
ElseIf sPath.Contains("%PROGRAMDATA%") Then
sReplace = "%PROGRAMDATA%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "system.reg")
oParse = New Regex("""Common AppData""="".+?(?=\n)")
ElseIf sPath.Contains("%USERPROFILE%") Then
sReplace = "%USERPROFILE%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Desktop""="".+?(?=\\\\Desktop)")
Else
Return sPath
End If
If oParse.IsMatch(sRegistry) Then
oMatch = oParse.Match(sRegistry)
sWinePath = BuildWinePath(oMatch.Value, sPrefix)
sPath = sPath.Replace("\", Path.DirectorySeparatorChar)
Return sPath.Replace(sReplace, sWinePath)
End If
Return sPath
Catch ex As Exception
mgrCommon.ShowMessage(mgrPath_ErrorConvertWineSavePath, ex.Message, MsgBoxStyle.Exclamation)
Return sPath
End Try
End Function
Public Shared Function GetWinePrefix(ByVal prs As Process) As String
Dim sEnv As String
Dim oParse As New Regex("WINEPREFIX=.+?(?=\x00)")
Dim oMatch As Match
Try
sEnv = File.ReadAllText("/proc/" & prs.Id.ToString() & "/environ")
If oParse.IsMatch(sEnv) Then
oMatch = oParse.Match(sEnv)
Return oMatch.Value.Trim("/").Split("=")(1)
Else
'When WINEPREFIX is not part of the command, we will assume the default prefix.
Return Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "/.wine"
End If
Catch ex As Exception
mgrCommon.ShowMessage(mgrPath_ErrorWinePrefix, ex.Message, MsgBoxStyle.Exclamation)
Return String.Empty
End Try
End Function
Public Shared Function CheckSpecialPaths() As Boolean
Dim hshEnvs As New Hashtable
Dim bNoError As Boolean = True
hshEnvs.Add("Documents", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
hshEnvs.Add("AppDataRoaming", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
hshEnvs.Add("AppDataLocal", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
hshEnvs.Add("ProgramData", Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))
If Not mgrCommon.IsUnix Then
hshEnvs.Add("UserData", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
hshEnvs.Add("PublicDocuments", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
End If
For Each de As DictionaryEntry In hshEnvs
If de.Value = String.Empty Then
mgrCommon.ShowMessage(mgrPath_SpecialPathError, de.Key, MsgBoxStyle.Critical)
bNoError = False
End If
Next
Return bNoError
End Function
Private Shared Sub SetEnv()
If Not mgrCommon.IsUnix Then
Environment.SetEnvironmentVariable("USERDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
Environment.SetEnvironmentVariable("COMMONDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
End If
End Sub
Public Shared Function ReplaceSpecialPaths(ByVal sValue As String) As String
Dim sXdgData As String = "${XDG_DATA_HOME:-~/.local/share}"
Dim sEnvAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim sXdgConfig As String = "${XDG_CONFIG_HOME:-~/.config}"
Dim sEnvAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim sHomeDir As String = "${HOME}"
Dim sEnvCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.FormattedName) Then
@@ -207,39 +358,71 @@ Public Class mgrPath
End If
Next
If sValue.Contains("*appdatalocal*") Then
Return sValue.Replace("*appdatalocal*", sAppDataLocal)
End If
If sValue.Contains("*appdataroaming*") Then
Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
End If
'This needs to be tested last for Unix compatability
If sValue.Contains("*mydocs*") Then
Return sValue.Replace("*mydocs*", sMyDocs)
End If
'Don't use these in Unix
If Not mgrCommon.IsUnix Then
If sValue.Contains("*publicdocs*") Then
Return sValue.Replace("*publicdocs*", sPublicDocs)
If mgrCommon.IsUnix Then
'$VAR_iable
Dim oParse As New Regex("\$([a-zA-Z0-9_]+)")
'${VAR_iable} but not advanced syntax like ${VAR:-iable}
Dim oParseBracketed As New Regex("\$\{([a-zA-Z0-9_]+?)\}")
'~ not inside ${...}
Dim oParseTilde As New Regex("~(?![^\$\{]*\})")
If sEnvCurrentUser = String.Empty Then
'Fall back
sEnvCurrentUser = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
End If
If sEnvCurrentUser = String.Empty Then
'Fall back
sEnvCurrentUser = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
End If
If sValue.Contains("*currentuser*") Then
Return sValue.Replace("*currentuser*", sCurrentUser)
End If
'$HOME to ${HOME}
sValue = oParse.Replace(sValue, "${$1}")
'Special notations for home directory
sValue = oParseTilde.Replace(sValue, "${HOME}")
'XDG Base Directory Specification has default values
sValue = sValue.Replace("${XDG_DATA_HOME}", sXdgData)
sValue = sValue.Replace("${XDG_CONFIG_HOME}", sXdgConfig)
'Replace with paths
sValue = sValue.Replace(sXdgData, sEnvAppDataLocal)
sValue = sValue.Replace(sXdgConfig, sEnvAppDataRoaming)
sValue = sValue.Replace(sHomeDir, sEnvCurrentUser)
'Escape real Windows variables
sValue = sValue.Replace("%", "\%")
'Transform Linux variables to Windows variables
sValue = oParseBracketed.Replace(sValue, "%$1%")
End If
'On Linux real Linux environmental variables are used
sValue = Environment.ExpandEnvironmentVariables(sValue)
If mgrCommon.IsUnix Then
'Transform missing variables back
Dim oParse As New Regex("%([a-zA-Z0-9_]+?)%")
sValue = oParse.Replace(sValue, "${$1}")
'Unscape real Windows variables
sValue = sValue.Replace("\%", "%")
End If
Return sValue
End Function
Public Shared Function ReverseSpecialPaths(sValue As String) As String
Dim sMyDocs As String = "*mydocs*"
Dim sPublicDocs As String = "*publicdocs*"
Dim sAppDataRoaming As String = "*appdatalocal*"
Dim sAppDataLocal As String = "*appdataroaming*"
Dim sCurrentUser As String = "*currentuser*"
Dim sMyDocs As String = "%USERDOCUMENTS%"
Dim sEnvMyDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sPublicDocs As String = "%COMMONDOCUMENTS%"
Dim sEnvPublicDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
Dim sAppDataLocal As String = "%LOCALAPPDATA%"
Dim sXdgData As String = "${XDG_DATA_HOME:-~/.local/share}"
Dim sEnvAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim sAppDataRoaming As String = "%APPDATA%"
Dim sXdgConfig As String = "${XDG_CONFIG_HOME:-~/.config}"
Dim sEnvAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim sCurrentUser As String = "%USERPROFILE%"
Dim sHomeDir As String = "~"
Dim sEnvCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim sProgramData As String = "%PROGRAMDATA%"
Dim sEnvProgramData As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim oCustomVariable As clsPathVariable
For Each oCustomVariable In hshCustomVariables.Values
@@ -248,27 +431,53 @@ Public Class mgrPath
End If
Next
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming)
End If
'This needs to be tested last for Unix compatability
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs)
End If
'Don't use these in Unix
If Not mgrCommon.IsUnix Then
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
If sValue.Contains(sEnvAppDataRoaming) Then
Return sValue.Replace(sEnvAppDataRoaming, sAppDataRoaming)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser)
If sValue.Contains(sEnvAppDataLocal) Then
Return sValue.Replace(sEnvAppDataLocal, sAppDataLocal)
End If
If sValue.Contains(sEnvProgramData) Then
Return sValue.Replace(sEnvProgramData, sProgramData)
End If
'This needs to be tested last for Unix compatability
If sValue.Contains(sEnvMyDocs) Then
Return sValue.Replace(sEnvMyDocs, sMyDocs)
End If
'Mono doesn't set a path for these folders
If sValue.Contains(sEnvPublicDocs) Then
Return sValue.Replace(sEnvPublicDocs, sPublicDocs)
End If
If sValue.Contains(sEnvCurrentUser) Then
Return sValue.Replace(sEnvCurrentUser, sCurrentUser)
End If
Else
'Use different paths on Linux
If sValue.Contains(sEnvAppDataRoaming) Then
Return sValue.Replace(sEnvAppDataRoaming, sXdgConfig)
End If
If sValue.Contains(sEnvAppDataLocal) Then
Return sValue.Replace(sEnvAppDataLocal, sXdgData)
End If
'Must be last
If sValue.Contains(sEnvCurrentUser) Then
If sEnvCurrentUser = String.Empty Then
'Fall back
sEnvCurrentUser = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
End If
If sEnvCurrentUser = String.Empty Then
'Fall back
sEnvCurrentUser = sMyDocs
End If
Return sValue.Replace(sEnvCurrentUser, sHomeDir)
End If
End If
@@ -307,8 +516,10 @@ Public Class mgrPath
Public Shared Function VerifyCustomVariables(ByVal hshScanlist As Hashtable, ByRef sGames As String) As Boolean
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
'Reserved variables will be resolved on Windows, but not on a Linux. Therefore we an ignore list here, otherwise GBM will bitch about them when using Windows configurations for Wine.
Dim oReservedVariables As List(Of String) = mgrVariables.GetReservedVariables
Dim sVariableCheck As String
Dim sPattern As String = "\*(.*)\*"
Dim sPattern As String = "\%(.*)\%"
Dim oGame As clsGame
Dim oMatch As Match
Dim bClean As Boolean = True
@@ -316,8 +527,8 @@ Public Class mgrPath
For Each oGame In hshScanlist.Values
oMatch = Regex.Match(oGame.Path, sPattern)
If oMatch.Success Then
sVariableCheck = oMatch.Value.Replace("*", String.Empty)
If Not hshCustomVariables.ContainsKey(sVariableCheck) Then
sVariableCheck = oMatch.Value.Replace("%", String.Empty)
If Not hshCustomVariables.ContainsKey(sVariableCheck) And Not oReservedVariables.Contains(sVariableCheck) Then
sGames &= vbCrLf & oGame.Name & " (" & sVariableCheck & ")"
bClean = False
End If
@@ -327,8 +538,12 @@ Public Class mgrPath
Return bClean
End Function
Public Shared Sub CustomVariablesReload()
Public Shared Sub LoadCustomVariables()
hshCustomVariables = mgrVariables.ReadVariables
For Each oVariable As clsPathVariable In hshCustomVariables.Values
Environment.SetEnvironmentVariable(oVariable.Name, oVariable.Path)
Next
End Sub
Public Shared Function SetManualGamePath() As String
+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,16 +1,16 @@
Imports System.IO
Imports System.Management
Public Class mgrProcesses
Public Class mgrProcessDetection
Private prsFoundProcess As Process
Private sProcessPath As String
Private dStartTime As DateTime = Now, dEndTime As DateTime = Now
Private lTimeSpent As Long = 0
Private oGame As clsGame
Private oDuplicateGames As New ArrayList
Private bDuplicates As Boolean
Private bVerified As Boolean = False
Private sFullCommand As String = String.Empty
Property FoundProcess As Process
Get
@@ -21,6 +21,15 @@ Public Class mgrProcesses
End Set
End Property
Property ProcessPath As String
Get
Return sProcessPath
End Get
Set(value As String)
sProcessPath = value
End Set
End Property
Property StartTime As DateTime
Get
Return dStartTime
@@ -72,68 +81,36 @@ Public Class mgrProcesses
End Set
End Property
Property FullCommand As String
Get
Return sFullCommand
End Get
Set(value As String)
sFullCommand = value
End Set
End Property
Private Function HandleDuplicates(hshScanList As Hashtable) As Boolean
Dim sProcess As String
bDuplicates = True
oDuplicateGames.Clear()
For Each o As clsGame In hshScanList.Values
sProcess = o.ProcessName.Split(":")(0)
If o.Duplicate = True And sProcess = oGame.TrueProcess Then
If o.Parameter <> String.Empty And FullCommand.Contains(o.Parameter) Then
oGame = o.ShallowCopy
Return True
ElseIf o.Parameter = String.Empty Then
oDuplicateGames.Add(o.ShallowCopy)
End If
End If
Next
If oDuplicateGames.Count = 1 Then
oGame = DirectCast(oDuplicateGames(0), clsGame).ShallowCopy
Return True
End If
Return False
End Function
'This function will only work correctly on Windows
Private Sub GetWindowsCommand(ByVal prs As Process)
FullCommand = String.Empty
Private Function GetWindowsCommand(ByVal prs As Process) As String
Dim sFullCommand As String = String.Empty
Try
Using searcher As New ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + prs.Id.ToString)
For Each o As ManagementObject In searcher.Get()
FullCommand &= o("CommandLine") & " "
sFullCommand &= o("CommandLine") & " "
Next
End Using
Catch ex As Exception
Catch
'Do Nothing
End Try
End Sub
Return sFullCommand
End Function
'This function will only work correctly on Unix
Private Sub GetUnixCommand(ByVal prs As Process)
FullCommand = String.Empty
Private Function GetUnixCommand(ByVal prs As Process) As String
Dim sFullCommand As String = String.Empty
Try
FullCommand = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline").Replace(vbNullChar, " ")
Catch ex As Exception
sFullCommand = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline").Replace(vbNullChar, " ")
Catch
'Do Nothing
End Try
End Sub
Return sFullCommand
End Function
'This function will only work correctly on Unix
Private Function GetUnixProcessArguments(ByVal prs As Process) As String()
Dim sArguments As String
Dim sArguments As String
Try
sArguments = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline")
Return sArguments.Split(vbNullChar)
@@ -162,16 +139,122 @@ Public Class mgrProcesses
End Try
End Function
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Private Function IsMatch(ByRef oGame As clsGame, ByRef sProcessCheck As String) As Boolean
If oGame.IsRegEx Then
Try
If oGame.CompiledRegEx.IsMatch(sProcessCheck) 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
Private Function GetProcessPath(ByVal bWineProcess As Boolean) As String
Try
If Not bWineProcess Then
Return Path.GetDirectoryName(FoundProcess.MainModule.FileName)
Else
Return GetUnixSymLinkDirectory(FoundProcess)
End If
Catch
Return String.Empty
End Try
End Function
Private Sub FilterDetected(ByVal oDetectedGames As ArrayList, ByVal bWineProcess As Boolean)
Dim bMatch As Boolean = False
Dim sFullCommand As String
Dim oNotDetectedWithParameters As New ArrayList
Dim oDetectedWithParameters As New ArrayList
Dim oNotDetectedWithProcessPath As New ArrayList
Dim oDetectedWithProcessPath As New ArrayList
'Get parameters of the found process
If mgrCommon.IsUnix Then
sFullCommand = GetUnixCommand(FoundProcess)
Else
sFullCommand = GetWindowsCommand(FoundProcess)
End If
'Get Process Path
ProcessPath = GetProcessPath(bWineProcess)
'Look for any games using parameters and any matches
For Each oDetectedGame As clsGame In oDetectedGames
If oDetectedGame.Parameter <> String.Empty Then
If sFullCommand.Contains(oDetectedGame.Parameter) Then
oDetectedWithParameters.Add(oDetectedGame)
Else
oNotDetectedWithParameters.Add(oDetectedGame)
End If
End If
Next
'If we detected at least one parameter match, replace full detected list with the detected with parameter list
If oDetectedWithParameters.Count > 0 Then
oDetectedGames = oDetectedWithParameters
Else
'If there is no parameter match, remove any games using parameters from the detected list
For Each oGameNotDetected As clsGame In oNotDetectedWithParameters
oDetectedGames.Remove(oGameNotDetected)
Next
End If
'If there's only one match after parameter detection, set it as current game and we're done.
If oDetectedGames.Count = 1 Then
GameInfo = oDetectedGames(0)
Duplicate = False
Else
'Check if we have any exact matches based on process path
For Each oDetectedGame As clsGame In oDetectedGames
If oDetectedGame.ProcessPath <> String.Empty Then
If oDetectedGame.ProcessPath = ProcessPath Then
oDetectedWithProcessPath.Add(oDetectedGame)
Else
oNotDetectedWithProcessPath.Add(oDetectedGame)
End If
End If
Next
'If there's only one match after process detection, set it as current game and we're done
If oDetectedWithProcessPath.Count = 1 Then
GameInfo = oDetectedWithProcessPath(0)
Duplicate = False
Else
'Remove any games with a process path that does not match the current process
For Each oGameNotDetected As clsGame In oNotDetectedWithProcessPath
oDetectedGames.Remove(oGameNotDetected)
Next
'If only a single game remains, set it as current game and we're done
If oDetectedGames.Count = 1 Then
GameInfo = oDetectedGames(0)
Duplicate = False
Else
'We've done all we can, the user must selected which game they were playing when the process ends
Duplicate = True
oDuplicateGames = oDetectedGames
End If
End If
End If
End Sub
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef bWineProcess As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Dim prsList() As Process = Process.GetProcesses
Dim sProcessCheck As String = String.Empty
Dim sProcessList As String = String.Empty
Dim bWineProcess As Boolean = False
Dim bPass As Boolean
Dim oDetectedGames As New ArrayList
For Each prsCurrent As Process In prsList
bPass = False
'This needs to be wrapped due to issues with Mono.
Try
sProcessCheck = prsCurrent.ProcessName
@@ -179,56 +262,41 @@ Public Class mgrProcesses
'Unix Handler
'We need some special handling for Wine processes
If mgrCommon.IsUnix And (sProcessCheck.ToLower = "wine-preloader" Or sProcessCheck.ToLower = "wine64-preloader") Then
Dim sArgs As String() = GetUnixProcessArguments(prsCurrent)
Dim sParameter As String
Dim sWinePath As String()
'We can't use Path.GetFileName here, Wine uses the Windows seperator in arguments and Mono expects a different one in Unix.
sWinePath = GetUnixProcessArguments(prsCurrent)(0).Split("\")
sProcessCheck = sWinePath(sWinePath.Length - 1).Replace(".exe", "")
'The wine-preloader parameters can refer to a path on the host system, windows based path within in the prefix, or mixed notation.
sParameter = sArgs(0).Replace("\", Path.DirectorySeparatorChar)
sWinePath = sParameter.Split(Path.DirectorySeparatorChar)
sProcessCheck = Path.GetFileNameWithoutExtension(sWinePath(sWinePath.Length - 1))
bWineProcess = True
Else
bWineProcess = False
End If
If bDebugMode And mgrCommon.IsUnix Then
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & " " & GetUnixProcessArguments(prsCurrent)(0) & vbCrLf
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & " " & GetUnixCommand(prsCurrent) & vbCrLf
ElseIf bDebugMode Then
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & vbCrLf
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & " " & GetWindowsCommand(prsCurrent) & vbCrLf
End If
Catch ex As Exception
'Do Nothing
End Try
'Detection Pass 1
If hshScanList.ContainsKey(sProcessCheck) Then
prsFoundProcess = prsCurrent
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
bPass = True
If mgrCommon.IsUnix Then
GetUnixCommand(prsCurrent)
Else
GetWindowsCommand(prsCurrent)
For Each oCurrentGame As clsGame In hshScanList.Values
If IsMatch(oCurrentGame, sProcessCheck) Then
prsFoundProcess = prsCurrent
oGame = oCurrentGame.ShallowCopy
oDetectedGames.Add(oGame.ShallowCopy)
End If
Next
If oGame.Duplicate = True Then
If HandleDuplicates(hshScanList) Then
bDuplicates = False
oDuplicateGames.Clear()
End If
Else
bDuplicates = False
oDuplicateGames.Clear()
End If
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
If oDetectedGames.Count > 0 Then
FilterDetected(oDetectedGames, bWineProcess)
End If
'Detection Pass 2
If bPass Then
'Determine the process path if we need it
If Not oGame.AbsolutePath Or oGame.Duplicate Then
If oDetectedGames.Count > 0 Then
If Not oGame.AbsolutePath And Not oGame.MonitorOnly Then
Try
If Not bWineProcess Then
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName)
@@ -236,9 +304,6 @@ Public Class mgrProcesses
oGame.ProcessPath = GetUnixSymLinkDirectory(prsCurrent)
End If
Catch exWin32 As System.ComponentModel.Win32Exception
'If an exception occurs the process is:
'Running as administrator and the app isn't.
'The process is 64-bit and the process folder is required, shouldn't happen often.
If exWin32.NativeErrorCode = 5 Then
bNeedsPath = True
iErrorCode = 5
@@ -247,13 +312,11 @@ Public Class mgrProcesses
iErrorCode = 299
Else
If bDebugMode Then mgrCommon.ShowMessage(exWin32.NativeErrorCode & " " & exWin32.Message & vbCrLf & vbCrLf & exWin32.StackTrace, MsgBoxStyle.Critical)
'A different failure occured, drop out and continue to scan.
bPass = False
Return False
End If
Catch exAll As Exception
If bDebugMode Then mgrCommon.ShowMessage(exAll.Message & vbCrLf & vbCrLf & exAll.StackTrace, MsgBoxStyle.Critical)
'A different failure occured, drop out and continue to scan.
bPass = False
Return False
End Try
End If
+12 -44
View File
@@ -28,30 +28,16 @@ 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
Else
sProcess = oGame.TrueProcess
sProcess = oGame.ProcessName
If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
sRestorePath = mgrPath.ProcessPathSearch(oRestoreInfo.Name, sProcess, mgrCommon.FormatString(mgrRestore_RelativeNeedPath, oRestoreInfo.Name), bNoAuto)
@@ -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
+199 -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, ShowResolvedPaths 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, RecurseSubFolders 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, RecurseSubFolders 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,181 @@ 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
'1.15 Upgrade
If GetDatabaseVersion() < 115 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v110")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN ShowResolvedPaths BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=115"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v110")
'Convert core path variables to new standard
If Not mgrCommon.IsUnix Then
sSQL = "UPDATE monitorlist SET Path = Replace(Path,'*appdatalocal*','%LOCALAPPDATA%');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*appdataroaming*','%APPDATA%');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*mydocs*','%USERDOCUMENTS%');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*currentuser*','%USERPROFILE%');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*publicdocs*','%COMMONDOCUMENTS%');"
Else
sSQL = "UPDATE monitorlist SET Path = Replace(Path,'*appdatalocal*','${XDG_DATA_HOME:-~/.local/share}');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*appdataroaming*','${XDG_CONFIG_HOME:-~/.config}');"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*mydocs*','~');"
End If
'Convert custom variables to new standard
Dim hshVariables As Hashtable = mgrVariables.ReadVariables()
Dim sOldVariable As String
For Each oVariable As clsPathVariable In hshVariables.Values
sOldVariable = "*" & oVariable.Name & "*"
sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'" & sOldVariable & "','" & oVariable.FormattedName & "');"
Next
sSQL &= "PRAGMA user_version=115"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'1.16 Upgrade
If GetDatabaseVersion() < 116 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v115")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN RecurseSubFolders BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=116"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v115")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN RecurseSubFolders BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=116"
RunParamQuery(sSQL, New Hashtable)
End If
End If
End Sub
Public Function GetDBSize() As Long
+24 -18
View File
@@ -1,8 +1,6 @@
Imports GBM.My.Resources
Imports System.IO
Imports System.Xml.Serialization
Imports System.Globalization
Public Class mgrSessions
@@ -130,24 +128,38 @@ Public Class mgrSessions
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 dDecimal As Decimal
Dim oBannedColumns As New List(Of DataGridViewColumn)
Dim oDecimalColumns As New List(Of DataGridViewColumn)
Dim oNfi As New NumberFormatInfo
'We want to force a specific decimal seperator when exporting CSV files due to certain regions using a comma.
oNfi.NumberDecimalSeparator = "."
Try
oWriter = New StreamWriter(sLocation)
'Set Decimal Columns
oDecimalColumns.Add(dg.Columns("Hours"))
'Set Ban Columns
oBannedColumns.Add(dg.Columns("MonitorID"))
@@ -177,13 +189,7 @@ Public Class mgrSessions
sCurrentRow = String.Empty
For Each dgCell As DataGridViewCell In dgRow.Cells
If Not oBannedColumns.Contains(dg.Columns(dgCell.ColumnIndex)) Then
If oDecimalColumns.Contains(dg.Columns(dgCell.ColumnIndex)) Then
dDecimal = CDec(dgCell.Value)
sCurrentRow &= dDecimal.ToString(oNfi) & ","
Else
sCurrentRow &= dgCell.Value.ToString & ","
End If
sCurrentRow &= EscapeCSV(dgCell.Value.ToString) & ","
End If
Next
sCurrentRow = sCurrentRow.TrimEnd(",")
+100 -32
View File
@@ -11,17 +11,28 @@ 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 eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None
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
Private bShowResolvedPaths As Boolean = True
<Flags()> Public Enum eSuppressMessages
None = 0
GameIDSync = 1
BackupImport = 2
WinConfigsInLinux = 4
End Enum
Property StartWithWindows As Boolean
Get
@@ -113,15 +124,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 +142,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
@@ -176,6 +178,15 @@ Public Class mgrSettings
End Set
End Property
Property ShowResolvedPaths As Boolean
Get
Return bShowResolvedPaths
End Get
Set(value As Boolean)
bShowResolvedPaths = value
End Set
End Property
ReadOnly Property Prepared7zArguments As String
Get
'Prepare custom 7z arguments
@@ -260,18 +271,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, @ShowResolvedPaths)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray)
@@ -281,11 +331,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 +343,12 @@ 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)
hshParams.Add("ShowResolvedPaths", ShowResolvedPaths)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
@@ -316,11 +371,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 +383,11 @@ 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"))
ShowResolvedPaths = CBool(dr("ShowResolvedPaths"))
Next
oDatabase.Disconnect()
@@ -347,4 +406,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
+26
View File
@@ -154,4 +154,30 @@
Return hshList
End Function
Public Shared Function GetReservedVariables() As List(Of String)
Dim oList As New List(Of String)
oList.Add("APPDATA")
oList.Add("LOCALAPPDATA")
oList.Add("USERDOCUMENTS")
oList.Add("COMMONDOCUMENTS")
oList.Add("USERPROFILE")
oList.Add("PROGRAMDATA")
Return oList
End Function
Public Shared Function CheckForReservedVariables(ByVal sPath As String) As Boolean
Dim s As String
For Each s In GetReservedVariables()
s = "%" & s & "%"
If sPath.Contains(s) Then
Return True
End If
Next
Return False
End Function
End Class
+17 -11
View File
@@ -6,48 +6,55 @@ 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
oGame.Path = g.Path
oGame.FolderSave = g.FolderSave
oGame.AppendTimeStamp = g.AppendTimeStamp
oGame.BackupLimit = g.BackupLimit
oGame.FileType = g.FileType
oGame.ExcludeList = g.ExcludeList
oGame.MonitorOnly = g.MonitorOnly
oGame.Parameter = g.Parameter
oGame.Comments = g.Comments
oGame.IsRegEx = g.IsRegEx
oGame.RecurseSubFolders = g.RecurseSubFolders
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 +71,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 +88,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
+2 -2
View File
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.7.*")>
<Assembly: AssemblyFileVersion("1.0.7.0")>
<Assembly: AssemblyVersion("1.1.6.*")>
<Assembly: AssemblyFileVersion("1.1.6.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")>
+884 -63
View File
File diff suppressed because it is too large Load Diff
+310 -37
View File
@@ -133,9 +133,6 @@
<data name="frmMain_ManifestTotalRemoved" xml:space="preserve">
<value>[PARAM] entries were removed from the local manifest.</value>
</data>
<data name="frmMain_ConfirmManifestClean" xml:space="preserve">
<value>This tool removes orphaned backup information from the local manifest based on the current backup folder. Data can become orphaned when backups are deleted by various computers that share the same backup folder on a cloud or network.[BR][BR]When alternating between different backup folders you should NOT use this tool.[BR][BR]Do you wish to proceed?</value>
</data>
<data name="frmMain_ConfirmRebuild" xml:space="preserve">
<value>This will rebuild all databases and shrink them to an optimal size.[BR]This should only be used if your gbm.s3db files are becoming very large.[BR][BR]Do you wish to continue?</value>
</data>
@@ -269,7 +266,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 +389,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 +403,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>
@@ -437,7 +431,7 @@
<value>&amp;Backup</value>
</data>
<data name="frmGameManager_btnCancel" xml:space="preserve">
<value>&amp;Cancel</value>
<value>Ca&amp;ncel</value>
</data>
<data name="frmGameManager_btnClose" xml:space="preserve">
<value>C&amp;lose</value>
@@ -461,7 +455,7 @@
<value>&amp;Import</value>
</data>
<data name="frmGameManager_btnInclude" xml:space="preserve">
<value>In&amp;clude Items...</value>
<value>Incl&amp;ude Items...</value>
</data>
<data name="frmGameManager_btnMarkAsRestored" xml:space="preserve">
<value>&amp;Mark as Restored</value>
@@ -485,7 +479,7 @@
<value>...</value>
</data>
<data name="frmGameManager_btnTags" xml:space="preserve">
<value>Tags...</value>
<value>&amp;Tags...</value>
</data>
<data name="frmGameManager_chkEnabled" xml:space="preserve">
<value>Monitor this game</value>
@@ -554,7 +548,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>
@@ -596,7 +590,7 @@
<value>Include</value>
</data>
<data name="frmGameManager_IncludeShortcut" xml:space="preserve">
<value>In&amp;clude</value>
<value>Incl&amp;ude</value>
</data>
<data name="frmGameManager_Items" xml:space="preserve">
<value>Items...</value>
@@ -776,7 +770,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 +779,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 +920,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>
@@ -973,7 +967,7 @@
<data name="frmIncludeExclude_FormName" xml:space="preserve">
<value>[PARAM] Builder</value>
</data>
<data name="frmIncludeExclude_grpFileOptions" xml:space="preserve">
<data name="frmIncludeExclude_grpOptions" xml:space="preserve">
<value>[PARAM] Options</value>
</data>
<data name="frmIncludeExclude_lblItems" xml:space="preserve">
@@ -989,7 +983,7 @@
<value>Individual Files</value>
</data>
<data name="frmIncludeExclude_RawEditInfo" xml:space="preserve">
<value>Items are semi-colon delimited.</value>
<value>Items are colon delimited.</value>
</data>
<data name="frmIncludeExclude_RawEditTitle" xml:space="preserve">
<value>[PARAM] Raw Edit</value>
@@ -1081,12 +1075,9 @@
<data name="frmSettings_chkStartWindows" xml:space="preserve">
<value>Start with Windows</value>
</data>
<data name="frmSettings_chkSupressBackup" xml:space="preserve">
<data name="frmSettings_chkSuppressBackup" xml:space="preserve">
<value>Ignore sessions shorter than</value>
</data>
<data name="frmSettings_chkSync" xml:space="preserve">
<value>Enable syncing</value>
</data>
<data name="frmSettings_chkTimeTracking" xml:space="preserve">
<value>Enable time tracking</value>
</data>
@@ -1097,10 +1088,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 +1126,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 +1154,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 +1208,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>
@@ -1292,7 +1280,7 @@
<value>[PARAM] backup completed with warnings.</value>
</data>
<data name="mgrBackup_ConfirmManifestConflict" xml:space="preserve">
<value>The manifest shows the backup folder contains a backup for [PARAM] that has not been restored on this computer.[BR][BR]Do you want to overwrite this file anyway?</value>
<value>The manifest shows the backup folder contains a more recent backup for [PARAM] that has not been restored on this computer.[BR][BR]Do you want to overwrite this file anyway?</value>
</data>
<data name="mgrBackup_ConfirmOverwrite" xml:space="preserve">
<value>A file with the same name already exists in the backup folder.[BR][BR]Do you want to overwrite this file?</value>
@@ -1319,7 +1307,7 @@
<value>[PARAM] backup aborted by user due to overwrite.</value>
</data>
<data name="mgrBackup_ErrorSubFolderCreate" xml:space="preserve">
<value>Backup aborted. A failure occured while creating a backup sub-folder for [PARAM].[BR][PARAM]</value>
<value>A failure occured while creating a backup sub-folder for [PARAM].[BR][PARAM]</value>
</data>
<data name="mgrBackup_GenerateHash" xml:space="preserve">
<value>Generating SHA-256 hash for [PARAM] backup file.</value>
@@ -1610,7 +1598,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 +1637,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 +1765,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>
@@ -2008,4 +1993,292 @@
<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.5 and may contain incompatible configuration data.[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>
<data name="mgrBackup_ConfirmOverwriteRelative" xml:space="preserve">
<value>A file with the same name already exists in the backup folder.[BR][BR]This game stores saves in a relative location, you may need to restore the current backup if the game was recently re-installed.[BR][BR]Do you want to overwrite this file?</value>
</data>
<data name="mgrPath_SpecialPathError" xml:space="preserve">
<value>An error occured while determining a required system path. [BR][BR]The environment value for [PARAM] is empty.[BR][BR]The application will now exit.</value>
</data>
<data name="frmMain_ErrorGameDetails" xml:space="preserve">
<value>An error occured while obtaining the details of the detected game.</value>
</data>
<data name="frmMain_ErrorGameIcon" xml:space="preserve">
<value>An error occured while extracting the executable icon.</value>
</data>
<data name="frmGameManager_ErrorRenameFilesExist" xml:space="preserve">
<value>The backup folder contains one or more backup files that cannot be renamed to [PARAM] because a file using that name already exists.[BR][BR]Do you want to continue and remove the existing files?</value>
</data>
<data name="frmGameManager_ErrorRenameFolderExists" xml:space="preserve">
<value>The backup folder [PARAM] cannot be renamed to [PARAM] because a folder with that name already exists.[BR][BR]Do you want to continue and remove the existing folder?</value>
</data>
<data name="frmMain_WinePrefix" xml:space="preserve">
<value>[PARAM] Wine Prefix: [PARAM]</value>
</data>
<data name="frmMain_WineSavePath" xml:space="preserve">
<value>[PARAM] Converted Save Path: [PARAM]</value>
</data>
<data name="mgrPath_ErrorBuildingWinePath" xml:space="preserve">
<value>An error occured when building a Wine path.[BR][BR][PARAM]</value>
</data>
<data name="mgrPath_ErrorConvertWineSavePath" xml:space="preserve">
<value>An error occured when converting to a Wine save path.[BR][BR][PARAM]</value>
</data>
<data name="mgrPath_ErrorWinePrefix" xml:space="preserve">
<value>An error occured when determining a Wine prefix.[BR][BR][PARAM]</value>
</data>
<data name="mgrPath_ErrorUnixEnv" xml:space="preserve">
<value>An error occured while building a list of environment variables.[BR][BR][PARAM]</value>
</data>
<data name="frmSettings_chkShowResolvedPaths" xml:space="preserve">
<value>Show resolved save paths in Game Manager</value>
</data>
<data name="frmGameManager_7zBackup" xml:space="preserve">
<value>7-Zip</value>
</data>
<data name="frmGameManager_btnImportBackup" xml:space="preserve">
<value>Import B&amp;ackup Files</value>
</data>
<data name="frmGameManager_Choose7zImport" xml:space="preserve">
<value>Choose compatible backup file(s)</value>
</data>
<data name="frmGameManager_ConfirmBackupImport" xml:space="preserve">
<value>Are you sure you want to import the selected file(s) for [PARAM]. This will close the form.</value>
</data>
<data name="mgrBackup_ErrorImportBackupCopy" xml:space="preserve">
<value>Failed to import [PARAM], the file could not be copied.</value>
</data>
<data name="mgrBackup_ImportedFile" xml:space="preserve">
<value>Imported Backup</value>
</data>
<data name="mgrBackup_ImportSuccess" xml:space="preserve">
<value>Imported backup file [PARAM] for [PARAM].</value>
</data>
<data name="frmGameManager_btnProcesses" xml:space="preserve">
<value>Pro&amp;cesses...</value>
</data>
<data name="frmGameManager_WarningImportBackup" xml:space="preserve">
<value>This feature is intended to import 7-Zip backup archives compatible with the selected game configuration.[BR][BR]GBM does NOT verify these files, you should only use files created by GBM or compatible archives created using the same settings as the current game configuration.[BR][BR]This message will only be shown once.</value>
</data>
<data name="frmVariableManager_ErrorVariableReserved" xml:space="preserve">
<value>[PARAM] is a reserved variable, you must enter a different name.</value>
</data>
<data name="frmGameManager_WarningImportBackupSaveMulti" xml:space="preserve">
<value>The "Save multiple backups" option must be enabled on this configuration to import multiple backup files.</value>
</data>
<data name="frmGameManager_cmsOfficialLinux" xml:space="preserve">
<value>&amp;Linux...</value>
</data>
<data name="frmGameManager_cmsOfficialWindows" xml:space="preserve">
<value>&amp;Windows...</value>
</data>
<data name="frmGameManager_WarningWinConfigsInLinux" xml:space="preserve">
<value>Official Windows configurations can be used in Linux for games running in Wine or Proton.[BR][BR]You do not need to modify these configurations, GBM will automatically do any required path conversions the first time the game is detected.[BR][BR]This message will only be shown once.</value>
</data>
<data name="frmGameManager_ConfirmBackupImportOverwriteSingle" xml:space="preserve">
<value>Importing this backup file will overwrite the current backup file for [PARAM].[BR][BR]Do you want to continue? This will close the form.</value>
</data>
<data name="frmFilter_FieldRecurseSubFolders" xml:space="preserve">
<value>Recurse Sub-Folders</value>
</data>
<data name="frmIncludeExclude_chkRecurseSubFolders" xml:space="preserve">
<value>Recurse sub-folders</value>
</data>
<data name="frmMain_DebugMemoryAllocation" xml:space="preserve">
<value>Memory Allocation: [PARAM] MB</value>
</data>
<data name="frmMain_ErrorInvalidMode" xml:space="preserve">
<value>Invalid mode([PARAM]) for command [PARAM].</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.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 358 KiB

+20 -16
View File
@@ -1,25 +1,29 @@
Game Backup Monitor v1.0.7 Readme
Game Backup Monitor v1.1.6 Readme
http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
February 2, 2018
November 17, 2018
New in 1.0.7
New in 1.1.6
All Platforms:
- Added Hours and Total Hours to the Session Viewer
- An Hours column now shows the time spent each session.
- The Total Hours of the currently displayed sessions is now displayed under the grid.
- Added Export feature to the Sessions Viewer
- The session data currently displayed on the grid can be exported in CSV or XML format.
- Dates can be exported in Unix format or the current system format.
- The CSV format can exported with or without headers.
Linux Only:
- A low disk space warning will no longer be displayed on every backup.
- Fixed the column sorting issues on the Session Viewer.
- Added support for games that save to the Windows %PROGRAMDATA% location.
- The Game Manager now automatically selects the last detected game when opened.
- Backup files can no longer be imported into a "Monitor Only" configuration.
- Optimized the memory and cpu usage of Regular Expressions when monitoring for games.
- Added a "Recurse sub-folders" option
- This option is set per game configuration, it is available on Include/Exclude window of the Game Manager and Add Game Wizard.
- It is enabled by default on all current and new configurations.
- Disabling this option prevents 7-Zip and GBM from scanning every sub-folder and file of a save path. This useful when backing up specific files inside an extremely large folder.
- Fixed a possible issue with backups when the configuration uses folder path includes.
Linux:
- Fixed a memory leak issue with Mono and Regular Expressions.
- Fixed some issues when detecting the prefix of Wine/Proton games.
- The default prefix (~/.wine) will be assumed when a detected game does not have the WINEPREFIX variable set.
- A prefix can now be fully detected when it contains spaces.
- Windows configurations that use a relative save path are now properly converted when detected in Wine/Proton.
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.
+3 -1
View File
@@ -9,7 +9,9 @@ Game Backup Monitor is a simple, but flexible application that detects games as
**Platform**: Windows (.NET 4) & Linux (Mono)
[About Game Backup Monitor](http://mikemaximus.github.io/gbm-web/about.html) <br />
[Contribute to Game Backup Monitor](http://mikemaximus.github.io/gbm-web/contribute.html) <br />
[Game Backup Monitor FAQ](http://mikemaximus.github.io/gbm-web/faq.html) <br />
[Game Backup Monitor Manual](http://mikemaximus.github.io/gbm-web/manual.html) <br />
[List of Preconfigured Games](http://mikemaximus.github.io/gbm-web/GBM_Official.xml) <br /> <br />
[Preconfigured Windows Games](http://mikemaximus.github.io/gbm-web/GBM_Official.xml) <br />
[Preconfigured Linux Games](http://mikemaximus.github.io/gbm-web/GBM_Official_Linux.xml) <br /> <br />
Updates regarding this project are available via the [Game Backup Monitor web site](http://mikemaximus.github.io/gbm-web/).
+2 -1
View File
@@ -2,8 +2,9 @@ Package: gbm
Architecture: all
Maintainer: Sebastian Riedel <git@basxto.de>
Priority: optional
Version: 1.0.5
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!
+43 -20
View File
@@ -1,22 +1,45 @@
#!/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;
# prepare
if [ -z "${XDG_DATA_HOME}" ]; then
XDG_DATA_HOME="${HOME}/.local/share"
fi
mkdir -p "${XDG_DATA_HOME}/gbm"
pidfile="${XDG_DATA_HOME}/gbm/pid"
# check whether pid file exists and process is running
if ( ! [ -e "${pidfile}" ] || ! pgrep -F "${pidfile}" ); then
# 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
# directory this script is located in
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
# pass our arguments to GBM and run it in background
mono --desktop "${gbmpath}GBM.exe" "$@" &
# store pid and wait for process to end
echo $! > "${pidfile}"
wait $!
rm "${pidfile}"
exit $?;
else
echo "GBM is already running"
exit 1;
fi
mono --desktop ${gbmpath}'GBM.exe' "$@";
exit $?;