213 Commits

Author SHA1 Message Date
MikeMaximus
2623bf7f7a Fixed timer problem with issue #73 2017-03-24 12:22:10 -06:00
Michael J. Seiferling
6230d2f888 Added new change to the v101 readme 2017-03-23 11:32:10 -06:00
Michael J. Seiferling
adc857fe5e Cleaned up changes for issue #73 2017-03-23 11:10:25 -06:00
Michael J. Seiferling
bddf07ee44 Changes for issue #73 2017-03-23 10:57:11 -06:00
Michael J. Seiferling
63ed3dac67 Redesigned notifications for issue #67 2017-03-23 10:30:03 -06:00
Michael J. Seiferling
922103e5aa Reverted change on About display 2017-03-23 01:14:05 -06:00
Michael J. Seiferling
d0fe33e953 Fixed restore path mismatch with issue #67 2017-03-21 13:25:18 -06:00
MikeMaximus
934d17de47 Merge branch 'master' of https://github.com/MikeMaximus/gbm.git 2017-03-16 17:12:16 -06:00
MikeMaximus
2ccc10bb9c Fixed sync setting conflict with issue #67 2017-03-16 17:12:01 -06:00
Michael J. Seiferling
cc1db7e524 Updated readme for v101 2017-03-16 12:17:47 -06:00
Michael J. Seiferling
c2a9d3ee77 Fixed tab order on settings form 2017-03-15 17:31:29 -06:00
MikeMaximus
65fe7214eb Merge pull request #72 from MikeMaximus/v101
Merge v101 into master
2017-03-15 17:16:31 -06:00
MikeMaximus
71d09126c2 Update README.md 2017-03-14 20:17:20 -06:00
MikeMaximus
2eb0c30702 Update README.md 2017-03-14 20:14:21 -06:00
MikeMaximus
24e1c4b92f Changes for issue #71 2017-03-09 14:46:07 -06:00
Michael J. Seiferling
4e7eb58463 More label updates 2017-02-28 15:41:57 -06:00
MikeMaximus
3ae0d1ba82 Label changes in Game Manager 2017-02-28 14:42:35 -06:00
MikeMaximus
6f3ed9ab81 Added build date and removed revision in About display 2017-02-26 16:01:44 -06:00
MikeMaximus
a490e6d1f2 Fixed timer problem with issue #67 2017-02-26 15:48:48 -06:00
Michael J. Seiferling
a5dd1d547b Relative path fix for issue #67 2017-02-22 12:49:19 -06:00
MikeMaximus
974aaa3638 Updates for issue #67 2017-02-21 16:36:34 -06:00
MikeMaximus
c3b73a9953 Fixed event broken by last commit 2017-02-19 21:34:45 -06:00
MikeMaximus
3bd4cbd0bd Updates for issue #67 2017-02-19 21:22:57 -06:00
MikeMaximus
5a9b3c99b3 Changes for Issue #67 & #70 2017-02-19 14:36:52 -06:00
MikeMaximus
8ce1b00a8c Working fix for issue #68 2017-01-06 08:20:03 -06:00
Michael J. Seiferling
e4237a74bb Modified fix for issue #68 2017-01-05 09:01:40 -06:00
MikeMaximus
72f520f333 Fix for issue #68 2016-12-22 09:20:05 -06:00
Michael J. Seiferling
dc9ec7f190 Merge branch 'master' 2016-12-15 09:09:12 -06:00
Michael J. Seiferling
c0dbd95504 Updated readme.txt for release 2016-12-15 08:49:10 -06:00
MikeMaximus
6c5c54ea1b Merge Master into v101 2016-12-06 13:08:09 -06:00
MikeMaximus
d0c40fd341 Changed button sub-menu placement calculations 2016-12-06 09:25:33 -06:00
MikeMaximus
68855077cf Minor updates for 1.0 release 2016-12-05 10:23:31 -06:00
Michael J. Seiferling
3184cb61ec Removed some unused code 2016-11-14 15:43:16 -06:00
Michael J. Seiferling
8ebfed7ab7 Added experimental "Clean folder on restore" feature 2016-11-14 15:37:44 -06:00
MikeMaximus
229afa92fd Update README.md 2016-10-24 12:25:43 -06:00
MikeMaximus
db6c96a80b Changes for issue #64 2016-10-24 10:04:06 -06:00
Michael J. Seiferling
6d0db7c075 Changes for issue #62 2016-08-31 09:38:31 -06:00
Michael J. Seiferling
e3f5c7e3c0 Changes for issue #61 2016-08-30 21:37:35 -06:00
Michael J. Seiferling
ba1fc76ebe Import fix and license update 2016-08-30 16:21:40 -06:00
Michael J. Seiferling
6de58dc977 Fixed init failures and minor game manager change 2016-08-27 16:46:33 -06:00
Michael J. Seiferling
5e0e1a543f Updated readme 2016-08-27 10:39:55 -06:00
Michael J. Seiferling
7254b6b501 Fixes and issue #60 2016-08-26 11:30:12 -06:00
MikeMaximus
f117e7fbaa Merge pull request #59 from MikeMaximus/manifest_rewrite
Changes for Issue #56 and #58
2016-08-24 21:02:34 -06:00
Michael J. Seiferling
d46bc38bdc Minor string changes 2016-08-24 20:57:09 -06:00
Michael J. Seiferling
a092c1b44f Fixed delete bug with sub-directories enabled 2016-08-23 15:35:57 -06:00
Michael J. Seiferling
77b5efbe02 Manifest Re-write (Clean-up, Pass 3) 2016-08-23 10:14:12 -06:00
Michael J. Seiferling
7a93fd799b Database upgrade fix 2016-08-22 14:43:39 -06:00
Michael J. Seiferling
4108ec36d7 Upgrade fix and message changes 2016-08-22 13:29:38 -06:00
Michael J. Seiferling
87f93ed4f5 Updates and fixes for pass 2 2016-08-21 23:11:26 -06:00
Michael J. Seiferling
18befc19b3 Manifest Re-write (Functional, New Features, Pass 2) 2016-08-21 20:14:07 -06:00
Michael J. Seiferling
bfe2346e8a Manifest Re-write (Functional, Pass 1) 2016-08-21 11:25:10 -06:00
Michael J. Seiferling
9cbc2b3240 Fixes to Game Manager UI 2016-08-18 20:17:02 -06:00
Michael J. Seiferling
1fab0e0cf4 Game Manager UI changes 2016-08-18 18:54:17 -06:00
Michael J. Seiferling
588f51d496 Small changes for issue #56 2016-08-18 17:01:27 -06:00
Michael J. Seiferling
77eb164a62 Changes for issue #56 2016-08-18 16:09:25 -06:00
Michael J. Seiferling
58ec4564ae Fix for issue #57 2016-08-04 09:30:22 -06:00
Michael J. Seiferling
8c1f3144f8 Merge branch 'master' of https://github.com/MikeMaximus/gbm.git 2016-07-11 09:41:57 -06:00
Michael J. Seiferling
507984bdf8 Fix for issue #55 2016-07-11 09:30:38 -06:00
Michael J. Seiferling
378377a1a9 Updated readme.txt for v0.97 2016-06-23 09:56:31 -06:00
Michael J. Seiferling
86ffc75666 Changes for issue #54 2016-06-18 18:41:00 -06:00
Michael J. Seiferling
f312e315b9 Fixed issue with optional fields button 2016-06-15 21:52:20 -06:00
Michael J. Seiferling
e567638c0e Minor Settings changes 2016-06-14 16:11:00 -06:00
Michael J. Seiferling
1f9fcca024 Fixed Settings tab order 2016-06-11 23:14:46 -06:00
Michael J. Seiferling
b68646c97e Minor settings UI changes 2016-06-11 18:12:30 -06:00
Michael J. Seiferling
896c77fe11 Settings label change 2016-06-11 11:32:57 -06:00
Michael J. Seiferling
e288c77ba8 Changes for issue #52 2016-06-10 12:06:01 -06:00
Michael J. Seiferling
8b779f6d66 Fixed small typo in new string 2016-06-09 20:28:10 -06:00
Michael J. Seiferling
ef6e608d30 Changes for issue #27 2016-06-09 12:37:48 -06:00
Michael J. Seiferling
7b524e42fc Removed maintenance code from frmSyncFields 2016-06-07 17:16:20 -06:00
Michael J. Seiferling
2beff1b46d Additions for issue #48 2016-06-07 17:11:52 -06:00
Michael J. Seiferling
0ad4fd890d Changes for issue #51 2016-06-03 19:53:52 -06:00
Michael J. Seiferling
761fed64cc Revert "Changes for issue #51"
This reverts commit f839793071.
2016-06-03 19:50:40 -06:00
Michael J. Seiferling
f839793071 Changes for issue #51 2016-06-03 19:50:25 -06:00
Michael J. Seiferling
b8b4c63910 Fixes for issue #50 2016-05-27 17:13:17 -06:00
Michael J. Seiferling
ef70c08469 Minor fixes 2016-05-27 08:53:17 -06:00
Michael J. Seiferling
45e59f8ae6 Added a quick find filter to Game Manager 2016-05-26 16:50:31 -06:00
Michael J. Seiferling
cb9bab9892 Changes for Issues #46 and #47 2016-05-26 14:13:14 -06:00
Michael J. Seiferling
7f19ae6345 Added basic 7za validation 2016-05-25 15:20:44 -06:00
Michael J. Seiferling
ab240b610c Removed sync fields from upgrade 2016-05-25 09:15:48 -06:00
Michael J. Seiferling
6c80094848 Fixed Settings tab order 2016-05-24 11:44:17 -06:00
Michael J. Seiferling
16649238f0 Minor Settings UI updates 2016-05-24 11:26:49 -06:00
Michael J. Seiferling
39460f57d5 Reverted new Sync settings 2016-05-24 11:15:29 -06:00
Michael J. Seiferling
d788c751f7 Settings UI changes 2016-05-23 14:49:37 -06:00
Michael J. Seiferling
3acb790822 Added new 7z functionality 2016-05-23 09:20:18 -06:00
Michael J. Seiferling
0e4f357c01 Added backend for new Settings 2016-05-22 22:47:28 -06:00
Michael J. Seiferling
58684bf9a5 Updated Settings UI for v0.97 2016-05-22 10:32:00 -06:00
Michael J. Seiferling
1d19a49b0e Updated 7z to v16.02 [2016-05-21] 2016-05-21 22:11:54 -06:00
Michael J. Seiferling
94bb4e70ef Updated readme.txt for v0.96.5977 2016-05-13 07:49:31 -06:00
Michael J. Seiferling
1c493f1d4e Updated 7z to v16 [2016-05-10] 2016-05-13 07:43:28 -06:00
Michael J. Seiferling
970b1f4e58 Final changes and fixes for v0.96 2016-03-24 19:48:13 -06:00
Michael J. Seiferling
911b3bdfc4 Updated readme for stable release 2016-03-24 19:16:05 -06:00
Michael J. Seiferling
ce759fe87f Merge pull request #44 from MikeMaximus/msgbox_crash_fix
Merge fixes for issue #43
2016-03-24 17:50:30 -06:00
Michael J. Seiferling
d1ca0a150e Alignment fix on search form 2016-03-24 17:45:02 -06:00
Michael J. Seiferling
b149a19a8b Added drive selector to search 2016-03-24 15:46:33 -06:00
Michael J. Seiferling
b458b89b46 Minor search and builder fix 2016-03-24 12:24:54 -06:00
Michael J. Seiferling
83df2edc90 Hide duplicate search results 2016-03-23 17:13:15 -06:00
Michael J. Seiferling
31b72488b2 Test fixes for issue #43 2016-03-23 16:52:03 -06:00
Michael J. Seiferling
3dbf5d0e62 Fix for issue #42 2016-03-18 13:09:55 -06:00
Michael J. Seiferling
2eb6693275 More cosmetic changes 2016-03-13 20:24:30 -06:00
Michael J. Seiferling
d1e292d4bf Cosmetic updates 2016-03-13 14:26:31 -06:00
Michael J. Seiferling
640690514b Pre-release readme update 2016-03-12 10:19:09 -06:00
Michael J. Seiferling
aade2dcee9 Pre-release readme update 2016-03-12 10:17:48 -06:00
Michael J. Seiferling
76ffc79a6b Usability updates for #22 2016-03-12 10:10:06 -06:00
Michael J. Seiferling
a6341ffa76 Updates for issue #22 2016-03-11 16:26:20 -06:00
Michael J. Seiferling
09c7bf8f05 Fixed some minor list box issues 2016-03-08 20:41:46 -06:00
Michael J. Seiferling
039f47fccd Fixed issue #41 2016-03-06 17:00:53 -06:00
Michael J. Seiferling
164bb4255e Revert "Fixed issue #41"
This reverts commit df5e8f2d2a.
2016-03-06 16:51:26 -06:00
Michael J. Seiferling
df5e8f2d2a Fixed issue #41 2016-03-06 16:49:02 -06:00
Michael J. Seiferling
7766a07cf3 Update README.md 2016-03-06 15:26:41 -06:00
Michael J. Seiferling
e71b2f4064 Merge pull request #40 from MikeMaximus/mono-test
Merge multi-platform test branch into master
2016-03-06 15:15:53 -06:00
Michael J. Seiferling
be2335b61e Fixes for issue #39 2016-03-06 12:06:43 -06:00
Michael J. Seiferling
ca9fef33ea Fixes for issues #37 and #39 2016-03-05 15:56:02 -06:00
Michael J. Seiferling
93c9b1a5ee Clean up for issue #37 2016-03-05 13:39:48 -06:00
Michael J. Seiferling
730305b694 Changes for issue #37 and #38 2016-03-05 13:24:48 -06:00
Michael J. Seiferling
8880373f34 Final pre-release changes 2016-03-03 21:16:17 -06:00
Michael J. Seiferling
321c72b6bf Minor restore fixes 2016-03-03 19:28:04 -06:00
Michael J. Seiferling
163b6cd3a0 Fixed GetBuilderRoot function 2016-03-03 18:21:06 -06:00
Michael J. Seiferling
44c2d98f25 Simplified GetUnixSymLinkDirectory function 2016-03-03 17:15:42 -06:00
Michael J. Seiferling
f050061b76 Path fixes and PNG Unix icons 2016-03-03 16:42:49 -06:00
Michael J. Seiferling
0cafd00bf3 Unix path fixes and search lock out 2016-03-03 15:22:47 -06:00
Michael J. Seiferling
feb8a9d0b2 Added Wine detection support 2016-03-03 13:05:50 -06:00
Michael J. Seiferling
d46360b244 More compatability updates 2016-03-02 19:15:32 -06:00
Michael J. Seiferling
ca8798a460 Fixed minor tray and startup issue 2016-03-02 11:43:34 -06:00
Michael J. Seiferling
da16a89baa Fixed unreliable visible check 2016-03-02 10:42:37 -06:00
Michael J. Seiferling
b03545d86f OS specific 7za argument handler 2016-03-02 10:32:04 -06:00
Michael J. Seiferling
430e1171fb Added post build events 2016-03-02 10:22:09 -06:00
Michael J. Seiferling
e531ec5701 Unix fixes and feature lock outs 2016-03-02 01:07:27 -06:00
Michael J. Seiferling
7a7fa65ce6 Functional in Mono 2016-03-01 23:27:42 -06:00
Michael J. Seiferling
4c7d36baef Update to DetermineRelativePath function 2016-02-29 15:59:49 -06:00
Michael J. Seiferling
de7a993abe Changes for multi-platform support 2016-02-29 12:24:56 -06:00
Michael J. Seiferling
ec47697434 Tweak for issue #36 2016-02-27 15:58:24 -06:00
Michael J. Seiferling
a7b97912f2 Update for issue #36 2016-02-24 11:01:43 -06:00
Michael J. Seiferling
8222f518f6 Update for issue #35 2016-02-21 22:31:27 -06:00
Michael J. Seiferling
0a564ca510 v0.96 preview release update 2016-02-19 10:06:31 -06:00
Michael J. Seiferling
85d9cc0c5f Fix for issue #34 2016-02-11 19:18:08 -06:00
Michael J. Seiferling
abbc6a4a70 Update for issue #33 2016-02-06 09:28:39 -06:00
Michael J. Seiferling
5947b7d0b2 Fixed issue #30 2016-02-05 09:18:23 -06:00
Michael J. Seiferling
2fb18c5f19 Changes for issue #27 2016-02-02 10:29:28 -06:00
Michael J. Seiferling
47f4b0774d Fixed issue #32 2016-01-30 09:42:27 -06:00
Michael J. Seiferling
70be04b750 Update for issue 31 2016-01-08 09:51:47 -06:00
Michael J. Seiferling
b5d6c058aa Updated readme for stable release 2015-12-30 23:28:52 -06:00
Michael J. Seiferling
c847cf53d0 Fixed a few string typos 2015-12-30 21:35:42 -06:00
Michael J. Seiferling
92ad195510 Merge pull request #28 from MikeMaximus/v96
Merge current v96 changes into v95
2015-12-30 21:24:59 -06:00
Michael J. Seiferling
18686abced Reverted version for merge 2015-12-30 21:20:07 -06:00
Michael J. Seiferling
4f45239e90 Changed maximum size of session log 2015-12-29 22:35:56 -06:00
Michael J. Seiferling
88e0fa9afd Moved remaining strings to resource (managers) 2015-12-24 11:19:53 -06:00
Michael J. Seiferling
51ca315edd Moved strings to resource (frmStartupWizard, frmTags, frmCustomVariables) 2015-12-23 20:51:54 -06:00
Michael J. Seiferling
da9a1d8b53 Moved strings to resource (frmGameTags, frmIncludeExclude, frmSettings) 2015-12-23 19:54:45 -06:00
Michael J. Seiferling
0e93d284ea Moved strings to resource (frmAdvancedImport, frmChooseGame, frmFileFolderSearch, frmFilter) 2015-12-22 19:50:40 -06:00
Michael J. Seiferling
96ca94a3ac Moved strings to resource (frmAddWizard) 2015-12-22 13:31:15 -06:00
Michael J. Seiferling
83e14a20ad Renamed image resources 2015-12-22 10:09:37 -06:00
Michael J. Seiferling
3c941bae8d Reduced resource code usage 2015-12-22 09:57:46 -06:00
Michael J. Seiferling
4316a7c7be Moved strings to resource (frmGameManager) 2015-12-21 12:06:34 -06:00
Michael J. Seiferling
8778f2e1c0 Moved strings to resource (frmMain) 2015-12-19 16:53:47 -06:00
Michael J. Seiferling
8930f6d6cc Added common message box function 2015-12-18 12:16:09 -06:00
Michael J. Seiferling
50cb987e9a Updated readme for pre-release 2015-12-15 10:45:32 -06:00
Michael J. Seiferling
333d18f296 Minor UI changes to Settings and Game Manager 2015-12-14 23:42:50 -06:00
Michael J. Seiferling
f79c446adc Fixed issue #26 2015-12-14 12:08:45 -06:00
Michael J. Seiferling
022ef5d35c Minor UI and validation fixes 2015-12-12 22:22:20 -06:00
Michael J. Seiferling
3f35d442d5 Minor UI and Start Up Wizard changes 2015-12-11 14:33:02 -06:00
Michael J. Seiferling
3c64ef3320 Moved import / export features into Game Manager 2015-12-10 21:35:51 -06:00
Michael J. Seiferling
8a359e949a Minor UI changes 2015-12-09 18:25:47 -06:00
Michael J. Seiferling
19802a5883 Updated for issue 25 2015-12-09 12:00:10 -06:00
Michael J. Seiferling
87326981dd Updates for issues 20 and 24 2015-12-08 10:10:44 -06:00
Michael J. Seiferling
f22bcb91a9 Update for issues 23 and 24 2015-12-07 16:31:28 -06:00
Michael J. Seiferling
fa27c3c389 Fixed issue 23 2015-12-07 15:19:41 -06:00
Michael J. Seiferling
d42093c860 Minor UI fixes for issue 20 2015-12-06 23:50:29 -06:00
Michael J. Seiferling
7871b6e012 Updates for issue 20 and minor UI fixes 2015-12-06 20:41:24 -06:00
Michael J. Seiferling
d26c78c093 Usability updates for filters and wizards 2015-12-05 21:27:53 -06:00
Michael J. Seiferling
80badb577a Fixed import bug caused by issue 13 2015-12-05 17:24:50 -06:00
Michael J. Seiferling
b270ffeabe Fixes for backup threshold setting 2015-12-05 13:14:16 -06:00
Michael J. Seiferling
83135acb90 Added backup threshold setting (Issue 19) 2015-12-05 10:42:55 -06:00
Michael J. Seiferling
1e68728930 Changes for issue 20 and tooltip changes 2015-12-04 11:57:54 -06:00
Michael J. Seiferling
a27802fea7 Removed DOSBox update from DB upgrade 2015-12-04 10:42:22 -06:00
Michael J. Seiferling
7abdf9da7b Bug fixes for issues 13, 18, 21 2015-12-04 10:27:25 -06:00
Michael J. Seiferling
237f5e7fa4 UI fixes (sorting on listboxes) 2015-12-03 22:21:38 -06:00
Michael J. Seiferling
f8207683ad Various UI fixes 2015-12-02 20:40:40 -06:00
Michael J. Seiferling
b96f797bbf Removed unique DOSBox handling 2015-12-01 12:43:58 -06:00
Michael J. Seiferling
07a4981488 Fixed directory rename bug 2015-12-01 10:56:00 -06:00
Michael J. Seiferling
e0277ac0fa Merge branch 'v95' 2015-12-01 00:40:25 -06:00
Michael J. Seiferling
b86206a7a2 v0.94 Final commit 2015-12-01 00:00:16 -06:00
Michael J. Seiferling
39bbafd731 Various tweaks and changes 2015-11-30 21:25:39 -06:00
Michael J. Seiferling
3062b20775 Second pass of include / exclude builder 2015-11-30 15:05:46 -06:00
Michael J. Seiferling
525c7d3ec3 Added context menu and game manager tweaks 2015-11-29 11:39:25 -06:00
Michael J. Seiferling
0339a09b08 Minor clean-up to various forms 2015-11-27 22:33:34 -06:00
Michael J. Seiferling
1b47b6aa15 Fixed another form border style 2015-11-27 17:08:45 -06:00
Michael J. Seiferling
de5d1e062a First pass of include / exclude builder 2015-11-27 17:07:50 -06:00
Michael J. Seiferling
7e1302714d Started on include / exclude builder 2015-11-27 12:28:08 -06:00
Michael J. Seiferling
27f03cbd35 Fixed missed field change 2015-11-24 14:26:31 -06:00
Michael J. Seiferling
254bcbbab5 Changed data managers to use field names 2015-11-24 14:20:07 -06:00
Michael J. Seiferling
2617852d77 Fixed exporting wrong field 2015-11-24 11:51:10 -06:00
Michael J. Seiferling
ca7cc7824a Update README.md 2015-11-18 00:09:50 -06:00
Michael J. Seiferling
91f423d7ae Better import/export path fix 2015-11-17 13:45:56 -06:00
Michael J. Seiferling
2744aa7cbc v0.94 pre-release import hot fix 2015-11-17 11:33:23 -06:00
Michael J. Seiferling
aba6ed1462 v0.94 pre-release final commit 2015-11-17 11:08:03 -06:00
Michael J. Seiferling
0ba1323fb2 Empty filter fix 2015-11-16 14:21:12 -06:00
Michael J. Seiferling
c05ef0f32f Added more filter options 2015-11-16 13:35:10 -06:00
Michael J. Seiferling
a8cda1d5f8 Changed some sync logic 2015-11-16 11:16:35 -06:00
Michael J. Seiferling
049878202a Fixed border style on new forms 2015-11-14 22:53:58 -06:00
Michael J. Seiferling
0a3bb9a58f Added filtering by tags 2015-11-14 20:39:48 -06:00
Michael J. Seiferling
040d6c4bf3 Fixed Sync ID issue 2015-11-14 15:55:05 -06:00
Michael J. Seiferling
e13b6cd58b Added missing form resx 2015-11-14 14:30:50 -06:00
Michael J. Seiferling
7c1698388a Sync Overhaul (Tag Support and Efficiency) 2015-11-14 14:09:29 -06:00
Michael J. Seiferling
ebf5fb5f4d Rewrote import / export 2015-11-14 01:14:44 -06:00
Michael J. Seiferling
5357fb214d Add tagging support for games 2015-11-13 17:59:27 -06:00
Michael J. Seiferling
5e5da3c068 Reworked notifications 2015-11-12 19:46:31 -06:00
Michael J. Seiferling
3743e71288 v0.94 bug fixes and feature additions 2015-11-12 16:28:00 -06:00
Michael J. Seiferling
0c3f3fd5f4 Merge branch 'master' of https://github.com/MikeMaximus/gbm.git 2015-11-11 20:16:06 -06:00
Michael J. Seiferling
2e63862493 Updates for the GitHub move 2015-11-11 20:16:00 -06:00
Michael J. Seiferling
c7a279e11a Update README.md 2015-11-11 17:26:03 -06:00
MikeMaximus
90b1194cc5 Update README.md 2015-11-09 12:47:36 -06:00
MikeMaximus
d489738d08 Update README.md 2015-11-09 12:41:05 -06:00
MikeMaximus
0fc6ce772b Update README.md 2015-11-09 12:37:31 -06:00
86 changed files with 15827 additions and 3117 deletions
+83
View File
@@ -0,0 +1,83 @@
Public Class Game
Private sGameName As String
Private sProcessName As String
Private sPath As String
Private bAbsolutePath As Boolean
Private bFolderSave As Boolean
Private sFileType As String
Private sExcludeList As String
Private oTags As List(Of Tag)
Property Name As String
Set(value As String)
sGameName = value
End Set
Get
Return sGameName
End Get
End Property
Property ProcessName As String
Set(value As String)
sProcessName = value
End Set
Get
Return sProcessName
End Get
End Property
Property Path As String
Set(value As String)
sPath = value
End Set
Get
Return sPath
End Get
End Property
Property AbsolutePath As Boolean
Set(value As Boolean)
bAbsolutePath = value
End Set
Get
Return bAbsolutePath
End Get
End Property
Property FolderSave As Boolean
Set(value As Boolean)
bFolderSave = value
End Set
Get
Return bFolderSave
End Get
End Property
Property FileType As String
Set(value As String)
sFileType = value
End Set
Get
Return sFileType
End Get
End Property
Property ExcludeList As String
Set(value As String)
sExcludeList = value
End Set
Get
Return sExcludeList
End Get
End Property
Property Tags As List(Of Tag)
Get
Return oTags
End Get
Set(value As List(Of Tag))
oTags = value
End Set
End Property
End Class
+13
View File
@@ -0,0 +1,13 @@
Public Class Tag
Private sTagName As String
Property Name As String
Get
Return sTagName
End Get
Set(value As String)
sTagName = value
End Set
End Property
End Class
+6 -22
View File
@@ -7,8 +7,6 @@
Private sRelativeRestorePath As String = String.Empty Private sRelativeRestorePath As String = String.Empty
Private dDateUpdated As DateTime = Date.Now Private dDateUpdated As DateTime = Date.Now
Private sUpdatedBy As String = String.Empty Private sUpdatedBy As String = String.Empty
Private dLastDateUpdated As DateTime = Date.Now
Private sLastUpdatedBy As String = String.Empty
Private sCheckSum As String = String.Empty Private sCheckSum As String = String.Empty
Property ID As String Property ID As String
@@ -32,7 +30,7 @@
ReadOnly Property CroppedName As String ReadOnly Property CroppedName As String
Get Get
If Name.Length > 40 Then If Name.Length > 40 Then
Return sName.Substring(0, 41) & "..." Return sName.Substring(0, 41).Trim & "..."
Else Else
Return sName Return sName
End If End If
@@ -41,7 +39,11 @@
Property FileName As String Property FileName As String
Get Get
Return sFileName If mgrCommon.IsUnix Then
Return sFileName.Replace("\", "/")
Else
Return sFileName.Replace("/", "\")
End If
End Get End Get
Set(value As String) Set(value As String)
sFileName = value sFileName = value
@@ -105,24 +107,6 @@
End Set End Set
End Property End Property
Property LastDateUpdated As DateTime
Get
Return dLastDateUpdated
End Get
Set(value As DateTime)
dLastDateUpdated = value
End Set
End Property
Property LastUpdatedBy As String
Get
Return sLastUpdatedBy
End Get
Set(value As String)
sLastUpdatedBy = value
End Set
End Property
Property CheckSum As String Property CheckSum As String
Get Get
Return sCheckSum Return sCheckSum
+114 -30
View File
@@ -7,6 +7,8 @@
Private bFolderSave As Boolean = False Private bFolderSave As Boolean = False
Private sFileType As String = String.Empty Private sFileType As String = String.Empty
Private bAppendTimeStamp As Boolean = False Private bAppendTimeStamp As Boolean = False
Private iBackupLimit As Integer = 2
Private bCleanFolder As Boolean = False
Private sExcludeList As String = String.Empty Private sExcludeList As String = String.Empty
Private sProcessPath As String = String.Empty Private sProcessPath As String = String.Empty
Private sIcon As String = String.Empty Private sIcon As String = String.Empty
@@ -16,8 +18,18 @@
Private bEnabled As Boolean = True Private bEnabled As Boolean = True
Private bMonitorOnly As Boolean = False Private bMonitorOnly As Boolean = False
Private bDuplicate As Boolean = False Private bDuplicate As Boolean = False
Private sDOSBoxProcess As String = String.Empty
Private bTempGame As Boolean = False Private bTempGame As Boolean = False
Private oImportTags As New List(Of Tag)
<Flags()> Public Enum eOptionalSyncFields
None = 0
GamePath = 1
Company = 2
Version = 4
Icon = 16
TimeStamp = 32
MonitorGame = 64
End Enum
Property ID As String Property ID As String
Set(value As String) Set(value As String)
@@ -28,17 +40,22 @@
End Get End Get
End Property End Property
ReadOnly Property CompoundKey As String
Get
Return ProcessName & ":" & Name
End Get
End Property
ReadOnly Property CroppedName As String ReadOnly Property CroppedName As String
Get Get
If Name.Length > 40 Then If Name.Length > 40 Then
Return sGameName.Substring(0, 41) & "..." Return sGameName.Substring(0, 41).Trim & "..."
Else Else
Return sGameName Return sGameName
End If End If
End Get End Get
End Property End Property
Property Name As String Property Name As String
Set(value As String) Set(value As String)
sGameName = value sGameName = value
@@ -102,6 +119,24 @@
End Set End Set
End Property End Property
Property BackupLimit As Integer
Get
Return iBackupLimit
End Get
Set(value As Integer)
iBackupLimit = value
End Set
End Property
Property CleanFolder As Boolean
Get
Return bCleanFolder
End Get
Set(value As Boolean)
bCleanFolder = value
End Set
End Property
Property ExcludeList As String Property ExcludeList As String
Set(value As String) Set(value As String)
sExcludeList = value sExcludeList = value
@@ -157,39 +192,30 @@
End Property End Property
Property Enabled As Boolean Property Enabled As Boolean
Set(value As Boolean)
bEnabled = value
End Set
Get Get
Return bEnabled Return bEnabled
End Get End Get
Set(value As Boolean)
bEnabled = value
End Set
End Property End Property
Property MonitorOnly As Boolean Property MonitorOnly As Boolean
Set(value As Boolean)
bMonitorOnly = value
End Set
Get Get
Return bMonitorOnly Return bMonitorOnly
End Get End Get
Set(value As Boolean)
bMonitorOnly = value
End Set
End Property End Property
Property Duplicate As Boolean Property Duplicate As Boolean
Set(value As Boolean)
bDuplicate = value
End Set
Get Get
Return bDuplicate Return bDuplicate
End Get End Get
End Property Set(value As Boolean)
bDuplicate = value
Property DOSBoxProcess As String
Set(value As String)
sDOSBoxProcess = value
End Set End Set
Get
Return sDOSBoxProcess
End Get
End Property End Property
ReadOnly Property TruePath As String ReadOnly Property TruePath As String
@@ -213,11 +239,24 @@
End Set End Set
End Property End Property
Public Function SyncEquals(obj As Object) As Boolean Property ImportTags As List(Of Tag)
Get
Return oImportTags
End Get
Set(value As List(Of Tag))
oImportTags = value
End Set
End Property
Public Function SyncEquals(obj As Object, eSyncFields As eOptionalSyncFields) As Boolean
Dim oGame As clsGame = TryCast(obj, clsGame) Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then If oGame Is Nothing Then
Return False Return False
Else Else
'Core Sync Fields
If ID <> oGame.ID Then
Return False
End If
If Name <> oGame.Name Then If Name <> oGame.Name Then
Return False Return False
End If End If
@@ -239,12 +278,53 @@
If FolderSave <> oGame.FolderSave Then If FolderSave <> oGame.FolderSave Then
Return False Return False
End If End If
If CleanFolder <> oGame.CleanFolder Then
Return False
End If
If AppendTimeStamp <> oGame.AppendTimeStamp Then If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False Return False
End If End If
If Hours <> oGame.Hours Then If Hours <> oGame.Hours Then
Return False Return False
End If End If
If MonitorOnly <> oGame.MonitorOnly Then
Return False
End If
'Optional Sync Fields
If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then
If Company <> oGame.Company Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.GamePath) = eOptionalSyncFields.GamePath Then
If ProcessPath <> oGame.ProcessPath Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.Icon) = eOptionalSyncFields.Icon Then
If Icon <> oGame.Icon Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.MonitorGame) = eOptionalSyncFields.MonitorGame Then
If Enabled <> oGame.Enabled Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.TimeStamp) = eOptionalSyncFields.TimeStamp Then
If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False
End If
If BackupLimit <> oGame.BackupLimit Then
Return False
End If
End If
If (eSyncFields And eOptionalSyncFields.Version) = eOptionalSyncFields.Version Then
If Version <> oGame.Version Then
Return False
End If
End If
Return True Return True
End If End If
End Function End Function
@@ -264,6 +344,18 @@
End If End If
End Function End Function
Public Function MinimalEquals(obj As Object) As Boolean
Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then
Return False
Else
If ID <> oGame.ID Then
Return False
End If
Return True
End If
End Function
Public Function ShallowCopy() As clsGame Public Function ShallowCopy() As clsGame
Return DirectCast(Me.MemberwiseClone(), clsGame) Return DirectCast(Me.MemberwiseClone(), clsGame)
End Function End Function
@@ -274,15 +366,7 @@
'Handle Duplicates 'Handle Duplicates
sProcessName = Me.ProcessName sProcessName = Me.ProcessName
If Me.Duplicate Then If Me.Duplicate Then
If Me.ProcessName.Contains("dosbox") Then sProcessName = Me.ProcessName.Split(":")(0)
If Me.ProcessName.Split(":").Length = 3 Then
sProcessName = Me.ProcessName.Remove(Me.ProcessName.LastIndexOf(":"))
Else
sProcessName = Me.ProcessName
End If
Else
sProcessName = Me.ProcessName.Split(":")(0)
End If
End If End If
Return sProcessName Return sProcessName
+38
View File
@@ -0,0 +1,38 @@
Public Class clsGameTag
Private sTagID As String = String.Empty
Private sMonitorID As String = String.Empty
Property TagID As String
Get
Return sTagID
End Get
Set(value As String)
sTagID = value
End Set
End Property
Property MonitorID As String
Get
Return sMonitorID
End Get
Set(value As String)
sMonitorID = value
End Set
End Property
Public Function CoreEquals(obj As Object) As Boolean
Dim oGameTag As clsGameTag = TryCast(obj, clsGameTag)
If oGameTag Is Nothing Then
Return False
Else
If TagID <> oGameTag.TagID Then
Return False
End If
If MonitorID <> oGameTag.MonitorID Then
Return False
End If
Return True
End If
End Function
End Class
-23
View File
@@ -1,23 +0,0 @@
Public Class clsRestoreCache
Private sName As String
Private sPath As String
Property Name As String
Get
Return sName
End Get
Set(value As String)
sName = value
End Set
End Property
Property Path As String
Get
Return sPath
End Get
Set(value As String)
sPath = value
End Set
End Property
End Class
+50
View File
@@ -0,0 +1,50 @@
Public Class clsTag
Private sTagID As String = Guid.NewGuid.ToString
Private sTagName As String = String.Empty
Property ID As String
Get
Return sTagID
End Get
Set(value As String)
sTagID = value
End Set
End Property
Property Name As String
Get
Return sTagName
End Get
Set(value As String)
sTagName = value
End Set
End Property
Public Function CoreEquals(obj As Object) As Boolean
Dim oTag As clsTag = TryCast(obj, clsTag)
If oTag Is Nothing Then
Return False
Else
If ID <> oTag.ID Then
Return False
End If
If Name <> oTag.Name Then
Return False
End If
Return True
End If
End Function
Public Function MinimalEquals(obj As Object) As Boolean
Dim oTag As clsTag = TryCast(obj, clsTag)
If oTag Is Nothing Then
Return False
Else
If ID <> oTag.ID Then
Return False
End If
Return True
End If
End Function
End Class
+143 -236
View File
@@ -26,21 +26,18 @@ Partial Class frmAddWizard
Me.tabWizard = New System.Windows.Forms.TabControl() Me.tabWizard = New System.Windows.Forms.TabControl()
Me.tbPage1 = New System.Windows.Forms.TabPage() Me.tbPage1 = New System.Windows.Forms.TabPage()
Me.lblStep1Title = New System.Windows.Forms.Label() Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblDrag1 = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label() Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.txtName = New System.Windows.Forms.TextBox() Me.txtName = New System.Windows.Forms.TextBox()
Me.lblStep1Intro = New System.Windows.Forms.Label() Me.lblStep1Intro = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage() Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.lbldBox = New System.Windows.Forms.Label()
Me.btndBoxBrowse = New System.Windows.Forms.Button()
Me.txtdBoxProcess = New System.Windows.Forms.TextBox()
Me.lblStep2Title = New System.Windows.Forms.Label() Me.lblStep2Title = New System.Windows.Forms.Label()
Me.lblStep2Instructions = New System.Windows.Forms.Label() Me.lblStep2Instructions = New System.Windows.Forms.Label()
Me.lblDrag2 = New System.Windows.Forms.Label()
Me.btnProcessBrowse = New System.Windows.Forms.Button() Me.btnProcessBrowse = New System.Windows.Forms.Button()
Me.txtProcessPath = New System.Windows.Forms.TextBox() Me.txtProcessPath = New System.Windows.Forms.TextBox()
Me.lblStep2Intro = New System.Windows.Forms.Label() Me.lblStep2Intro = New System.Windows.Forms.Label()
Me.tbPage3 = New System.Windows.Forms.TabPage() Me.tbPage3 = New System.Windows.Forms.TabPage()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
Me.lblStep3Title = New System.Windows.Forms.Label() Me.lblStep3Title = New System.Windows.Forms.Label()
Me.lblStep3Instructions = New System.Windows.Forms.Label() Me.lblStep3Instructions = New System.Windows.Forms.Label()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox() Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
@@ -49,21 +46,18 @@ Partial Class frmAddWizard
Me.txtSavePath = New System.Windows.Forms.TextBox() Me.txtSavePath = New System.Windows.Forms.TextBox()
Me.lblStep3Intro = New System.Windows.Forms.Label() Me.lblStep3Intro = New System.Windows.Forms.Label()
Me.tbPage3a = New System.Windows.Forms.TabPage() Me.tbPage3a = New System.Windows.Forms.TabPage()
Me.grpFileTypes = New System.Windows.Forms.GroupBox() Me.lblIncludePathTitle = New System.Windows.Forms.Label()
Me.optSpecificFile = New System.Windows.Forms.RadioButton() Me.lblIncludePath = New System.Windows.Forms.Label()
Me.btnFileTypeBrowse = New System.Windows.Forms.Button() Me.lblFileTypes = New System.Windows.Forms.Label()
Me.optFileType = New System.Windows.Forms.RadioButton() Me.btnInclude = New System.Windows.Forms.Button()
Me.btnStep3aClear = New System.Windows.Forms.Button()
Me.lblStep3aTitle = New System.Windows.Forms.Label() Me.lblStep3aTitle = New System.Windows.Forms.Label()
Me.lblStep3aInstructions = New System.Windows.Forms.Label() Me.lblStep3aInstructions = New System.Windows.Forms.Label()
Me.txtFileTypes = New System.Windows.Forms.TextBox() Me.txtFileTypes = New System.Windows.Forms.TextBox()
Me.tbPage4 = New System.Windows.Forms.TabPage() Me.tbPage4 = New System.Windows.Forms.TabPage()
Me.grpExclude = New System.Windows.Forms.GroupBox() Me.lblExcludePathTitle = New System.Windows.Forms.Label()
Me.optExcludeSpecificFile = New System.Windows.Forms.RadioButton() Me.lblExcludePath = New System.Windows.Forms.Label()
Me.btnExcludeBrowse = New System.Windows.Forms.Button() Me.lblExclude = New System.Windows.Forms.Label()
Me.optExcludeFileType = New System.Windows.Forms.RadioButton() Me.btnExclude = New System.Windows.Forms.Button()
Me.optExcludeFolder = New System.Windows.Forms.RadioButton()
Me.btnStep4Clear = New System.Windows.Forms.Button()
Me.lblStep4Title = New System.Windows.Forms.Label() Me.lblStep4Title = New System.Windows.Forms.Label()
Me.lblStep4Instructions = New System.Windows.Forms.Label() Me.lblStep4Instructions = New System.Windows.Forms.Label()
Me.txtExcludeList = New System.Windows.Forms.TextBox() Me.txtExcludeList = New System.Windows.Forms.TextBox()
@@ -74,15 +68,13 @@ Partial Class frmAddWizard
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.btnNext = New System.Windows.Forms.Button() Me.btnNext = New System.Windows.Forms.Button()
Me.btnBack = New System.Windows.Forms.Button() Me.btnBack = New System.Windows.Forms.Button()
Me.optFileTypeFolder = New System.Windows.Forms.RadioButton()
Me.tabWizard.SuspendLayout() Me.tabWizard.SuspendLayout()
Me.tbPage1.SuspendLayout() Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout() Me.tbPage2.SuspendLayout()
Me.tbPage3.SuspendLayout() Me.tbPage3.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tbPage3a.SuspendLayout() Me.tbPage3a.SuspendLayout()
Me.grpFileTypes.SuspendLayout()
Me.tbPage4.SuspendLayout() Me.tbPage4.SuspendLayout()
Me.grpExclude.SuspendLayout()
Me.tbPage5.SuspendLayout() Me.tbPage5.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
@@ -105,7 +97,6 @@ Partial Class frmAddWizard
' '
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
Me.tbPage1.Controls.Add(Me.lblStep1Title) Me.tbPage1.Controls.Add(Me.lblStep1Title)
Me.tbPage1.Controls.Add(Me.lblDrag1)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions) Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
Me.tbPage1.Controls.Add(Me.txtName) Me.tbPage1.Controls.Add(Me.txtName)
Me.tbPage1.Controls.Add(Me.lblStep1Intro) Me.tbPage1.Controls.Add(Me.lblStep1Intro)
@@ -126,25 +117,16 @@ Partial Class frmAddWizard
Me.lblStep1Title.TabIndex = 8 Me.lblStep1Title.TabIndex = 8
Me.lblStep1Title.Text = "Game Name" Me.lblStep1Title.Text = "Game Name"
' '
'lblDrag1
'
Me.lblDrag1.AllowDrop = True
Me.lblDrag1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblDrag1.Location = New System.Drawing.Point(14, 147)
Me.lblDrag1.Name = "lblDrag1"
Me.lblDrag1.Size = New System.Drawing.Size(303, 37)
Me.lblDrag1.TabIndex = 7
Me.lblDrag1.Text = "Drag a shortcut here to complete this step."
'
'lblStep1Instructions 'lblStep1Instructions
' '
Me.lblStep1Instructions.AllowDrop = True
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93) Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep1Instructions.Name = "lblStep1Instructions" Me.lblStep1Instructions.Name = "lblStep1Instructions"
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 42) Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 85)
Me.lblStep1Instructions.TabIndex = 6 Me.lblStep1Instructions.TabIndex = 6
Me.lblStep1Instructions.Text = "The name of the game is used for the backup file and must conform to Windows file" & Me.lblStep1Instructions.Text = "The name will be automatically filtered for length and invalid characters. You m" &
" name standards. It will be automatically filtered for length and invalid chara" & "ay drag and drop a shortcut here to complete this step, only Windows shortcuts a" &
"cters. " "re currently supported."
' '
'txtName 'txtName
' '
@@ -166,12 +148,8 @@ Partial Class frmAddWizard
'tbPage2 'tbPage2
' '
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
Me.tbPage2.Controls.Add(Me.lbldBox)
Me.tbPage2.Controls.Add(Me.btndBoxBrowse)
Me.tbPage2.Controls.Add(Me.txtdBoxProcess)
Me.tbPage2.Controls.Add(Me.lblStep2Title) Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions) Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
Me.tbPage2.Controls.Add(Me.lblDrag2)
Me.tbPage2.Controls.Add(Me.btnProcessBrowse) Me.tbPage2.Controls.Add(Me.btnProcessBrowse)
Me.tbPage2.Controls.Add(Me.txtProcessPath) Me.tbPage2.Controls.Add(Me.txtProcessPath)
Me.tbPage2.Controls.Add(Me.lblStep2Intro) Me.tbPage2.Controls.Add(Me.lblStep2Intro)
@@ -182,32 +160,6 @@ Partial Class frmAddWizard
Me.tbPage2.TabIndex = 1 Me.tbPage2.TabIndex = 1
Me.tbPage2.Text = "TabPage2" Me.tbPage2.Text = "TabPage2"
' '
'lbldBox
'
Me.lbldBox.AutoSize = True
Me.lbldBox.Location = New System.Drawing.Point(184, 18)
Me.lbldBox.Name = "lbldBox"
Me.lbldBox.Size = New System.Drawing.Size(52, 13)
Me.lbldBox.TabIndex = 14
Me.lbldBox.Text = "DOS File:"
'
'btndBoxBrowse
'
Me.btndBoxBrowse.Location = New System.Drawing.Point(322, 14)
Me.btndBoxBrowse.Name = "btndBoxBrowse"
Me.btndBoxBrowse.Size = New System.Drawing.Size(27, 20)
Me.btndBoxBrowse.TabIndex = 13
Me.btndBoxBrowse.Text = "..."
Me.btndBoxBrowse.UseVisualStyleBackColor = True
'
'txtdBoxProcess
'
Me.txtdBoxProcess.AllowDrop = True
Me.txtdBoxProcess.Location = New System.Drawing.Point(244, 14)
Me.txtdBoxProcess.Name = "txtdBoxProcess"
Me.txtdBoxProcess.Size = New System.Drawing.Size(72, 20)
Me.txtdBoxProcess.TabIndex = 12
'
'lblStep2Title 'lblStep2Title
' '
Me.lblStep2Title.AutoSize = True Me.lblStep2Title.AutoSize = True
@@ -220,22 +172,12 @@ Partial Class frmAddWizard
' '
'lblStep2Instructions 'lblStep2Instructions
' '
Me.lblStep2Instructions.AllowDrop = True
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93) Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep2Instructions.Name = "lblStep2Instructions" Me.lblStep2Instructions.Name = "lblStep2Instructions"
Me.lblStep2Instructions.Size = New System.Drawing.Size(303, 41) Me.lblStep2Instructions.Size = New System.Drawing.Size(303, 85)
Me.lblStep2Instructions.TabIndex = 10 Me.lblStep2Instructions.TabIndex = 10
Me.lblStep2Instructions.Text = "GBM needs to know what to look for when you run the application. Some games use " & Me.lblStep2Instructions.Text = resources.GetString("lblStep2Instructions.Text")
"launchers. Do not monitor launchers, choose the actual game exe file."
'
'lblDrag2
'
Me.lblDrag2.AllowDrop = True
Me.lblDrag2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblDrag2.Location = New System.Drawing.Point(14, 147)
Me.lblDrag2.Name = "lblDrag2"
Me.lblDrag2.Size = New System.Drawing.Size(336, 44)
Me.lblDrag2.TabIndex = 9
Me.lblDrag2.Text = "Drag a shortcut here to complete this step."
' '
'btnProcessBrowse 'btnProcessBrowse
' '
@@ -266,6 +208,8 @@ Partial Class frmAddWizard
'tbPage3 'tbPage3
' '
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control Me.tbPage3.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3.Controls.Add(Me.lblLimit)
Me.tbPage3.Controls.Add(Me.nudLimit)
Me.tbPage3.Controls.Add(Me.lblStep3Title) Me.tbPage3.Controls.Add(Me.lblStep3Title)
Me.tbPage3.Controls.Add(Me.lblStep3Instructions) Me.tbPage3.Controls.Add(Me.lblStep3Instructions)
Me.tbPage3.Controls.Add(Me.chkTimeStamp) Me.tbPage3.Controls.Add(Me.chkTimeStamp)
@@ -279,6 +223,26 @@ Partial Class frmAddWizard
Me.tbPage3.TabIndex = 2 Me.tbPage3.TabIndex = 2
Me.tbPage3.Text = "TabPage3" Me.tbPage3.Text = "TabPage3"
' '
'lblLimit
'
Me.lblLimit.AutoSize = True
Me.lblLimit.Location = New System.Drawing.Point(203, 109)
Me.lblLimit.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
Me.lblLimit.TabIndex = 15
Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False
'
'nudLimit
'
Me.nudLimit.Location = New System.Drawing.Point(157, 107)
Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Name = "nudLimit"
Me.nudLimit.Size = New System.Drawing.Size(40, 20)
Me.nudLimit.TabIndex = 14
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Visible = False
'
'lblStep3Title 'lblStep3Title
' '
Me.lblStep3Title.AutoSize = True Me.lblStep3Title.AutoSize = True
@@ -291,32 +255,32 @@ Partial Class frmAddWizard
' '
'lblStep3Instructions 'lblStep3Instructions
' '
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 116) Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 139)
Me.lblStep3Instructions.Name = "lblStep3Instructions" Me.lblStep3Instructions.Name = "lblStep3Instructions"
Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42) Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep3Instructions.TabIndex = 9 Me.lblStep3Instructions.TabIndex = 9
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save Entire Folder " & Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save entire folder " &
"is checked. You can also time stamp your backup files to make incremental backu" & "is checked. You can also choose to save multiple backups and set a limit on how" &
"ps." " many to keep."
' '
'chkTimeStamp 'chkTimeStamp
' '
Me.chkTimeStamp.AutoSize = True Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(139, 87) Me.chkTimeStamp.Location = New System.Drawing.Point(18, 108)
Me.chkTimeStamp.Name = "chkTimeStamp" Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(122, 17) Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 8 Me.chkTimeStamp.TabIndex = 8
Me.chkTimeStamp.Text = "Time Stamp Backup" Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True Me.chkTimeStamp.UseVisualStyleBackColor = True
' '
'chkFolderSave 'chkFolderSave
' '
Me.chkFolderSave.AutoSize = True Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(17, 87) Me.chkFolderSave.Location = New System.Drawing.Point(18, 87)
Me.chkFolderSave.Name = "chkFolderSave" Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(113, 17) Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 7 Me.chkFolderSave.TabIndex = 7
Me.chkFolderSave.Text = "Save Entire Folder" Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True Me.chkFolderSave.UseVisualStyleBackColor = True
' '
'btnSaveBrowse 'btnSaveBrowse
@@ -347,8 +311,10 @@ Partial Class frmAddWizard
'tbPage3a 'tbPage3a
' '
Me.tbPage3a.BackColor = System.Drawing.SystemColors.Control Me.tbPage3a.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3a.Controls.Add(Me.grpFileTypes) Me.tbPage3a.Controls.Add(Me.lblIncludePathTitle)
Me.tbPage3a.Controls.Add(Me.btnStep3aClear) Me.tbPage3a.Controls.Add(Me.lblIncludePath)
Me.tbPage3a.Controls.Add(Me.lblFileTypes)
Me.tbPage3a.Controls.Add(Me.btnInclude)
Me.tbPage3a.Controls.Add(Me.lblStep3aTitle) Me.tbPage3a.Controls.Add(Me.lblStep3aTitle)
Me.tbPage3a.Controls.Add(Me.lblStep3aInstructions) Me.tbPage3a.Controls.Add(Me.lblStep3aInstructions)
Me.tbPage3a.Controls.Add(Me.txtFileTypes) Me.tbPage3a.Controls.Add(Me.txtFileTypes)
@@ -358,58 +324,42 @@ Partial Class frmAddWizard
Me.tbPage3a.TabIndex = 3 Me.tbPage3a.TabIndex = 3
Me.tbPage3a.Text = "TabPage4" Me.tbPage3a.Text = "TabPage4"
' '
'grpFileTypes 'lblIncludePathTitle
' '
Me.grpFileTypes.Controls.Add(Me.optFileTypeFolder) Me.lblIncludePathTitle.AutoSize = True
Me.grpFileTypes.Controls.Add(Me.optSpecificFile) Me.lblIncludePathTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.grpFileTypes.Controls.Add(Me.btnFileTypeBrowse) Me.lblIncludePathTitle.Location = New System.Drawing.Point(14, 45)
Me.grpFileTypes.Controls.Add(Me.optFileType) Me.lblIncludePathTitle.Name = "lblIncludePathTitle"
Me.grpFileTypes.Location = New System.Drawing.Point(17, 43) Me.lblIncludePathTitle.Size = New System.Drawing.Size(122, 13)
Me.grpFileTypes.Name = "grpFileTypes" Me.lblIncludePathTitle.TabIndex = 6
Me.grpFileTypes.Size = New System.Drawing.Size(310, 47) Me.lblIncludePathTitle.Text = "Saved Game Folder:"
Me.grpFileTypes.TabIndex = 0
Me.grpFileTypes.TabStop = False
Me.grpFileTypes.Text = "Choose any files or folders to include in the backup"
' '
'optSpecificFile 'lblIncludePath
' '
Me.optSpecificFile.AutoSize = True Me.lblIncludePath.AutoEllipsis = True
Me.optSpecificFile.Location = New System.Drawing.Point(80, 19) Me.lblIncludePath.Location = New System.Drawing.Point(14, 60)
Me.optSpecificFile.Name = "optSpecificFile" Me.lblIncludePath.Name = "lblIncludePath"
Me.optSpecificFile.Size = New System.Drawing.Size(82, 17) Me.lblIncludePath.Size = New System.Drawing.Size(324, 13)
Me.optSpecificFile.TabIndex = 2 Me.lblIncludePath.TabIndex = 1
Me.optSpecificFile.TabStop = True Me.lblIncludePath.Text = "Save Path"
Me.optSpecificFile.Text = "Specific File"
Me.optSpecificFile.UseVisualStyleBackColor = True
' '
'btnFileTypeBrowse 'lblFileTypes
' '
Me.btnFileTypeBrowse.Location = New System.Drawing.Point(229, 16) Me.lblFileTypes.AutoSize = True
Me.btnFileTypeBrowse.Name = "btnFileTypeBrowse" Me.lblFileTypes.Location = New System.Drawing.Point(199, 91)
Me.btnFileTypeBrowse.Size = New System.Drawing.Size(75, 23) Me.lblFileTypes.Name = "lblFileTypes"
Me.btnFileTypeBrowse.TabIndex = 3 Me.lblFileTypes.Size = New System.Drawing.Size(89, 13)
Me.btnFileTypeBrowse.Text = "Browse..." Me.lblFileTypes.TabIndex = 3
Me.btnFileTypeBrowse.UseVisualStyleBackColor = True Me.lblFileTypes.Text = "0 item(s) selected"
' '
'optFileType 'btnInclude
' '
Me.optFileType.AutoSize = True Me.btnInclude.Location = New System.Drawing.Point(17, 86)
Me.optFileType.Location = New System.Drawing.Point(6, 19) Me.btnInclude.Name = "btnInclude"
Me.optFileType.Name = "optFileType" Me.btnInclude.Size = New System.Drawing.Size(176, 23)
Me.optFileType.Size = New System.Drawing.Size(68, 17) Me.btnInclude.TabIndex = 2
Me.optFileType.TabIndex = 1 Me.btnInclude.Text = "Choose items to in&clude..."
Me.optFileType.TabStop = True Me.btnInclude.UseVisualStyleBackColor = True
Me.optFileType.Text = "File Type"
Me.optFileType.UseVisualStyleBackColor = True
'
'btnStep3aClear
'
Me.btnStep3aClear.Location = New System.Drawing.Point(253, 93)
Me.btnStep3aClear.Name = "btnStep3aClear"
Me.btnStep3aClear.Size = New System.Drawing.Size(75, 23)
Me.btnStep3aClear.TabIndex = 5
Me.btnStep3aClear.Text = "&Clear"
Me.btnStep3aClear.UseVisualStyleBackColor = True
' '
'lblStep3aTitle 'lblStep3aTitle
' '
@@ -418,7 +368,7 @@ Partial Class frmAddWizard
Me.lblStep3aTitle.Location = New System.Drawing.Point(13, 11) Me.lblStep3aTitle.Location = New System.Drawing.Point(13, 11)
Me.lblStep3aTitle.Name = "lblStep3aTitle" Me.lblStep3aTitle.Name = "lblStep3aTitle"
Me.lblStep3aTitle.Size = New System.Drawing.Size(199, 20) Me.lblStep3aTitle.Size = New System.Drawing.Size(199, 20)
Me.lblStep3aTitle.TabIndex = 12 Me.lblStep3aTitle.TabIndex = 0
Me.lblStep3aTitle.Text = "Choose Files to Backup" Me.lblStep3aTitle.Text = "Choose Files to Backup"
' '
'lblStep3aInstructions 'lblStep3aInstructions
@@ -426,25 +376,27 @@ Partial Class frmAddWizard
Me.lblStep3aInstructions.Location = New System.Drawing.Point(14, 126) Me.lblStep3aInstructions.Location = New System.Drawing.Point(14, 126)
Me.lblStep3aInstructions.Name = "lblStep3aInstructions" Me.lblStep3aInstructions.Name = "lblStep3aInstructions"
Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56) Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56)
Me.lblStep3aInstructions.TabIndex = 11 Me.lblStep3aInstructions.TabIndex = 5
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" & Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" &
"up. You may choose multiple items to include. If you're unsure, go back a step" & "up. If you're unsure, go back a step and choose to save the entire folder. "
" and choose to save the entire folder. "
' '
'txtFileTypes 'txtFileTypes
' '
Me.txtFileTypes.Location = New System.Drawing.Point(18, 95) Me.txtFileTypes.Location = New System.Drawing.Point(218, 14)
Me.txtFileTypes.Name = "txtFileTypes" Me.txtFileTypes.Name = "txtFileTypes"
Me.txtFileTypes.ReadOnly = True Me.txtFileTypes.ReadOnly = True
Me.txtFileTypes.Size = New System.Drawing.Size(229, 20) Me.txtFileTypes.Size = New System.Drawing.Size(131, 20)
Me.txtFileTypes.TabIndex = 4 Me.txtFileTypes.TabIndex = 4
Me.txtFileTypes.TabStop = False Me.txtFileTypes.TabStop = False
Me.txtFileTypes.Visible = False
' '
'tbPage4 'tbPage4
' '
Me.tbPage4.BackColor = System.Drawing.SystemColors.Control Me.tbPage4.BackColor = System.Drawing.SystemColors.Control
Me.tbPage4.Controls.Add(Me.grpExclude) Me.tbPage4.Controls.Add(Me.lblExcludePathTitle)
Me.tbPage4.Controls.Add(Me.btnStep4Clear) Me.tbPage4.Controls.Add(Me.lblExcludePath)
Me.tbPage4.Controls.Add(Me.lblExclude)
Me.tbPage4.Controls.Add(Me.btnExclude)
Me.tbPage4.Controls.Add(Me.lblStep4Title) Me.tbPage4.Controls.Add(Me.lblStep4Title)
Me.tbPage4.Controls.Add(Me.lblStep4Instructions) Me.tbPage4.Controls.Add(Me.lblStep4Instructions)
Me.tbPage4.Controls.Add(Me.txtExcludeList) Me.tbPage4.Controls.Add(Me.txtExcludeList)
@@ -454,69 +406,42 @@ Partial Class frmAddWizard
Me.tbPage4.TabIndex = 4 Me.tbPage4.TabIndex = 4
Me.tbPage4.Text = "TabPage5" Me.tbPage4.Text = "TabPage5"
' '
'grpExclude 'lblExcludePathTitle
' '
Me.grpExclude.Controls.Add(Me.optExcludeSpecificFile) Me.lblExcludePathTitle.AutoSize = True
Me.grpExclude.Controls.Add(Me.btnExcludeBrowse) Me.lblExcludePathTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.grpExclude.Controls.Add(Me.optExcludeFileType) Me.lblExcludePathTitle.Location = New System.Drawing.Point(14, 45)
Me.grpExclude.Controls.Add(Me.optExcludeFolder) Me.lblExcludePathTitle.Name = "lblExcludePathTitle"
Me.grpExclude.Location = New System.Drawing.Point(17, 43) Me.lblExcludePathTitle.Size = New System.Drawing.Size(122, 13)
Me.grpExclude.Name = "grpExclude" Me.lblExcludePathTitle.TabIndex = 7
Me.grpExclude.Size = New System.Drawing.Size(310, 47) Me.lblExcludePathTitle.Text = "Saved Game Folder:"
Me.grpExclude.TabIndex = 0
Me.grpExclude.TabStop = False
Me.grpExclude.Text = "Choose any files or folders to exclude from the backup:"
' '
'optExcludeSpecificFile 'lblExcludePath
' '
Me.optExcludeSpecificFile.AutoSize = True Me.lblExcludePath.AutoEllipsis = True
Me.optExcludeSpecificFile.Location = New System.Drawing.Point(80, 19) Me.lblExcludePath.Location = New System.Drawing.Point(14, 60)
Me.optExcludeSpecificFile.Name = "optExcludeSpecificFile" Me.lblExcludePath.Name = "lblExcludePath"
Me.optExcludeSpecificFile.Size = New System.Drawing.Size(82, 17) Me.lblExcludePath.Size = New System.Drawing.Size(334, 13)
Me.optExcludeSpecificFile.TabIndex = 2 Me.lblExcludePath.TabIndex = 1
Me.optExcludeSpecificFile.TabStop = True Me.lblExcludePath.Text = "Save Path"
Me.optExcludeSpecificFile.Text = "Specific File"
Me.optExcludeSpecificFile.UseVisualStyleBackColor = True
' '
'btnExcludeBrowse 'lblExclude
' '
Me.btnExcludeBrowse.Location = New System.Drawing.Point(229, 16) Me.lblExclude.AutoSize = True
Me.btnExcludeBrowse.Name = "btnExcludeBrowse" Me.lblExclude.Location = New System.Drawing.Point(199, 91)
Me.btnExcludeBrowse.Size = New System.Drawing.Size(75, 23) Me.lblExclude.Name = "lblExclude"
Me.btnExcludeBrowse.TabIndex = 4 Me.lblExclude.Size = New System.Drawing.Size(89, 13)
Me.btnExcludeBrowse.Text = "&Browse..." Me.lblExclude.TabIndex = 3
Me.btnExcludeBrowse.UseVisualStyleBackColor = True Me.lblExclude.Text = "0 item(s) selected"
' '
'optExcludeFileType 'btnExclude
' '
Me.optExcludeFileType.AutoSize = True Me.btnExclude.Location = New System.Drawing.Point(17, 86)
Me.optExcludeFileType.Location = New System.Drawing.Point(6, 19) Me.btnExclude.Name = "btnExclude"
Me.optExcludeFileType.Name = "optExcludeFileType" Me.btnExclude.Size = New System.Drawing.Size(176, 23)
Me.optExcludeFileType.Size = New System.Drawing.Size(68, 17) Me.btnExclude.TabIndex = 2
Me.optExcludeFileType.TabIndex = 1 Me.btnExclude.Text = "Choose items to e&xclude..."
Me.optExcludeFileType.TabStop = True Me.btnExclude.UseVisualStyleBackColor = True
Me.optExcludeFileType.Text = "File Type"
Me.optExcludeFileType.UseVisualStyleBackColor = True
'
'optExcludeFolder
'
Me.optExcludeFolder.AutoSize = True
Me.optExcludeFolder.Location = New System.Drawing.Point(168, 19)
Me.optExcludeFolder.Name = "optExcludeFolder"
Me.optExcludeFolder.Size = New System.Drawing.Size(54, 17)
Me.optExcludeFolder.TabIndex = 3
Me.optExcludeFolder.TabStop = True
Me.optExcludeFolder.Text = "Folder"
Me.optExcludeFolder.UseVisualStyleBackColor = True
'
'btnStep4Clear
'
Me.btnStep4Clear.Location = New System.Drawing.Point(253, 93)
Me.btnStep4Clear.Name = "btnStep4Clear"
Me.btnStep4Clear.Size = New System.Drawing.Size(75, 23)
Me.btnStep4Clear.TabIndex = 6
Me.btnStep4Clear.Text = "&Clear"
Me.btnStep4Clear.UseVisualStyleBackColor = True
' '
'lblStep4Title 'lblStep4Title
' '
@@ -525,7 +450,7 @@ Partial Class frmAddWizard
Me.lblStep4Title.Location = New System.Drawing.Point(14, 11) Me.lblStep4Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep4Title.Name = "lblStep4Title" Me.lblStep4Title.Name = "lblStep4Title"
Me.lblStep4Title.Size = New System.Drawing.Size(201, 20) Me.lblStep4Title.Size = New System.Drawing.Size(201, 20)
Me.lblStep4Title.TabIndex = 16 Me.lblStep4Title.TabIndex = 0
Me.lblStep4Title.Text = "Exclude Files or Folders" Me.lblStep4Title.Text = "Exclude Files or Folders"
' '
'lblStep4Instructions 'lblStep4Instructions
@@ -533,17 +458,19 @@ Partial Class frmAddWizard
Me.lblStep4Instructions.Location = New System.Drawing.Point(14, 126) Me.lblStep4Instructions.Location = New System.Drawing.Point(14, 126)
Me.lblStep4Instructions.Name = "lblStep4Instructions" Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59) Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59)
Me.lblStep4Instructions.TabIndex = 12 Me.lblStep4Instructions.TabIndex = 5
Me.lblStep4Instructions.Text = resources.GetString("lblStep4Instructions.Text") Me.lblStep4Instructions.Text = "Choose any file types, specific files or folders you wish to exclude from the ba" &
"ckup. You may choose multiple items to exclude. This step can be skipped."
' '
'txtExcludeList 'txtExcludeList
' '
Me.txtExcludeList.Location = New System.Drawing.Point(18, 95) Me.txtExcludeList.Location = New System.Drawing.Point(221, 13)
Me.txtExcludeList.Name = "txtExcludeList" Me.txtExcludeList.Name = "txtExcludeList"
Me.txtExcludeList.ReadOnly = True Me.txtExcludeList.ReadOnly = True
Me.txtExcludeList.Size = New System.Drawing.Size(229, 20) Me.txtExcludeList.Size = New System.Drawing.Size(128, 20)
Me.txtExcludeList.TabIndex = 5 Me.txtExcludeList.TabIndex = 4
Me.txtExcludeList.TabStop = False Me.txtExcludeList.TabStop = False
Me.txtExcludeList.Visible = False
' '
'tbPage5 'tbPage5
' '
@@ -581,6 +508,7 @@ Partial Class frmAddWizard
Me.lstSummary.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable Me.lstSummary.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.lstSummary.Location = New System.Drawing.Point(14, 65) Me.lstSummary.Location = New System.Drawing.Point(14, 65)
Me.lstSummary.Name = "lstSummary" Me.lstSummary.Name = "lstSummary"
Me.lstSummary.ShowItemToolTips = True
Me.lstSummary.Size = New System.Drawing.Size(335, 126) Me.lstSummary.Size = New System.Drawing.Size(335, 126)
Me.lstSummary.TabIndex = 1 Me.lstSummary.TabIndex = 1
Me.lstSummary.UseCompatibleStateImageBehavior = False Me.lstSummary.UseCompatibleStateImageBehavior = False
@@ -613,17 +541,6 @@ Partial Class frmAddWizard
Me.btnBack.Text = "&Back" Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True Me.btnBack.UseVisualStyleBackColor = True
' '
'optFileTypeFolder
'
Me.optFileTypeFolder.AutoSize = True
Me.optFileTypeFolder.Location = New System.Drawing.Point(168, 19)
Me.optFileTypeFolder.Name = "optFileTypeFolder"
Me.optFileTypeFolder.Size = New System.Drawing.Size(54, 17)
Me.optFileTypeFolder.TabIndex = 4
Me.optFileTypeFolder.TabStop = True
Me.optFileTypeFolder.Text = "Folder"
Me.optFileTypeFolder.UseVisualStyleBackColor = True
'
'frmAddWizard 'frmAddWizard
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -647,14 +564,11 @@ Partial Class frmAddWizard
Me.tbPage2.PerformLayout() Me.tbPage2.PerformLayout()
Me.tbPage3.ResumeLayout(False) Me.tbPage3.ResumeLayout(False)
Me.tbPage3.PerformLayout() Me.tbPage3.PerformLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).EndInit()
Me.tbPage3a.ResumeLayout(False) Me.tbPage3a.ResumeLayout(False)
Me.tbPage3a.PerformLayout() Me.tbPage3a.PerformLayout()
Me.grpFileTypes.ResumeLayout(False)
Me.grpFileTypes.PerformLayout()
Me.tbPage4.ResumeLayout(False) Me.tbPage4.ResumeLayout(False)
Me.tbPage4.PerformLayout() Me.tbPage4.PerformLayout()
Me.grpExclude.ResumeLayout(False)
Me.grpExclude.PerformLayout()
Me.tbPage5.ResumeLayout(False) Me.tbPage5.ResumeLayout(False)
Me.tbPage5.PerformLayout() Me.tbPage5.PerformLayout()
Me.ResumeLayout(False) Me.ResumeLayout(False)
@@ -670,12 +584,10 @@ Partial Class frmAddWizard
Friend WithEvents tbPage3a As System.Windows.Forms.TabPage Friend WithEvents tbPage3a As System.Windows.Forms.TabPage
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
Friend WithEvents tbPage5 As System.Windows.Forms.TabPage Friend WithEvents tbPage5 As System.Windows.Forms.TabPage
Friend WithEvents lblDrag1 As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label
Friend WithEvents lblDrag2 As System.Windows.Forms.Label
Friend WithEvents btnProcessBrowse As System.Windows.Forms.Button Friend WithEvents btnProcessBrowse As System.Windows.Forms.Button
Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox
Friend WithEvents lblStep2Intro As System.Windows.Forms.Label Friend WithEvents lblStep2Intro As System.Windows.Forms.Label
@@ -684,17 +596,10 @@ Partial Class frmAddWizard
Friend WithEvents btnSaveBrowse As System.Windows.Forms.Button Friend WithEvents btnSaveBrowse As System.Windows.Forms.Button
Friend WithEvents txtSavePath As System.Windows.Forms.TextBox Friend WithEvents txtSavePath As System.Windows.Forms.TextBox
Friend WithEvents lblStep3Intro As System.Windows.Forms.Label Friend WithEvents lblStep3Intro As System.Windows.Forms.Label
Friend WithEvents btnFileTypeBrowse As System.Windows.Forms.Button
Friend WithEvents txtFileTypes As System.Windows.Forms.TextBox Friend WithEvents txtFileTypes As System.Windows.Forms.TextBox
Friend WithEvents btnExcludeBrowse As System.Windows.Forms.Button
Friend WithEvents txtExcludeList As System.Windows.Forms.TextBox Friend WithEvents txtExcludeList As System.Windows.Forms.TextBox
Friend WithEvents optSpecificFile As System.Windows.Forms.RadioButton
Friend WithEvents optFileType As System.Windows.Forms.RadioButton
Friend WithEvents lblStep3aInstructions As System.Windows.Forms.Label Friend WithEvents lblStep3aInstructions As System.Windows.Forms.Label
Friend WithEvents optExcludeFolder As System.Windows.Forms.RadioButton
Friend WithEvents optExcludeFileType As System.Windows.Forms.RadioButton
Friend WithEvents lblStep4Instructions As System.Windows.Forms.Label Friend WithEvents lblStep4Instructions As System.Windows.Forms.Label
Friend WithEvents optExcludeSpecificFile As System.Windows.Forms.RadioButton
Friend WithEvents lblStep3Instructions As System.Windows.Forms.Label Friend WithEvents lblStep3Instructions As System.Windows.Forms.Label
Friend WithEvents lstSummary As System.Windows.Forms.ListView Friend WithEvents lstSummary As System.Windows.Forms.ListView
Friend WithEvents lblStep1Title As System.Windows.Forms.Label Friend WithEvents lblStep1Title As System.Windows.Forms.Label
@@ -704,12 +609,14 @@ Partial Class frmAddWizard
Friend WithEvents lblStep3aTitle As System.Windows.Forms.Label Friend WithEvents lblStep3aTitle As System.Windows.Forms.Label
Friend WithEvents lblStep5Intro As System.Windows.Forms.Label Friend WithEvents lblStep5Intro As System.Windows.Forms.Label
Friend WithEvents lblStep5Title As System.Windows.Forms.Label Friend WithEvents lblStep5Title As System.Windows.Forms.Label
Friend WithEvents btnStep3aClear As System.Windows.Forms.Button Friend WithEvents lblFileTypes As Label
Friend WithEvents btnStep4Clear As System.Windows.Forms.Button Friend WithEvents btnInclude As Button
Friend WithEvents grpExclude As System.Windows.Forms.GroupBox Friend WithEvents lblExclude As Label
Friend WithEvents grpFileTypes As System.Windows.Forms.GroupBox Friend WithEvents btnExclude As Button
Friend WithEvents lbldBox As System.Windows.Forms.Label Friend WithEvents lblIncludePath As Label
Friend WithEvents btndBoxBrowse As System.Windows.Forms.Button Friend WithEvents lblExcludePath As Label
Friend WithEvents txtdBoxProcess As System.Windows.Forms.TextBox Friend WithEvents lblIncludePathTitle As Label
Friend WithEvents optFileTypeFolder As RadioButton Friend WithEvents lblExcludePathTitle As Label
Friend WithEvents lblLimit As Label
Friend WithEvents nudLimit As NumericUpDown
End Class End Class
+2 -2
View File
@@ -117,7 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="lblStep4Instructions.Text" xml:space="preserve"> <data name="lblStep2Instructions.Text" xml:space="preserve">
<value>Choose any file types, specific files or folders you wish to exclude from the backup. You may choose multiple items to exclude. A more advanced exclude list can be created manually via the Game Manager. This step can be skipped.</value> <value>Some games use launchers. Do not monitor launchers, be sure to choose the game's actual exe file. You may drag and drop a shortcut here to complete this step, only Windows shortcuts are currently supported.</value>
</data> </data>
</root> </root>
+147 -241
View File
@@ -1,11 +1,11 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class frmAddWizard Public Class frmAddWizard
Private oGameData As Hashtable Private oGameData As Hashtable
Private oGameToSave As clsGame Private oGameToSave As clsGame
Private bDisableAdminWarning As Boolean = False Private bDisableAdminWarning As Boolean = False
Private bIsDOSBoxGame As Boolean
Property GameData As Hashtable Property GameData As Hashtable
Get Get
@@ -27,20 +27,73 @@ Public Class frmAddWizard
Private eCurrentStep As eSteps = eSteps.Step1 Private eCurrentStep As eSteps = eSteps.Step1
Private Sub FormInit() Private Sub SetForm()
btndBoxBrowse.Visible = False 'Set Form Name
txtdBoxProcess.Visible = False Me.Text = frmAddWizard_FormName
lbldBox.Visible = False
'Set Form Text
btnCancel.Text = frmAddWizard_btnCancel
btnNext.Text = frmAddWizard_btnNext
btnBack.Text = frmAddWizard_btnBack
lblStep1Title.Text = frmAddWizard_lblStep1Title
lblStep1Instructions.Text = frmAddWizard_lblStep1Instructions
lblStep1Intro.Text = frmAddWizard_lblStep1Intro
lblStep2Title.Text = frmAddWizard_lblStep2Title
lblStep2Instructions.Text = frmAddWizard_lblStep2Instructions
btnProcessBrowse.Text = frmAddWizard_btnProcessBrowse
lblStep2Intro.Text = frmAddWizard_lblStep2Intro
lblStep3Title.Text = frmAddWizard_lblStep3Title
lblStep3Instructions.Text = frmAddWizard_lblStep3Instructions
chkTimeStamp.Text = frmAddWizard_chkTimeStamp
chkFolderSave.Text = frmAddWizard_chkFolderSave
lblLimit.Text = frmAddWizard_lblLimit
btnSaveBrowse.Text = frmAddWizard_btnSaveBrowse
lblStep3Intro.Text = frmAddWizard_lblStep3Intro
lblIncludePathTitle.Text = frmAddWizard_lblIncludePathTitle
lblIncludePath.Text = frmAddWizard_lblIncludePath
lblFileTypes.Text = frmAddWizard_ItemsSelectedNone
btnInclude.Text = frmAddWizard_btnInclude
lblStep3aTitle.Text = frmAddWizard_lblStep3aTitle
lblStep3aInstructions.Text = frmAddWizard_lblStep3aInstructions
lblExcludePathTitle.Text = frmAddWizard_lblExcludePathTitle
lblExcludePath.Text = frmAddWizard_lblExcludePath
lblExclude.Text = frmAddWizard_ItemsSelectedNone
btnExclude.Text = frmAddWizard_btnExclude
lblStep4Title.Text = frmAddWizard_lblStep4Title
lblStep4Instructions.Text = frmAddWizard_lblStep4Instructions
lblStep5Intro.Text = frmAddWizard_lblStep5Intro
lblStep5Title.Text = frmAddWizard_lblStep5Title
chkFolderSave.Checked = True chkFolderSave.Checked = True
chkTimeStamp.Checked = False chkTimeStamp.Checked = False
optFileType.Checked = True
optExcludeFileType.Checked = True
StepHandler() StepHandler()
End Sub End Sub
Private Sub ShowHideLimit()
If chkTimeStamp.Checked Then
nudLimit.Visible = True
lblLimit.Visible = True
nudLimit.Value = 5
Else
nudLimit.Visible = False
nudLimit.Value = nudLimit.Minimum
lblLimit.Visible = False
End If
End Sub
Private Function ShowSummaryLimit(ByVal bTimeStamp As Boolean, ByVal iLimit As Integer) As String
Dim sLimit As String = String.Empty
If bTimeStamp Then
Return mgrCommon.BooleanYesNo(bTimeStamp) & " (" & iLimit & ")"
Else
Return mgrCommon.BooleanYesNo(bTimeStamp)
End If
End Function
Private Function StringEmptyText(ByVal sString As String) As String Private Function StringEmptyText(ByVal sString As String) As String
If sString = String.Empty Then If sString = String.Empty Then
Return "None" Return frmAddWizard_None
Else Else
Return sString Return sString
End If End If
@@ -51,33 +104,33 @@ Public Class frmAddWizard
Dim sName As String = txtName.Text Dim sName As String = txtName.Text
Dim sProcessFullPath As String = txtProcessPath.Text Dim sProcessFullPath As String = txtProcessPath.Text
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath) Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")" Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
Dim sdBoxProcessFullPath As String = String.Empty
Dim sdBoxProcessPath As String = String.Empty
Dim sdBoxProcess As String = String.Empty
Dim sdBoxProcessSummaryText As String = String.Empty
Dim sSavePath As String = txtSavePath.Text Dim sSavePath As String = txtSavePath.Text
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath) Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
Dim bFolderBackup As Boolean = chkFolderSave.Checked Dim bFolderBackup As Boolean = chkFolderSave.Checked
Dim bTimeStamp As Boolean = chkTimeStamp.Checked Dim bTimeStamp As Boolean = chkTimeStamp.Checked
Dim iLimit As Integer = nudLimit.Value
Dim sFileType As String = txtFileTypes.Text Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text Dim sExcludeList As String = txtExcludeList.Text
Dim sProcess As String
Dim sItem As String() Dim sItem As String()
Dim sItems As String() Dim sItems As String()
Dim sValues As String() Dim sValues As String()
Dim lstItem As ListViewItem Dim lstItem As ListViewItem
If Not bIsAbsolute Then 'Handle Process
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath) If Path.HasExtension(sProcessFullPath) Then
If sProcessFullPath.ToLower.EndsWith(".exe") Then
sProcess = Path.GetFileNameWithoutExtension(sProcessFullPath)
Else
sProcess = Path.GetFileName(sProcessFullPath)
End If
Else
sProcess = Path.GetFileName(sProcessFullPath)
End If End If
If bIsDOSBoxGame Then If Not bIsAbsolute Then
sdBoxProcessFullPath = txtdBoxProcess.Text sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
sdBoxProcessPath = Path.GetDirectoryName(sdBoxProcessFullPath)
sdBoxProcess = Path.GetFileNameWithoutExtension(sdBoxProcessFullPath)
sdBoxProcessSummaryText = Path.GetFileName(sdBoxProcessFullPath) & " (" & sdBoxProcessPath & ")"
sProcess = sProcess.ToLower & ":" & sdBoxProcess
End If End If
'Build Summary Listview 'Build Summary Listview
@@ -87,8 +140,8 @@ Public Class frmAddWizard
lstSummary.Columns(0).Width = 95 lstSummary.Columns(0).Width = 95
lstSummary.Columns(1).Width = 210 lstSummary.Columns(1).Width = 210
sItems = {"Name", "Process", "DOS Process", "Absolute Path", "Save Path", "Folder Backup", "Specific Files", "Time Stamp", "Exclude List"} sItems = {frmAddWizard_Summary_Name, frmAddWizard_Summary_Process, frmAddWizard_Summary_AbsolutePath, frmAddWizard_Summary_SavePath, frmAddWizard_Summary_FolderSave, frmAddWizard_Summary_Timestamp, frmAddWizard_Summary_Include, frmAddWizard_Summary_Exclude}
sValues = {sName, sProcessSummaryText, StringEmptyText(sdBoxProcessSummaryText), mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), StringEmptyText(sFileType), mgrCommon.BooleanYesNo(bTimeStamp), StringEmptyText(sExcludeList)} sValues = {sName, sProcessSummaryText, mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), ShowSummaryLimit(bTimeStamp, iLimit), StringEmptyText(sFileType), StringEmptyText(sExcludeList)}
For i = 0 To sItems.Length - 1 For i = 0 To sItems.Length - 1
sItem = {sItems(i), sValues(i)} sItem = {sItems(i), sValues(i)}
@@ -104,7 +157,9 @@ Public Class frmAddWizard
oGame.FolderSave = bFolderBackup oGame.FolderSave = bFolderBackup
oGame.FileType = sFileType oGame.FileType = sFileType
oGame.AppendTimeStamp = bTimeStamp oGame.AppendTimeStamp = bTimeStamp
oGame.BackupLimit = iLimit
oGame.ExcludeList = sExcludeList oGame.ExcludeList = sExcludeList
oGame.ProcessPath = sProcessPath
Return oGame Return oGame
End Function End Function
@@ -130,11 +185,11 @@ Public Class frmAddWizard
Case eSteps.Step4 Case eSteps.Step4
btnBack.Enabled = True btnBack.Enabled = True
btnNext.Enabled = True btnNext.Enabled = True
btnNext.Text = "&Next" btnNext.Text = frmAddWizard_btnNext
tabWizard.SelectTab(4) tabWizard.SelectTab(4)
Case eSteps.Step5 Case eSteps.Step5
btnBack.Enabled = True btnBack.Enabled = True
btnNext.Text = "&Finish" btnNext.Text = frmAddWizard_btnNext_Finish
tabWizard.SelectTab(5) tabWizard.SelectTab(5)
End Select End Select
End Sub End Sub
@@ -144,84 +199,34 @@ Public Class frmAddWizard
txtName.Text = mgrPath.ValidateForFileSystem(txtName.Text) txtName.Text = mgrPath.ValidateForFileSystem(txtName.Text)
Return True Return True
Else Else
sErrorMessage = "You must enter a valid game name." sErrorMessage = frmAddWizard_ErrorValidName
txtName.Focus() txtName.Focus()
Return False Return False
End If End If
Return True Return True
End Function End Function
Private Function CheckforDOSBox(ByVal strpath As String) As Boolean
If strpath.ToLower.Contains("dosbox.exe") Then
bIsDOSBoxGame = True
lbldBox.Visible = True
txtdBoxProcess.Visible = True
btndBoxBrowse.Visible = True
If txtdBoxProcess.Text = String.Empty Then
If MsgBox("You have selected a DOSBox executable, to monitor DOS programs you need to also select the actual DOS executable file." & vbCrLf & vbCrLf & "Would you like to do this now?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
DOSProcessBrowse()
End If
End If
Return True
Else
bIsDOSBoxGame = False
lbldBox.Visible = False
txtdBoxProcess.Text = String.Empty
txtdBoxProcess.Visible = False
btndBoxBrowse.Visible = False
Return False
End If
End Function
Private Function ValidateDOSProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = "You must select the DOS game's executable file (.exe or .com) to continue."
txtProcessPath.Focus()
Return False
End If
If Path.GetExtension(strPath.ToLower) <> ".exe" And Path.GetExtension(strPath.ToLower) <> ".com" Then
sErrorMessage = "The DOS file you selected is not an executable file. (.exe or .com)"
txtProcessPath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The path to the DOS executable must be a full path."
txtProcessPath.Focus()
Return False
End If
If Not File.Exists(strPath) Then
sErrorMessage = "The selected DOS executable file does not exist."
txtProcessPath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then If strPath = String.Empty Then
sErrorMessage = "You must select the game's executable file (.exe) to continue." sErrorMessage = frmAddWizard_ErrorValidProcess
txtProcessPath.Focus() txtProcessPath.Focus()
Return False Return False
End If End If
If Path.GetExtension(strPath.ToLower) <> ".exe" Then If Path.GetExtension(strPath.ToLower) <> ".exe" And Not mgrCommon.IsUnix Then
sErrorMessage = "The file you selected is not an executable file." sErrorMessage = frmAddWizard_ErrorNotAProcess
txtProcessPath.Focus() txtProcessPath.Focus()
Return False Return False
End If End If
If Not Path.IsPathRooted(strPath) Then If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The path to the executable must be a full path." sErrorMessage = frmAddWizard_ErrorBadProcessPath
txtProcessPath.Focus() txtProcessPath.Focus()
Return False Return False
End If End If
If Not File.Exists(strPath) Then If Not File.Exists(strPath) Then
sErrorMessage = "The selected executable file does not exist." sErrorMessage = frmAddWizard_ErrorProcessNotExist
txtProcessPath.Focus() txtProcessPath.Focus()
Return False Return False
End If End If
@@ -231,19 +236,19 @@ Public Class frmAddWizard
Private Function ValidateSavePath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean Private Function ValidateSavePath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then If strPath = String.Empty Then
sErrorMessage = "You must select the game's save file path to continue." sErrorMessage = frmAddWizard_ErrorValidSavePath
txtSavePath.Focus() txtSavePath.Focus()
Return False Return False
End If End If
If Not Directory.Exists(strPath) Then If Not Directory.Exists(strPath) Then
sErrorMessage = "The folder you selected does not exist or is not a valid folder." sErrorMessage = frmAddWizard_ErrorSavePathNotExist
txtSavePath.Focus() txtSavePath.Focus()
Return False Return False
End If End If
If Not Path.IsPathRooted(strPath) Then If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The selected path must be a full path." sErrorMessage = frmAddWizard_ErrorBadSavePath
txtSavePath.Focus() txtSavePath.Focus()
Return False Return False
End If End If
@@ -253,7 +258,7 @@ Public Class frmAddWizard
Private Function ValidateSaveType(ByVal strSaveType As String, ByRef sErrorMessage As String) Private Function ValidateSaveType(ByVal strSaveType As String, ByRef sErrorMessage As String)
If strSaveType = String.Empty Then If strSaveType = String.Empty Then
sErrorMessage = "You must choose a file type or specific file to backup." sErrorMessage = frmAddWizard_ErrorValidSaveType
txtFileTypes.Focus() txtFileTypes.Focus()
Return False Return False
End If End If
@@ -262,22 +267,20 @@ Public Class frmAddWizard
End Function End Function
Private Sub DoSave() Private Sub DoSave()
Dim oGames As New List(Of clsGame)
Dim hshDupeCheck As New Hashtable Dim hshDupeCheck As New Hashtable
Dim sExistingGame As String Dim sNewGame As String = oGameToSave.ProcessName & ":" & oGameToSave.Name
Dim sNewGame As String = oGameToSave.Name & ":" & oGameToSave.ProcessName
For Each o As clsGame In GameData.Values For Each o As clsGame In GameData.Values
oGames.Add(o) hshDupeCheck.Add(o.CompoundKey, String.Empty)
sExistingGame = o.Name & ":" & o.ProcessName
hshDupeCheck.Add(sExistingGame, String.Empty)
Next Next
If hshDupeCheck.Contains(sNewGame) Then If hshDupeCheck.Contains(sNewGame) Then
MsgBox("The monitor list already contains a game with this exact name and process.", MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(frmAddWizard_ErrorGameDupe, MsgBoxStyle.Exclamation)
Else Else
mgrMonitorList.DoListAdd(oGameToSave) mgrMonitorList.DoListAdd(oGameToSave)
MsgBox(oGameToSave.Name & " has been added to the monitor list.", MsgBoxStyle.Exclamation, "Game Backup Monitor") If mgrCommon.ShowMessage(frmAddWizard_ConfirmSaveTags, New String() {oGameToSave.Name, oGameToSave.Name}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
OpenTags(oGameToSave)
End If
Me.Close() Me.Close()
End If End If
End Sub End Sub
@@ -324,21 +327,15 @@ Public Class frmAddWizard
Case eSteps.Step2 Case eSteps.Step2
If ValidateProcessPath(txtProcessPath.Text, sErrorMessage) Then If ValidateProcessPath(txtProcessPath.Text, sErrorMessage) Then
If CheckforDOSBox(txtProcessPath.Text) Then eCurrentStep = eSteps.Step3
If ValidateDOSProcessPath(txtdBoxProcess.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step3
Else
bError = True
End If
Else
eCurrentStep = eSteps.Step3
End If
Else Else
bError = True bError = True
End If End If
Case eSteps.Step3 Case eSteps.Step3
If ValidateSavePath(txtSavePath.Text, sErrorMessage) Then If ValidateSavePath(txtSavePath.Text, sErrorMessage) Then
lblIncludePath.Text = txtSavePath.Text
lblExcludePath.Text = txtSavePath.Text
If chkFolderSave.Checked = False Then If chkFolderSave.Checked = False Then
eCurrentStep = eSteps.Step3a eCurrentStep = eSteps.Step3a
Else Else
@@ -361,7 +358,7 @@ Public Class frmAddWizard
DoSave() DoSave()
End Select End Select
If bError Then MsgBox(sErrorMessage, MsgBoxStyle.Exclamation, "Game Backup Monitor") If bError Then mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation)
StepHandler() StepHandler()
End Sub End Sub
@@ -405,35 +402,17 @@ Public Class frmAddWizard
ReadShortcut(sTemp) ReadShortcut(sTemp)
File.Delete(sTemp) File.Delete(sTemp)
Catch e2 As Exception Catch e2 As Exception
MsgBox("An error occured working with the shortcut file." & vbCrLf & vbCrLf & e2.Message, MsgBoxStyle.Critical, "Game Backup Monitor") mgrCommon.ShowMessage(frmAddWizard_ErrorWithShortcut, e2.Message, MsgBoxStyle.Critical)
End Try End Try
Else Else
MsgBox("An error occured reading the shortcut file." & vbCrLf & vbCrLf & e1.Message, MsgBoxStyle.Critical, "Game Backup Monitor") mgrCommon.ShowMessage(frmAddWizard_ErrorWithShortcut, e1.Message, MsgBoxStyle.Critical)
End If End If
End Try End Try
Else Else
MsgBox("This file is not a shorcut.") mgrCommon.ShowMessage(frmAddWizard_ErrorNotAShortcut, MsgBoxStyle.Information)
End If End If
End Sub End Sub
Private Sub DOSProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String
Dim sNewPath As String
If txtProcessPath.Text <> String.Empty Then
sCurrentPath = Path.GetDirectoryName(txtProcessPath.Text)
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFileBrowser("Choose DOS executable file that starts the game", "*", _
"", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtdBoxProcess.Text = sNewPath
End Sub
Private Sub ProcessBrowse() Private Sub ProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String Dim sCurrentPath As String
@@ -446,8 +425,8 @@ Public Class frmAddWizard
End If End If
End If End If
sNewPath = mgrCommon.OpenFileBrowser("Choose exe file that starts the game", "exe", _ sNewPath = mgrCommon.OpenFileBrowser(frmAddWizard_ChooseProcess, "exe",
"Executable", sDefaultFolder, False) frmAddWizard_Executable, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath
End Sub End Sub
@@ -463,117 +442,41 @@ Public Class frmAddWizard
End If End If
End If End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose the game save folder:", sDefaultFolder, False) sNewPath = mgrCommon.OpenFolderBrowser(frmAddWizard_ChooseSavePath, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub End Sub
Private Sub SaveTypeBrowse() Private Sub UpdateBuilderLabel(ByVal sBuilderString As String, ByVal lbl As Label)
Dim sDefaultFolder As String = txtSavePath.Text Dim iCount As Integer = sBuilderString.Split(":").Length
Dim sCurrentSaveType As String = txtFileTypes.Text
Dim sSaveType As String
Dim sTitle As String = String.Empty
Dim sSaveTypeList As String()
If optFileType.Checked Then If sBuilderString <> String.Empty And iCount > 0 Then
sTitle = "Choose the type of file to backup" lbl.Text = mgrCommon.FormatString(frmAddWizard_ItemsSelectedMulti, iCount)
ElseIf optSpecificFile.Checked Then
sTitle = "Choose a specific file to backup"
Else Else
sTitle = "Choose a specific folder to backup" lbl.Text = frmAddWizard_ItemsSelectedNone
End If End If
If optFileType.Checked Or optSpecificFile.Checked Then
sSaveType = mgrCommon.OpenFileBrowser(sTitle, "*", "All", sDefaultFolder, False)
If sSaveType <> String.Empty Then
sSaveTypeList = sSaveType.Split("|")
For Each s As String In sSaveTypeList
If optFileType.Checked Then
sSaveType = "*" & Path.GetExtension(s) & ":"
Else
sSaveType = Path.GetFileName(s) & ":"
End If
sSaveType = sSaveType.TrimEnd(":")
If sCurrentSaveType <> String.Empty Then
sCurrentSaveType &= ":" & sSaveType
Else
sCurrentSaveType = sSaveType
End If
Next
End If
Else
sSaveType = mgrCommon.OpenFolderBrowser(sTitle, sDefaultFolder, False)
If sSaveType <> String.Empty Then
Dim sPath As String() = sSaveType.Split("\")
If sCurrentSaveType <> String.Empty Then
sCurrentSaveType &= ":" & sPath(sPath.Length - 1)
Else
sCurrentSaveType = sPath(sPath.Length - 1)
End If
End If
End If
txtFileTypes.Text = sCurrentSaveType
End Sub End Sub
Private Sub ExcludeBrowse() Private Sub OpenBuilder(ByVal sFormText As String, ByRef txtBox As TextBox)
Dim sDefaultFolder As String = txtSavePath.Text Dim frm As New frmIncludeExclude
Dim sCurrentExclude As String = txtExcludeList.Text frm.FormName = sFormText
Dim sExclude As String frm.BuilderString = txtBox.Text
Dim sExcludeList As String() frm.RootFolder = txtSavePath.Text
Dim sTitle As String = String.Empty
If optExcludeFileType.Checked Then frm.ShowDialog()
sTitle = "Choose the type of file(s) to exclude"
ElseIf optExcludeSpecificFile.Checked Then
sTitle = "Choose any file(s) to exclude"
Else
sTitle = "Choose a folder to exclude"
End If
If optExcludeFileType.Checked Or optExcludeSpecificFile.Checked Then
sExclude = mgrCommon.OpenFileBrowser(sTitle, "*", "All", sDefaultFolder, True)
If sExclude <> String.Empty Then
sExcludeList = sExclude.Split("|")
For Each s As String In sExcludeList
If optExcludeFileType.Checked Then
sExclude = "*" & Path.GetExtension(s) & ":"
Else
sExclude = Path.GetFileName(s) & ":"
End If
sExclude = sExclude.TrimEnd(":")
If sCurrentExclude <> String.Empty Then
sCurrentExclude &= ":" & sExclude
Else
sCurrentExclude = sExclude
End If
Next
End If
Else
sExclude = mgrCommon.OpenFolderBrowser(sTitle, sDefaultFolder, False)
If sExclude <> String.Empty Then
Dim sPath As String() = sExclude.Split("\")
If sCurrentExclude <> String.Empty Then
sCurrentExclude &= ":" & sPath(sPath.Length - 1)
Else
sCurrentExclude = sPath(sPath.Length - 1)
End If
End If
End If
If sCurrentExclude <> String.Empty Then
txtExcludeList.Text = sCurrentExclude
End If
txtBox.Text = frm.BuilderString
End Sub End Sub
Private Sub OpenTags(ByVal oGame As clsGame)
Dim frm As New frmGameTags
Dim sMonitorIDs As New List(Of String)
sMonitorIDs.Add(oGame.ID)
frm.IDList = sMonitorIDs
frm.GameName = oGame.Name
frm.ShowDialog()
End Sub
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
ValidateBack() ValidateBack()
@@ -588,26 +491,22 @@ Public Class frmAddWizard
End Sub End Sub
Private Sub frmAddWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmAddWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FormInit() SetForm()
End Sub End Sub
Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles lblDrag1.DragEnter, lblDrag2.DragEnter, txtName.DragEnter, txtProcessPath.DragEnter Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles txtName.DragEnter, txtProcessPath.DragEnter, lblStep1Instructions.DragEnter, lblStep2Instructions.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Copy e.Effect = DragDropEffects.Copy
End If End If
End Sub End Sub
Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles lblDrag1.DragDrop, lblDrag2.DragDrop, txtName.DragDrop, txtProcessPath.DragDrop Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles txtName.DragDrop, txtProcessPath.DragDrop, lblStep1Instructions.DragDrop, lblStep2Instructions.DragDrop
Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop) Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop)
For Each sPath In oFiles For Each sPath In oFiles
ReadShortcut(sPath) ReadShortcut(sPath)
Next Next
End Sub End Sub
Private Sub btndBoxBrowse_Click(sender As Object, e As EventArgs) Handles btndBoxBrowse.Click
DOSProcessBrowse()
End Sub
Private Sub btnProcessBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click Private Sub btnProcessBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
ProcessBrowse() ProcessBrowse()
End Sub End Sub
@@ -616,19 +515,11 @@ Public Class frmAddWizard
SavePathBrowse() SavePathBrowse()
End Sub End Sub
Private Sub btnFileTypeBrowse_Click(sender As Object, e As EventArgs) Handles btnFileTypeBrowse.Click Private Sub btnStep4Clear_Click(sender As Object, e As EventArgs)
SaveTypeBrowse()
End Sub
Private Sub btnExcludeBrowse_Click(sender As Object, e As EventArgs) Handles btnExcludeBrowse.Click
ExcludeBrowse()
End Sub
Private Sub btnStep4Clear_Click(sender As Object, e As EventArgs) Handles btnStep4Clear.Click
txtExcludeList.Clear() txtExcludeList.Clear()
End Sub End Sub
Private Sub btnStep3aClear_Click(sender As Object, e As EventArgs) Handles btnStep3aClear.Click Private Sub btnStep3aClear_Click(sender As Object, e As EventArgs)
txtFileTypes.Clear() txtFileTypes.Clear()
End Sub End Sub
@@ -636,4 +527,19 @@ Public Class frmAddWizard
txtFileTypes.Clear() txtFileTypes.Clear()
End Sub End Sub
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
ShowHideLimit()
End Sub
Private Sub btnInclude_Click(sender As Object, e As EventArgs) Handles btnInclude.Click
OpenBuilder(frmAddWizard_Include, txtFileTypes)
UpdateBuilderLabel(txtFileTypes.Text, lblFileTypes)
End Sub
Private Sub btnExclude_Click(sender As Object, e As EventArgs) Handles btnExclude.Click
OpenBuilder(frmAddWizard_Exclude, txtExcludeList)
UpdateBuilderLabel(txtExcludeList.Text, lblExclude)
End Sub
End Class End Class
+48 -23
View File
@@ -22,47 +22,40 @@ Partial Class frmAdvancedImport
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.lstGames = New System.Windows.Forms.CheckedListBox()
Me.btnImport = New System.Windows.Forms.Button() Me.btnImport = New System.Windows.Forms.Button()
Me.chkSelectAll = New System.Windows.Forms.CheckBox() Me.chkSelectAll = New System.Windows.Forms.CheckBox()
Me.lblGames = New System.Windows.Forms.Label() Me.lblGames = New System.Windows.Forms.Label()
Me.lblSelected = New System.Windows.Forms.Label() Me.lblSelected = New System.Windows.Forms.Label()
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.lstGames = New System.Windows.Forms.ListView()
Me.txtFilter = New System.Windows.Forms.TextBox()
Me.lblFilter = New System.Windows.Forms.Label()
Me.SuspendLayout() Me.SuspendLayout()
' '
'lstGames
'
Me.lstGames.CheckOnClick = True
Me.lstGames.FormattingEnabled = True
Me.lstGames.Location = New System.Drawing.Point(12, 30)
Me.lstGames.Name = "lstGames"
Me.lstGames.Size = New System.Drawing.Size(335, 334)
Me.lstGames.Sorted = True
Me.lstGames.TabIndex = 1
'
'btnImport 'btnImport
' '
Me.btnImport.Location = New System.Drawing.Point(191, 370) Me.btnImport.Location = New System.Drawing.Point(416, 375)
Me.btnImport.Name = "btnImport" Me.btnImport.Name = "btnImport"
Me.btnImport.Size = New System.Drawing.Size(75, 23) Me.btnImport.Size = New System.Drawing.Size(75, 23)
Me.btnImport.TabIndex = 2 Me.btnImport.TabIndex = 3
Me.btnImport.Text = "&Import" Me.btnImport.Text = "&Import"
Me.btnImport.UseVisualStyleBackColor = True Me.btnImport.UseVisualStyleBackColor = True
' '
'chkSelectAll 'chkSelectAll
' '
Me.chkSelectAll.AutoSize = True Me.chkSelectAll.AutoSize = True
Me.chkSelectAll.Location = New System.Drawing.Point(15, 12) Me.chkSelectAll.Location = New System.Drawing.Point(12, 12)
Me.chkSelectAll.Name = "chkSelectAll" Me.chkSelectAll.Name = "chkSelectAll"
Me.chkSelectAll.Size = New System.Drawing.Size(15, 14) Me.chkSelectAll.Size = New System.Drawing.Size(70, 17)
Me.chkSelectAll.TabIndex = 0 Me.chkSelectAll.TabIndex = 0
Me.chkSelectAll.Text = "Select All"
Me.chkSelectAll.UseVisualStyleBackColor = True Me.chkSelectAll.UseVisualStyleBackColor = True
' '
'lblGames 'lblGames
' '
Me.lblGames.Location = New System.Drawing.Point(12, 12) Me.lblGames.Location = New System.Drawing.Point(12, 380)
Me.lblGames.Name = "lblGames" Me.lblGames.Name = "lblGames"
Me.lblGames.Size = New System.Drawing.Size(335, 14) Me.lblGames.Size = New System.Drawing.Size(560, 14)
Me.lblGames.TabIndex = 0 Me.lblGames.TabIndex = 0
Me.lblGames.Text = "Games" Me.lblGames.Text = "Games"
Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter
@@ -70,7 +63,7 @@ Partial Class frmAdvancedImport
'lblSelected 'lblSelected
' '
Me.lblSelected.AutoSize = True Me.lblSelected.AutoSize = True
Me.lblSelected.Location = New System.Drawing.Point(9, 375) Me.lblSelected.Location = New System.Drawing.Point(9, 380)
Me.lblSelected.Name = "lblSelected" Me.lblSelected.Name = "lblSelected"
Me.lblSelected.Size = New System.Drawing.Size(77, 13) Me.lblSelected.Size = New System.Drawing.Size(77, 13)
Me.lblSelected.TabIndex = 0 Me.lblSelected.TabIndex = 0
@@ -78,24 +71,54 @@ Partial Class frmAdvancedImport
' '
'btnCancel 'btnCancel
' '
Me.btnCancel.Location = New System.Drawing.Point(272, 370) Me.btnCancel.Location = New System.Drawing.Point(497, 375)
Me.btnCancel.Name = "btnCancel" Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 3 Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True Me.btnCancel.UseVisualStyleBackColor = True
' '
'lstGames
'
Me.lstGames.CheckBoxes = True
Me.lstGames.FullRowSelect = True
Me.lstGames.Location = New System.Drawing.Point(12, 35)
Me.lstGames.Name = "lstGames"
Me.lstGames.Size = New System.Drawing.Size(560, 329)
Me.lstGames.TabIndex = 2
Me.lstGames.UseCompatibleStateImageBehavior = False
Me.lstGames.View = System.Windows.Forms.View.Details
'
'txtFilter
'
Me.txtFilter.Location = New System.Drawing.Point(416, 9)
Me.txtFilter.Name = "txtFilter"
Me.txtFilter.Size = New System.Drawing.Size(156, 20)
Me.txtFilter.TabIndex = 1
'
'lblFilter
'
Me.lblFilter.Location = New System.Drawing.Point(307, 12)
Me.lblFilter.Name = "lblFilter"
Me.lblFilter.Size = New System.Drawing.Size(103, 14)
Me.lblFilter.TabIndex = 0
Me.lblFilter.Text = "Filter:"
Me.lblFilter.TextAlign = System.Drawing.ContentAlignment.TopRight
'
'frmAdvancedImport 'frmAdvancedImport
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(359, 402) Me.ClientSize = New System.Drawing.Size(584, 411)
Me.Controls.Add(Me.lblFilter)
Me.Controls.Add(Me.txtFilter)
Me.Controls.Add(Me.lstGames)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.lblSelected) Me.Controls.Add(Me.lblSelected)
Me.Controls.Add(Me.chkSelectAll) Me.Controls.Add(Me.chkSelectAll)
Me.Controls.Add(Me.btnImport) Me.Controls.Add(Me.btnImport)
Me.Controls.Add(Me.lstGames)
Me.Controls.Add(Me.lblGames) Me.Controls.Add(Me.lblGames)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
Me.Name = "frmAdvancedImport" Me.Name = "frmAdvancedImport"
@@ -106,10 +129,12 @@ Partial Class frmAdvancedImport
Me.PerformLayout() Me.PerformLayout()
End Sub End Sub
Friend WithEvents lstGames As System.Windows.Forms.CheckedListBox
Friend WithEvents btnImport As System.Windows.Forms.Button Friend WithEvents btnImport As System.Windows.Forms.Button
Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox
Friend WithEvents lblGames As System.Windows.Forms.Label Friend WithEvents lblGames As System.Windows.Forms.Label
Friend WithEvents lblSelected As System.Windows.Forms.Label Friend WithEvents lblSelected As System.Windows.Forms.Label
Friend WithEvents btnCancel As System.Windows.Forms.Button Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lstGames As System.Windows.Forms.ListView
Friend WithEvents txtFilter As System.Windows.Forms.TextBox
Friend WithEvents lblFilter As System.Windows.Forms.Label
End Class End Class
+148 -25
View File
@@ -1,8 +1,13 @@
Public Class frmAdvancedImport Imports GBM.My.Resources
Public Class frmAdvancedImport
Private hshImportData As Hashtable Private hshImportData As Hashtable
Private hshFinalData As New Hashtable
Private bSelectAll As Boolean = False Private bSelectAll As Boolean = False
Private bIsLoading As Boolean = False Private bIsLoading As Boolean = False
Private iCurrentSort As Integer = 0
Private WithEvents tmFilterTimer As Timer
Public Property ImportData As Hashtable Public Property ImportData As Hashtable
Set(value As Hashtable) Set(value As Hashtable)
@@ -13,46 +18,125 @@
End Get End Get
End Property End Property
Public ReadOnly Property FinalData As Hashtable
Get
Return hshFinalData
End Get
End Property
Private Sub SelectToggle() Private Sub SelectToggle()
Cursor.Current = Cursors.WaitCursor
lstGames.BeginUpdate()
bSelectAll = Not bSelectAll bSelectAll = Not bSelectAll
For i As Integer = 0 To lstGames.Items.Count - 1 For i As Integer = 0 To lstGames.Items.Count - 1
lstGames.SetItemChecked(i, bSelectAll) lstGames.Items(i).Checked = bSelectAll
Next Next
lstGames.EndUpdate()
Cursor.Current = Cursors.Default
UpdateSelected() UpdateSelected()
End Sub End Sub
Private Sub LoadData() Private Sub SaveChecked(ByVal oItem As ListViewItem)
Dim oApp As clsGame If oItem.Checked Then
Dim oData As KeyValuePair(Of String, String) FinalData.Add(oItem.Tag, ImportData(oItem.Tag))
Else
FinalData.Remove(oItem.Tag)
End If
End Sub
lstGames.ValueMember = "Key" Private Sub LoadData(Optional ByVal sFilter As String = "")
lstGames.DisplayMember = "Value" Dim oApp As clsGame
Dim oListViewItem As ListViewItem
Dim sTags As String
Dim bAddItem As Boolean
Dim bResetSelectAll As Boolean = False
Cursor.Current = Cursors.WaitCursor
lstGames.BeginUpdate()
lstGames.Clear()
lstGames.Columns.Add(frmAdvancedImport_ColumnName, 215)
lstGames.Columns.Add(frmAdvancedImport_ColumnProcess, 130)
lstGames.Columns.Add(frmAdvancedImport_ColumnTags, 190)
For Each de As DictionaryEntry In ImportData For Each de As DictionaryEntry In ImportData
bAddItem = False
oApp = DirectCast(de.Value, clsGame) oApp = DirectCast(de.Value, clsGame)
oData = New KeyValuePair(Of String, String)(oApp.ProcessName, oApp.Name & " (" & oApp.TrueProcess & ")") sTags = String.Empty
lstGames.Items.Add(oData) oApp.ImportTags.Sort(AddressOf mgrCommon.CompareImportTagsByName)
For Each oTag As Tag In oApp.ImportTags
sTags &= oTag.Name & ", "
Next
sTags = sTags.TrimEnd(New Char() {",", " "})
oListViewItem = New ListViewItem(New String() {oApp.Name, oApp.TrueProcess, sTags})
oListViewItem.Tag = oApp.CompoundKey
If FinalData.ContainsKey(oApp.CompoundKey) Then
oListViewItem.Checked = True
Else
oListViewItem.Checked = False
End If
If sFilter = String.Empty Then
bAddItem = True
Else
If oApp.Name.ToLower.Contains(sFilter.ToLower) Or oApp.TrueProcess.ToLower.Contains(sFilter.ToLower) Or sTags.ToLower.Contains(sFilter.ToLower) Then
bAddItem = True
End If
End If
If bAddItem Then
If oListViewItem.Checked Then bResetSelectAll = True
lstGames.Items.Add(oListViewItem)
End If
Next Next
'Change the status of the "Select All" checkbox depending on the status of the items filter results. Set loading flag so we don't trigger any events
bIsLoading = True
If Not bResetSelectAll And bSelectAll Then
bSelectAll = False
chkSelectAll.Checked = False
ElseIf bResetSelectAll And Not bSelectAll Then
bSelectAll = True
chkSelectAll.Checked = True
End If
bIsLoading = False
lstGames.ListViewItemSorter = New ListViewItemComparer(iCurrentSort)
lstGames.EndUpdate()
UpdateSelected()
If txtFilter.Text = String.Empty Then
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_Configs, lstGames.Items.Count)
Else
lblGames.Text = mgrCommon.FormatString(frmAdvancedImport_Configs, lstGames.Items.Count) & " " & frmAdvancedImport_Filtered
End If
Cursor.Current = Cursors.Default
End Sub End Sub
Private Sub SetForm() Private Sub SetForm()
'Set Form Name
Me.Text = frmAdvancedImport_FormName
'Set Form Text
lblFilter.Text = frmAdvancedImport_lblFilter
btnCancel.Text = frmAdvancedImport_btnCancel
btnImport.Text = frmAdvancedImport_btnImport
chkSelectAll.Text = frmAdvancedImport_chkSelectAll
chkSelectAll.Checked = True chkSelectAll.Checked = True
lblGames.Text = ImportData.Count & " new configurations available."
End Sub
Private Sub BuildList() 'Init Filter Timer
Dim oData As KeyValuePair(Of String, String) tmFilterTimer = New Timer()
tmFilterTimer.Interval = 1000
For i As Integer = 0 To lstGames.Items.Count - 1 tmFilterTimer.Enabled = False
If Not lstGames.GetItemChecked(i) Then
oData = lstGames.Items(i)
ImportData.Remove(oData.Key)
End If
Next
End Sub End Sub
Private Sub UpdateSelected() Private Sub UpdateSelected()
lblSelected.Text = lstGames.CheckedItems.Count & " Selected" lblSelected.Text = mgrCommon.FormatString(frmAdvancedImport_Selected, FinalData.Count)
End Sub End Sub
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
@@ -67,8 +151,11 @@
If Not bIsLoading Then SelectToggle() If Not bIsLoading Then SelectToggle()
End Sub End Sub
Private Sub lstGames_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedValueChanged Private Sub lstGames_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lstGames.ItemChecked
If Not bIsLoading Then UpdateSelected() SaveChecked(e.Item)
If Not bIsLoading Then
UpdateSelected()
End If
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
@@ -76,8 +163,44 @@
End Sub End Sub
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
BuildList() If FinalData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
If ImportData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close() Me.Close()
End Sub End Sub
Private Sub lstGames_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles lstGames.ColumnClick
iCurrentSort = e.Column
lstGames.ListViewItemSorter = New ListViewItemComparer(e.Column)
End Sub
Private Sub txtFilter_TextChanged(sender As Object, e As EventArgs) Handles txtFilter.TextChanged
If Not tmFilterTimer.Enabled Then
tmFilterTimer.Enabled = True
tmFilterTimer.Start()
End If
End Sub
Private Sub tmFilterTimer_Tick(sender As Object, ByVal e As EventArgs) Handles tmFilterTimer.Tick
LoadData(txtFilter.Text)
tmFilterTimer.Stop()
tmFilterTimer.Enabled = False
End Sub
End Class
' Column Sorter
Class ListViewItemComparer
Implements IComparer
Private col As Integer
Public Sub New()
col = 0
End Sub
Public Sub New(ByVal column As Integer)
col = column
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
End Function
End Class End Class
+15 -2
View File
@@ -25,6 +25,7 @@ Partial Class frmChooseGame
Me.lblChoose = New System.Windows.Forms.Label() Me.lblChoose = New System.Windows.Forms.Label()
Me.btnChoose = New System.Windows.Forms.Button() Me.btnChoose = New System.Windows.Forms.Button()
Me.lstGameBox = New System.Windows.Forms.ListBox() Me.lstGameBox = New System.Windows.Forms.ListBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.SuspendLayout() Me.SuspendLayout()
' '
'lblChoose 'lblChoose
@@ -38,9 +39,9 @@ Partial Class frmChooseGame
' '
'btnChoose 'btnChoose
' '
Me.btnChoose.Location = New System.Drawing.Point(124, 135) Me.btnChoose.Location = New System.Drawing.Point(72, 135)
Me.btnChoose.Name = "btnChoose" Me.btnChoose.Name = "btnChoose"
Me.btnChoose.Size = New System.Drawing.Size(119, 23) Me.btnChoose.Size = New System.Drawing.Size(90, 23)
Me.btnChoose.TabIndex = 2 Me.btnChoose.TabIndex = 2
Me.btnChoose.Text = "C&hoose Game" Me.btnChoose.Text = "C&hoose Game"
Me.btnChoose.UseVisualStyleBackColor = True Me.btnChoose.UseVisualStyleBackColor = True
@@ -51,13 +52,24 @@ Partial Class frmChooseGame
Me.lstGameBox.Location = New System.Drawing.Point(15, 34) Me.lstGameBox.Location = New System.Drawing.Point(15, 34)
Me.lstGameBox.Name = "lstGameBox" Me.lstGameBox.Name = "lstGameBox"
Me.lstGameBox.Size = New System.Drawing.Size(228, 95) Me.lstGameBox.Size = New System.Drawing.Size(228, 95)
Me.lstGameBox.Sorted = True
Me.lstGameBox.TabIndex = 1 Me.lstGameBox.TabIndex = 1
' '
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(168, 135)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 3
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'frmChooseGame 'frmChooseGame
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(255, 166) Me.ClientSize = New System.Drawing.Size(255, 166)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.lstGameBox) Me.Controls.Add(Me.lstGameBox)
Me.Controls.Add(Me.btnChoose) Me.Controls.Add(Me.btnChoose)
Me.Controls.Add(Me.lblChoose) Me.Controls.Add(Me.lblChoose)
@@ -75,4 +87,5 @@ Partial Class frmChooseGame
Friend WithEvents lblChoose As System.Windows.Forms.Label Friend WithEvents lblChoose As System.Windows.Forms.Label
Friend WithEvents btnChoose As System.Windows.Forms.Button Friend WithEvents btnChoose As System.Windows.Forms.Button
Friend WithEvents lstGameBox As System.Windows.Forms.ListBox Friend WithEvents lstGameBox As System.Windows.Forms.ListBox
Friend WithEvents btnCancel As Button
End Class End Class
+26 -11
View File
@@ -1,8 +1,9 @@
Public Class frmChooseGame Imports GBM.My.Resources
Public Class frmChooseGame
Private oProcess As mgrProcesses Private oProcess As mgrProcesses
Private oGame As clsGame Private oGame As clsGame
Private oGamesList As New List(Of KeyValuePair(Of String, String))
Private oGamesHash As New Hashtable Private oGamesHash As New Hashtable
Private bGameSelected As Boolean = False Private bGameSelected As Boolean = False
@@ -25,16 +26,15 @@
End Property End Property
Private Sub FillComboBox() Private Sub FillComboBox()
lstGameBox.ValueMember = "Key"
lstGameBox.DisplayMember = "Value"
For Each o As clsGame In Process.DuplicateList For Each o As clsGame In Process.DuplicateList
oGamesList.Add(New KeyValuePair(Of String, String)(o.ID, o.Name)) lstGameBox.Items.Add(New KeyValuePair(Of String, String)(o.ID, o.Name))
oGamesHash.Add(o.ID, o) oGamesHash.Add(o.ID, o)
Next Next
lstGameBox.DataSource = oGamesList
lstGameBox.ValueMember = "key"
lstGameBox.DisplayMember = "value"
lstGameBox.SelectedIndex = 0 lstGameBox.SelectedIndex = 0
End Sub End Sub
Private Sub SaveSelection() Private Sub SaveSelection()
@@ -43,15 +43,26 @@
End Sub End Sub
Private Sub GetSelection() Private Sub GetSelection()
Dim sSelectedGame As String Dim oSelected As KeyValuePair(Of String, String) = lstGameBox.SelectedItem
sSelectedGame = CStr(lstGameBox.SelectedValue) oGame = DirectCast(oGamesHash.Item(oSelected.Key), clsGame)
oGame = DirectCast(oGamesHash.Item(sSelectedGame), clsGame)
SaveSelection() SaveSelection()
bGameSelected = True bGameSelected = True
Me.DialogResult = DialogResult.OK
Me.Close() Me.Close()
End Sub End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = frmChooseGame_FormName
'Set Form Text
btnCancel.Text = frmChooseGame_btnCancel
btnChoose.Text = frmChooseGame_btnChoose
lblChoose.Text = frmChooseGame_lblChoose
End Sub
Private Sub frmChooseGame_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Private Sub frmChooseGame_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SetForm()
FillComboBox() FillComboBox()
Me.Focus() Me.Focus()
End Sub End Sub
@@ -62,7 +73,11 @@
Private Sub frmChooseGame_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing Private Sub frmChooseGame_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If bGameSelected = False Then If bGameSelected = False Then
e.Cancel = True Me.DialogResult = DialogResult.Cancel
End If End If
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class End Class
+52 -16
View File
@@ -22,35 +22,30 @@ Partial Class frmFileFolderSearch
'Do not modify it using the code editor. 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.pgbProgress = New System.Windows.Forms.ProgressBar()
Me.txtCurrentLocation = New System.Windows.Forms.TextBox() Me.txtCurrentLocation = New System.Windows.Forms.TextBox()
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.bwSearch = New System.ComponentModel.BackgroundWorker() Me.bwSearch = New System.ComponentModel.BackgroundWorker()
Me.lstResults = New System.Windows.Forms.ListBox()
Me.btnOk = New System.Windows.Forms.Button()
Me.lblResults = New System.Windows.Forms.Label()
Me.cboDrive = New System.Windows.Forms.ComboBox()
Me.SuspendLayout() Me.SuspendLayout()
' '
'pgbProgress
'
Me.pgbProgress.Location = New System.Drawing.Point(12, 12)
Me.pgbProgress.MarqueeAnimationSpeed = 0
Me.pgbProgress.Name = "pgbProgress"
Me.pgbProgress.Size = New System.Drawing.Size(460, 23)
Me.pgbProgress.TabIndex = 0
'
'txtCurrentLocation 'txtCurrentLocation
' '
Me.txtCurrentLocation.Location = New System.Drawing.Point(12, 43) Me.txtCurrentLocation.Location = New System.Drawing.Point(102, 13)
Me.txtCurrentLocation.Name = "txtCurrentLocation" Me.txtCurrentLocation.Name = "txtCurrentLocation"
Me.txtCurrentLocation.ReadOnly = True Me.txtCurrentLocation.ReadOnly = True
Me.txtCurrentLocation.Size = New System.Drawing.Size(379, 20) Me.txtCurrentLocation.Size = New System.Drawing.Size(370, 20)
Me.txtCurrentLocation.TabIndex = 0 Me.txtCurrentLocation.TabIndex = 0
Me.txtCurrentLocation.TabStop = False Me.txtCurrentLocation.TabStop = False
' '
'btnCancel 'btnCancel
' '
Me.btnCancel.Location = New System.Drawing.Point(397, 41) Me.btnCancel.Location = New System.Drawing.Point(397, 146)
Me.btnCancel.Name = "btnCancel" Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 0 Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True Me.btnCancel.UseVisualStyleBackColor = True
' '
@@ -58,14 +53,52 @@ Partial Class frmFileFolderSearch
' '
Me.bwSearch.WorkerSupportsCancellation = True Me.bwSearch.WorkerSupportsCancellation = True
' '
'lstResults
'
Me.lstResults.FormattingEnabled = True
Me.lstResults.Location = New System.Drawing.Point(12, 58)
Me.lstResults.Name = "lstResults"
Me.lstResults.Size = New System.Drawing.Size(460, 82)
Me.lstResults.TabIndex = 2
'
'btnOk
'
Me.btnOk.Location = New System.Drawing.Point(316, 146)
Me.btnOk.Name = "btnOk"
Me.btnOk.Size = New System.Drawing.Size(75, 23)
Me.btnOk.TabIndex = 3
Me.btnOk.Text = "&OK"
Me.btnOk.UseVisualStyleBackColor = True
'
'lblResults
'
Me.lblResults.Location = New System.Drawing.Point(9, 42)
Me.lblResults.Name = "lblResults"
Me.lblResults.Size = New System.Drawing.Size(463, 13)
Me.lblResults.TabIndex = 1
Me.lblResults.Text = "Search Results"
Me.lblResults.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'cboDrive
'
Me.cboDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboDrive.FormattingEnabled = True
Me.cboDrive.Location = New System.Drawing.Point(12, 13)
Me.cboDrive.Name = "cboDrive"
Me.cboDrive.Size = New System.Drawing.Size(85, 21)
Me.cboDrive.TabIndex = 5
'
'frmFileFolderSearch 'frmFileFolderSearch
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(484, 77) Me.ClientSize = New System.Drawing.Size(484, 181)
Me.Controls.Add(Me.cboDrive)
Me.Controls.Add(Me.lblResults)
Me.Controls.Add(Me.btnOk)
Me.Controls.Add(Me.lstResults)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.txtCurrentLocation) Me.Controls.Add(Me.txtCurrentLocation)
Me.Controls.Add(Me.pgbProgress)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
@@ -77,8 +110,11 @@ Partial Class frmFileFolderSearch
Me.PerformLayout() Me.PerformLayout()
End Sub End Sub
Friend WithEvents pgbProgress As System.Windows.Forms.ProgressBar
Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox
Friend WithEvents btnCancel As System.Windows.Forms.Button Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents bwSearch As System.ComponentModel.BackgroundWorker Friend WithEvents bwSearch As System.ComponentModel.BackgroundWorker
Friend WithEvents lstResults As System.Windows.Forms.ListBox
Friend WithEvents btnOk As System.Windows.Forms.Button
Friend WithEvents lblResults As System.Windows.Forms.Label
Friend WithEvents cboDrive As System.Windows.Forms.ComboBox
End Class End Class
+151 -28
View File
@@ -1,15 +1,36 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class frmFileFolderSearch Public Class frmFileFolderSearch
Private sSearchItem As String Private sSearchItem As String
Private sGameName As String = String.Empty
Private bIsLoading As Boolean
Private bIsFolder As Boolean Private bIsFolder As Boolean
Private sFoundItem As String Private sFoundItem As String
Private oDrives As List(Of DriveInfo) Private oDrives As List(Of DriveInfo)
Private iCurrentDrive As Integer
Private oSearchDrive As DirectoryInfo Private oSearchDrive As DirectoryInfo
Dim bShutdown As Boolean = False Dim bShutdown As Boolean = False
Private Enum eStopStatus As Integer
Cancel = 1
ChangeDrive = 2
FoundResult = 3
FinishedDrive = 4
End Enum
Private iStopStatus As eStopStatus
Delegate Sub UpdateInfoCallBack(ByVal sCurrentFolder As String) Delegate Sub UpdateInfoCallBack(ByVal sCurrentFolder As String)
Delegate Sub UpdateResultsCallBack(ByVal sItem As String)
Public Property GameName As String
Get
Return sGameName
End Get
Set(value As String)
sGameName = value
End Set
End Property
Public Property SearchItem As String Public Property SearchItem As String
Get Get
@@ -47,19 +68,38 @@ Public Class frmFileFolderSearch
End If End If
End Sub End Sub
Private Sub UpdateResults(ByVal sItem As String)
If lstResults.InvokeRequired = True Then
Dim d As New UpdateInfoCallBack(AddressOf UpdateResults)
Me.Invoke(d, New Object() {sItem})
Else
'It's possible the same location will be searched twice when using Linux. Filter out duplicate results
If Not lstResults.Items.Contains(sItem) Then
lstResults.Items.Add(sItem)
End If
End If
End Sub
Private Function SearchDirectory(ByVal dir As DirectoryInfo, ByVal sDirectoryName As String) As String Private Function SearchDirectory(ByVal dir As DirectoryInfo, ByVal sDirectoryName As String) As String
Dim sSubSearch As String = String.Empty Dim sSubSearch As String = String.Empty
Dim sFoundItem As String = String.Empty
If bwSearch.CancellationPending Then If bwSearch.CancellationPending Then
Return "Cancel" Return "Cancel"
End If End If
'Ignore Symlinks
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
Return String.Empty
End If
UpdateInfo(dir.FullName) UpdateInfo(dir.FullName)
Try Try
'Search Current Directory 'Search Current Directory
If dir.GetDirectories(sDirectoryName).Length > 0 Then If dir.GetDirectories(sDirectoryName).Length > 0 Then
Return dir.FullName & "\" & sDirectoryName sFoundItem = dir.FullName & Path.DirectorySeparatorChar & sDirectoryName
UpdateResults(sFoundItem)
End If End If
'Search Sub Directory 'Search Sub Directory
@@ -81,26 +121,34 @@ Public Class frmFileFolderSearch
Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String
Dim sSubSearch As String = String.Empty Dim sSubSearch As String = String.Empty
Dim sFoundItem As String = String.Empty
If bwSearch.CancellationPending Then If bwSearch.CancellationPending Then
Return "Cancel" Return "Cancel"
End If End If
'Ignore Symlinks
If (dir.Attributes And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then
Return String.Empty
End If
UpdateInfo(dir.FullName) UpdateInfo(dir.FullName)
Try Try
'Search Current Directory 'Search Current Directory
If dir.GetFiles(sFileName).Length > 0 Then If dir.GetFiles(sFileName).Length > 0 Then
Return dir.FullName & "\" & sFileName sFoundItem = Path.GetDirectoryName(dir.FullName & Path.DirectorySeparatorChar & sFileName)
UpdateResults(sFoundItem)
End If End If
'Search Sub Directory 'Search Sub Directory
Dim subdirs() As DirectoryInfo = dir.GetDirectories("*") Dim subdirs() As DirectoryInfo = dir.GetDirectories("*")
For Each newDir As DirectoryInfo In subdirs For Each newDir As DirectoryInfo In subdirs
sSubSearch = SearchFile(newDir, sFileName) sSubSearch = SearchFile(newDir, sFileName)
If sSubSearch <> String.Empty Then
Return sSubSearch If sSubSearch <> String.Empty Then
End If Return sSubSearch
End If
Next Next
Catch e As System.UnauthorizedAccessException Catch e As System.UnauthorizedAccessException
'Do Nothing 'Do Nothing
@@ -112,47 +160,79 @@ Public Class frmFileFolderSearch
End Function End Function
Private Sub GetDrives() Private Sub GetDrives()
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
Dim iCount As Integer = 0
'cboDrive
cboDrive.ValueMember = "Key"
cboDrive.DisplayMember = "Value"
oDrives = New List(Of DriveInfo) oDrives = New List(Of DriveInfo)
For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives
If oDrive.DriveType = IO.DriveType.Fixed Then If oDrive.DriveType = IO.DriveType.Fixed Then
oDrives.Add(oDrive) oDrives.Add(oDrive)
oComboItems.Add(New KeyValuePair(Of Integer, String)(iCount, oDrive.RootDirectory.ToString))
iCount += 1
End If End If
Next Next
cboDrive.DataSource = oComboItems
End Sub End Sub
Private Sub Search(ByVal oDrive As DriveInfo) Private Sub Search(ByVal oDrive As DriveInfo)
pgbProgress.Style = ProgressBarStyle.Marquee iStopStatus = eStopStatus.FinishedDrive
pgbProgress.MarqueeAnimationSpeed = 5
oSearchDrive = oDrive.RootDirectory oSearchDrive = oDrive.RootDirectory
bwSearch.RunWorkerAsync() bwSearch.RunWorkerAsync()
iCurrentDrive += 1
End Sub End Sub
Private Sub EndSearch() Private Sub EndSearch()
Dim oResult As MsgBoxResult
pgbProgress.MarqueeAnimationSpeed = 0
If FoundItem = "Cancel" Then FoundItem = String.Empty If FoundItem = "Cancel" Then FoundItem = String.Empty
If oDrives.Count > iCurrentDrive And FoundItem = String.Empty Then Select Case iStopStatus
oResult = MsgBox("The location was not found on the " & oSearchDrive.Root.ToString & _ Case eStopStatus.Cancel
" drive. Do you wish to search the " & oDrives(iCurrentDrive).RootDirectory.ToString & _ SearchComplete(frmFileFolderSearch_SearchCancel)
" drive?", MsgBoxStyle.YesNo, "Game Backup Monitor") Case eStopStatus.ChangeDrive
If oResult = MsgBoxResult.Yes Then Search(oDrives(cboDrive.SelectedValue))
Search(oDrives(iCurrentDrive)) Case eStopStatus.FinishedDrive
Else 'Attempt to move onto the next drive it one exists and there's been no results
If oDrives.Count > 1 And lstResults.Items.Count = 0 Then
If cboDrive.SelectedIndex = (cboDrive.Items.Count - 1) Then
cboDrive.SelectedIndex = 0
Else
cboDrive.SelectedIndex = cboDrive.SelectedIndex + 1
End If
Else
SearchComplete(frmFileFolderSearch_SearchComplete)
End If
Case eStopStatus.FoundResult
FoundItem = lstResults.SelectedItem.ToString
bShutdown = True bShutdown = True
Me.Close() Me.Close()
End If End Select
Else End Sub
bShutdown = True
Me.Close() Private Sub SearchComplete(ByVal sStopMessage As String)
txtCurrentLocation.Text = sStopMessage
If lstResults.Items.Count > 0 Then
lstResults.SelectedIndex = 0
End If End If
End Sub End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = frmFileFolderSearch_FormName
'Set Form Text
lblResults.Text = frmFileFolderSearch_lblResults
btnOk.Text = frmFileFolderSearch_btnOk
btnCancel.Text = frmFileFolderSearch_btnCancel
End Sub
Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bIsLoading = True
SetForm()
GetDrives() GetDrives()
Search(oDrives(iCurrentDrive)) bIsLoading = False
Search(oDrives(0))
End Sub End Sub
Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork
@@ -168,11 +248,54 @@ Public Class frmFileFolderSearch
End Sub End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
bwSearch.CancelAsync() If bwSearch.IsBusy Then
iStopStatus = eStopStatus.Cancel
bwSearch.CancelAsync()
Else
bShutdown = True
Me.Close()
End If
End Sub End Sub
Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
bwSearch.CancelAsync()
If Not bShutdown Then e.Cancel = True If Not bShutdown Then e.Cancel = True
End Sub End Sub
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
Dim sItem As String
If lstResults.SelectedItems.Count = 1 Then
sItem = lstResults.SelectedItem.ToString
If mgrCommon.ShowMessage(mgrPath_ConfirmPathCorrect, New String() {GameName, sItem}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If bwSearch.IsBusy Then
iStopStatus = eStopStatus.FoundResult
bwSearch.CancelAsync()
Else
FoundItem = sItem
bShutdown = True
Me.Close()
End If
End If
End If
End Sub
Private Sub cboDrive_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboDrive.SelectedIndexChanged
If Not bIsLoading Then
Dim oResult As MsgBoxResult
oResult = mgrCommon.ShowMessage(frmFileFolderSearch_SwitchDrives, New String() {oDrives(cboDrive.SelectedValue).RootDirectory.ToString}, MsgBoxStyle.YesNo)
If oResult = MsgBoxResult.Yes Then
If bwSearch.IsBusy Then
iStopStatus = eStopStatus.ChangeDrive
bwSearch.CancelAsync()
Else
Search(oDrives(cboDrive.SelectedValue))
End If
Else
iStopStatus = eStopStatus.FinishedDrive
SearchComplete(frmFileFolderSearch_SearchCancel)
End If
End If
End Sub
End Class End Class
+331
View File
@@ -0,0 +1,331 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmFilter
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.optGameInfo = New System.Windows.Forms.RadioButton()
Me.optTag = New System.Windows.Forms.RadioButton()
Me.grpTagFilter = New System.Windows.Forms.GroupBox()
Me.grpTagOptions = New System.Windows.Forms.GroupBox()
Me.optAll = New System.Windows.Forms.RadioButton()
Me.optAny = New System.Windows.Forms.RadioButton()
Me.lblGameTags = New System.Windows.Forms.Label()
Me.lblTags = New System.Windows.Forms.Label()
Me.btnRemove = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.lstFilter = New System.Windows.Forms.ListBox()
Me.lstTags = New System.Windows.Forms.ListBox()
Me.btnOK = New System.Windows.Forms.Button()
Me.grpGameFilter = New System.Windows.Forms.GroupBox()
Me.grpGameInfoOptions = New System.Windows.Forms.GroupBox()
Me.optOr = New System.Windows.Forms.RadioButton()
Me.optAnd = New System.Windows.Forms.RadioButton()
Me.txtCompany = New System.Windows.Forms.TextBox()
Me.lblCompany = New System.Windows.Forms.Label()
Me.txtProcess = New System.Windows.Forms.TextBox()
Me.lblProcess = New System.Windows.Forms.Label()
Me.lblName = New System.Windows.Forms.Label()
Me.txtName = New System.Windows.Forms.TextBox()
Me.grpTagFilter.SuspendLayout()
Me.grpTagOptions.SuspendLayout()
Me.grpGameFilter.SuspendLayout()
Me.grpGameInfoOptions.SuspendLayout()
Me.SuspendLayout()
'
'optGameInfo
'
Me.optGameInfo.AutoSize = True
Me.optGameInfo.Location = New System.Drawing.Point(12, 12)
Me.optGameInfo.Name = "optGameInfo"
Me.optGameInfo.Size = New System.Drawing.Size(108, 17)
Me.optGameInfo.TabIndex = 0
Me.optGameInfo.Text = "Game Information"
Me.optGameInfo.UseVisualStyleBackColor = True
'
'optTag
'
Me.optTag.AutoSize = True
Me.optTag.Location = New System.Drawing.Point(12, 190)
Me.optTag.Name = "optTag"
Me.optTag.Size = New System.Drawing.Size(44, 17)
Me.optTag.TabIndex = 2
Me.optTag.Text = "Tag"
Me.optTag.UseVisualStyleBackColor = True
'
'grpTagFilter
'
Me.grpTagFilter.Controls.Add(Me.grpTagOptions)
Me.grpTagFilter.Controls.Add(Me.lblGameTags)
Me.grpTagFilter.Controls.Add(Me.lblTags)
Me.grpTagFilter.Controls.Add(Me.btnRemove)
Me.grpTagFilter.Controls.Add(Me.btnAdd)
Me.grpTagFilter.Controls.Add(Me.lstFilter)
Me.grpTagFilter.Controls.Add(Me.lstTags)
Me.grpTagFilter.Location = New System.Drawing.Point(12, 213)
Me.grpTagFilter.Name = "grpTagFilter"
Me.grpTagFilter.Size = New System.Drawing.Size(385, 265)
Me.grpTagFilter.TabIndex = 3
Me.grpTagFilter.TabStop = False
'
'grpTagOptions
'
Me.grpTagOptions.Controls.Add(Me.optAll)
Me.grpTagOptions.Controls.Add(Me.optAny)
Me.grpTagOptions.Location = New System.Drawing.Point(6, 211)
Me.grpTagOptions.Name = "grpTagOptions"
Me.grpTagOptions.Size = New System.Drawing.Size(150, 46)
Me.grpTagOptions.TabIndex = 6
Me.grpTagOptions.TabStop = False
Me.grpTagOptions.Text = "Options"
'
'optAll
'
Me.optAll.Location = New System.Drawing.Point(77, 19)
Me.optAll.Name = "optAll"
Me.optAll.Size = New System.Drawing.Size(63, 17)
Me.optAll.TabIndex = 1
Me.optAll.TabStop = True
Me.optAll.Text = "All Tags"
Me.optAll.UseVisualStyleBackColor = True
'
'optAny
'
Me.optAny.Checked = True
Me.optAny.Location = New System.Drawing.Point(6, 19)
Me.optAny.Name = "optAny"
Me.optAny.Size = New System.Drawing.Size(65, 17)
Me.optAny.TabIndex = 0
Me.optAny.TabStop = True
Me.optAny.Text = "Any Tag"
Me.optAny.UseVisualStyleBackColor = True
'
'lblGameTags
'
Me.lblGameTags.AutoSize = True
Me.lblGameTags.Location = New System.Drawing.Point(271, 16)
Me.lblGameTags.Name = "lblGameTags"
Me.lblGameTags.Size = New System.Drawing.Size(66, 13)
Me.lblGameTags.TabIndex = 4
Me.lblGameTags.Text = "Current Filter"
'
'lblTags
'
Me.lblTags.AutoSize = True
Me.lblTags.Location = New System.Drawing.Point(43, 16)
Me.lblTags.Name = "lblTags"
Me.lblTags.Size = New System.Drawing.Size(77, 13)
Me.lblTags.TabIndex = 0
Me.lblTags.Text = "Available Tags"
'
'btnRemove
'
Me.btnRemove.Location = New System.Drawing.Point(162, 122)
Me.btnRemove.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(61, 23)
Me.btnRemove.TabIndex = 3
Me.btnRemove.Text = "<"
Me.btnRemove.UseVisualStyleBackColor = True
'
'btnAdd
'
Me.btnAdd.Location = New System.Drawing.Point(162, 93)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(61, 23)
Me.btnAdd.TabIndex = 2
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'lstFilter
'
Me.lstFilter.FormattingEnabled = True
Me.lstFilter.Location = New System.Drawing.Point(229, 32)
Me.lstFilter.Name = "lstFilter"
Me.lstFilter.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstFilter.Size = New System.Drawing.Size(150, 173)
Me.lstFilter.Sorted = True
Me.lstFilter.TabIndex = 5
'
'lstTags
'
Me.lstTags.FormattingEnabled = True
Me.lstTags.Location = New System.Drawing.Point(6, 32)
Me.lstTags.Name = "lstTags"
Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstTags.Size = New System.Drawing.Size(150, 173)
Me.lstTags.Sorted = True
Me.lstTags.TabIndex = 1
'
'btnOK
'
Me.btnOK.Location = New System.Drawing.Point(322, 484)
Me.btnOK.Name = "btnOK"
Me.btnOK.Size = New System.Drawing.Size(75, 23)
Me.btnOK.TabIndex = 4
Me.btnOK.Text = "&OK"
Me.btnOK.UseVisualStyleBackColor = True
'
'grpGameFilter
'
Me.grpGameFilter.Controls.Add(Me.grpGameInfoOptions)
Me.grpGameFilter.Controls.Add(Me.txtCompany)
Me.grpGameFilter.Controls.Add(Me.lblCompany)
Me.grpGameFilter.Controls.Add(Me.txtProcess)
Me.grpGameFilter.Controls.Add(Me.lblProcess)
Me.grpGameFilter.Controls.Add(Me.lblName)
Me.grpGameFilter.Controls.Add(Me.txtName)
Me.grpGameFilter.Location = New System.Drawing.Point(12, 35)
Me.grpGameFilter.Name = "grpGameFilter"
Me.grpGameFilter.Size = New System.Drawing.Size(385, 150)
Me.grpGameFilter.TabIndex = 1
Me.grpGameFilter.TabStop = False
'
'grpGameInfoOptions
'
Me.grpGameInfoOptions.Controls.Add(Me.optOr)
Me.grpGameInfoOptions.Controls.Add(Me.optAnd)
Me.grpGameInfoOptions.Location = New System.Drawing.Point(14, 97)
Me.grpGameInfoOptions.Name = "grpGameInfoOptions"
Me.grpGameInfoOptions.Size = New System.Drawing.Size(106, 46)
Me.grpGameInfoOptions.TabIndex = 6
Me.grpGameInfoOptions.TabStop = False
Me.grpGameInfoOptions.Text = "Options"
'
'optOr
'
Me.optOr.Location = New System.Drawing.Point(56, 19)
Me.optOr.Name = "optOr"
Me.optOr.Size = New System.Drawing.Size(36, 17)
Me.optOr.TabIndex = 1
Me.optOr.TabStop = True
Me.optOr.Text = "Or"
Me.optOr.UseVisualStyleBackColor = True
'
'optAnd
'
Me.optAnd.Checked = True
Me.optAnd.Location = New System.Drawing.Point(6, 19)
Me.optAnd.Name = "optAnd"
Me.optAnd.Size = New System.Drawing.Size(44, 17)
Me.optAnd.TabIndex = 0
Me.optAnd.TabStop = True
Me.optAnd.Text = "And"
Me.optAnd.UseVisualStyleBackColor = True
'
'txtCompany
'
Me.txtCompany.Location = New System.Drawing.Point(70, 71)
Me.txtCompany.Name = "txtCompany"
Me.txtCompany.Size = New System.Drawing.Size(309, 20)
Me.txtCompany.TabIndex = 5
'
'lblCompany
'
Me.lblCompany.AutoSize = True
Me.lblCompany.Location = New System.Drawing.Point(11, 74)
Me.lblCompany.Name = "lblCompany"
Me.lblCompany.Size = New System.Drawing.Size(54, 13)
Me.lblCompany.TabIndex = 4
Me.lblCompany.Text = "Company:"
'
'txtProcess
'
Me.txtProcess.Location = New System.Drawing.Point(70, 45)
Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(309, 20)
Me.txtProcess.TabIndex = 3
'
'lblProcess
'
Me.lblProcess.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(11, 48)
Me.lblProcess.Name = "lblProcess"
Me.lblProcess.Size = New System.Drawing.Size(48, 13)
Me.lblProcess.TabIndex = 2
Me.lblProcess.Text = "Process:"
'
'lblName
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(11, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 0
Me.lblName.Text = "Name:"
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(70, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(309, 20)
Me.txtName.TabIndex = 1
'
'frmFilter
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(409, 516)
Me.Controls.Add(Me.grpGameFilter)
Me.Controls.Add(Me.grpTagFilter)
Me.Controls.Add(Me.btnOK)
Me.Controls.Add(Me.optTag)
Me.Controls.Add(Me.optGameInfo)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmFilter"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Custom Filter"
Me.grpTagFilter.ResumeLayout(False)
Me.grpTagFilter.PerformLayout()
Me.grpTagOptions.ResumeLayout(False)
Me.grpGameFilter.ResumeLayout(False)
Me.grpGameFilter.PerformLayout()
Me.grpGameInfoOptions.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents optGameInfo As System.Windows.Forms.RadioButton
Friend WithEvents optTag As System.Windows.Forms.RadioButton
Friend WithEvents grpTagFilter As System.Windows.Forms.GroupBox
Friend WithEvents grpTagOptions As System.Windows.Forms.GroupBox
Friend WithEvents optAll As System.Windows.Forms.RadioButton
Friend WithEvents optAny As System.Windows.Forms.RadioButton
Friend WithEvents lblGameTags As System.Windows.Forms.Label
Friend WithEvents lblTags As System.Windows.Forms.Label
Friend WithEvents btnRemove As System.Windows.Forms.Button
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents lstFilter As System.Windows.Forms.ListBox
Friend WithEvents lstTags As System.Windows.Forms.ListBox
Friend WithEvents btnOK As System.Windows.Forms.Button
Friend WithEvents grpGameFilter As System.Windows.Forms.GroupBox
Friend WithEvents txtProcess As System.Windows.Forms.TextBox
Friend WithEvents lblProcess As System.Windows.Forms.Label
Friend WithEvents lblName As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents txtCompany As System.Windows.Forms.TextBox
Friend WithEvents lblCompany As System.Windows.Forms.Label
Friend WithEvents grpGameInfoOptions As System.Windows.Forms.GroupBox
Friend WithEvents optOr As System.Windows.Forms.RadioButton
Friend WithEvents optAnd As System.Windows.Forms.RadioButton
End Class
@@ -117,7 +117,4 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="fbBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root> </root>
+208
View File
@@ -0,0 +1,208 @@
Imports GBM.My.Resources
Public Class frmFilter
Public Enum eFilterType As Integer
NoFilter = 1
AnyTag = 2
AllTags = 3
NoTags = 4
FieldAnd = 5
FieldOr = 6
End Enum
Dim oTagFilters As New List(Of clsTag)
Dim hshStringFilters As New Hashtable
Dim eCurrentFilterType As eFilterType = eFilterType.AnyTag
Dim hshTags As New Hashtable
Dim bShutdown As Boolean = False
Public ReadOnly Property StringFilters As Hashtable
Get
Return hshStringFilters
End Get
End Property
Public ReadOnly Property TagFilters As List(Of clsTag)
Get
Return oTagFilters
End Get
End Property
Public ReadOnly Property FilterType As eFilterType
Get
Return eCurrentFilterType
End Get
End Property
Private Sub AddTag()
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
If lstTags.SelectedItems.Count = 1 Then
oData = lstTags.SelectedItems(0)
lstFilter.Items.Add(oData)
lstTags.Items.Remove(oData)
ElseIf lstTags.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstTags.SelectedItems
oTags.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Add(kp)
lstTags.Items.Remove(kp)
Next
End If
End Sub
Private Sub RemoveTag()
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
If lstFilter.SelectedItems.Count = 1 Then
oData = lstFilter.SelectedItems(0)
lstFilter.Items.Remove(oData)
lstTags.Items.Add(oData)
ElseIf lstFilter.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstFilter.SelectedItems
oTags.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oTags
lstFilter.Items.Remove(kp)
lstTags.Items.Add(kp)
Next
End If
End Sub
Private Sub LoadData()
Dim oTag As clsTag
Dim oData As KeyValuePair(Of String, String)
'Handle Data
hshTags = mgrTags.ReadTags()
'Handle Lists
lstTags.Items.Clear()
lstFilter.Items.Clear()
lstTags.ValueMember = "Key"
lstTags.DisplayMember = "Value"
lstFilter.ValueMember = "Key"
lstFilter.DisplayMember = "Value"
For Each de As DictionaryEntry In hshTags
oTag = DirectCast(de.Value, clsTag)
oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name)
lstTags.Items.Add(oData)
Next
End Sub
Private Sub GetFilters()
Dim oData As KeyValuePair(Of String, String)
Dim oTag As clsTag
If optGameInfo.Checked Then
'Set Filter Type
If optAnd.Checked Then
eCurrentFilterType = eFilterType.FieldAnd
Else
eCurrentFilterType = eFilterType.FieldOr
End If
'Set String Filter
If txtName.Text <> String.Empty Then
hshStringFilters.Add("Name", txtName.Text)
End If
If txtProcess.Text <> String.Empty Then
hshStringFilters.Add("Process", txtProcess.Text)
End If
If txtCompany.Text <> String.Empty Then
hshStringFilters.Add("Company", txtCompany.Text)
End If
Else
'Set Tags
For Each oData In lstFilter.Items
oTag = DirectCast(hshTags(oData.Value), clsTag)
TagFilters.Add(oTag)
Next
'Set Filter Type
If TagFilters.Count = 0 Then
eCurrentFilterType = eFilterType.NoTags
ElseIf optAll.Checked Then
eCurrentFilterType = eFilterType.AllTags
Else
eCurrentFilterType = eFilterType.AnyTag
End If
End If
End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = frmFilter_FormName
'Set Form Text
optOr.Text = frmFilter_optOr
optAnd.Text = frmFilter_optAnd
lblCompany.Text = frmFilter_lblCompany
lblProcess.Text = frmFilter_lblProcess
lblName.Text = frmFilter_lblName
grpGameInfoOptions.Text = frmFilter_grpGameInfoOptions
optAll.Text = frmFilter_optAll
optAny.Text = frmFilter_optAny
lblGameTags.Text = frmFilter_lblGameTags
lblTags.Text = frmFilter_lblTags
btnRemove.Text = frmFilter_btnRemove
btnAdd.Text = frmFilter_btnAdd
btnOK.Text = frmFilter_btnOK
grpTagOptions.Text = frmFilter_grpTagOptions
optTag.Text = frmFilter_optTag
optGameInfo.Text = frmFilter_optGameInfo
End Sub
Private Sub frmGameTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
optGameInfo.Checked = True
LoadData()
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
GetFilters()
bShutdown = True
Me.Close()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddTag()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
RemoveTag()
End Sub
Private Sub frmFilter_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Not bShutdown Then
e.Cancel = True
End If
End Sub
Private Sub optGameInfo_Click(sender As Object, e As EventArgs) Handles optGameInfo.Click, optTag.Click
If optGameInfo.Checked = True Then
grpGameFilter.Enabled = True
grpTagFilter.Enabled = False
Else
grpGameFilter.Enabled = False
grpTagFilter.Enabled = True
End If
End Sub
End Class
+406 -207
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -117,4 +117,10 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="cmsImport.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="cmsDeleteBackup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>127, 17</value>
</metadata>
</root> </root>
File diff suppressed because it is too large Load Diff
+141
View File
@@ -0,0 +1,141 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmGameTags
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.lstTags = New System.Windows.Forms.ListBox()
Me.lstGameTags = New System.Windows.Forms.ListBox()
Me.btnAdd = New System.Windows.Forms.Button()
Me.btnRemove = New System.Windows.Forms.Button()
Me.lblTags = New System.Windows.Forms.Label()
Me.lblGameTags = New System.Windows.Forms.Label()
Me.btnClose = New System.Windows.Forms.Button()
Me.btnOpenTags = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'lstTags
'
Me.lstTags.FormattingEnabled = True
Me.lstTags.Location = New System.Drawing.Point(12, 25)
Me.lstTags.Name = "lstTags"
Me.lstTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstTags.Size = New System.Drawing.Size(150, 199)
Me.lstTags.Sorted = True
Me.lstTags.TabIndex = 0
'
'lstGameTags
'
Me.lstGameTags.FormattingEnabled = True
Me.lstGameTags.Location = New System.Drawing.Point(222, 25)
Me.lstGameTags.Name = "lstGameTags"
Me.lstGameTags.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstGameTags.Size = New System.Drawing.Size(150, 199)
Me.lstGameTags.Sorted = True
Me.lstGameTags.TabIndex = 3
'
'btnAdd
'
Me.btnAdd.Location = New System.Drawing.Point(168, 86)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(48, 23)
Me.btnAdd.TabIndex = 1
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'btnRemove
'
Me.btnRemove.Location = New System.Drawing.Point(168, 115)
Me.btnRemove.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(48, 23)
Me.btnRemove.TabIndex = 2
Me.btnRemove.Text = "<"
Me.btnRemove.UseVisualStyleBackColor = True
'
'lblTags
'
Me.lblTags.AutoSize = True
Me.lblTags.Location = New System.Drawing.Point(49, 9)
Me.lblTags.Name = "lblTags"
Me.lblTags.Size = New System.Drawing.Size(77, 13)
Me.lblTags.TabIndex = 0
Me.lblTags.Text = "Available Tags"
'
'lblGameTags
'
Me.lblGameTags.AutoSize = True
Me.lblGameTags.Location = New System.Drawing.Point(263, 9)
Me.lblGameTags.Name = "lblGameTags"
Me.lblGameTags.Size = New System.Drawing.Size(68, 13)
Me.lblGameTags.TabIndex = 0
Me.lblGameTags.Text = "Current Tags"
'
'btnClose
'
Me.btnClose.Location = New System.Drawing.Point(297, 230)
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
'
'btnOpenTags
'
Me.btnOpenTags.Location = New System.Drawing.Point(12, 230)
Me.btnOpenTags.Name = "btnOpenTags"
Me.btnOpenTags.Size = New System.Drawing.Size(90, 23)
Me.btnOpenTags.TabIndex = 4
Me.btnOpenTags.Text = "Setup &Tags..."
Me.btnOpenTags.UseVisualStyleBackColor = True
'
'frmGameTags
'
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.btnOpenTags)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.lblGameTags)
Me.Controls.Add(Me.lblTags)
Me.Controls.Add(Me.btnRemove)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstGameTags)
Me.Controls.Add(Me.lstTags)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmGameTags"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Edit Tags"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents lstTags As System.Windows.Forms.ListBox
Friend WithEvents lstGameTags As System.Windows.Forms.ListBox
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents btnRemove As System.Windows.Forms.Button
Friend WithEvents lblTags As System.Windows.Forms.Label
Friend WithEvents lblGameTags As System.Windows.Forms.Label
Friend WithEvents btnClose As System.Windows.Forms.Button
Friend WithEvents btnOpenTags As System.Windows.Forms.Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+202
View File
@@ -0,0 +1,202 @@
Imports GBM.My.Resources
Public Class frmGameTags
Dim sMonitorIDs As List(Of String)
Dim sGameName As String = String.Empty
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
Private Sub AddTag()
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
Dim oGameTag As clsGameTag
Dim oGameTags As List(Of clsGameTag)
If lstTags.SelectedItems.Count = 1 Then
oData = lstTags.SelectedItems(0)
oGameTags = New List(Of clsGameTag)
For Each sID As String In IDList
oGameTag = New clsGameTag
oGameTag.MonitorID = sID
oGameTag.TagID = oData.Key
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagAddBatch(oGameTags)
lstGameTags.Items.Add(oData)
lstTags.Items.Remove(oData)
ElseIf lstTags.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstTags.SelectedItems
oTags.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oTags
oGameTags = New List(Of clsGameTag)
For Each sID As String In IDList
oGameTag = New clsGameTag
oGameTag.MonitorID = sID
oGameTag.TagID = kp.Key
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagAddBatch(oGameTags)
lstGameTags.Items.Add(kp)
lstTags.Items.Remove(kp)
Next
End If
End Sub
Private Sub RemoveTag()
Dim oData As KeyValuePair(Of String, String)
Dim oTags As List(Of KeyValuePair(Of String, String))
Dim oGameTag As clsGameTag
Dim oGameTags As List(Of clsGameTag)
If lstGameTags.SelectedItems.Count = 1 Then
oData = lstGameTags.SelectedItems(0)
oGameTags = New List(Of clsGameTag)
For Each sID As String In IDList
oGameTag = New clsGameTag
oGameTag.MonitorID = sID
oGameTag.TagID = oData.Key
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagDelete(oGameTags)
lstGameTags.Items.Remove(oData)
lstTags.Items.Add(oData)
ElseIf lstGameTags.SelectedItems.Count > 1 Then
oTags = New List(Of KeyValuePair(Of String, String))
For Each oData In lstGameTags.SelectedItems
oTags.Add(oData)
Next
For Each kp As KeyValuePair(Of String, String) In oTags
oGameTags = New List(Of clsGameTag)
For Each sID As String In IDList
oGameTag = New clsGameTag
oGameTag.MonitorID = sID
oGameTag.TagID = kp.Key
oGameTags.Add(oGameTag)
Next
mgrGameTags.DoGameTagDelete(oGameTags)
lstGameTags.Items.Remove(kp)
lstTags.Items.Add(kp)
Next
End If
End Sub
Private Sub LoadData()
Dim hshTags As Hashtable
Dim hshGameTags As Hashtable
Dim oTag As clsTag
Dim oData As KeyValuePair(Of String, String)
'Handle Data
hshTags = mgrTags.ReadTags()
hshGameTags = mgrGameTags.GetTagsByGameMulti(IDList)
For Each de As DictionaryEntry In hshGameTags
oTag = DirectCast(de.Value, clsTag)
If hshTags.ContainsKey(oTag.Name) Then
hshTags.Remove(oTag.Name)
End If
Next
'Handle Lists
lstTags.Items.Clear()
lstGameTags.Items.Clear()
lstTags.ValueMember = "Key"
lstTags.DisplayMember = "Value"
lstGameTags.ValueMember = "Key"
lstGameTags.DisplayMember = "Value"
For Each de As DictionaryEntry In hshGameTags
oTag = DirectCast(de.Value, clsTag)
oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name)
lstGameTags.Items.Add(oData)
Next
For Each de As DictionaryEntry In hshTags
oTag = DirectCast(de.Value, clsTag)
oData = New KeyValuePair(Of String, String)(oTag.ID, oTag.Name)
lstTags.Items.Add(oData)
Next
End Sub
Private Sub OpenTags()
Dim frm As New frmTags
frm.ShowDialog()
LoadData()
End Sub
Private Sub SetForm()
'Set Form Name
If IDList.Count > 1 Then
Me.Text = frmGameTags_FormNameMulti
Else
Me.Text = mgrCommon.FormatString(frmGameTags_FormNameSingle, GameName)
End If
'Set Form Text
btnOpenTags.Text = frmGameTags_btnOpenTags
btnClose.Text = frmGameTags_btnClose
lblGameTags.Text = frmGameTags_lblGameTags
lblTags.Text = frmGameTags_lblTags
btnRemove.Text = frmGameTags_btnRemove
btnAdd.Text = frmGameTags_btnAdd
End Sub
Private Sub frmGameTags_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
Me.Close()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddTag()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
RemoveTag()
End Sub
Private Sub btnOpenTags_Click(sender As Object, e As EventArgs) Handles btnOpenTags.Click
OpenTags()
End Sub
End Class
+275
View File
@@ -0,0 +1,275 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmIncludeExclude
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.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmIncludeExclude))
Me.treFiles = New System.Windows.Forms.TreeView()
Me.imgIcons = New System.Windows.Forms.ImageList(Me.components)
Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.txtRootFolder = New System.Windows.Forms.TextBox()
Me.btnBrowse = New System.Windows.Forms.Button()
Me.lstBuilder = New System.Windows.Forms.ListView()
Me.cmsItems = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsEdit = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsRemove = New System.Windows.Forms.ToolStripMenuItem()
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.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.cmsItems.SuspendLayout()
Me.grpFileOptions.SuspendLayout()
Me.SuspendLayout()
'
'treFiles
'
Me.treFiles.CheckBoxes = True
Me.treFiles.ImageIndex = 0
Me.treFiles.ImageList = Me.imgIcons
Me.treFiles.Location = New System.Drawing.Point(12, 64)
Me.treFiles.Name = "treFiles"
Me.treFiles.SelectedImageIndex = 0
Me.treFiles.Size = New System.Drawing.Size(250, 333)
Me.treFiles.TabIndex = 1
'
'imgIcons
'
Me.imgIcons.ImageStream = CType(resources.GetObject("imgIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.imgIcons.TransparentColor = System.Drawing.Color.Transparent
Me.imgIcons.Images.SetKeyName(0, "folder.ico")
Me.imgIcons.Images.SetKeyName(1, "file.ico")
Me.imgIcons.Images.SetKeyName(2, "type.ico")
'
'btnSave
'
Me.btnSave.Location = New System.Drawing.Point(416, 426)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 7
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(497, 426)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 8
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'txtRootFolder
'
Me.txtRootFolder.Location = New System.Drawing.Point(12, 38)
Me.txtRootFolder.Name = "txtRootFolder"
Me.txtRootFolder.ReadOnly = True
Me.txtRootFolder.Size = New System.Drawing.Size(214, 20)
Me.txtRootFolder.TabIndex = 0
Me.txtRootFolder.TabStop = False
'
'btnBrowse
'
Me.btnBrowse.Location = New System.Drawing.Point(232, 37)
Me.btnBrowse.Name = "btnBrowse"
Me.btnBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnBrowse.TabIndex = 0
Me.btnBrowse.Text = "..."
Me.btnBrowse.UseVisualStyleBackColor = True
'
'lstBuilder
'
Me.lstBuilder.ContextMenuStrip = Me.cmsItems
Me.lstBuilder.LabelEdit = True
Me.lstBuilder.Location = New System.Drawing.Point(322, 38)
Me.lstBuilder.Name = "lstBuilder"
Me.lstBuilder.Size = New System.Drawing.Size(250, 359)
Me.lstBuilder.SmallImageList = Me.imgIcons
Me.lstBuilder.TabIndex = 5
Me.lstBuilder.UseCompatibleStateImageBehavior = False
Me.lstBuilder.View = System.Windows.Forms.View.List
'
'cmsItems
'
Me.cmsItems.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmsEdit, Me.cmsRemove, Me.cmsAdd})
Me.cmsItems.Name = "cmsItems"
Me.cmsItems.Size = New System.Drawing.Size(169, 70)
'
'cmsEdit
'
Me.cmsEdit.Name = "cmsEdit"
Me.cmsEdit.Size = New System.Drawing.Size(168, 22)
Me.cmsEdit.Text = "Edit"
'
'cmsRemove
'
Me.cmsRemove.Name = "cmsRemove"
Me.cmsRemove.Size = New System.Drawing.Size(168, 22)
Me.cmsRemove.Text = "Remove"
'
'cmsAdd
'
Me.cmsAdd.Name = "cmsAdd"
Me.cmsAdd.Size = New System.Drawing.Size(168, 22)
Me.cmsAdd.Text = "Add Custom Item"
'
'btnRemove
'
Me.btnRemove.Location = New System.Drawing.Point(268, 201)
Me.btnRemove.Name = "btnRemove"
Me.btnRemove.Size = New System.Drawing.Size(48, 23)
Me.btnRemove.TabIndex = 4
Me.btnRemove.Text = "<"
Me.btnRemove.UseVisualStyleBackColor = True
'
'btnAdd
'
Me.btnAdd.Location = New System.Drawing.Point(268, 172)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(48, 23)
Me.btnAdd.TabIndex = 3
Me.btnAdd.Text = ">"
Me.btnAdd.UseVisualStyleBackColor = True
'
'grpFileOptions
'
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"
'
'optFileTypes
'
Me.optFileTypes.Location = New System.Drawing.Point(6, 19)
Me.optFileTypes.Name = "optFileTypes"
Me.optFileTypes.Size = New System.Drawing.Size(73, 17)
Me.optFileTypes.TabIndex = 0
Me.optFileTypes.TabStop = True
Me.optFileTypes.Text = "File Types"
Me.optFileTypes.UseVisualStyleBackColor = True
'
'optIndividualFiles
'
Me.optIndividualFiles.Location = New System.Drawing.Point(85, 19)
Me.optIndividualFiles.Name = "optIndividualFiles"
Me.optIndividualFiles.Size = New System.Drawing.Size(94, 17)
Me.optIndividualFiles.TabIndex = 1
Me.optIndividualFiles.TabStop = True
Me.optIndividualFiles.Text = "Individual Files"
Me.optIndividualFiles.UseVisualStyleBackColor = True
'
'lblItems
'
Me.lblItems.Location = New System.Drawing.Point(322, 16)
Me.lblItems.Name = "lblItems"
Me.lblItems.Size = New System.Drawing.Size(250, 13)
Me.lblItems.TabIndex = 14
Me.lblItems.Text = "Items"
Me.lblItems.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'btnRawEdit
'
Me.btnRawEdit.Location = New System.Drawing.Point(335, 426)
Me.btnRawEdit.Name = "btnRawEdit"
Me.btnRawEdit.Size = New System.Drawing.Size(75, 23)
Me.btnRawEdit.TabIndex = 6
Me.btnRawEdit.Text = "Raw &Edit"
Me.btnRawEdit.UseVisualStyleBackColor = True
'
'lblSaveFolder
'
Me.lblSaveFolder.Location = New System.Drawing.Point(9, 16)
Me.lblSaveFolder.Name = "lblSaveFolder"
Me.lblSaveFolder.Size = New System.Drawing.Size(250, 13)
Me.lblSaveFolder.TabIndex = 15
Me.lblSaveFolder.Text = "Saved Game Explorer"
Me.lblSaveFolder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'ttWarning
'
Me.ttWarning.AutoPopDelay = 5000
Me.ttWarning.InitialDelay = 200
Me.ttWarning.ReshowDelay = 50
Me.ttWarning.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Warning
'
'frmIncludeExclude
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(584, 461)
Me.Controls.Add(Me.lblSaveFolder)
Me.Controls.Add(Me.btnRawEdit)
Me.Controls.Add(Me.lblItems)
Me.Controls.Add(Me.grpFileOptions)
Me.Controls.Add(Me.btnRemove)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstBuilder)
Me.Controls.Add(Me.btnBrowse)
Me.Controls.Add(Me.txtRootFolder)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.treFiles)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmIncludeExclude"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Include / Exclude Builder"
Me.cmsItems.ResumeLayout(False)
Me.grpFileOptions.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents treFiles As System.Windows.Forms.TreeView
Friend WithEvents imgIcons As System.Windows.Forms.ImageList
Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents txtRootFolder As System.Windows.Forms.TextBox
Friend WithEvents btnBrowse As System.Windows.Forms.Button
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 optFileTypes As System.Windows.Forms.RadioButton
Friend WithEvents optIndividualFiles As System.Windows.Forms.RadioButton
Friend WithEvents lblItems As System.Windows.Forms.Label
Friend WithEvents cmsItems As System.Windows.Forms.ContextMenuStrip
Friend WithEvents cmsEdit As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmsRemove As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmsAdd As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btnRawEdit As Button
Friend WithEvents lblSaveFolder As Label
Friend WithEvents ttWarning As ToolTip
End Class
+177
View File
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imgIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imgIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
CQAAAk1TRnQBSQFMAgEBAwEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/xMACf82AAH0CQcB/wsA
Af8ZAAHyDLsB8gIAAfMJvAH0A/8IAAH/AbMBuwH/FgABuwyzAQkCAAHzAvIB8QkHAfQHAAH/A7MBugH/
FQABCQyzAQkCAAHzAvIB8QnwAfMGAAH/ArQB8QG8AbQBCQH/FAABCQyzAQkCAAHzDPIB8wUAAf8CtALy
AfEBvAG0AbsB/xMAAQkMugEJAgAC8wvyAfMEAAH/AbQBugHzA/IB8QG8AbQBuxMAAfAMugHwAgAD8wry
AfMDAAH/AroD8wPyAfEBugG0EwAB8AzbAfACAATzAfIJ8wIAAf8CugbzAfICugL/EgABGQzcARkCAATz
AfIJ8wIAAfQCugEJBfMCuwH/FAAB8QwJAfECAA7zAgAB9AG6AdsB3AEJA/MBCQG7Af8VAAHwB9wFugHw
AgAB8wL0B/MB8gHvAbwB9AIAAfQB3AHzAf8B3AEJAfICCQH/FgABGQG7BO8BCQH/CAAB9AnzAe8B9wHx
AwAB9AHcARkB8wPcAQkB/xcAAfMB8AQZAfIJAAP/AfQB8wT0AQcBvAH/BAAB9AIJAdwB4QIJAf8rAAH/
BPMC8gYAAf8F9AH/LQAF/yYAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAL/
AcABHwL/AgAC/wGAAQ8B/gH/AgABgAEBAYABAQH+AR8CAAGAAQEBgAEBAfwBDwIAAYABAQGAAQEB+AEH
AgABgAEBAYABAQHwAQMCAAGAAQEBgAEBAeABAwIAAYABAQGAAQEBwAEDAgABgAEBAYABAQGAAQECAAGA
AQEBgAEBAYABBwIAAYABAQGAAQEBgAEPAgABgAEBAYABAQGAAR8CAAGAAX8BgAEDAYABPwIAAYAB/wGA
AQcBgAF/AgAC/wHwAR8BgAH/AgAC/wH4AT8C/wIACw==
</value>
</data>
<metadata name="cmsItems.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>118, 17</value>
</metadata>
<metadata name="ttWarning.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>221, 17</value>
</metadata>
</root>
+356
View File
@@ -0,0 +1,356 @@
Imports GBM.My.Resources
Imports System.IO
Public Class frmIncludeExclude
Dim sFormName As String = String.Empty
Dim sRootFolder As String = String.Empty
Dim sBuilderString As String
Public Property BuilderString As String
Get
Return sBuilderString
End Get
Set(value As String)
sBuilderString = value
End Set
End Property
Public Property FormName As String
Get
Return sFormName
End Get
Set(value As String)
sFormName = value
End Set
End Property
Public Property RootFolder As String
Get
Return sRootFolder
End Get
Set(value As String)
sRootFolder = value.TrimEnd(Path.DirectorySeparatorChar)
End Set
End Property
Private Sub BuildBranch(ByVal sDirectory As String, ByVal oNode As TreeNode)
Dim sFolders As String()
Dim sFiles As String()
Dim oChild As TreeNode
Dim oPlaceHolder As TreeNode
If oNode.Nodes.ContainsKey("GBM_Tree_Placeholder") Then
Try
Cursor.Current = Cursors.WaitCursor
treFiles.BeginUpdate()
oNode.Nodes.RemoveByKey("GBM_Tree_Placeholder")
sFolders = Directory.GetDirectories(sDirectory)
sFiles = Directory.GetFiles(sDirectory)
If sFolders.Length <> 0 Then
For Each sFolder As String In sFolders
oChild = New TreeNode(sFolder.Replace(sDirectory, String.Empty).TrimStart(Path.DirectorySeparatorChar), 0, 0)
oChild.Name = sFolder
oChild.Tag = 0
oNode.Nodes.Add(oChild)
oPlaceHolder = New TreeNode("GBM_Tree_Placeholder")
oPlaceHolder.Name = "GBM_Tree_Placeholder"
oChild.Nodes.Add(oPlaceHolder)
Next
End If
If sFiles.Length <> 0 Then
For Each sFile As String In sFiles
oChild = New TreeNode(sFile.Replace(sDirectory, String.Empty).TrimStart(Path.DirectorySeparatorChar), 1, 1)
oChild.Tag = 1
oNode.Nodes.Add(oChild)
Next
End If
Catch uaex As UnauthorizedAccessException
'Do Nothing
Catch ex As Exception
mgrCommon.ShowMessage(frmIncludeExclude_ErrorFileSystemRead, ex.Message, MsgBoxStyle.Critical)
Finally
treFiles.EndUpdate()
Cursor.Current = Cursors.Default
End Try
End If
End Sub
Private Sub BuildTrunk()
Dim oRootNode As TreeNode
If Path.GetPathRoot(txtRootFolder.Text) = txtRootFolder.Text Then
oRootNode = New TreeNode(txtRootFolder.Text, 0, 0)
Else
oRootNode = New TreeNode(Path.GetFileName(txtRootFolder.Text), 0, 0)
End If
treFiles.Nodes.Clear()
oRootNode.Name = "Root"
oRootNode.Nodes.Add("GBM_Tree_Placeholder", "GBM_Tree_Placeholder")
treFiles.Nodes.Add(oRootNode)
BuildBranch(txtRootFolder.Text, oRootNode)
End Sub
Private Sub RootPathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtRootFolder.Text
Dim sNewPath As String
If sCurrentPath <> String.Empty Then
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser(frmIncludeExclude_BrowseSaveFolder, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtRootFolder.Text = sNewPath
End Sub
Private Sub GetAllCheckedNodes(ByVal oRootNode As TreeNodeCollection, ByRef oNodeList As List(Of TreeNode))
For Each oNode As TreeNode In oRootNode
If oNode.Checked Then
oNode.Checked = False
oNodeList.Add(oNode)
End If
If oNode.Nodes.Count > 0 Then
GetAllCheckedNodes(oNode.Nodes, oNodeList)
End If
Next
End Sub
Private Sub AddItem()
Dim oCheckedNodes As New List(Of TreeNode)
Dim oListViewItem As ListViewItem
Dim sItem As String
GetAllCheckedNodes(treFiles.Nodes, oCheckedNodes)
lstBuilder.BeginUpdate()
For Each oNode In oCheckedNodes
sItem = oNode.Text
If oNode.Tag = 1 And optFileTypes.Checked Then
sItem = Path.GetExtension(oNode.Text)
If sItem <> String.Empty Then
sItem = "*" & sItem
oListViewItem = New ListViewItem(sItem, 2)
oListViewItem.Name = sItem
Else
sItem = oNode.Text
oListViewItem = New ListViewItem(sItem, 1)
oListViewItem.Name = sItem
End If
Else
oListViewItem = New ListViewItem(sItem, CInt(oNode.Tag))
oListViewItem.Name = sItem
End If
If Not lstBuilder.Items.ContainsKey(sItem) Then
lstBuilder.Items.Add(oListViewItem)
End If
Next
lstBuilder.EndUpdate()
End Sub
Private Sub RemoveItem()
For Each oListViewItem As ListViewItem In lstBuilder.SelectedItems
oListViewItem.Remove()
Next
End Sub
Private Sub ParseBuilderString(ByVal sString As String)
Dim iType As Integer = 1
Dim oListViewItem As ListViewItem
Dim sItems As String() = sString.Split(":")
lstBuilder.BeginUpdate()
lstBuilder.Clear()
For Each sItem As String In sItems
oListViewItem = New ListViewItem(sItem)
oListViewItem.Name = sItem
IdentifyEntry(oListViewItem, sItem)
If Not lstBuilder.Items.ContainsKey(sItem) Then
lstBuilder.Items.Add(oListViewItem)
End If
Next
lstBuilder.EndUpdate()
End Sub
Private Sub IdentifyEntry(ByRef oListItem As ListViewItem, ByVal sNewLabel As String)
Dim iType As Integer = 1
Dim sFolderCheck As String
If sNewLabel.Contains("*") Or sNewLabel.Contains("?") Then
iType = 2
Else
If txtRootFolder.Text <> String.Empty Then
If Path.GetFileName(txtRootFolder.Text) = sNewLabel Then
sFolderCheck = txtRootFolder.Text
Else
sFolderCheck = txtRootFolder.Text & Path.DirectorySeparatorChar & sNewLabel
End If
If Directory.Exists(sFolderCheck) Then
iType = 0
Else
iType = 1
End If
End If
End If
oListItem.ImageIndex = iType
End Sub
Private Function CreateNewBuilderString() As String
Dim sTempString As String = String.Empty
For Each oListViewItem As ListViewItem In lstBuilder.Items
sTempString &= oListViewItem.Text & ":"
Next
sTempString = sTempString.TrimEnd(":")
Return sTempString
End Function
Private Sub OpenRawEdit()
Dim sCurrentString As String = CreateNewBuilderString()
Dim sNewString As String
sNewString = InputBox(frmIncludeExclude_RawEditInfo, mgrCommon.FormatString(frmIncludeExclude_RawEditTitle, FormName), sCurrentString)
If sNewString <> String.Empty Then
ParseBuilderString(sNewString)
Else
lstBuilder.Clear()
End If
End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = mgrCommon.FormatString(frmIncludeExclude_FormName, FormName)
'Set Form Text
lblSaveFolder.Text = frmIncludeExclude_lblSaveFolder
btnRawEdit.Text = frmIncludeExclude_btnRawEdit
lblItems.Text = mgrCommon.FormatString(frmIncludeExclude_lblItems, FormName)
grpFileOptions.Text = mgrCommon.FormatString(frmIncludeExclude_grpFileOptions, FormName)
optFileTypes.Text = frmIncludeExclude_optFileTypes
optIndividualFiles.Text = frmIncludeExclude_optIndividualFiles
btnRemove.Text = frmIncludeExclude_btnRemove
btnAdd.Text = frmIncludeExclude_btnAdd
btnBrowse.Text = frmIncludeExclude_btnBrowse
btnCancel.Text = frmIncludeExclude_btnCancel
btnSave.Text = frmIncludeExclude_btnSave
cmsAdd.Text = frmIncludeExclude_cmsAdd
cmsEdit.Text = frmIncludeExclude_cmsEdit
cmsRemove.Text = frmIncludeExclude_cmsRemove
'Set Defaults
txtRootFolder.Text = RootFolder
optFileTypes.Checked = True
If BuilderString <> String.Empty Then ParseBuilderString(BuilderString)
If txtRootFolder.Text <> String.Empty Then BuildTrunk()
End Sub
Private Sub frmIncludeExclude_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
End Sub
Private Sub frmIncludeExclude_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
treFiles.Select()
If Not treFiles.SelectedNode Is Nothing Then treFiles.SelectedNode.Expand()
If txtRootFolder.Text = String.Empty Then
ttWarning.ToolTipTitle = frmIncludeExclude_ToolTipTitle
ttWarning.SetToolTip(treFiles, frmIncludeExclude_ToolTipFiles)
ttWarning.SetToolTip(txtRootFolder, frmIncludeExclude_ToolTipFolder)
ttWarning.SetToolTip(btnBrowse, frmIncludeExclude_ToolTipBrowse)
End If
End Sub
Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
RootPathBrowse()
If txtRootFolder.Text <> String.Empty Then
BuildTrunk()
ttWarning.RemoveAll()
End If
treFiles.Select()
If Not treFiles.SelectedNode Is Nothing Then treFiles.SelectedNode.Expand()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
BuilderString = CreateNewBuilderString()
Me.Close()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub treFiles_BeforeExpand(sender As Object, e As TreeViewCancelEventArgs) Handles treFiles.BeforeExpand
If Not e.Node.Name = "Root" Then
BuildBranch(e.Node.Name, e.Node)
End If
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddItem()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
RemoveItem()
End Sub
Private Sub cmsItems_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cmsItems.Opening
If lstBuilder.SelectedItems.Count = 0 Then
cmsEdit.Visible = False
cmsRemove.Visible = False
cmsAdd.Visible = True
Else
cmsEdit.Visible = True
cmsRemove.Visible = True
cmsAdd.Visible = False
End If
End Sub
Private Sub cmsEdit_Click(sender As Object, e As EventArgs) Handles cmsEdit.Click
If lstBuilder.SelectedItems.Count > 0 Then
lstBuilder.SelectedItems(0).BeginEdit()
End If
End Sub
Private Sub cmsRemove_Click(sender As Object, e As EventArgs) Handles cmsRemove.Click
RemoveItem()
End Sub
Private Sub cmsAdd_Click(sender As Object, e As EventArgs) Handles cmsAdd.Click
Dim oNewItem As New ListViewItem(frmIncludeExclude_CustomItem, 1)
oNewItem.Selected = True
lstBuilder.Items.Add(oNewItem)
lstBuilder.SelectedItems(0).BeginEdit()
End Sub
Private Sub lstBuilder_AfterLabelEdit(sender As Object, e As LabelEditEventArgs) Handles lstBuilder.AfterLabelEdit
If Not e.Label Is Nothing Then
If e.Label = String.Empty Then
e.CancelEdit = True
End If
If lstBuilder.Items.ContainsKey(e.Label) Then
e.CancelEdit = True
Else
'Unix Handler - Mono is unable to modify list items during an edit event without crashing
If Not mgrCommon.IsUnix Then IdentifyEntry(lstBuilder.Items(e.Item), e.Label)
End If
End If
End Sub
Private Sub btnRawEdit_Click(sender As Object, e As EventArgs) Handles btnRawEdit.Click
OpenRawEdit()
End Sub
End Class
+201 -162
View File
@@ -26,6 +26,7 @@ Partial Class frmMain
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain))
Me.gMonTray = New System.Windows.Forms.NotifyIcon(Me.components) Me.gMonTray = New System.Windows.Forms.NotifyIcon(Me.components)
Me.gMonTrayMenu = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.gMonTrayMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.gMonTrayNotification = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayShow = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayShow = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySep2 = New System.Windows.Forms.ToolStripSeparator() Me.gMonTraySep2 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayMon = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayMon = New System.Windows.Forms.ToolStripMenuItem()
@@ -34,21 +35,21 @@ Partial Class frmMain
Me.gMonTraySetupAddWizard = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTraySetupAddWizard = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupGameManager = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTraySetupGameManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTraySetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupTags = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameList = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameImportOfficialList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameImportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameExportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSyncMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCompact = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsLog = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayLogClear = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayLogSave = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator() Me.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem()
Me.bwMonitor = New System.ComponentModel.BackgroundWorker() Me.bwMonitor = New System.ComponentModel.BackgroundWorker()
Me.txtLog = New System.Windows.Forms.TextBox() Me.txtLog = New System.Windows.Forms.TextBox()
Me.gMonStatusStrip = New System.Windows.Forms.StatusStrip() Me.gMonStatusStrip = New System.Windows.Forms.StatusStrip()
Me.gMonStripAdminButton = New System.Windows.Forms.ToolStripSplitButton() Me.gMonStripAdminButton = New System.Windows.Forms.ToolStripStatusLabel()
Me.gMonStripTxtStatus = New System.Windows.Forms.ToolStripStatusLabel() Me.gMonStripTxtStatus = New System.Windows.Forms.ToolStripStatusLabel()
Me.gMonStripStatusButton = New System.Windows.Forms.ToolStripSplitButton() Me.gMonStripStatusButton = New System.Windows.Forms.ToolStripStatusLabel()
Me.gMonMainMenu = New System.Windows.Forms.MenuStrip() Me.gMonMainMenu = New System.Windows.Forms.MenuStrip()
Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem() Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonFileMonitor = New System.Windows.Forms.ToolStripMenuItem() Me.gMonFileMonitor = New System.Windows.Forms.ToolStripMenuItem()
@@ -60,30 +61,35 @@ Partial Class frmMain
Me.gMonSetupGameManager = New System.Windows.Forms.ToolStripMenuItem() Me.gMonSetupGameManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupAddWizard = New System.Windows.Forms.ToolStripMenuItem() Me.gMonSetupAddWizard = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem() Me.gMonSetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupTags = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameList = New System.Windows.Forms.ToolStripMenuItem() Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameImportOfficialList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameImportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameExportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSyncMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem() Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsLog = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonLogClear = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonLogSave = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpCheckforUpdates = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpCheckforUpdates = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpAbout = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpAbout = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonNotification = New System.Windows.Forms.ToolStripMenuItem()
Me.pbIcon = New System.Windows.Forms.PictureBox() Me.pbIcon = New System.Windows.Forms.PictureBox()
Me.btnLogToggle = New System.Windows.Forms.Button() Me.btnLogToggle = New System.Windows.Forms.Button()
Me.lblGameTitle = New System.Windows.Forms.Label() Me.lblGameTitle = New System.Windows.Forms.Label()
Me.lblLastAction = New System.Windows.Forms.Label() Me.lblLastAction = New System.Windows.Forms.Label()
Me.lblLastActionTitle = New System.Windows.Forms.Label() Me.lblLastActionTitle = New System.Windows.Forms.Label()
Me.lblTimeTitle = New System.Windows.Forms.Label()
Me.lblTimeSpent = New System.Windows.Forms.Label() Me.lblTimeSpent = New System.Windows.Forms.Label()
Me.txtGameInfo = New System.Windows.Forms.TextBox()
Me.btnCancelOperation = New System.Windows.Forms.Button() Me.btnCancelOperation = New System.Windows.Forms.Button()
Me.lblStatus1 = New System.Windows.Forms.Label()
Me.lblStatus2 = New System.Windows.Forms.Label()
Me.lblStatus3 = New System.Windows.Forms.Label()
Me.pbTime = New System.Windows.Forms.PictureBox()
Me.gMonTrayMenu.SuspendLayout() Me.gMonTrayMenu.SuspendLayout()
Me.gMonStatusStrip.SuspendLayout() Me.gMonStatusStrip.SuspendLayout()
Me.gMonMainMenu.SuspendLayout() Me.gMonMainMenu.SuspendLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.pbTime, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout() Me.SuspendLayout()
' '
'gMonTray 'gMonTray
@@ -93,13 +99,19 @@ Partial Class frmMain
Me.gMonTray.ContextMenuStrip = Me.gMonTrayMenu Me.gMonTray.ContextMenuStrip = Me.gMonTrayMenu
Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon) Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon)
Me.gMonTray.Text = "GBM" Me.gMonTray.Text = "GBM"
Me.gMonTray.Visible = True
' '
'gMonTrayMenu 'gMonTrayMenu
' '
Me.gMonTrayMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayShow, Me.gMonTraySep2, Me.gMonTrayMon, Me.gMonTraySettings, Me.gMonTraySetup, Me.gMonTrayTools, Me.gMonTraySep1, Me.gMonTrayExit}) 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.Name = "gMonTrayMenu"
Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 148) Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 170)
'
'gMonTrayNotification
'
Me.gMonTrayNotification.Name = "gMonTrayNotification"
Me.gMonTrayNotification.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayNotification.Text = "Notification"
Me.gMonTrayNotification.Visible = False
' '
'gMonTrayShow 'gMonTrayShow
' '
@@ -126,7 +138,7 @@ Partial Class frmMain
' '
'gMonTraySetup 'gMonTraySetup
' '
Me.gMonTraySetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTraySetupAddWizard, Me.gMonTraySetupGameManager, Me.gMonTraySetupCustomVariables}) Me.gMonTraySetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTraySetupAddWizard, Me.gMonTraySetupGameManager, Me.gMonTraySetupCustomVariables, Me.gMonTraySetupTags})
Me.gMonTraySetup.Name = "gMonTraySetup" Me.gMonTraySetup.Name = "gMonTraySetup"
Me.gMonTraySetup.Size = New System.Drawing.Size(161, 22) Me.gMonTraySetup.Size = New System.Drawing.Size(161, 22)
Me.gMonTraySetup.Text = "&Setup" Me.gMonTraySetup.Text = "&Setup"
@@ -149,50 +161,50 @@ Partial Class frmMain
Me.gMonTraySetupCustomVariables.Size = New System.Drawing.Size(201, 22) 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..."
'
'gMonTrayTools 'gMonTrayTools
' '
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsGameList, Me.gMonTrayToolsSyncMan, Me.gMonTrayToolsCompact}) Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog})
Me.gMonTrayTools.Name = "gMonTrayTools" Me.gMonTrayTools.Name = "gMonTrayTools"
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22) Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayTools.Text = "&Tools" Me.gMonTrayTools.Text = "&Tools"
' '
'gMonTrayToolsGameList 'gMonTrayToolsCleanMan
' '
Me.gMonTrayToolsGameList.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsGameImportOfficialList, Me.gMonTrayToolsGameImportList, Me.gMonTrayToolsGameExportList}) Me.gMonTrayToolsCleanMan.Name = "gMonTrayToolsCleanMan"
Me.gMonTrayToolsGameList.Name = "gMonTrayToolsGameList" Me.gMonTrayToolsCleanMan.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsGameList.Size = New System.Drawing.Size(179, 22) Me.gMonTrayToolsCleanMan.Text = "Clean Local Ma&nifest"
Me.gMonTrayToolsGameList.Text = "&Game List"
'
'gMonTrayToolsGameImportOfficialList
'
Me.gMonTrayToolsGameImportOfficialList.Name = "gMonTrayToolsGameImportOfficialList"
Me.gMonTrayToolsGameImportOfficialList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameImportOfficialList.Text = "Import from &Official List"
'
'gMonTrayToolsGameImportList
'
Me.gMonTrayToolsGameImportList.Name = "gMonTrayToolsGameImportList"
Me.gMonTrayToolsGameImportList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameImportList.Text = "I&mport Game List"
'
'gMonTrayToolsGameExportList
'
Me.gMonTrayToolsGameExportList.Name = "gMonTrayToolsGameExportList"
Me.gMonTrayToolsGameExportList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameExportList.Text = "E&xport Game List"
'
'gMonTrayToolsSyncMan
'
Me.gMonTrayToolsSyncMan.Name = "gMonTrayToolsSyncMan"
Me.gMonTrayToolsSyncMan.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsSyncMan.Text = "Sync Ma&nifests"
' '
'gMonTrayToolsCompact 'gMonTrayToolsCompact
' '
Me.gMonTrayToolsCompact.Name = "gMonTrayToolsCompact" Me.gMonTrayToolsCompact.Name = "gMonTrayToolsCompact"
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(179, 22) Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsCompact.Text = "&Compact Databases" Me.gMonTrayToolsCompact.Text = "&Compact Databases"
' '
'gMonTrayToolsLog
'
Me.gMonTrayToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayLogClear, Me.gMonTrayLogSave})
Me.gMonTrayToolsLog.Name = "gMonTrayToolsLog"
Me.gMonTrayToolsLog.Size = New System.Drawing.Size(184, 22)
Me.gMonTrayToolsLog.Text = "&Log"
'
'gMonTrayLogClear
'
Me.gMonTrayLogClear.Name = "gMonTrayLogClear"
Me.gMonTrayLogClear.Size = New System.Drawing.Size(101, 22)
Me.gMonTrayLogClear.Text = "&Clear"
'
'gMonTrayLogSave
'
Me.gMonTrayLogSave.Name = "gMonTrayLogSave"
Me.gMonTrayLogSave.Size = New System.Drawing.Size(101, 22)
Me.gMonTrayLogSave.Text = "&Save"
'
'gMonTraySep1 'gMonTraySep1
' '
Me.gMonTraySep1.Name = "gMonTraySep1" Me.gMonTraySep1.Name = "gMonTraySep1"
@@ -211,20 +223,21 @@ Partial Class frmMain
'txtLog 'txtLog
' '
Me.txtLog.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.txtLog.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.txtLog.Location = New System.Drawing.Point(12, 161) Me.txtLog.Location = New System.Drawing.Point(12, 184)
Me.txtLog.MaxLength = 524288
Me.txtLog.Multiline = True Me.txtLog.Multiline = True
Me.txtLog.Name = "txtLog" Me.txtLog.Name = "txtLog"
Me.txtLog.ReadOnly = True Me.txtLog.ReadOnly = True
Me.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical Me.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtLog.Size = New System.Drawing.Size(500, 177) Me.txtLog.Size = New System.Drawing.Size(500, 186)
Me.txtLog.TabIndex = 2 Me.txtLog.TabIndex = 10
Me.txtLog.TabStop = False Me.txtLog.TabStop = False
' '
'gMonStatusStrip 'gMonStatusStrip
' '
Me.gMonStatusStrip.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.gMonStatusStrip.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.gMonStatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonStripAdminButton, Me.gMonStripTxtStatus, Me.gMonStripStatusButton}) Me.gMonStatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonStripAdminButton, Me.gMonStripTxtStatus, Me.gMonStripStatusButton})
Me.gMonStatusStrip.Location = New System.Drawing.Point(0, 350) Me.gMonStatusStrip.Location = New System.Drawing.Point(0, 379)
Me.gMonStatusStrip.Name = "gMonStatusStrip" Me.gMonStatusStrip.Name = "gMonStatusStrip"
Me.gMonStatusStrip.ShowItemToolTips = True Me.gMonStatusStrip.ShowItemToolTips = True
Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22) Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22)
@@ -234,42 +247,35 @@ Partial Class frmMain
'gMonStripAdminButton 'gMonStripAdminButton
' '
Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
Me.gMonStripAdminButton.DropDownButtonWidth = 0 Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.Icon_User
Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.User
Me.gMonStripAdminButton.ImageTransparentColor = System.Drawing.Color.Magenta
Me.gMonStripAdminButton.Name = "gMonStripAdminButton" Me.gMonStripAdminButton.Name = "gMonStripAdminButton"
Me.gMonStripAdminButton.Size = New System.Drawing.Size(21, 20) Me.gMonStripAdminButton.Size = New System.Drawing.Size(16, 17)
Me.gMonStripAdminButton.Text = "Elevation" Me.gMonStripAdminButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.gMonStripAdminButton.ToolTipText = "Elevation"
' '
'gMonStripTxtStatus 'gMonStripTxtStatus
' '
Me.gMonStripTxtStatus.Margin = New System.Windows.Forms.Padding(5, 0, 0, 0)
Me.gMonStripTxtStatus.Name = "gMonStripTxtStatus" Me.gMonStripTxtStatus.Name = "gMonStripTxtStatus"
Me.gMonStripTxtStatus.Size = New System.Drawing.Size(395, 17) Me.gMonStripTxtStatus.Size = New System.Drawing.Size(400, 22)
Me.gMonStripTxtStatus.Spring = True Me.gMonStripTxtStatus.Spring = True
Me.gMonStripTxtStatus.Text = "Monitor Status" Me.gMonStripTxtStatus.Text = "Monitor Status"
Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
' '
'gMonStripStatusButton 'gMonStripStatusButton
' '
Me.gMonStripStatusButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
Me.gMonStripStatusButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.gMonStripStatusButton.DropDownButtonWidth = 0
Me.gMonStripStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta
Me.gMonStripStatusButton.Name = "gMonStripStatusButton" Me.gMonStripStatusButton.Name = "gMonStripStatusButton"
Me.gMonStripStatusButton.Size = New System.Drawing.Size(93, 20) Me.gMonStripStatusButton.Size = New System.Drawing.Size(88, 17)
Me.gMonStripStatusButton.Text = "Monitor Status:" Me.gMonStripStatusButton.Text = "Monitor Status:"
Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.gMonStripStatusButton.ToolTipText = "Click to toggle monitoring on or off."
' '
'gMonMainMenu 'gMonMainMenu
' '
Me.gMonMainMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonFile, Me.gMonSetup, Me.gMonTools, Me.gMonHelp}) Me.gMonMainMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonFile, Me.gMonSetup, Me.gMonTools, Me.gMonHelp, Me.gMonNotification})
Me.gMonMainMenu.Location = New System.Drawing.Point(0, 0) Me.gMonMainMenu.Location = New System.Drawing.Point(0, 0)
Me.gMonMainMenu.Name = "gMonMainMenu" Me.gMonMainMenu.Name = "gMonMainMenu"
Me.gMonMainMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System Me.gMonMainMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System
Me.gMonMainMenu.Size = New System.Drawing.Size(524, 24) Me.gMonMainMenu.Size = New System.Drawing.Size(524, 24)
Me.gMonMainMenu.TabIndex = 8 Me.gMonMainMenu.TabIndex = 0
Me.gMonMainMenu.Text = "MenuStrip1" Me.gMonMainMenu.Text = "MenuStrip1"
' '
'gMonFile 'gMonFile
@@ -309,7 +315,7 @@ Partial Class frmMain
' '
'gMonSetup 'gMonSetup
' '
Me.gMonSetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonSetupGameManager, Me.gMonSetupAddWizard, Me.gMonSetupCustomVariables}) Me.gMonSetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonSetupGameManager, Me.gMonSetupAddWizard, Me.gMonSetupCustomVariables, Me.gMonSetupTags})
Me.gMonSetup.Name = "gMonSetup" Me.gMonSetup.Name = "gMonSetup"
Me.gMonSetup.Size = New System.Drawing.Size(49, 20) Me.gMonSetup.Size = New System.Drawing.Size(49, 20)
Me.gMonSetup.Text = "&Setup" Me.gMonSetup.Text = "&Setup"
@@ -332,75 +338,89 @@ Partial Class frmMain
Me.gMonSetupCustomVariables.Size = New System.Drawing.Size(201, 22) 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..."
'
'gMonTools 'gMonTools
' '
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsGameList, Me.gMonToolsSyncMan, Me.gMonToolsCompact}) Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog})
Me.gMonTools.Name = "gMonTools" Me.gMonTools.Name = "gMonTools"
Me.gMonTools.Size = New System.Drawing.Size(47, 20) Me.gMonTools.Size = New System.Drawing.Size(47, 20)
Me.gMonTools.Text = "&Tools" Me.gMonTools.Text = "&Tools"
' '
'gMonToolsGameList 'gMonToolsCleanMan
' '
Me.gMonToolsGameList.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsGameImportOfficialList, Me.gMonToolsGameImportList, Me.gMonToolsGameExportList}) Me.gMonToolsCleanMan.Name = "gMonToolsCleanMan"
Me.gMonToolsGameList.Name = "gMonToolsGameList" Me.gMonToolsCleanMan.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsGameList.Size = New System.Drawing.Size(179, 22) Me.gMonToolsCleanMan.Text = "Clean Local Ma&nifest"
Me.gMonToolsGameList.Text = "&Game List"
'
'gMonToolsGameImportOfficialList
'
Me.gMonToolsGameImportOfficialList.Name = "gMonToolsGameImportOfficialList"
Me.gMonToolsGameImportOfficialList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameImportOfficialList.Text = "Import from &Official List"
'
'gMonToolsGameImportList
'
Me.gMonToolsGameImportList.Name = "gMonToolsGameImportList"
Me.gMonToolsGameImportList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameImportList.Text = "I&mport Game List"
'
'gMonToolsGameExportList
'
Me.gMonToolsGameExportList.Name = "gMonToolsGameExportList"
Me.gMonToolsGameExportList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameExportList.Text = "E&xport Game List"
'
'gMonToolsSyncMan
'
Me.gMonToolsSyncMan.Name = "gMonToolsSyncMan"
Me.gMonToolsSyncMan.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsSyncMan.Text = "Sync Ma&nifests"
' '
'gMonToolsCompact 'gMonToolsCompact
' '
Me.gMonToolsCompact.Name = "gMonToolsCompact" Me.gMonToolsCompact.Name = "gMonToolsCompact"
Me.gMonToolsCompact.Size = New System.Drawing.Size(179, 22) Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsCompact.Text = "&Compact Databases" Me.gMonToolsCompact.Text = "&Compact Databases"
' '
'gMonToolsLog
'
Me.gMonToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonLogClear, Me.gMonLogSave})
Me.gMonToolsLog.Name = "gMonToolsLog"
Me.gMonToolsLog.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsLog.Text = "&Log"
'
'gMonLogClear
'
Me.gMonLogClear.Name = "gMonLogClear"
Me.gMonLogClear.Size = New System.Drawing.Size(101, 22)
Me.gMonLogClear.Text = "&Clear"
'
'gMonLogSave
'
Me.gMonLogSave.Name = "gMonLogSave"
Me.gMonLogSave.Size = New System.Drawing.Size(101, 22)
Me.gMonLogSave.Text = "&Save"
'
'gMonHelp 'gMonHelp
' '
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout}) Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout})
Me.gMonHelp.Name = "gMonHelp" Me.gMonHelp.Name = "gMonHelp"
Me.gMonHelp.Size = New System.Drawing.Size(44, 20) Me.gMonHelp.Size = New System.Drawing.Size(44, 20)
Me.gMonHelp.Text = "&Help" Me.gMonHelp.Text = "&Help"
' '
'gMonHelpWebSite
'
Me.gMonHelpWebSite.Name = "gMonHelpWebSite"
Me.gMonHelpWebSite.Size = New System.Drawing.Size(180, 22)
Me.gMonHelpWebSite.Text = "&Official Web Site..."
'
'gMonHelpManual 'gMonHelpManual
' '
Me.gMonHelpManual.Name = "gMonHelpManual" Me.gMonHelpManual.Name = "gMonHelpManual"
Me.gMonHelpManual.Size = New System.Drawing.Size(171, 22) Me.gMonHelpManual.Size = New System.Drawing.Size(180, 22)
Me.gMonHelpManual.Text = "Online &Manual" Me.gMonHelpManual.Text = "Online &Manual..."
' '
'gMonHelpCheckforUpdates 'gMonHelpCheckforUpdates
' '
Me.gMonHelpCheckforUpdates.Name = "gMonHelpCheckforUpdates" Me.gMonHelpCheckforUpdates.Name = "gMonHelpCheckforUpdates"
Me.gMonHelpCheckforUpdates.Size = New System.Drawing.Size(171, 22) Me.gMonHelpCheckforUpdates.Size = New System.Drawing.Size(180, 22)
Me.gMonHelpCheckforUpdates.Text = "Check for Updates" Me.gMonHelpCheckforUpdates.Text = "&Check for Updates..."
' '
'gMonHelpAbout 'gMonHelpAbout
' '
Me.gMonHelpAbout.Name = "gMonHelpAbout" Me.gMonHelpAbout.Name = "gMonHelpAbout"
Me.gMonHelpAbout.Size = New System.Drawing.Size(171, 22) Me.gMonHelpAbout.Size = New System.Drawing.Size(180, 22)
Me.gMonHelpAbout.Text = "&About" Me.gMonHelpAbout.Text = "&About"
' '
'gMonNotification
'
Me.gMonNotification.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
Me.gMonNotification.Name = "gMonNotification"
Me.gMonNotification.Size = New System.Drawing.Size(82, 20)
Me.gMonNotification.Text = "Notification"
Me.gMonNotification.Visible = False
'
'pbIcon 'pbIcon
' '
Me.pbIcon.Location = New System.Drawing.Point(12, 36) Me.pbIcon.Location = New System.Drawing.Point(12, 36)
@@ -412,10 +432,10 @@ Partial Class frmMain
' '
'btnLogToggle 'btnLogToggle
' '
Me.btnLogToggle.Location = New System.Drawing.Point(437, 132) Me.btnLogToggle.Location = New System.Drawing.Point(437, 155)
Me.btnLogToggle.Name = "btnLogToggle" Me.btnLogToggle.Name = "btnLogToggle"
Me.btnLogToggle.Size = New System.Drawing.Size(75, 23) Me.btnLogToggle.Size = New System.Drawing.Size(75, 23)
Me.btnLogToggle.TabIndex = 1 Me.btnLogToggle.TabIndex = 7
Me.btnLogToggle.Text = "Show &Log" Me.btnLogToggle.Text = "Show &Log"
Me.btnLogToggle.UseVisualStyleBackColor = True Me.btnLogToggle.UseVisualStyleBackColor = True
' '
@@ -425,79 +445,92 @@ Partial Class frmMain
Me.lblGameTitle.Location = New System.Drawing.Point(66, 36) Me.lblGameTitle.Location = New System.Drawing.Point(66, 36)
Me.lblGameTitle.Name = "lblGameTitle" Me.lblGameTitle.Name = "lblGameTitle"
Me.lblGameTitle.Size = New System.Drawing.Size(446, 16) Me.lblGameTitle.Size = New System.Drawing.Size(446, 16)
Me.lblGameTitle.TabIndex = 10 Me.lblGameTitle.TabIndex = 1
Me.lblGameTitle.Text = "Game Title" Me.lblGameTitle.Text = "Game Title"
' '
'lblLastAction 'lblLastAction
' '
Me.lblLastAction.AutoEllipsis = True
Me.lblLastAction.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.lblLastAction.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLastAction.Location = New System.Drawing.Point(12, 139) Me.lblLastAction.Location = New System.Drawing.Point(12, 165)
Me.lblLastAction.Name = "lblLastAction" Me.lblLastAction.Name = "lblLastAction"
Me.lblLastAction.Size = New System.Drawing.Size(419, 16) Me.lblLastAction.Size = New System.Drawing.Size(419, 13)
Me.lblLastAction.TabIndex = 11 Me.lblLastAction.TabIndex = 9
Me.lblLastAction.Text = "Last Action" Me.lblLastAction.Text = "Last Action"
' '
'lblLastActionTitle 'lblLastActionTitle
' '
Me.lblLastActionTitle.AutoSize = True Me.lblLastActionTitle.AutoSize = True
Me.lblLastActionTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.lblLastActionTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLastActionTitle.Location = New System.Drawing.Point(12, 126) Me.lblLastActionTitle.Location = New System.Drawing.Point(12, 147)
Me.lblLastActionTitle.Name = "lblLastActionTitle" Me.lblLastActionTitle.Name = "lblLastActionTitle"
Me.lblLastActionTitle.Size = New System.Drawing.Size(75, 13) Me.lblLastActionTitle.Size = New System.Drawing.Size(75, 13)
Me.lblLastActionTitle.TabIndex = 12 Me.lblLastActionTitle.TabIndex = 8
Me.lblLastActionTitle.Text = "Last Action:" Me.lblLastActionTitle.Text = "Last Action:"
' '
'lblTimeTitle
'
Me.lblTimeTitle.AutoSize = True
Me.lblTimeTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblTimeTitle.Location = New System.Drawing.Point(66, 55)
Me.lblTimeTitle.Name = "lblTimeTitle"
Me.lblTimeTitle.Size = New System.Drawing.Size(75, 13)
Me.lblTimeTitle.TabIndex = 13
Me.lblTimeTitle.Text = "Time Spent:"
'
'lblTimeSpent 'lblTimeSpent
' '
Me.lblTimeSpent.AutoSize = True Me.lblTimeSpent.AutoEllipsis = True
Me.lblTimeSpent.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.lblTimeSpent.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblTimeSpent.Location = New System.Drawing.Point(139, 55) Me.lblTimeSpent.Location = New System.Drawing.Point(66, 110)
Me.lblTimeSpent.Name = "lblTimeSpent" Me.lblTimeSpent.Name = "lblTimeSpent"
Me.lblTimeSpent.Size = New System.Drawing.Size(44, 13) Me.lblTimeSpent.Size = New System.Drawing.Size(446, 16)
Me.lblTimeSpent.TabIndex = 14 Me.lblTimeSpent.TabIndex = 5
Me.lblTimeSpent.Text = "0 Hours" Me.lblTimeSpent.Text = "0 Hours"
' '
'txtGameInfo
'
Me.txtGameInfo.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtGameInfo.Cursor = System.Windows.Forms.Cursors.Default
Me.txtGameInfo.Location = New System.Drawing.Point(69, 71)
Me.txtGameInfo.Multiline = True
Me.txtGameInfo.Name = "txtGameInfo"
Me.txtGameInfo.ReadOnly = True
Me.txtGameInfo.Size = New System.Drawing.Size(443, 52)
Me.txtGameInfo.TabIndex = 0
Me.txtGameInfo.TabStop = False
Me.txtGameInfo.WordWrap = False
'
'btnCancelOperation 'btnCancelOperation
' '
Me.btnCancelOperation.Location = New System.Drawing.Point(437, 103) Me.btnCancelOperation.Location = New System.Drawing.Point(437, 126)
Me.btnCancelOperation.Name = "btnCancelOperation" Me.btnCancelOperation.Name = "btnCancelOperation"
Me.btnCancelOperation.Size = New System.Drawing.Size(75, 23) Me.btnCancelOperation.Size = New System.Drawing.Size(75, 23)
Me.btnCancelOperation.TabIndex = 0 Me.btnCancelOperation.TabIndex = 6
Me.btnCancelOperation.Text = "&Cancel" Me.btnCancelOperation.Text = "&Cancel"
Me.btnCancelOperation.UseVisualStyleBackColor = True Me.btnCancelOperation.UseVisualStyleBackColor = True
' '
'lblStatus1
'
Me.lblStatus1.AutoEllipsis = True
Me.lblStatus1.Location = New System.Drawing.Point(66, 58)
Me.lblStatus1.Name = "lblStatus1"
Me.lblStatus1.Size = New System.Drawing.Size(446, 13)
Me.lblStatus1.TabIndex = 2
'
'lblStatus2
'
Me.lblStatus2.AutoEllipsis = True
Me.lblStatus2.Location = New System.Drawing.Point(66, 74)
Me.lblStatus2.Name = "lblStatus2"
Me.lblStatus2.Size = New System.Drawing.Size(446, 13)
Me.lblStatus2.TabIndex = 3
'
'lblStatus3
'
Me.lblStatus3.AutoEllipsis = True
Me.lblStatus3.Location = New System.Drawing.Point(66, 90)
Me.lblStatus3.Name = "lblStatus3"
Me.lblStatus3.Size = New System.Drawing.Size(446, 13)
Me.lblStatus3.TabIndex = 4
'
'pbTime
'
Me.pbTime.Location = New System.Drawing.Point(36, 106)
Me.pbTime.Name = "pbTime"
Me.pbTime.Size = New System.Drawing.Size(24, 24)
Me.pbTime.TabIndex = 18
Me.pbTime.TabStop = False
'
'frmMain 'frmMain
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(524, 372) Me.AutoSize = True
Me.ClientSize = New System.Drawing.Size(524, 401)
Me.Controls.Add(Me.pbTime)
Me.Controls.Add(Me.lblStatus3)
Me.Controls.Add(Me.lblStatus2)
Me.Controls.Add(Me.lblStatus1)
Me.Controls.Add(Me.btnCancelOperation) Me.Controls.Add(Me.btnCancelOperation)
Me.Controls.Add(Me.txtGameInfo)
Me.Controls.Add(Me.lblTimeSpent) Me.Controls.Add(Me.lblTimeSpent)
Me.Controls.Add(Me.lblTimeTitle)
Me.Controls.Add(Me.lblLastActionTitle) Me.Controls.Add(Me.lblLastActionTitle)
Me.Controls.Add(Me.lblLastAction) Me.Controls.Add(Me.lblLastAction)
Me.Controls.Add(Me.lblGameTitle) Me.Controls.Add(Me.lblGameTitle)
@@ -506,9 +539,9 @@ Partial Class frmMain
Me.Controls.Add(Me.gMonStatusStrip) Me.Controls.Add(Me.gMonStatusStrip)
Me.Controls.Add(Me.gMonMainMenu) Me.Controls.Add(Me.gMonMainMenu)
Me.Controls.Add(Me.txtLog) Me.Controls.Add(Me.txtLog)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.KeyPreview = True
Me.MainMenuStrip = Me.gMonMainMenu Me.MainMenuStrip = Me.gMonMainMenu
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
@@ -522,6 +555,7 @@ Partial Class frmMain
Me.gMonMainMenu.ResumeLayout(False) Me.gMonMainMenu.ResumeLayout(False)
Me.gMonMainMenu.PerformLayout() Me.gMonMainMenu.PerformLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.pbTime, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False) Me.ResumeLayout(False)
Me.PerformLayout() Me.PerformLayout()
@@ -551,29 +585,16 @@ Partial Class frmMain
Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupCustomVariables As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTraySetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripSplitButton
Friend WithEvents pbIcon As System.Windows.Forms.PictureBox Friend WithEvents pbIcon As System.Windows.Forms.PictureBox
Friend WithEvents btnLogToggle As System.Windows.Forms.Button Friend WithEvents btnLogToggle As System.Windows.Forms.Button
Friend WithEvents lblGameTitle As System.Windows.Forms.Label Friend WithEvents lblGameTitle As System.Windows.Forms.Label
Friend WithEvents lblLastAction As System.Windows.Forms.Label Friend WithEvents lblLastAction As System.Windows.Forms.Label
Friend WithEvents lblLastActionTitle As System.Windows.Forms.Label Friend WithEvents lblLastActionTitle As System.Windows.Forms.Label
Friend WithEvents gMonTools As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTools As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsSyncMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayTools As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTrayTools As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsSyncMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupAddWizard As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonSetupAddWizard As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupAddWizard As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonTraySetupAddWizard As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents lblTimeTitle As System.Windows.Forms.Label
Friend WithEvents lblTimeSpent As System.Windows.Forms.Label Friend WithEvents lblTimeSpent As System.Windows.Forms.Label
Friend WithEvents txtGameInfo As System.Windows.Forms.TextBox
Friend WithEvents gMonToolsGameList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameImportOfficialList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameImportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameExportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameImportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameExportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameImportOfficialList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupGameManager As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonSetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupCustomVariables As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonSetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsCompact As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonToolsCompact As System.Windows.Forms.ToolStripMenuItem
@@ -581,5 +602,23 @@ Partial Class frmMain
Friend WithEvents gMonHelpManual As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonHelpManual As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btnCancelOperation As System.Windows.Forms.Button Friend WithEvents btnCancelOperation As System.Windows.Forms.Button
Friend WithEvents gMonStripAdminButton As ToolStripSplitButton Friend WithEvents gMonTraySetupTags As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupTags As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents lblStatus1 As Label
Friend WithEvents lblStatus2 As Label
Friend WithEvents lblStatus3 As Label
Friend WithEvents gMonNotification As System.Windows.Forms.ToolStripMenuItem
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
Friend WithEvents gMonTrayToolsLog As ToolStripMenuItem
Friend WithEvents gMonTrayLogClear As ToolStripMenuItem
Friend WithEvents gMonTrayLogSave As ToolStripMenuItem
Friend WithEvents gMonStripAdminButton As System.Windows.Forms.ToolStripStatusLabel
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripStatusLabel
End Class End Class
+845 -361
View File
File diff suppressed because it is too large Load Diff
-105
View File
@@ -1,105 +0,0 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmManifestViewer
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.dgView = New System.Windows.Forms.DataGridView()
Me.btnCancel = New System.Windows.Forms.Button()
Me.lblError = New System.Windows.Forms.Label()
Me.fbBrowser = New System.Windows.Forms.FolderBrowserDialog()
Me.cboManifest = New System.Windows.Forms.ComboBox()
CType(Me.dgView, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'dgView
'
Me.dgView.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.dgView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
Me.dgView.BackgroundColor = System.Drawing.SystemColors.Window
Me.dgView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgView.Location = New System.Drawing.Point(12, 12)
Me.dgView.Name = "dgView"
Me.dgView.RowHeadersVisible = False
Me.dgView.Size = New System.Drawing.Size(960, 338)
Me.dgView.TabIndex = 0
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Location = New System.Drawing.Point(897, 356)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
Me.btnCancel.Text = "C&lose"
Me.btnCancel.UseVisualStyleBackColor = True
'
'lblError
'
Me.lblError.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblError.AutoSize = True
Me.lblError.Location = New System.Drawing.Point(139, 362)
Me.lblError.Name = "lblError"
Me.lblError.Size = New System.Drawing.Size(54, 13)
Me.lblError.TabIndex = 5
Me.lblError.Text = "Info Label"
'
'fbBrowser
'
Me.fbBrowser.ShowNewFolderButton = False
'
'cboManifest
'
Me.cboManifest.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cboManifest.FormattingEnabled = True
Me.cboManifest.Location = New System.Drawing.Point(12, 359)
Me.cboManifest.Name = "cboManifest"
Me.cboManifest.Size = New System.Drawing.Size(121, 21)
Me.cboManifest.TabIndex = 6
'
'frmManifestViewer
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(984, 392)
Me.Controls.Add(Me.cboManifest)
Me.Controls.Add(Me.lblError)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.dgView)
Me.MinimizeBox = False
Me.Name = "frmManifestViewer"
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Manifest Viewer"
CType(Me.dgView, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents dgView As System.Windows.Forms.DataGridView
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lblError As System.Windows.Forms.Label
Friend WithEvents fbBrowser As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents cboManifest As System.Windows.Forms.ComboBox
End Class
-149
View File
@@ -1,149 +0,0 @@
Public Class frmManifestViewer
Private bShutdown As Boolean = False
Private oLocalManifest As SortedList
Private oRemoteManfiest As SortedList
Private oRestoreInfo As clsBackup
Private oDataTable As DataTable
Property RestoreInfo As clsBackup
Get
Return oRestoreInfo
End Get
Set(value As clsBackup)
oRestoreInfo = value
End Set
End Property
Property LocalManifestData As SortedList
Get
Return oLocalManifest
End Get
Set(value As SortedList)
oLocalManifest = value
End Set
End Property
Property RemoteManifestData As SortedList
Get
Return oRemoteManfiest
End Get
Set(value As SortedList)
oRemoteManfiest = value
End Set
End Property
Private Sub FormatManifest(ByVal iManifest As Integer)
Dim oRow As Object()
Dim oLoadData As SortedList
If iManifest = 1 Then
oLoadData = LocalManifestData
Else
oLoadData = RemoteManifestData
End If
oDataTable = New DataTable
'Setup Columns
oDataTable.Columns.Add("Name")
oDataTable.Columns.Add("Backup Path")
oDataTable.Columns.Add("Restore Path")
oDataTable.Columns.Add("Absolute Path")
oDataTable.Columns.Add("Date Updated")
oDataTable.Columns.Add("Updated By")
'Setup Data Types
oDataTable.Columns(0).DataType = GetType(String)
oDataTable.Columns(1).DataType = GetType(String)
oDataTable.Columns(2).DataType = GetType(String)
oDataTable.Columns(3).DataType = GetType(Boolean)
oDataTable.Columns(4).DataType = GetType(DateTime)
oDataTable.Columns(5).DataType = GetType(String)
For Each o As clsBackup In oLoadData.Values
oRow = New Object() {o.Name, o.FileName, o.RestorePath, o.AbsolutePath, o.DateUpdated, o.UpdatedBy}
oDataTable.Rows.Add(oRow)
Next
'Sort
oDataTable.DefaultView.Sort = "Name asc"
dgView.DataSource = oDataTable
'Setup Column Widths
dgView.Columns(0).MinimumWidth = 100
dgView.Columns(1).MinimumWidth = 175
dgView.Columns(2).MinimumWidth = 175
dgView.Columns(3).MinimumWidth = 60
dgView.Columns(4).MinimumWidth = 125
dgView.Columns(5).MinimumWidth = 100
dgView.Columns(0).FillWeight = 100
dgView.Columns(1).FillWeight = 100
dgView.Columns(2).FillWeight = 100
dgView.Columns(3).FillWeight = 25
dgView.Columns(4).FillWeight = 50
dgView.Columns(5).FillWeight = 50
End Sub
Private Sub LoadCombo()
Dim oCombo As New List(Of KeyValuePair(Of Integer, String))
oCombo.Add(New KeyValuePair(Of Integer, String)(1, "Local Manifest"))
oCombo.Add(New KeyValuePair(Of Integer, String)(2, "Remote Manifest"))
cboManifest.DataSource = oCombo
cboManifest.ValueMember = "key"
cboManifest.DisplayMember = "value"
End Sub
Private Sub frmManifestInfo_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
dgView.ReadOnly = True
dgView.AllowUserToAddRows = False
lblError.Text = String.Empty
LoadCombo()
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
Private Sub dgView_CellStateChanged(sender As Object, e As DataGridViewCellStateChangedEventArgs) Handles dgView.CellStateChanged
lblError.ForeColor = Color.Black
Select Case dgView.Columns(e.Cell.ColumnIndex).Index
Case 0
lblError.Text = "The name of the application."
Case 1
lblError.Text = "The location of the backup file to restore."
Case 2
lblError.Text = "When the backup file was updated from this computer."
Case 3
lblError.Text = "The name of this computer."
Case 4
lblError.Text = "When the local backup file was last updated."
Case 5
lblError.Text = "The name of the computer that performed the last backup."
End Select
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmGameInfo_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Not bShutdown Then
If MsgBox("Are you sure you want to close?", MsgBoxStyle.YesNo, "ABM") = MsgBoxResult.Yes Then
bShutdown = True
End If
End If
If Not bShutdown Then
e.Cancel = True
End If
End Sub
Private Sub cboManifest_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboManifest.SelectionChangeCommitted
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
End Class
+448 -133
View File
@@ -23,27 +23,59 @@ Partial Class frmSettings
<System.Diagnostics.DebuggerStepThrough()> _ <System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent() Private Sub InitializeComponent()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox() Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox() Me.grpStartup = New System.Windows.Forms.GroupBox()
Me.grpGeneral = New System.Windows.Forms.GroupBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox() Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
Me.chkAutoSaveLog = New System.Windows.Forms.CheckBox()
Me.btnOptionalFields = New System.Windows.Forms.Button()
Me.chkTimeTracking = New System.Windows.Forms.CheckBox()
Me.chkSync = New System.Windows.Forms.CheckBox() Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox() Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox() Me.grpFolderOptions = New System.Windows.Forms.GroupBox()
Me.grpPaths = New System.Windows.Forms.GroupBox()
Me.btnBackupFolder = New System.Windows.Forms.Button() Me.btnBackupFolder = New System.Windows.Forms.Button()
Me.lblBackupFolder = New System.Windows.Forms.Label() Me.lblBackupFolder = New System.Windows.Forms.Label()
Me.txtBackupFolder = New System.Windows.Forms.TextBox() Me.txtBackupFolder = New System.Windows.Forms.TextBox()
Me.fbBrowser = New System.Windows.Forms.FolderBrowserDialog() Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.btnSave = New System.Windows.Forms.Button() Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button() Me.btnCancel = New System.Windows.Forms.Button()
Me.grpBackup = New System.Windows.Forms.GroupBox() Me.grp7zGeneral = New System.Windows.Forms.GroupBox()
Me.chkCheckSum = New System.Windows.Forms.CheckBox() Me.cboCompression = New System.Windows.Forms.ComboBox()
Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox() Me.lblCompression = New System.Windows.Forms.Label()
Me.btn7zLocation = New System.Windows.Forms.Button()
Me.txt7zLocation = New System.Windows.Forms.TextBox()
Me.lblLocation = New System.Windows.Forms.Label()
Me.txt7zArguments = New System.Windows.Forms.TextBox()
Me.lblArguments = New System.Windows.Forms.Label()
Me.lbl7zCopyright = New System.Windows.Forms.Label()
Me.lbl7zProduct = New System.Windows.Forms.Label()
Me.btnDefaults = New System.Windows.Forms.Button()
Me.pnlBackup = New System.Windows.Forms.Panel()
Me.lblMinutes = New System.Windows.Forms.Label()
Me.nudSupressBackupThreshold = New System.Windows.Forms.NumericUpDown()
Me.chkSupressBackup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox() Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox() Me.grpBackupHandling = New System.Windows.Forms.GroupBox()
Me.grpGeneral.SuspendLayout() Me.chkAutoRestore = New System.Windows.Forms.CheckBox()
Me.grpPaths.SuspendLayout() Me.chkRestoreNotify = New System.Windows.Forms.CheckBox()
Me.grpBackup.SuspendLayout() Me.chkAutoMark = New System.Windows.Forms.CheckBox()
Me.pnl7z = New System.Windows.Forms.Panel()
Me.grp7zAdvanced = New System.Windows.Forms.GroupBox()
Me.grp7zInformation = New System.Windows.Forms.GroupBox()
Me.pnlGeneral = New System.Windows.Forms.Panel()
Me.grpGameData = New System.Windows.Forms.GroupBox()
Me.lstSettings = New System.Windows.Forms.ListBox()
Me.grpStartup.SuspendLayout()
Me.grpFolderOptions.SuspendLayout()
Me.grp7zGeneral.SuspendLayout()
Me.pnlBackup.SuspendLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpBackupHandling.SuspendLayout()
Me.pnl7z.SuspendLayout()
Me.grp7zAdvanced.SuspendLayout()
Me.grp7zInformation.SuspendLayout()
Me.pnlGeneral.SuspendLayout()
Me.grpGameData.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
' '
'chkMonitorOnStartup 'chkMonitorOnStartup
@@ -56,29 +88,17 @@ Partial Class frmSettings
Me.chkMonitorOnStartup.Text = "Start monitoring at launch" Me.chkMonitorOnStartup.Text = "Start monitoring at launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
' '
'chkBackupConfirm 'grpStartup
' '
Me.chkBackupConfirm.AutoSize = True Me.grpStartup.Controls.Add(Me.chkStartWindows)
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 19) Me.grpStartup.Controls.Add(Me.chkStartToTray)
Me.chkBackupConfirm.Name = "chkBackupConfirm" Me.grpStartup.Controls.Add(Me.chkMonitorOnStartup)
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17) Me.grpStartup.Location = New System.Drawing.Point(6, 12)
Me.chkBackupConfirm.TabIndex = 0 Me.grpStartup.Name = "grpStartup"
Me.chkBackupConfirm.Text = "Disable backup confirmation" Me.grpStartup.Size = New System.Drawing.Size(354, 90)
Me.chkBackupConfirm.UseVisualStyleBackColor = True Me.grpStartup.TabIndex = 0
' Me.grpStartup.TabStop = False
'grpGeneral Me.grpStartup.Text = "Startup"
'
Me.grpGeneral.Controls.Add(Me.chkStartWindows)
Me.grpGeneral.Controls.Add(Me.chkSync)
Me.grpGeneral.Controls.Add(Me.chkShowDetectionTips)
Me.grpGeneral.Controls.Add(Me.chkStartToTray)
Me.grpGeneral.Controls.Add(Me.chkMonitorOnStartup)
Me.grpGeneral.Location = New System.Drawing.Point(12, 12)
Me.grpGeneral.Name = "grpGeneral"
Me.grpGeneral.Size = New System.Drawing.Size(360, 145)
Me.grpGeneral.TabIndex = 0
Me.grpGeneral.TabStop = False
Me.grpGeneral.Text = "General"
' '
'chkStartWindows 'chkStartWindows
' '
@@ -90,26 +110,6 @@ Partial Class frmSettings
Me.chkStartWindows.Text = "Start with Windows" Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True Me.chkStartWindows.UseVisualStyleBackColor = True
' '
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(6, 111)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(208, 17)
Me.chkSync.TabIndex = 4
Me.chkSync.Text = "Sync game list data with backup folder"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkShowDetectionTips
'
Me.chkShowDetectionTips.AutoSize = True
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 88)
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
Me.chkShowDetectionTips.Size = New System.Drawing.Size(136, 17)
Me.chkShowDetectionTips.TabIndex = 3
Me.chkShowDetectionTips.Text = "Show detection tooltips"
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
'
'chkStartToTray 'chkStartToTray
' '
Me.chkStartToTray.AutoSize = True Me.chkStartToTray.AutoSize = True
@@ -120,161 +120,476 @@ Partial Class frmSettings
Me.chkStartToTray.Text = "Start to system tray" Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True Me.chkStartToTray.UseVisualStyleBackColor = True
' '
'grpPaths 'chkAutoSaveLog
' '
Me.grpPaths.Controls.Add(Me.btnBackupFolder) Me.chkAutoSaveLog.AutoSize = True
Me.grpPaths.Controls.Add(Me.lblBackupFolder) Me.chkAutoSaveLog.Location = New System.Drawing.Point(6, 204)
Me.grpPaths.Controls.Add(Me.txtBackupFolder) Me.chkAutoSaveLog.Name = "chkAutoSaveLog"
Me.grpPaths.Location = New System.Drawing.Point(12, 311) Me.chkAutoSaveLog.Size = New System.Drawing.Size(231, 17)
Me.grpPaths.Name = "grpPaths" Me.chkAutoSaveLog.TabIndex = 3
Me.grpPaths.Size = New System.Drawing.Size(360, 60) Me.chkAutoSaveLog.Text = "Autosave log when max length is exceeded"
Me.grpPaths.TabIndex = 2 Me.chkAutoSaveLog.UseVisualStyleBackColor = True
Me.grpPaths.TabStop = False '
Me.grpPaths.Text = "Paths" 'btnOptionalFields
'
Me.btnOptionalFields.Location = New System.Drawing.Point(110, 38)
Me.btnOptionalFields.Name = "btnOptionalFields"
Me.btnOptionalFields.Size = New System.Drawing.Size(134, 23)
Me.btnOptionalFields.TabIndex = 2
Me.btnOptionalFields.Text = "Choose &Optional Fields..."
Me.btnOptionalFields.UseVisualStyleBackColor = True
'
'chkTimeTracking
'
Me.chkTimeTracking.AutoSize = True
Me.chkTimeTracking.Location = New System.Drawing.Point(6, 19)
Me.chkTimeTracking.Name = "chkTimeTracking"
Me.chkTimeTracking.Size = New System.Drawing.Size(122, 17)
Me.chkTimeTracking.TabIndex = 0
Me.chkTimeTracking.Text = "Enable time tracking"
Me.chkTimeTracking.UseVisualStyleBackColor = True
'
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(6, 42)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(98, 17)
Me.chkSync.TabIndex = 1
Me.chkSync.Text = "Enable syncing"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkShowDetectionTips
'
Me.chkShowDetectionTips.AutoSize = True
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 181)
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
Me.chkShowDetectionTips.Size = New System.Drawing.Size(159, 17)
Me.chkShowDetectionTips.TabIndex = 2
Me.chkShowDetectionTips.Text = "Show detection notifications"
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
'
'grpFolderOptions
'
Me.grpFolderOptions.Controls.Add(Me.btnBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.lblBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.txtBackupFolder)
Me.grpFolderOptions.Controls.Add(Me.chkCreateFolder)
Me.grpFolderOptions.Location = New System.Drawing.Point(6, 12)
Me.grpFolderOptions.Name = "grpFolderOptions"
Me.grpFolderOptions.Size = New System.Drawing.Size(354, 70)
Me.grpFolderOptions.TabIndex = 0
Me.grpFolderOptions.TabStop = False
Me.grpFolderOptions.Text = "Folders"
' '
'btnBackupFolder 'btnBackupFolder
' '
Me.btnBackupFolder.Location = New System.Drawing.Point(318, 23) Me.btnBackupFolder.Location = New System.Drawing.Point(313, 17)
Me.btnBackupFolder.Name = "btnBackupFolder" Me.btnBackupFolder.Name = "btnBackupFolder"
Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20) Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20)
Me.btnBackupFolder.TabIndex = 2 Me.btnBackupFolder.TabIndex = 1
Me.btnBackupFolder.Text = "..." Me.btnBackupFolder.Text = "..."
Me.btnBackupFolder.UseVisualStyleBackColor = True Me.btnBackupFolder.UseVisualStyleBackColor = True
' '
'lblBackupFolder 'lblBackupFolder
' '
Me.lblBackupFolder.AutoSize = True Me.lblBackupFolder.AutoSize = True
Me.lblBackupFolder.Location = New System.Drawing.Point(6, 27) Me.lblBackupFolder.Location = New System.Drawing.Point(6, 20)
Me.lblBackupFolder.Name = "lblBackupFolder" Me.lblBackupFolder.Name = "lblBackupFolder"
Me.lblBackupFolder.Size = New System.Drawing.Size(76, 13) Me.lblBackupFolder.Size = New System.Drawing.Size(79, 13)
Me.lblBackupFolder.TabIndex = 0 Me.lblBackupFolder.TabIndex = 0
Me.lblBackupFolder.Text = "Backup Folder" Me.lblBackupFolder.Text = "Backup Folder:"
' '
'txtBackupFolder 'txtBackupFolder
' '
Me.txtBackupFolder.Location = New System.Drawing.Point(88, 24) Me.txtBackupFolder.Location = New System.Drawing.Point(91, 17)
Me.txtBackupFolder.Name = "txtBackupFolder" Me.txtBackupFolder.Name = "txtBackupFolder"
Me.txtBackupFolder.Size = New System.Drawing.Size(224, 20) Me.txtBackupFolder.Size = New System.Drawing.Size(216, 20)
Me.txtBackupFolder.TabIndex = 1 Me.txtBackupFolder.TabIndex = 0
'
'chkCreateFolder
'
Me.chkCreateFolder.AutoSize = True
Me.chkCreateFolder.Location = New System.Drawing.Point(9, 43)
Me.chkCreateFolder.Name = "chkCreateFolder"
Me.chkCreateFolder.Size = New System.Drawing.Size(186, 17)
Me.chkCreateFolder.TabIndex = 2
Me.chkCreateFolder.Text = "Create a sub-folder for each game"
Me.chkCreateFolder.UseVisualStyleBackColor = True
' '
'btnSave 'btnSave
' '
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
Me.btnSave.Location = New System.Drawing.Point(216, 377) Me.btnSave.Location = New System.Drawing.Point(384, 321)
Me.btnSave.Name = "btnSave" Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23) Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 3 Me.btnSave.TabIndex = 5
Me.btnSave.Text = "&Save" Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True Me.btnSave.UseVisualStyleBackColor = True
' '
'btnCancel 'btnCancel
' '
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.btnCancel.Location = New System.Drawing.Point(297, 377) Me.btnCancel.Location = New System.Drawing.Point(465, 321)
Me.btnCancel.Name = "btnCancel" Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 4 Me.btnCancel.TabIndex = 6
Me.btnCancel.Text = "&Cancel" Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True Me.btnCancel.UseVisualStyleBackColor = True
' '
'grpBackup 'grp7zGeneral
' '
Me.grpBackup.Controls.Add(Me.chkCheckSum) Me.grp7zGeneral.Controls.Add(Me.cboCompression)
Me.grpBackup.Controls.Add(Me.chkRestoreOnLaunch) Me.grp7zGeneral.Controls.Add(Me.lblCompression)
Me.grpBackup.Controls.Add(Me.chkOverwriteWarning) Me.grp7zGeneral.Location = New System.Drawing.Point(6, 12)
Me.grpBackup.Controls.Add(Me.chkCreateFolder) Me.grp7zGeneral.Name = "grp7zGeneral"
Me.grpBackup.Controls.Add(Me.chkBackupConfirm) Me.grp7zGeneral.Size = New System.Drawing.Size(354, 50)
Me.grpBackup.Location = New System.Drawing.Point(12, 163) Me.grp7zGeneral.TabIndex = 0
Me.grpBackup.Name = "grpBackup" Me.grp7zGeneral.TabStop = False
Me.grpBackup.Size = New System.Drawing.Size(360, 142) Me.grp7zGeneral.Text = "General"
Me.grpBackup.TabIndex = 1
Me.grpBackup.TabStop = False
Me.grpBackup.Text = "Backup and Restore Options"
' '
'chkCheckSum 'cboCompression
' '
Me.chkCheckSum.AutoSize = True Me.cboCompression.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.chkCheckSum.Location = New System.Drawing.Point(6, 111) Me.cboCompression.FormattingEnabled = True
Me.chkCheckSum.Name = "chkCheckSum" Me.cboCompression.Location = New System.Drawing.Point(110, 17)
Me.chkCheckSum.Size = New System.Drawing.Size(195, 17) Me.cboCompression.Name = "cboCompression"
Me.chkCheckSum.TabIndex = 4 Me.cboCompression.Size = New System.Drawing.Size(238, 21)
Me.chkCheckSum.Text = "Verify backup files with a checksum" Me.cboCompression.TabIndex = 0
Me.chkCheckSum.UseVisualStyleBackColor = True
' '
'chkRestoreOnLaunch 'lblCompression
' '
Me.chkRestoreOnLaunch.AutoSize = True Me.lblCompression.AutoSize = True
Me.chkRestoreOnLaunch.Location = New System.Drawing.Point(6, 88) Me.lblCompression.Location = New System.Drawing.Point(6, 20)
Me.chkRestoreOnLaunch.Name = "chkRestoreOnLaunch" Me.lblCompression.Name = "lblCompression"
Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(249, 17) Me.lblCompression.Size = New System.Drawing.Size(70, 13)
Me.chkRestoreOnLaunch.TabIndex = 3 Me.lblCompression.TabIndex = 0
Me.chkRestoreOnLaunch.Text = "Check for new backup files to restore at launch" Me.lblCompression.Text = "Compression:"
Me.chkRestoreOnLaunch.UseVisualStyleBackColor = True '
'btn7zLocation
'
Me.btn7zLocation.Location = New System.Drawing.Point(313, 41)
Me.btn7zLocation.Name = "btn7zLocation"
Me.btn7zLocation.Size = New System.Drawing.Size(27, 20)
Me.btn7zLocation.TabIndex = 2
Me.btn7zLocation.Text = "..."
Me.btn7zLocation.UseVisualStyleBackColor = True
'
'txt7zLocation
'
Me.txt7zLocation.Location = New System.Drawing.Point(110, 41)
Me.txt7zLocation.Name = "txt7zLocation"
Me.txt7zLocation.Size = New System.Drawing.Size(197, 20)
Me.txt7zLocation.TabIndex = 1
'
'lblLocation
'
Me.lblLocation.AutoSize = True
Me.lblLocation.Location = New System.Drawing.Point(6, 44)
Me.lblLocation.Name = "lblLocation"
Me.lblLocation.Size = New System.Drawing.Size(89, 13)
Me.lblLocation.TabIndex = 4
Me.lblLocation.Text = "Custom Location:"
'
'txt7zArguments
'
Me.txt7zArguments.Location = New System.Drawing.Point(110, 15)
Me.txt7zArguments.Name = "txt7zArguments"
Me.txt7zArguments.Size = New System.Drawing.Size(238, 20)
Me.txt7zArguments.TabIndex = 0
'
'lblArguments
'
Me.lblArguments.AutoSize = True
Me.lblArguments.Location = New System.Drawing.Point(6, 20)
Me.lblArguments.Name = "lblArguments"
Me.lblArguments.Size = New System.Drawing.Size(98, 13)
Me.lblArguments.TabIndex = 2
Me.lblArguments.Text = "Custom Arguments:"
'
'lbl7zCopyright
'
Me.lbl7zCopyright.AutoEllipsis = True
Me.lbl7zCopyright.Location = New System.Drawing.Point(9, 34)
Me.lbl7zCopyright.Name = "lbl7zCopyright"
Me.lbl7zCopyright.Size = New System.Drawing.Size(339, 17)
Me.lbl7zCopyright.TabIndex = 8
Me.lbl7zCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lbl7zProduct
'
Me.lbl7zProduct.AutoEllipsis = True
Me.lbl7zProduct.Location = New System.Drawing.Point(9, 17)
Me.lbl7zProduct.Name = "lbl7zProduct"
Me.lbl7zProduct.Size = New System.Drawing.Size(339, 17)
Me.lbl7zProduct.TabIndex = 7
Me.lbl7zProduct.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'btnDefaults
'
Me.btnDefaults.Location = New System.Drawing.Point(12, 321)
Me.btnDefaults.Name = "btnDefaults"
Me.btnDefaults.Size = New System.Drawing.Size(110, 23)
Me.btnDefaults.TabIndex = 4
Me.btnDefaults.Text = "Set &Defaults"
Me.btnDefaults.UseVisualStyleBackColor = True
'
'pnlBackup
'
Me.pnlBackup.Controls.Add(Me.lblMinutes)
Me.pnlBackup.Controls.Add(Me.nudSupressBackupThreshold)
Me.pnlBackup.Controls.Add(Me.chkSupressBackup)
Me.pnlBackup.Controls.Add(Me.chkBackupConfirm)
Me.pnlBackup.Controls.Add(Me.chkOverwriteWarning)
Me.pnlBackup.Controls.Add(Me.grpBackupHandling)
Me.pnlBackup.Controls.Add(Me.grpFolderOptions)
Me.pnlBackup.Location = New System.Drawing.Point(180, 0)
Me.pnlBackup.Name = "pnlBackup"
Me.pnlBackup.Size = New System.Drawing.Size(367, 314)
Me.pnlBackup.TabIndex = 3
'
'lblMinutes
'
Me.lblMinutes.AutoSize = True
Me.lblMinutes.Location = New System.Drawing.Point(286, 228)
Me.lblMinutes.Name = "lblMinutes"
Me.lblMinutes.Size = New System.Drawing.Size(43, 13)
Me.lblMinutes.TabIndex = 14
Me.lblMinutes.Text = "minutes"
'
'nudSupressBackupThreshold
'
Me.nudSupressBackupThreshold.Location = New System.Drawing.Point(229, 226)
Me.nudSupressBackupThreshold.Maximum = New Decimal(New Integer() {999, 0, 0, 0})
Me.nudSupressBackupThreshold.Name = "nudSupressBackupThreshold"
Me.nudSupressBackupThreshold.Size = New System.Drawing.Size(51, 20)
Me.nudSupressBackupThreshold.TabIndex = 5
'
'chkSupressBackup
'
Me.chkSupressBackup.AutoSize = True
Me.chkSupressBackup.Location = New System.Drawing.Point(6, 228)
Me.chkSupressBackup.Name = "chkSupressBackup"
Me.chkSupressBackup.Size = New System.Drawing.Size(217, 17)
Me.chkSupressBackup.TabIndex = 4
Me.chkSupressBackup.Text = "Backup only when session time exceeds"
Me.chkSupressBackup.UseVisualStyleBackColor = True
'
'chkBackupConfirm
'
Me.chkBackupConfirm.AutoSize = True
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 180)
Me.chkBackupConfirm.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 2
Me.chkBackupConfirm.Text = "Disable backup confirmation"
Me.chkBackupConfirm.UseVisualStyleBackColor = True
' '
'chkOverwriteWarning 'chkOverwriteWarning
' '
Me.chkOverwriteWarning.AutoSize = True Me.chkOverwriteWarning.AutoSize = True
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 65) Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 204)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning" Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17) Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 2 Me.chkOverwriteWarning.TabIndex = 3
Me.chkOverwriteWarning.Text = "Show overwrite warning" Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True Me.chkOverwriteWarning.UseVisualStyleBackColor = True
' '
'chkCreateFolder 'grpBackupHandling
' '
Me.chkCreateFolder.AutoSize = True Me.grpBackupHandling.Controls.Add(Me.chkAutoRestore)
Me.chkCreateFolder.Location = New System.Drawing.Point(6, 42) Me.grpBackupHandling.Controls.Add(Me.chkRestoreNotify)
Me.chkCreateFolder.Name = "chkCreateFolder" Me.grpBackupHandling.Controls.Add(Me.chkAutoMark)
Me.chkCreateFolder.Size = New System.Drawing.Size(211, 17) Me.grpBackupHandling.Location = New System.Drawing.Point(6, 88)
Me.chkCreateFolder.TabIndex = 1 Me.grpBackupHandling.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkCreateFolder.Text = "Create a sub-folder for each application" Me.grpBackupHandling.Name = "grpBackupHandling"
Me.chkCreateFolder.UseVisualStyleBackColor = True Me.grpBackupHandling.Padding = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.grpBackupHandling.Size = New System.Drawing.Size(354, 87)
Me.grpBackupHandling.TabIndex = 1
Me.grpBackupHandling.TabStop = False
Me.grpBackupHandling.Text = "Backup Handling"
'
'chkAutoRestore
'
Me.chkAutoRestore.AutoSize = True
Me.chkAutoRestore.Location = New System.Drawing.Point(8, 41)
Me.chkAutoRestore.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkAutoRestore.Name = "chkAutoRestore"
Me.chkAutoRestore.Size = New System.Drawing.Size(190, 17)
Me.chkAutoRestore.TabIndex = 1
Me.chkAutoRestore.Text = "Automatically restore new backups"
Me.chkAutoRestore.UseVisualStyleBackColor = True
'
'chkRestoreNotify
'
Me.chkRestoreNotify.AutoSize = True
Me.chkRestoreNotify.Location = New System.Drawing.Point(8, 19)
Me.chkRestoreNotify.Margin = New System.Windows.Forms.Padding(2, 2, 2, 2)
Me.chkRestoreNotify.Name = "chkRestoreNotify"
Me.chkRestoreNotify.Size = New System.Drawing.Size(216, 17)
Me.chkRestoreNotify.TabIndex = 0
Me.chkRestoreNotify.Text = "Display notifications about new backups"
Me.chkRestoreNotify.UseVisualStyleBackColor = True
'
'chkAutoMark
'
Me.chkAutoMark.AutoSize = True
Me.chkAutoMark.Location = New System.Drawing.Point(8, 63)
Me.chkAutoMark.Name = "chkAutoMark"
Me.chkAutoMark.Size = New System.Drawing.Size(321, 17)
Me.chkAutoMark.TabIndex = 2
Me.chkAutoMark.Text = "Automatically mark new backups as restored when appropriate"
Me.chkAutoMark.UseVisualStyleBackColor = True
'
'pnl7z
'
Me.pnl7z.Controls.Add(Me.grp7zAdvanced)
Me.pnl7z.Controls.Add(Me.grp7zInformation)
Me.pnl7z.Controls.Add(Me.grp7zGeneral)
Me.pnl7z.Location = New System.Drawing.Point(180, 0)
Me.pnl7z.Name = "pnl7z"
Me.pnl7z.Size = New System.Drawing.Size(367, 314)
Me.pnl7z.TabIndex = 2
'
'grp7zAdvanced
'
Me.grp7zAdvanced.Controls.Add(Me.btn7zLocation)
Me.grp7zAdvanced.Controls.Add(Me.lblArguments)
Me.grp7zAdvanced.Controls.Add(Me.txt7zLocation)
Me.grp7zAdvanced.Controls.Add(Me.txt7zArguments)
Me.grp7zAdvanced.Controls.Add(Me.lblLocation)
Me.grp7zAdvanced.Location = New System.Drawing.Point(6, 68)
Me.grp7zAdvanced.Name = "grp7zAdvanced"
Me.grp7zAdvanced.Size = New System.Drawing.Size(354, 73)
Me.grp7zAdvanced.TabIndex = 1
Me.grp7zAdvanced.TabStop = False
Me.grp7zAdvanced.Text = "Advanced"
'
'grp7zInformation
'
Me.grp7zInformation.Controls.Add(Me.lbl7zProduct)
Me.grp7zInformation.Controls.Add(Me.lbl7zCopyright)
Me.grp7zInformation.Location = New System.Drawing.Point(6, 146)
Me.grp7zInformation.Name = "grp7zInformation"
Me.grp7zInformation.Size = New System.Drawing.Size(354, 63)
Me.grp7zInformation.TabIndex = 2
Me.grp7zInformation.TabStop = False
Me.grp7zInformation.Text = "Utility Information"
'
'pnlGeneral
'
Me.pnlGeneral.Controls.Add(Me.chkAutoSaveLog)
Me.pnlGeneral.Controls.Add(Me.grpGameData)
Me.pnlGeneral.Controls.Add(Me.chkShowDetectionTips)
Me.pnlGeneral.Controls.Add(Me.grpStartup)
Me.pnlGeneral.Location = New System.Drawing.Point(180, 0)
Me.pnlGeneral.Name = "pnlGeneral"
Me.pnlGeneral.Size = New System.Drawing.Size(367, 314)
Me.pnlGeneral.TabIndex = 1
'
'grpGameData
'
Me.grpGameData.Controls.Add(Me.chkTimeTracking)
Me.grpGameData.Controls.Add(Me.chkSync)
Me.grpGameData.Controls.Add(Me.btnOptionalFields)
Me.grpGameData.Location = New System.Drawing.Point(6, 106)
Me.grpGameData.Name = "grpGameData"
Me.grpGameData.Size = New System.Drawing.Size(354, 69)
Me.grpGameData.TabIndex = 1
Me.grpGameData.TabStop = False
Me.grpGameData.Text = "Game Data"
'
'lstSettings
'
Me.lstSettings.FormattingEnabled = True
Me.lstSettings.Location = New System.Drawing.Point(12, 12)
Me.lstSettings.Name = "lstSettings"
Me.lstSettings.Size = New System.Drawing.Size(162, 303)
Me.lstSettings.TabIndex = 0
' '
'frmSettings 'frmSettings
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(384, 412) Me.ClientSize = New System.Drawing.Size(554, 361)
Me.Controls.Add(Me.grpBackup) Me.Controls.Add(Me.pnlGeneral)
Me.Controls.Add(Me.pnlBackup)
Me.Controls.Add(Me.pnl7z)
Me.Controls.Add(Me.lstSettings)
Me.Controls.Add(Me.btnDefaults)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave) Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpPaths)
Me.Controls.Add(Me.grpGeneral)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MinimizeBox = False Me.MinimizeBox = False
Me.Name = "frmSettings" Me.Name = "frmSettings"
Me.ShowIcon = False Me.ShowIcon = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Settings" Me.Text = "Settings"
Me.grpGeneral.ResumeLayout(False) Me.grpStartup.ResumeLayout(False)
Me.grpGeneral.PerformLayout() Me.grpStartup.PerformLayout()
Me.grpPaths.ResumeLayout(False) Me.grpFolderOptions.ResumeLayout(False)
Me.grpPaths.PerformLayout() Me.grpFolderOptions.PerformLayout()
Me.grpBackup.ResumeLayout(False) Me.grp7zGeneral.ResumeLayout(False)
Me.grpBackup.PerformLayout() Me.grp7zGeneral.PerformLayout()
Me.pnlBackup.ResumeLayout(False)
Me.pnlBackup.PerformLayout()
CType(Me.nudSupressBackupThreshold, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpBackupHandling.ResumeLayout(False)
Me.grpBackupHandling.PerformLayout()
Me.pnl7z.ResumeLayout(False)
Me.grp7zAdvanced.ResumeLayout(False)
Me.grp7zAdvanced.PerformLayout()
Me.grp7zInformation.ResumeLayout(False)
Me.pnlGeneral.ResumeLayout(False)
Me.pnlGeneral.PerformLayout()
Me.grpGameData.ResumeLayout(False)
Me.grpGameData.PerformLayout()
Me.ResumeLayout(False) Me.ResumeLayout(False)
End Sub End Sub
Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox
Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox Friend WithEvents grpStartup As System.Windows.Forms.GroupBox
Friend WithEvents grpGeneral As System.Windows.Forms.GroupBox Friend WithEvents grpFolderOptions As System.Windows.Forms.GroupBox
Friend WithEvents grpPaths As System.Windows.Forms.GroupBox
Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox
Friend WithEvents fbBrowser As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents btnSave As System.Windows.Forms.Button Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents btnCancel As System.Windows.Forms.Button Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lblBackupFolder As System.Windows.Forms.Label Friend WithEvents lblBackupFolder As System.Windows.Forms.Label
Friend WithEvents btnBackupFolder As System.Windows.Forms.Button Friend WithEvents btnBackupFolder As System.Windows.Forms.Button
Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox
Friend WithEvents chkStartToTray As System.Windows.Forms.CheckBox Friend WithEvents chkStartToTray As System.Windows.Forms.CheckBox
Friend WithEvents grpBackup As System.Windows.Forms.GroupBox
Friend WithEvents chkOverwriteWarning As System.Windows.Forms.CheckBox
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents chkRestoreOnLaunch As System.Windows.Forms.CheckBox
Friend WithEvents chkSync As System.Windows.Forms.CheckBox Friend WithEvents chkSync As System.Windows.Forms.CheckBox
Friend WithEvents chkCheckSum As System.Windows.Forms.CheckBox
Friend WithEvents chkStartWindows 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
Friend WithEvents lblCompression As Label
Friend WithEvents lbl7zProduct As Label
Friend WithEvents lbl7zCopyright As Label
Friend WithEvents btn7zLocation As Button
Friend WithEvents txt7zLocation As TextBox
Friend WithEvents lblLocation As Label
Friend WithEvents txt7zArguments As TextBox
Friend WithEvents lblArguments As Label
Friend WithEvents btnDefaults As Button
Friend WithEvents btnOptionalFields As Button
Friend WithEvents chkAutoSaveLog As CheckBox
Friend WithEvents pnlBackup As Panel
Friend WithEvents pnl7z As Panel
Friend WithEvents pnlGeneral As Panel
Friend WithEvents grpGameData As GroupBox
Friend WithEvents lstSettings As ListBox
Friend WithEvents grp7zAdvanced As GroupBox
Friend WithEvents grp7zInformation As GroupBox
Friend WithEvents lblMinutes As Label
Friend WithEvents nudSupressBackupThreshold As NumericUpDown
Friend WithEvents chkSupressBackup As CheckBox
Friend WithEvents chkBackupConfirm As CheckBox
Friend WithEvents chkOverwriteWarning As CheckBox
Friend WithEvents grpBackupHandling As GroupBox
Friend WithEvents chkAutoMark As CheckBox
Friend WithEvents chkAutoRestore As CheckBox
Friend WithEvents chkRestoreNotify As CheckBox
End Class End Class
-3
View File
@@ -117,9 +117,6 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="fbBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>32</value> <value>32</value>
</metadata> </metadata>
+274 -34
View File
@@ -1,7 +1,10 @@
Public Class frmSettings Imports GBM.My.Resources
Imports System.IO
Public Class frmSettings
Dim bShutdown As Boolean = False Dim bShutdown As Boolean = False
Dim bBackupLocationChanged As Boolean = False Dim bSyncSettingsChanged As Boolean = False
Dim bCheckSumDisabled As Boolean = False Dim eCurrentSyncFields As clsGame.eOptionalSyncFields
Private oSettings As mgrSettings Private oSettings As mgrSettings
Property Settings As mgrSettings Property Settings As mgrSettings
@@ -13,15 +16,6 @@
End Set End Set
End Property End Property
Private Property BackupLocationChanged As Boolean
Get
Return bBackupLocationChanged
End Get
Set(value As Boolean)
bBackupLocationChanged = value
End Set
End Property
Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean) Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
Dim oKey As Microsoft.Win32.RegistryKey Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName Dim sAppName As String = Application.ProductName
@@ -49,59 +43,277 @@
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked oSettings.StartToTray = chkStartToTray.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.AutoSaveLog = chkAutoSaveLog.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
oSettings.RestoreOnLaunch = chkRestoreOnLaunch.Checked oSettings.RestoreOnLaunch = chkRestoreNotify.Checked
oSettings.AutoRestore = chkAutoRestore.Checked
oSettings.AutoMark = chkAutoMark.Checked
oSettings.TimeTracking = chkTimeTracking.Checked
oSettings.SupressBackup = chkSupressBackup.Checked
oSettings.SupressBackupThreshold = nudSupressBackupThreshold.Value
oSettings.CompressionLevel = cboCompression.SelectedValue
'We need to clear all checksums its turned off If oSettings.Custom7zArguments <> txt7zArguments.Text.Trim And txt7zArguments.Text.Trim <> String.Empty Then
If chkCheckSum.Checked = False And oSettings.CheckSum = True Then mgrCommon.ShowMessage(frmSettings_WarningArguments, MsgBoxStyle.Exclamation)
bCheckSumDisabled = True
End If End If
oSettings.CheckSum = chkCheckSum.Checked
oSettings.Custom7zArguments = txt7zArguments.Text.Trim
oSettings.Custom7zLocation = txt7zLocation.Text.Trim
'Turning syncing from off to on is the same as changing the backup folder 'Turning syncing from off to on is the same as changing the backup folder
If chkSync.Checked = True And oSettings.Sync = False Then If chkSync.Checked = True And oSettings.Sync = False Then
bBackupLocationChanged = True bSyncSettingsChanged = True
End If End If
oSettings.Sync = chkSync.Checked oSettings.Sync = chkSync.Checked
If IO.Directory.Exists(txtBackupFolder.Text) Then If Directory.Exists(txtBackupFolder.Text) Then
If oSettings.BackupFolder <> txtBackupFolder.Text Then If oSettings.BackupFolder <> txtBackupFolder.Text Then
If chkSync.Checked Then bBackupLocationChanged = True If chkSync.Checked Then bSyncSettingsChanged = True
End If End If
oSettings.BackupFolder = txtBackupFolder.Text oSettings.BackupFolder = txtBackupFolder.Text
Else Else
MsgBox("The backup folder does not exist. Please choose a valid backup folder.", MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(frmSettings_ErrorBackupFolder, MsgBoxStyle.Exclamation)
Return False Return False
End If End If
If oSettings.Custom7zLocation <> String.Empty Then
If File.Exists(oSettings.Custom7zLocation) Then
If Path.GetFileNameWithoutExtension(oSettings.Custom7zLocation) <> "7za" Then
mgrCommon.ShowMessage(frmSettings_WarningLocation, MsgBoxStyle.Critical)
End If
Else
mgrCommon.ShowMessage(frmSettings_ErrorLocation, oSettings.Custom7zLocation, MsgBoxStyle.Critical)
Return False
End If
End If
'We must trigger a sync if optional fields have changed
If Settings.Sync And (eCurrentSyncFields <> Settings.SyncFields) Then
bSyncSettingsChanged = True
End If
Return True Return True
End Function End Function
Private Function SaveSettings() As Boolean Private Function SaveSettings() As Boolean
If ValidateSettings() Then If ValidateSettings() Then
oSettings.SaveSettings() oSettings.SaveSettings()
If BackupLocationChanged Then mgrMonitorList.HandleBackupLocationChange() If bSyncSettingsChanged Then mgrMonitorList.HandleBackupLocationChange(Settings)
If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe()
Return True Return True
Else Else
Return False Return False
End If End If
End Function End Function
Private Sub GetUtilityInfo(ByVal sLocation As String)
Dim bDefault As Boolean = False
Dim sFileDescription As String
Dim sVersion As String
Dim sCopyright As String
'Ignore this function when on Unix and hide the information data
If mgrCommon.IsUnix Then
grp7zInformation.Visible = False
Else
Try
grp7zInformation.Visible = True
'Use default when no custom location is set
If sLocation = String.Empty Then
sLocation = mgrPath.Default7zLocation
bDefault = True
End If
'Get info
Dim oFileInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(sLocation)
If oFileInfo.FileDescription = String.Empty Then
sFileDescription = App_NotAvailable
Else
sFileDescription = oFileInfo.FileDescription
End If
If oFileInfo.ProductVersion = String.Empty Then
sVersion = App_NotAvailable
Else
sVersion = oFileInfo.ProductVersion
End If
If oFileInfo.LegalCopyright = String.Empty Then
sCopyright = App_NotAvailable
Else
sCopyright = oFileInfo.LegalCopyright
End If
lbl7zProduct.Text = sFileDescription & " - " & sVersion
lbl7zCopyright.Text = sCopyright
Catch ex As Exception
grp7zInformation.Visible = False
End Try
End If
End Sub
Private Sub SetDefaults()
If mgrCommon.ShowMessage(frmSettings_ConfirmDefaults, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
oSettings = New mgrSettings
LoadSettings()
End If
End Sub
Private Sub LoadSettings() Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows chkStartWindows.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray chkStartToTray.Checked = oSettings.StartToTray
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkAutoSaveLog.Checked = oSettings.AutoSaveLog
chkBackupConfirm.Checked = oSettings.DisableConfirmation chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkCreateFolder.Checked = oSettings.CreateSubFolder chkCreateFolder.Checked = oSettings.CreateSubFolder
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
chkRestoreOnLaunch.Checked = oSettings.RestoreOnLaunch chkRestoreNotify.Checked = oSettings.RestoreOnLaunch
chkAutoRestore.Checked = oSettings.AutoRestore
chkAutoMark.Checked = oSettings.AutoMark
txtBackupFolder.Text = oSettings.BackupFolder txtBackupFolder.Text = oSettings.BackupFolder
chkSync.Checked = oSettings.Sync chkSync.Checked = oSettings.Sync
chkCheckSum.Checked = oSettings.CheckSum chkTimeTracking.Checked = oSettings.TimeTracking
chkSupressBackup.Checked = oSettings.SupressBackup
nudSupressBackupThreshold.Value = oSettings.SupressBackupThreshold
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
cboCompression.SelectedValue = oSettings.CompressionLevel
txt7zArguments.Text = oSettings.Custom7zArguments
txt7zLocation.Text = oSettings.Custom7zLocation
eCurrentSyncFields = oSettings.SyncFields
'Unix Handler
If mgrCommon.IsUnix Then
chkStartToTray.Checked = False
chkStartWindows.Checked = False
End If
'Retrieve 7z Info
GetUtilityInfo(oSettings.Custom7zLocation)
'Toggle Sync Button
ToggleSyncButton()
End Sub
Private Sub LoadCombos()
Dim oComboItems As New List(Of KeyValuePair(Of Integer, String))
Dim oSettingsItems As New List(Of KeyValuePair(Of Integer, String))
'cboCompression
cboCompression.ValueMember = "Key"
cboCompression.DisplayMember = "Value"
oComboItems.Add(New KeyValuePair(Of Integer, String)(0, frmSettings_cboCompression_None))
oComboItems.Add(New KeyValuePair(Of Integer, String)(1, frmSettings_cboCompression_Fastest))
oComboItems.Add(New KeyValuePair(Of Integer, String)(3, frmSettings_cboCompression_Fast))
oComboItems.Add(New KeyValuePair(Of Integer, String)(5, frmSettings_cboCompression_Normal))
oComboItems.Add(New KeyValuePair(Of Integer, String)(7, frmSettings_cboCompression_Maximum))
oComboItems.Add(New KeyValuePair(Of Integer, String)(9, frmSettings_cboCompression_Ultra))
cboCompression.DataSource = oComboItems
'lstSettings
lstSettings.ValueMember = "Key"
lstSettings.DisplayMember = "Value"
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(0, frmSettings_lstSettings_General))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(1, frmSettings_lstSettings_BackupRestore))
oSettingsItems.Add(New KeyValuePair(Of Integer, String)(2, frmSettings_lstSettings_7z))
lstSettings.DataSource = oSettingsItems
'Select Default
lstSettings.SelectedIndex = 0
End Sub
Private Sub ToggleSyncButton()
If chkSync.Checked Then
btnOptionalFields.Enabled = True
Else
btnOptionalFields.Enabled = False
End If
End Sub
Private Sub OpenOptionalFields()
Dim frm As New frmSyncFields
frm.SyncFields = Settings.SyncFields
frm.ShowDialog()
If frm.DialogResult = DialogResult.OK Then
Settings.SyncFields = frm.SyncFields
End If
End Sub
Private Sub ChangePanel()
If lstSettings.SelectedItems.Count > 0 Then
Dim oSettingsItem As KeyValuePair(Of Integer, String) = lstSettings.SelectedItems(0)
Select Case oSettingsItem.Key
Case 0
pnlGeneral.Visible = True
pnlBackup.Visible = False
pnl7z.Visible = False
Case 1
pnlGeneral.Visible = False
pnlBackup.Visible = True
pnl7z.Visible = False
Case 2
pnlGeneral.Visible = False
pnlBackup.Visible = False
pnl7z.Visible = True
End Select
End If
End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = frmSettings_FormName
'Set Form Text
lblMinutes.Text = frmSettings_lblMinutes
chkSupressBackup.Text = frmSettings_chkSupressBackup
grpBackupHandling.Text = frmSettings_grpBackupHandling
chkRestoreNotify.Text = frmSettings_chkRestoreNotify
chkAutoRestore.Text = frmSettings_chkAutoRestore
chkAutoMark.Text = frmSettings_chkAutoMark
chkOverwriteWarning.Text = frmSettings_chkOverwriteWarning
chkCreateFolder.Text = frmSettings_chkCreateFolder
chkBackupConfirm.Text = frmSettings_chkBackupConfirm
btnCancel.Text = frmSettings_btnCancel
btnSave.Text = frmSettings_btnSave
grpFolderOptions.Text = frmSettings_grpFolderOptions
btnBackupFolder.Text = frmSettings_btnBackupFolder
lblBackupFolder.Text = frmSettings_lblBackupFolder
grpStartup.Text = frmSettings_grpStartup
grpGameData.Text = frmSettings_grpGameData
chkTimeTracking.Text = frmSettings_chkTimeTracking
chkStartWindows.Text = frmSettings_chkStartWindows
chkSync.Text = frmSettings_chkSync
chkShowDetectionTips.Text = frmSettings_chkShowDetectionTips
chkAutoSaveLog.Text = frmSettings_chkAutoSaveLog
chkStartToTray.Text = frmSettings_chkStartToTray
chkMonitorOnStartup.Text = frmSettings_chkMonitorOnStartup
grp7zGeneral.Text = frmSettings_grp7zGeneral
grp7zAdvanced.Text = frmSettings_grp7zAdvanced
grp7zInformation.Text = frmSettings_grp7zInformation
lblCompression.Text = frmSettings_lblCompression
btnDefaults.Text = frmSettings_btnDefaults
lblArguments.Text = frmSettings_lblArguments
lblLocation.Text = frmSettings_lblLocation
btnOptionalFields.Text = frmSettings_btnOptionalFields
'Unix Handler
If mgrCommon.IsUnix Then
chkStartToTray.Enabled = False
chkStartWindows.Enabled = False
End If
'Handle Panels
pnlGeneral.Visible = False
pnlBackup.Visible = False
pnl7z.Visible = False
End Sub End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
@@ -116,21 +328,49 @@
Me.Close() Me.Close()
End Sub End Sub
Private Sub frmSettings_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If bShutdown = False Then
e.Cancel = True
End If
End Sub
Private Sub frmSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Private Sub frmSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SetForm()
LoadCombos()
LoadSettings() LoadSettings()
End Sub End Sub
Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click
fbBrowser.SelectedPath = oSettings.BackupFolder Dim sNewFolder As String
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then sNewFolder = mgrCommon.OpenFolderBrowser(frmSettings_BrowseFolder, oSettings.BackupFolder, True)
txtBackupFolder.Text = fbBrowser.SelectedPath If sNewFolder <> String.Empty Then txtBackupFolder.Text = sNewFolder
End Sub
Private Sub btn7zLocation_Click(sender As Object, e As EventArgs) Handles btn7zLocation.Click
Dim sNewLocation As String
sNewLocation = mgrCommon.OpenFileBrowser(frmSettings_Browse7za, "exe", frmSettings_7zaFileType, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), False)
If sNewLocation <> String.Empty Then
txt7zLocation.Text = sNewLocation
GetUtilityInfo(txt7zLocation.Text)
End If End If
End Sub End Sub
Private Sub chkSupressBackup_CheckedChanged(sender As Object, e As EventArgs) Handles chkSupressBackup.CheckedChanged
nudSupressBackupThreshold.Enabled = chkSupressBackup.Checked
End Sub
Private Sub txt7zLocation_Leave(sender As Object, e As EventArgs) Handles txt7zLocation.Leave
GetUtilityInfo(txt7zLocation.Text.Trim)
End Sub
Private Sub btnDefaults_Click(sender As Object, e As EventArgs) Handles btnDefaults.Click
SetDefaults()
End Sub
Private Sub btnOptionalFields_Click(sender As Object, e As EventArgs) Handles btnOptionalFields.Click
OpenOptionalFields()
End Sub
Private Sub chkSync_CheckedChanged(sender As Object, e As EventArgs) Handles chkSync.CheckedChanged
ToggleSyncButton()
End Sub
Private Sub lstSettings_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstSettings.SelectedValueChanged
ChangePanel()
End Sub
End Class End Class
+47 -57
View File
@@ -25,11 +25,10 @@ Partial Class frmStartUpWizard
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStartUpWizard)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStartUpWizard))
Me.tabWizard = New System.Windows.Forms.TabControl() Me.tabWizard = New System.Windows.Forms.TabControl()
Me.tbPage1 = New System.Windows.Forms.TabPage() Me.tbPage1 = New System.Windows.Forms.TabPage()
Me.lblStep1Instructions3 = New System.Windows.Forms.Label()
Me.lblStep1Instructions2 = New System.Windows.Forms.Label() Me.lblStep1Instructions2 = New System.Windows.Forms.Label()
Me.llbManual = New System.Windows.Forms.LinkLabel()
Me.lblStep1Title = New System.Windows.Forms.Label() Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label() Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.lblStep1Intro = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage() Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.chkSync = New System.Windows.Forms.CheckBox() Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox() Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
@@ -74,11 +73,10 @@ Partial Class frmStartUpWizard
'tbPage1 'tbPage1
' '
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
Me.tbPage1.Controls.Add(Me.lblStep1Instructions3)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions2) Me.tbPage1.Controls.Add(Me.lblStep1Instructions2)
Me.tbPage1.Controls.Add(Me.llbManual)
Me.tbPage1.Controls.Add(Me.lblStep1Title) Me.tbPage1.Controls.Add(Me.lblStep1Title)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions) Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
Me.tbPage1.Controls.Add(Me.lblStep1Intro)
Me.tbPage1.Location = New System.Drawing.Point(4, 22) Me.tbPage1.Location = New System.Drawing.Point(4, 22)
Me.tbPage1.Name = "tbPage1" Me.tbPage1.Name = "tbPage1"
Me.tbPage1.Padding = New System.Windows.Forms.Padding(3) Me.tbPage1.Padding = New System.Windows.Forms.Padding(3)
@@ -86,24 +84,25 @@ Partial Class frmStartUpWizard
Me.tbPage1.TabIndex = 0 Me.tbPage1.TabIndex = 0
Me.tbPage1.Text = "TabPage1" Me.tbPage1.Text = "TabPage1"
' '
'lblStep1Instructions3
'
Me.lblStep1Instructions3.AutoSize = True
Me.lblStep1Instructions3.Location = New System.Drawing.Point(14, 160)
Me.lblStep1Instructions3.Name = "lblStep1Instructions3"
Me.lblStep1Instructions3.Size = New System.Drawing.Size(310, 13)
Me.lblStep1Instructions3.TabIndex = 10
Me.lblStep1Instructions3.Text = "GBM was designed and tested using the Dropbox cloud service."
'
'lblStep1Instructions2 'lblStep1Instructions2
' '
Me.lblStep1Instructions2.Location = New System.Drawing.Point(14, 106) Me.lblStep1Instructions2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!)
Me.lblStep1Instructions2.Location = New System.Drawing.Point(14, 91)
Me.lblStep1Instructions2.Name = "lblStep1Instructions2" Me.lblStep1Instructions2.Name = "lblStep1Instructions2"
Me.lblStep1Instructions2.Size = New System.Drawing.Size(303, 42) Me.lblStep1Instructions2.Size = New System.Drawing.Size(303, 53)
Me.lblStep1Instructions2.TabIndex = 9 Me.lblStep1Instructions2.TabIndex = 2
Me.lblStep1Instructions2.Text = "Before proceeding you may want to sign up for a cloud service and install their c" & _ Me.lblStep1Instructions2.Text = "If you'd like to learn about advanced features or have any other questions before" & _
"lient software. GBM works best when paired with a cloud service and client but " & _ " you get started, there is a detailed online manual available."
"is not required!" '
'llbManual
'
Me.llbManual.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!)
Me.llbManual.Location = New System.Drawing.Point(14, 158)
Me.llbManual.Name = "llbManual"
Me.llbManual.Size = New System.Drawing.Size(303, 13)
Me.llbManual.TabIndex = 3
Me.llbManual.TabStop = True
Me.llbManual.Text = "Game Backup Monitor Manual"
' '
'lblStep1Title 'lblStep1Title
' '
@@ -112,25 +111,17 @@ Partial Class frmStartUpWizard
Me.lblStep1Title.Location = New System.Drawing.Point(13, 11) Me.lblStep1Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep1Title.Name = "lblStep1Title" Me.lblStep1Title.Name = "lblStep1Title"
Me.lblStep1Title.Size = New System.Drawing.Size(148, 20) Me.lblStep1Title.Size = New System.Drawing.Size(148, 20)
Me.lblStep1Title.TabIndex = 8 Me.lblStep1Title.TabIndex = 0
Me.lblStep1Title.Text = "Welcome to GBM" Me.lblStep1Title.Text = "Welcome to GBM"
' '
'lblStep1Instructions 'lblStep1Instructions
' '
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 64) Me.lblStep1Instructions.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!)
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 41)
Me.lblStep1Instructions.Name = "lblStep1Instructions" Me.lblStep1Instructions.Name = "lblStep1Instructions"
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 42) Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 36)
Me.lblStep1Instructions.TabIndex = 6 Me.lblStep1Instructions.TabIndex = 1
Me.lblStep1Instructions.Text = "This wizard will guide you through some easy setup steps to get started." Me.lblStep1Instructions.Text = "This guide will help you through some quick and easy steps to get started."
'
'lblStep1Intro
'
Me.lblStep1Intro.AutoSize = True
Me.lblStep1Intro.Location = New System.Drawing.Point(14, 41)
Me.lblStep1Intro.Name = "lblStep1Intro"
Me.lblStep1Intro.Size = New System.Drawing.Size(213, 13)
Me.lblStep1Intro.TabIndex = 5
Me.lblStep1Intro.Text = "Thank you for trying Game Backup Monitor!"
' '
'tbPage2 'tbPage2
' '
@@ -154,9 +145,9 @@ Partial Class frmStartUpWizard
Me.chkSync.AutoSize = True Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(17, 105) Me.chkSync.Location = New System.Drawing.Point(17, 105)
Me.chkSync.Name = "chkSync" Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(258, 17) Me.chkSync.Size = New System.Drawing.Size(261, 17)
Me.chkSync.TabIndex = 13 Me.chkSync.TabIndex = 5
Me.chkSync.Text = "Sync with existing GBM data in the backup folder" Me.chkSync.Text = "Import any existing GBM data in the backup folder"
Me.chkSync.UseVisualStyleBackColor = True Me.chkSync.UseVisualStyleBackColor = True
' '
'chkCreateFolder 'chkCreateFolder
@@ -164,9 +155,9 @@ Partial Class frmStartUpWizard
Me.chkCreateFolder.AutoSize = True Me.chkCreateFolder.AutoSize = True
Me.chkCreateFolder.Location = New System.Drawing.Point(17, 83) Me.chkCreateFolder.Location = New System.Drawing.Point(17, 83)
Me.chkCreateFolder.Name = "chkCreateFolder" Me.chkCreateFolder.Name = "chkCreateFolder"
Me.chkCreateFolder.Size = New System.Drawing.Size(211, 17) Me.chkCreateFolder.Size = New System.Drawing.Size(186, 17)
Me.chkCreateFolder.TabIndex = 12 Me.chkCreateFolder.TabIndex = 4
Me.chkCreateFolder.Text = "Create a sub-folder for each application" Me.chkCreateFolder.Text = "Create a sub-folder for each game"
Me.chkCreateFolder.UseVisualStyleBackColor = True Me.chkCreateFolder.UseVisualStyleBackColor = True
' '
'lblStep2Title 'lblStep2Title
@@ -176,23 +167,24 @@ Partial Class frmStartUpWizard
Me.lblStep2Title.Location = New System.Drawing.Point(13, 11) Me.lblStep2Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep2Title.Name = "lblStep2Title" Me.lblStep2Title.Name = "lblStep2Title"
Me.lblStep2Title.Size = New System.Drawing.Size(143, 20) Me.lblStep2Title.Size = New System.Drawing.Size(143, 20)
Me.lblStep2Title.TabIndex = 11 Me.lblStep2Title.TabIndex = 0
Me.lblStep2Title.Text = "Backup Location" Me.lblStep2Title.Text = "Backup Location"
' '
'lblStep2Instructions 'lblStep2Instructions
' '
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 125) Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 151)
Me.lblStep2Instructions.Name = "lblStep2Instructions" Me.lblStep2Instructions.Name = "lblStep2Instructions"
Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 57) Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 31)
Me.lblStep2Instructions.TabIndex = 10 Me.lblStep2Instructions.TabIndex = 6
Me.lblStep2Instructions.Text = resources.GetString("lblStep2Instructions.Text") Me.lblStep2Instructions.Text = "GBM will store all your backup files along with a manifest database (gbm.s3db) in" & _
" this location. "
' '
'btnFolderBrowse 'btnFolderBrowse
' '
Me.btnFolderBrowse.Location = New System.Drawing.Point(322, 56) Me.btnFolderBrowse.Location = New System.Drawing.Point(322, 56)
Me.btnFolderBrowse.Name = "btnFolderBrowse" Me.btnFolderBrowse.Name = "btnFolderBrowse"
Me.btnFolderBrowse.Size = New System.Drawing.Size(27, 20) Me.btnFolderBrowse.Size = New System.Drawing.Size(27, 20)
Me.btnFolderBrowse.TabIndex = 8 Me.btnFolderBrowse.TabIndex = 3
Me.btnFolderBrowse.Text = "..." Me.btnFolderBrowse.Text = "..."
Me.btnFolderBrowse.UseVisualStyleBackColor = True Me.btnFolderBrowse.UseVisualStyleBackColor = True
' '
@@ -202,7 +194,7 @@ Partial Class frmStartUpWizard
Me.txtBackupPath.Location = New System.Drawing.Point(17, 57) Me.txtBackupPath.Location = New System.Drawing.Point(17, 57)
Me.txtBackupPath.Name = "txtBackupPath" Me.txtBackupPath.Name = "txtBackupPath"
Me.txtBackupPath.Size = New System.Drawing.Size(300, 20) Me.txtBackupPath.Size = New System.Drawing.Size(300, 20)
Me.txtBackupPath.TabIndex = 6 Me.txtBackupPath.TabIndex = 2
' '
'lblStep2Intro 'lblStep2Intro
' '
@@ -210,7 +202,7 @@ Partial Class frmStartUpWizard
Me.lblStep2Intro.Location = New System.Drawing.Point(14, 41) Me.lblStep2Intro.Location = New System.Drawing.Point(14, 41)
Me.lblStep2Intro.Name = "lblStep2Intro" Me.lblStep2Intro.Name = "lblStep2Intro"
Me.lblStep2Intro.Size = New System.Drawing.Size(219, 13) Me.lblStep2Intro.Size = New System.Drawing.Size(219, 13)
Me.lblStep2Intro.TabIndex = 7 Me.lblStep2Intro.TabIndex = 1
Me.lblStep2Intro.Text = "Choose where GBM saves your backup files:" Me.lblStep2Intro.Text = "Choose where GBM saves your backup files:"
' '
'tbPage3 'tbPage3
@@ -291,8 +283,8 @@ Partial Class frmStartUpWizard
Me.lblStep4Instructions3.Name = "lblStep4Instructions3" Me.lblStep4Instructions3.Name = "lblStep4Instructions3"
Me.lblStep4Instructions3.Size = New System.Drawing.Size(303, 33) Me.lblStep4Instructions3.Size = New System.Drawing.Size(303, 33)
Me.lblStep4Instructions3.TabIndex = 18 Me.lblStep4Instructions3.TabIndex = 18
Me.lblStep4Instructions3.Text = "To change anything you've setup in this wizard and see more settings and features" & _ Me.lblStep4Instructions3.Text = "You can change anything you've setup in this wizard and find more settings and fe" & _
", explore the menus in the application," "atures by exploring the menus. Thanks!"
' '
'lblStep4Instructions2 'lblStep4Instructions2
' '
@@ -318,15 +310,14 @@ Partial Class frmStartUpWizard
Me.lblStep4Instructions.Name = "lblStep4Instructions" Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 31) Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 31)
Me.lblStep4Instructions.TabIndex = 12 Me.lblStep4Instructions.TabIndex = 12
Me.lblStep4Instructions.Text = "That's all there is to it! GBM will automatically monitor and backup your applic" & _ Me.lblStep4Instructions.Text = "GBM will automatically monitor and backup your games each time they are closed."
"ations each time they are closed."
' '
'btnNext 'btnNext
' '
Me.btnNext.Location = New System.Drawing.Point(272, 202) Me.btnNext.Location = New System.Drawing.Point(272, 202)
Me.btnNext.Name = "btnNext" Me.btnNext.Name = "btnNext"
Me.btnNext.Size = New System.Drawing.Size(75, 23) Me.btnNext.Size = New System.Drawing.Size(75, 23)
Me.btnNext.TabIndex = 11 Me.btnNext.TabIndex = 2
Me.btnNext.Text = "&Next" Me.btnNext.Text = "&Next"
Me.btnNext.UseVisualStyleBackColor = True Me.btnNext.UseVisualStyleBackColor = True
' '
@@ -335,7 +326,7 @@ Partial Class frmStartUpWizard
Me.btnBack.Location = New System.Drawing.Point(191, 202) Me.btnBack.Location = New System.Drawing.Point(191, 202)
Me.btnBack.Name = "btnBack" Me.btnBack.Name = "btnBack"
Me.btnBack.Size = New System.Drawing.Size(75, 23) Me.btnBack.Size = New System.Drawing.Size(75, 23)
Me.btnBack.TabIndex = 10 Me.btnBack.TabIndex = 1
Me.btnBack.Text = "&Back" Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True Me.btnBack.UseVisualStyleBackColor = True
' '
@@ -353,7 +344,7 @@ Partial Class frmStartUpWizard
Me.Name = "frmStartUpWizard" Me.Name = "frmStartUpWizard"
Me.ShowIcon = False Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "GBM Setup Wizard" Me.Text = "GBM Setup"
Me.tabWizard.ResumeLayout(False) Me.tabWizard.ResumeLayout(False)
Me.tbPage1.ResumeLayout(False) Me.tbPage1.ResumeLayout(False)
Me.tbPage1.PerformLayout() Me.tbPage1.PerformLayout()
@@ -374,7 +365,6 @@ Partial Class frmStartUpWizard
Friend WithEvents tbPage3 As System.Windows.Forms.TabPage Friend WithEvents tbPage3 As System.Windows.Forms.TabPage
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label
Friend WithEvents btnFolderBrowse As System.Windows.Forms.Button Friend WithEvents btnFolderBrowse As System.Windows.Forms.Button
Friend WithEvents txtBackupPath As System.Windows.Forms.TextBox Friend WithEvents txtBackupPath As System.Windows.Forms.TextBox
@@ -385,8 +375,6 @@ Partial Class frmStartUpWizard
Friend WithEvents lblStep2Title As System.Windows.Forms.Label Friend WithEvents lblStep2Title As System.Windows.Forms.Label
Friend WithEvents lblStep3Title As System.Windows.Forms.Label Friend WithEvents lblStep3Title As System.Windows.Forms.Label
Friend WithEvents lblStep4Title As System.Windows.Forms.Label Friend WithEvents lblStep4Title As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions2 As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions3 As System.Windows.Forms.Label
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents btnDownloadList As System.Windows.Forms.Button Friend WithEvents btnDownloadList As System.Windows.Forms.Button
Friend WithEvents btnOpenWizard As System.Windows.Forms.Button Friend WithEvents btnOpenWizard As System.Windows.Forms.Button
@@ -394,4 +382,6 @@ Partial Class frmStartUpWizard
Friend WithEvents lblStep4Instructions3 As System.Windows.Forms.Label Friend WithEvents lblStep4Instructions3 As System.Windows.Forms.Label
Friend WithEvents lblStep4Instructions2 As System.Windows.Forms.Label Friend WithEvents lblStep4Instructions2 As System.Windows.Forms.Label
Friend WithEvents chkSync As System.Windows.Forms.CheckBox 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 End Class
+1 -4
View File
@@ -117,10 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="lblStep2Instructions.Text" xml:space="preserve">
<value>GBM will store all your backup files in this location. It's best to use a cloud folder so your backups are automatically uploaded as soon as they are completed. GBM also stores a file called gbm.s3db in this location, this is how your backups are tracked so don't delete it!</value>
</data>
<data name="lblStep3Intro.Text" xml:space="preserve"> <data name="lblStep3Intro.Text" xml:space="preserve">
<value>Before you can start monitoring for games, they need to be configured so GBM knows what to look for and how to handle them. You can download configurations from the official pre-configured list or add them all yourself.</value> <value>Before you can start monitoring for games, they need to be configured so GBM knows what to look for and how to handle them. You can download pre-made configurations from the official list or add them all yourself using the tools below. You can also skip this step for now!</value>
</data> </data>
</root> </root>
+59 -19
View File
@@ -1,4 +1,5 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class frmStartUpWizard Public Class frmStartUpWizard
@@ -26,7 +27,34 @@ Public Class frmStartUpWizard
Private eCurrentStep As eSteps = eSteps.Step1 Private eCurrentStep As eSteps = eSteps.Step1
Private Sub FormInit() Private Sub SetForm()
'Set Form Name
Me.Text = frmStartUpWizard_FormName
'Set Form Text
btnNext.Text = frmStartUpWizard_btnNext
btnBack.Text = frmStartUpWizard_btnBack
lblStep1Instructions2.Text = frmStartUpWizard_lblStep1Instructions2
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
btnFolderBrowse.Text = frmStartUpWizard_btnFolderBrowse
lblStep2Intro.Text = frmStartUpWizard_lblStep2Intro
btnOpenWizard.Text = frmStartUpWizard_btnOpenWizard
btnOpenMonitorList.Text = frmStartUpWizard_btnOpenMonitorList
btnDownloadList.Text = frmStartUpWizard_btnDownloadList
lblStep3Title.Text = frmStartUpWizard_lblStep3Title
lblStep3Intro.Text = frmStartUpWizard_lblStep3Intro
lblStep4Instructions3.Text = frmStartUpWizard_lblStep4Instructions3
lblStep4Instructions2.Text = frmStartUpWizard_lblStep4Instructions2
lblStep4Title.Text = frmStartUpWizard_lblStep4Title
lblStep4Instructions.Text = frmStartUpWizard_lblStep4Instructions
llbManual.Links.Add(0, 26, App_URLManual)
LoadGameSettings() LoadGameSettings()
StepHandler() StepHandler()
End Sub End Sub
@@ -38,8 +66,8 @@ Public Class frmStartUpWizard
If oDatabase.CheckDB() Then If oDatabase.CheckDB() Then
'Make sure database is the latest version 'Make sure database is the latest version
oDatabase.DatabaseUpgrade() oDatabase.DatabaseUpgrade()
mgrMonitorList.SyncMonitorLists(False) mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
MsgBox("Existing data was detected in the backup folder and has been imported.", MsgBoxStyle.Information, "Game Backup Monitor") mgrCommon.ShowMessage(frmStartUpWizard_ExistingData, MsgBoxStyle.Information)
End If End If
End Sub End Sub
@@ -59,28 +87,36 @@ Public Class frmStartUpWizard
Case eSteps.Step3 Case eSteps.Step3
btnBack.Enabled = False btnBack.Enabled = False
btnNext.Enabled = True btnNext.Enabled = True
btnNext.Text = "&Next" btnNext.Text = frmStartUpWizard_btnNext
tabWizard.SelectTab(2) tabWizard.SelectTab(2)
Case eSteps.Step4 Case eSteps.Step4
btnBack.Enabled = True btnBack.Enabled = True
btnNext.Enabled = True btnNext.Enabled = True
btnNext.Text = "&Finish" btnNext.Text = frmStartUpWizard_btnNext_Finish
tabWizard.SelectTab(3) tabWizard.SelectTab(3)
End Select End Select
End Sub End Sub
Private Sub DownloadSettings() Private Sub DownloadSettings()
If MsgBox("Would you like to import from the latest pre-configured game list?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then Dim sImportURL As String
If mgrMonitorList.DoImport(mgrPath.OfficialImportURL) Then
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList) If mgrCommon.IsUnix Then
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() sImportURL = App_URLImportLinux
Else
sImportURL = App_URLImport
End If
If mgrCommon.ShowMessage(frmStartUpWizard_ConfirmOfficialImport, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(sImportURL) Then
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End If End If
End If End If
End Sub End Sub
Private Sub LoadGameSettings() Private Sub LoadGameSettings()
'Load Game XML 'Load Game XML
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList) oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.FullList)
End Sub End Sub
Private Sub OpenGameWizard() Private Sub OpenGameWizard()
@@ -88,7 +124,7 @@ Public Class frmStartUpWizard
frm.GameData = oGameData frm.GameData = oGameData
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End Sub End Sub
Private Sub OpenMonitorList() Private Sub OpenMonitorList()
@@ -97,24 +133,24 @@ Public Class frmStartUpWizard
frm.DisableExternalFunctions = True frm.DisableExternalFunctions = True
frm.ShowDialog() frm.ShowDialog()
LoadGameSettings() LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists() If oSettings.Sync Then mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End Sub End Sub
Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then If strPath = String.Empty Then
sErrorMessage = "You must select a backup path to continue." sErrorMessage = frmStartUpWizard_ErrorNoFolder
txtBackupPath.Focus() txtBackupPath.Focus()
Return False Return False
End If End If
If Not Directory.Exists(strPath) Then If Not Directory.Exists(strPath) Then
sErrorMessage = "The folder you selected does not exist or is not a valid folder." sErrorMessage = frmStartUpWizard_ErrorNoFolderExists
txtBackupPath.Focus() txtBackupPath.Focus()
Return False Return False
End If End If
If Not Path.IsPathRooted(strPath) Then If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The selected path must be a full path." sErrorMessage = frmStartUpWizard_ErrorBadFolder
txtBackupPath.Focus() txtBackupPath.Focus()
Return False Return False
End If End If
@@ -164,7 +200,7 @@ Public Class frmStartUpWizard
Me.Close() Me.Close()
End Select End Select
If bError Then MsgBox(sErrorMessage, MsgBoxStyle.Exclamation, "Game Backup Monitor") If bError Then mgrCommon.ShowMessage(sErrorMessage, MsgBoxStyle.Exclamation)
StepHandler() StepHandler()
End Sub End Sub
@@ -179,7 +215,7 @@ Public Class frmStartUpWizard
End If End If
End If End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose GBM backup folder:", sDefaultFolder, False) sNewPath = mgrCommon.OpenFolderBrowser(frmStartUpWizard_BrowseFolder, sDefaultFolder, True)
If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath
End Sub End Sub
@@ -193,7 +229,7 @@ Public Class frmStartUpWizard
End Sub End Sub
Private Sub frmStartUpWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmStartUpWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FormInit() SetForm()
End Sub End Sub
Private Sub btnFolderBrowse_Click(sender As Object, e As EventArgs) Handles btnFolderBrowse.Click Private Sub btnFolderBrowse_Click(sender As Object, e As EventArgs) Handles btnFolderBrowse.Click
@@ -217,4 +253,8 @@ Public Class frmStartUpWizard
e.Cancel = True e.Cancel = True
End If End If
End Sub End Sub
Private Sub llbManual_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles llbManual.LinkClicked
Process.Start(e.Link.LinkData.ToString)
End Sub
End Class End Class
+163
View File
@@ -0,0 +1,163 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmSyncFields
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.grpFields = New System.Windows.Forms.GroupBox()
Me.chkMonitorGame = New System.Windows.Forms.CheckBox()
Me.chkIcon = New System.Windows.Forms.CheckBox()
Me.chkVersion = New System.Windows.Forms.CheckBox()
Me.chkCompany = New System.Windows.Forms.CheckBox()
Me.chkGamePath = New System.Windows.Forms.CheckBox()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
Me.grpFields.SuspendLayout()
Me.SuspendLayout()
'
'grpFields
'
Me.grpFields.Controls.Add(Me.chkMonitorGame)
Me.grpFields.Controls.Add(Me.chkIcon)
Me.grpFields.Controls.Add(Me.chkVersion)
Me.grpFields.Controls.Add(Me.chkCompany)
Me.grpFields.Controls.Add(Me.chkGamePath)
Me.grpFields.Controls.Add(Me.chkTimeStamp)
Me.grpFields.Location = New System.Drawing.Point(12, 12)
Me.grpFields.Name = "grpFields"
Me.grpFields.Size = New System.Drawing.Size(195, 162)
Me.grpFields.TabIndex = 0
Me.grpFields.TabStop = False
Me.grpFields.Text = "Available Fields"
'
'chkMonitorGame
'
Me.chkMonitorGame.AutoSize = True
Me.chkMonitorGame.Location = New System.Drawing.Point(6, 134)
Me.chkMonitorGame.Name = "chkMonitorGame"
Me.chkMonitorGame.Size = New System.Drawing.Size(109, 17)
Me.chkMonitorGame.TabIndex = 5
Me.chkMonitorGame.Text = "Monitor this game"
Me.chkMonitorGame.UseVisualStyleBackColor = True
'
'chkIcon
'
Me.chkIcon.AutoSize = True
Me.chkIcon.Location = New System.Drawing.Point(6, 111)
Me.chkIcon.Name = "chkIcon"
Me.chkIcon.Size = New System.Drawing.Size(148, 17)
Me.chkIcon.TabIndex = 4
Me.chkIcon.Text = "Icon (Not Recommended)"
Me.chkIcon.UseVisualStyleBackColor = True
'
'chkVersion
'
Me.chkVersion.AutoSize = True
Me.chkVersion.Location = New System.Drawing.Point(6, 88)
Me.chkVersion.Name = "chkVersion"
Me.chkVersion.Size = New System.Drawing.Size(61, 17)
Me.chkVersion.TabIndex = 3
Me.chkVersion.Text = "Version"
Me.chkVersion.UseVisualStyleBackColor = True
'
'chkCompany
'
Me.chkCompany.AutoSize = True
Me.chkCompany.Location = New System.Drawing.Point(6, 65)
Me.chkCompany.Name = "chkCompany"
Me.chkCompany.Size = New System.Drawing.Size(70, 17)
Me.chkCompany.TabIndex = 2
Me.chkCompany.Text = "Company"
Me.chkCompany.UseVisualStyleBackColor = True
'
'chkGamePath
'
Me.chkGamePath.AutoSize = True
Me.chkGamePath.Location = New System.Drawing.Point(6, 42)
Me.chkGamePath.Name = "chkGamePath"
Me.chkGamePath.Size = New System.Drawing.Size(180, 17)
Me.chkGamePath.TabIndex = 1
Me.chkGamePath.Text = "Game Path (Not Recommended)"
Me.chkGamePath.UseVisualStyleBackColor = True
'
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(6, 19)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
Me.chkTimeStamp.TabIndex = 0
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.btnCancel.Location = New System.Drawing.Point(132, 180)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'btnSave
'
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
Me.btnSave.Location = New System.Drawing.Point(52, 180)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 1
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'frmSyncFields
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(219, 211)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpFields)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmSyncFields"
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Optional Sync Fields"
Me.grpFields.ResumeLayout(False)
Me.grpFields.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents grpFields As GroupBox
Friend WithEvents chkMonitorGame As CheckBox
Friend WithEvents chkIcon As CheckBox
Friend WithEvents chkVersion As CheckBox
Friend WithEvents chkCompany As CheckBox
Friend WithEvents chkGamePath As CheckBox
Friend WithEvents chkTimeStamp As CheckBox
Friend WithEvents btnCancel As Button
Friend WithEvents btnSave As Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+115
View File
@@ -0,0 +1,115 @@
Imports GBM.My.Resources
Public Class frmSyncFields
Private eSyncFields As clsGame.eOptionalSyncFields
Public Property SyncFields As clsGame.eOptionalSyncFields
Get
Return eSyncFields
End Get
Set(value As clsGame.eOptionalSyncFields)
eSyncFields = value
End Set
End Property
Private Sub LoadForm()
'Load fields
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
chkCompany.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
chkGamePath.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
chkIcon.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
chkMonitorGame.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
chkTimeStamp.Checked = True
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
chkVersion.Checked = True
End If
End Sub
Private Sub SetForm()
'Set Form Name
Me.Text = frmSyncFields_FormName
'Set Form Text
btnCancel.Text = frmSyncFields_btnCancel
btnSave.Text = frmSyncFields_btnSave
grpFields.Text = frmSyncFields_grpFields
chkMonitorGame.Text = frmSyncFields_chkMonitorGame
chkIcon.Text = frmSyncFields_chkIcon
chkVersion.Text = frmSyncFields_chkVersion
chkCompany.Text = frmSyncFields_chkCompany
chkGamePath.Text = frmSyncFields_chkGamePath
chkTimeStamp.Text = frmSyncFields_chkTimeStamp
End Sub
Private Sub frmSyncFields_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
LoadForm()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Me.DialogResult = DialogResult.OK
Me.Close()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.DialogResult = DialogResult.Cancel
Me.Close()
End Sub
Private Sub chkTimeStamp_CheckedChanged(sender As Object, e As EventArgs) Handles chkTimeStamp.CheckedChanged
If chkTimeStamp.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.TimeStamp)
End If
End Sub
Private Sub chkGamePath_CheckedChanged(sender As Object, e As EventArgs) Handles chkGamePath.CheckedChanged
If chkGamePath.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.GamePath)
End If
End Sub
Private Sub chkCompany_CheckedChanged(sender As Object, e As EventArgs) Handles chkCompany.CheckedChanged
If chkCompany.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Company)
End If
End Sub
Private Sub chkVersion_CheckedChanged(sender As Object, e As EventArgs) Handles chkVersion.CheckedChanged
If chkVersion.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Version)
End If
End Sub
Private Sub chkIcon_CheckedChanged(sender As Object, e As EventArgs) Handles chkIcon.CheckedChanged
If chkIcon.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.Icon)
End If
End Sub
Private Sub chkMonitorGame_CheckedChanged(sender As Object, e As EventArgs) Handles chkMonitorGame.CheckedChanged
If chkMonitorGame.Checked Then
SyncFields = mgrCommon.SetSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
Else
SyncFields = mgrCommon.RemoveSyncField(SyncFields, clsGame.eOptionalSyncFields.MonitorGame)
End If
End Sub
End Class
+172
View File
@@ -0,0 +1,172 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmTags
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.grpTag = New System.Windows.Forms.GroupBox()
Me.txtName = New System.Windows.Forms.TextBox()
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.lstTags = 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.grpTag.SuspendLayout()
Me.SuspendLayout()
'
'grpTag
'
Me.grpTag.Controls.Add(Me.txtName)
Me.grpTag.Controls.Add(Me.lblName)
Me.grpTag.Location = New System.Drawing.Point(238, 12)
Me.grpTag.Name = "grpTag"
Me.grpTag.Size = New System.Drawing.Size(334, 50)
Me.grpTag.TabIndex = 3
Me.grpTag.TabStop = False
Me.grpTag.Text = "Configuration"
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(50, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(278, 20)
Me.txtName.TabIndex = 1
'
'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 = 7
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
'
'lstTags
'
Me.lstTags.FormattingEnabled = True
Me.lstTags.Location = New System.Drawing.Point(12, 12)
Me.lstTags.Name = "lstTags"
Me.lstTags.Size = New System.Drawing.Size(220, 212)
Me.lstTags.Sorted = True
Me.lstTags.TabIndex = 0
'
'txtID
'
Me.txtID.Enabled = False
Me.txtID.Location = New System.Drawing.Point(377, 67)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(33, 20)
Me.txtID.TabIndex = 4
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(497, 67)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 6
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(416, 67)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 5
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'frmTags
'
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.grpTag)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.btnDelete)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstTags)
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 = "frmTags"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Tags"
Me.grpTag.ResumeLayout(False)
Me.grpTag.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents grpTag As System.Windows.Forms.GroupBox
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents lblName As System.Windows.Forms.Label
Friend WithEvents btnClose As System.Windows.Forms.Button
Friend WithEvents btnDelete As System.Windows.Forms.Button
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents lstTags As System.Windows.Forms.ListBox
Friend WithEvents txtID As System.Windows.Forms.TextBox
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents btnSave As System.Windows.Forms.Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+324
View File
@@ -0,0 +1,324 @@
Imports GBM.My.Resources
Public Class frmTags
Dim hshTagData As Hashtable
Private bIsDirty As Boolean = False
Private bIsLoading As Boolean = False
Private oCurrentTag As clsTag
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 TagData As Hashtable
Get
Return hshTagData
End Get
Set(value As Hashtable)
hshTagData = value
End Set
End Property
Private Sub LoadData()
TagData = mgrTags.ReadTags
lstTags.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 oTag As clsTag In TagData.Values
lstTags.Items.Add(oTag.Name)
Next
IsLoading = False
End Sub
Private Sub FillData()
IsLoading = True
oCurrentTag = DirectCast(TagData(lstTags.SelectedItems(0).ToString), clsTag)
txtID.Text = oCurrentTag.ID
txtName.Text = oCurrentTag.Name
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 EditTag()
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
grpTag.Enabled = True
WipeControls(grpTag.Controls)
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
lstTags.Enabled = False
Case eModes.Edit
lstTags.Enabled = False
grpTag.Enabled = True
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
Case eModes.View
lstTags.Enabled = True
grpTag.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
Case eModes.Disabled
lstTags.Enabled = True
WipeControls(grpTag.Controls)
grpTag.Enabled = False
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
End Select
IsLoading = False
End Sub
Private Sub EditTag()
eCurrentMode = eModes.Edit
ModeChange()
End Sub
Private Sub AddTag()
eCurrentMode = eModes.Add
ModeChange()
txtName.Focus()
End Sub
Private Sub CancelEdit()
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveTag()
Case MsgBoxResult.No
If lstTags.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstTags.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
Case MsgBoxResult.Cancel
'Do Nothing
End Select
Else
If lstTags.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstTags.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SaveTag()
Dim oTag As New clsTag
Dim bSuccess As Boolean = False
If txtID.Text <> String.Empty Then
oTag.ID = txtID.Text
End If
oTag.Name = txtName.Text
Select Case eCurrentMode
Case eModes.Add
If CoreValidatation(oTag) Then
bSuccess = True
mgrTags.DoTagAdd(oTag)
eCurrentMode = eModes.View
End If
Case eModes.Edit
If CoreValidatation(oTag) Then
bSuccess = True
mgrTags.DoTagUpdate(oTag)
eCurrentMode = eModes.View
End If
End Select
If bSuccess Then
IsDirty = False
LoadData()
ModeChange()
If eCurrentMode = eModes.View Then lstTags.SelectedIndex = lstTags.Items.IndexOf(oTag.Name)
End If
End Sub
Private Sub DeleteTag()
Dim oTag As clsTag
If lstTags.SelectedItems.Count > 0 Then
oTag = DirectCast(TagData(lstTags.SelectedItems(0).ToString), clsTag)
If mgrCommon.ShowMessage(frmTags_ConfirmDelete, oTag.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrTags.DoTagDelete(oTag.ID)
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SwitchTag()
If lstTags.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
FillData()
ModeChange()
End If
End Sub
Private Function CoreValidatation(ByVal oTag As clsTag) As Boolean
If txtName.Text = String.Empty Then
mgrCommon.ShowMessage(frmTags_ErrorValidName, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
If mgrTags.DoCheckDuplicate(oTag.Name, oTag.ID) Then
mgrCommon.ShowMessage(frmTags_ErrorTagDupe, MsgBoxStyle.Exclamation)
txtName.Focus()
Return False
End If
Return True
End Function
Private Sub SetForm()
'Set Form Name
Me.Text = frmTags_FormName
'Set Form Text
grpTag.Text = frmTags_grpTag
lblName.Text = frmTags_lblName
btnClose.Text = frmTags_btnClose
btnDelete.Text = frmTags_btnDelete
btnAdd.Text = frmTags_btnAdd
btnCancel.Text = frmTags_btnCancel
btnSave.Text = frmTags_btnSave
End Sub
Private Sub frmTags_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
LoadData()
ModeChange()
AssignDirtyHandlers(grpTag.Controls)
End Sub
Private Sub lstTags_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstTags.SelectedIndexChanged
SwitchTag()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddTag()
End Sub
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
DeleteTag()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
SaveTag()
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 frmTags_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveTag()
Case MsgBoxResult.No
'Do Nothing
Case MsgBoxResult.Cancel
e.Cancel = True
End Select
End If
End Sub
End Class
+6 -6
View File
@@ -51,7 +51,7 @@ Partial Class frmVariableManager
' '
Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 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.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, 227) Me.btnDelete.Location = New System.Drawing.Point(48, 226)
Me.btnDelete.Name = "btnDelete" Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23) Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 2 Me.btnDelete.TabIndex = 2
@@ -62,7 +62,7 @@ Partial Class frmVariableManager
' '
Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 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.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, 227) Me.btnAdd.Location = New System.Drawing.Point(12, 226)
Me.btnAdd.Name = "btnAdd" Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23) Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 1 Me.btnAdd.TabIndex = 1
@@ -72,7 +72,7 @@ Partial Class frmVariableManager
'btnClose 'btnClose
' '
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnClose.Location = New System.Drawing.Point(497, 227) Me.btnClose.Location = New System.Drawing.Point(497, 226)
Me.btnClose.Name = "btnClose" Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23) Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 6 Me.btnClose.TabIndex = 6
@@ -137,7 +137,7 @@ Partial Class frmVariableManager
'btnCancel 'btnCancel
' '
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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(497, 95) Me.btnCancel.Location = New System.Drawing.Point(497, 94)
Me.btnCancel.Name = "btnCancel" Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 5 Me.btnCancel.TabIndex = 5
@@ -147,7 +147,7 @@ Partial Class frmVariableManager
'btnSave 'btnSave
' '
Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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(416, 95) Me.btnSave.Location = New System.Drawing.Point(416, 94)
Me.btnSave.Name = "btnSave" Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23) Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 4 Me.btnSave.TabIndex = 4
@@ -168,7 +168,7 @@ Partial Class frmVariableManager
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(584, 262) Me.ClientSize = New System.Drawing.Size(584, 261)
Me.Controls.Add(Me.txtID) Me.Controls.Add(Me.txtID)
Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave) Me.Controls.Add(Me.btnSave)
+25 -7
View File
@@ -1,4 +1,5 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class frmVariableManager Public Class frmVariableManager
Dim hshVariableData As Hashtable Dim hshVariableData As Hashtable
@@ -53,7 +54,7 @@ Public Class frmVariableManager
End If End If
End If End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose the path the variable represents:", sDefaultFolder, False) sNewPath = mgrCommon.OpenFolderBrowser(frmVariableManager_PathBrowse, sDefaultFolder, False)
If sNewPath <> String.Empty Then txtPath.Text = sNewPath If sNewPath <> String.Empty Then txtPath.Text = sNewPath
End Sub End Sub
@@ -67,7 +68,7 @@ Public Class frmVariableManager
Private Function HandleDirty() As MsgBoxResult Private Function HandleDirty() As MsgBoxResult
Dim oResult As MsgBoxResult Dim oResult As MsgBoxResult
oResult = MsgBox("There are unsaved changes on this form. Do you want to save?", MsgBoxStyle.YesNoCancel, "Game Backup Monitor") oResult = mgrCommon.ShowMessage(App_ConfirmDirty, MsgBoxStyle.YesNoCancel)
Select Case oResult Select Case oResult
Case MsgBoxResult.Yes Case MsgBoxResult.Yes
@@ -251,7 +252,7 @@ Public Class frmVariableManager
If lstVariables.SelectedItems.Count > 0 Then If lstVariables.SelectedItems.Count > 0 Then
oCustomVariable = DirectCast(VariableData(lstVariables.SelectedItems(0).ToString), clsPathVariable) oCustomVariable = DirectCast(VariableData(lstVariables.SelectedItems(0).ToString), clsPathVariable)
If MsgBox("Are you sure you want to delete " & oCustomVariable.Name & "? This cannot be undone.", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(frmVariableManager_ConfirmDelete, oCustomVariable.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrVariables.DoVariableDelete(oCustomVariable.ID) mgrVariables.DoVariableDelete(oCustomVariable.ID)
mgrVariables.DoPathUpdate(oCurrentVariable.FormattedName, oCurrentVariable.Path) mgrVariables.DoPathUpdate(oCurrentVariable.FormattedName, oCurrentVariable.Path)
LoadData() LoadData()
@@ -271,19 +272,19 @@ Public Class frmVariableManager
Private Function CoreValidatation(ByVal oCustomVariable As clsPathVariable) As Boolean Private Function CoreValidatation(ByVal oCustomVariable As clsPathVariable) As Boolean
If txtName.Text = String.Empty Then If txtName.Text = String.Empty Then
MsgBox("You must enter a valid path name.", MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(frmVariableManager_ErrorValidName, MsgBoxStyle.Exclamation)
txtName.Focus() txtName.Focus()
Return False Return False
End If End If
If txtPath.Text = String.Empty Then If txtPath.Text = String.Empty Then
MsgBox("You must enter a valid path.", MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(frmVariableManager_ErrorValidPath, MsgBoxStyle.Exclamation)
txtPath.Focus() txtPath.Focus()
Return False Return False
End If End If
If mgrVariables.DoCheckDuplicate(oCustomVariable.Name, oCustomVariable.ID) Then If mgrVariables.DoCheckDuplicate(oCustomVariable.Name, oCustomVariable.ID) Then
MsgBox("An custom variable with this name already exists.", MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(frmVariableManager_ErrorVariableDupe, MsgBoxStyle.Exclamation)
txtName.Focus() txtName.Focus()
Return False Return False
End If End If
@@ -291,7 +292,24 @@ Public Class frmVariableManager
Return True Return True
End Function End Function
Private Sub SetForm()
'Set Form Name
Me.Text = frmVariableManager_FormName
'Set Form Text
btnCancel.Text = frmVariableManager_btnCancel
btnSave.Text = frmVariableManager_btnSave
grpVariable.Text = frmVariableManager_grpVariable
btnPathBrowse.Text = frmVariableManager_btnPathBrowse
lblPath.Text = frmVariableManager_lblPath
lblName.Text = frmVariableManager_lblName
btnClose.Text = frmVariableManager_btnClose
btnDelete.Text = frmVariableManager_btnDelete
btnAdd.Text = frmVariableManager_btnAdd
End Sub
Private Sub frmVariableManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmVariableManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetForm()
LoadData() LoadData()
ModeChange() ModeChange()
AssignDirtyHandlers(grpVariable.Controls) AssignDirtyHandlers(grpVariable.Controls)
+83 -31
View File
@@ -90,13 +90,21 @@
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup>
<PostBuildEvent Condition="$(Platform)==x64">echo Running x64 Post Build Event...
COPY /Y "$(SolutionDir)\GBM\x64\sqlite3.dll" .
RMDIR /S /Q Utilities\x86</PostBuildEvent>
<PostBuildEvent Condition="$(Platform)==x86">echo Running x86 Post Build Event...
COPY /Y "$(SolutionDir)\GBM\x86\sqlite3.dll" .
RMDIR /S /Q Utilities\x64</PostBuildEvent>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>References\Mono.Data.Sqlite.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>References\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@@ -113,15 +121,25 @@
<Import Include="System.Windows.Forms" /> <Import Include="System.Windows.Forms" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Classes\XML Serialize Classes\Tag.vb" />
<Compile Include="Classes\XML Serialize Classes\Game.vb" />
<Compile Include="Classes\clsGameTag.vb" />
<Compile Include="Classes\clsPathVariable.vb" /> <Compile Include="Classes\clsPathVariable.vb" />
<Compile Include="Classes\clsBackup.vb" /> <Compile Include="Classes\clsBackup.vb" />
<Compile Include="Classes\clsGame.vb" /> <Compile Include="Classes\clsGame.vb" />
<Compile Include="Classes\clsTag.vb" />
<Compile Include="Forms\frmAdvancedImport.Designer.vb"> <Compile Include="Forms\frmAdvancedImport.Designer.vb">
<DependentUpon>frmAdvancedImport.vb</DependentUpon> <DependentUpon>frmAdvancedImport.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Forms\frmAdvancedImport.vb"> <Compile Include="Forms\frmAdvancedImport.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Forms\frmFilter.Designer.vb">
<DependentUpon>frmFilter.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmFilter.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmGameManager.Designer.vb"> <Compile Include="Forms\frmGameManager.Designer.vb">
<DependentUpon>frmGameManager.vb</DependentUpon> <DependentUpon>frmGameManager.vb</DependentUpon>
</Compile> </Compile>
@@ -134,6 +152,18 @@
<Compile Include="Forms\frmFileFolderSearch.vb"> <Compile Include="Forms\frmFileFolderSearch.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Forms\frmGameTags.Designer.vb">
<DependentUpon>frmGameTags.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmGameTags.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmIncludeExclude.Designer.vb">
<DependentUpon>frmIncludeExclude.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmIncludeExclude.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmStartUpWizard.Designer.vb"> <Compile Include="Forms\frmStartUpWizard.Designer.vb">
<DependentUpon>frmStartUpWizard.vb</DependentUpon> <DependentUpon>frmStartUpWizard.vb</DependentUpon>
</Compile> </Compile>
@@ -165,6 +195,18 @@
<DependentUpon>frmMain.vb</DependentUpon> <DependentUpon>frmMain.vb</DependentUpon>
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Forms\frmSyncFields.Designer.vb">
<DependentUpon>frmSyncFields.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmSyncFields.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmTags.Designer.vb">
<DependentUpon>frmTags.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmTags.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmVariableManager.Designer.vb"> <Compile Include="Forms\frmVariableManager.Designer.vb">
<DependentUpon>frmVariableManager.vb</DependentUpon> <DependentUpon>frmVariableManager.vb</DependentUpon>
</Compile> </Compile>
@@ -172,6 +214,7 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Managers\mgrCommon.vb" /> <Compile Include="Managers\mgrCommon.vb" />
<Compile Include="Managers\mgrGameTags.vb" />
<Compile Include="Managers\mgrHash.vb" /> <Compile Include="Managers\mgrHash.vb" />
<Compile Include="Managers\mgrManifest.vb" /> <Compile Include="Managers\mgrManifest.vb" />
<Compile Include="Managers\mgrMonitorList.vb" /> <Compile Include="Managers\mgrMonitorList.vb" />
@@ -180,6 +223,7 @@
<Compile Include="Managers\mgrSettings.vb" /> <Compile Include="Managers\mgrSettings.vb" />
<Compile Include="Managers\mgrBackup.vb" /> <Compile Include="Managers\mgrBackup.vb" />
<Compile Include="Managers\mgrSQLite.vb" /> <Compile Include="Managers\mgrSQLite.vb" />
<Compile Include="Managers\mgrTags.vb" />
<Compile Include="Managers\mgrVariables.vb" /> <Compile Include="Managers\mgrVariables.vb" />
<Compile Include="Managers\mgrXML.vb" /> <Compile Include="Managers\mgrXML.vb" />
<Compile Include="Managers\mgrProcesses.vb" /> <Compile Include="Managers\mgrProcesses.vb" />
@@ -203,12 +247,21 @@
<EmbeddedResource Include="Forms\frmAdvancedImport.resx"> <EmbeddedResource Include="Forms\frmAdvancedImport.resx">
<DependentUpon>frmAdvancedImport.vb</DependentUpon> <DependentUpon>frmAdvancedImport.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\frmFilter.resx">
<DependentUpon>frmFilter.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmGameManager.resx"> <EmbeddedResource Include="Forms\frmGameManager.resx">
<DependentUpon>frmGameManager.vb</DependentUpon> <DependentUpon>frmGameManager.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\frmFileFolderSearch.resx"> <EmbeddedResource Include="Forms\frmFileFolderSearch.resx">
<DependentUpon>frmFileFolderSearch.vb</DependentUpon> <DependentUpon>frmFileFolderSearch.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\frmGameTags.resx">
<DependentUpon>frmGameTags.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmIncludeExclude.resx">
<DependentUpon>frmIncludeExclude.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmStartUpWizard.resx"> <EmbeddedResource Include="Forms\frmStartUpWizard.resx">
<DependentUpon>frmStartUpWizard.vb</DependentUpon> <DependentUpon>frmStartUpWizard.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
@@ -226,14 +279,20 @@
<DependentUpon>frmMain.vb</DependentUpon> <DependentUpon>frmMain.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Forms\frmSyncFields.resx">
<DependentUpon>frmSyncFields.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmTags.resx">
<DependentUpon>frmTags.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmVariableManager.resx"> <EmbeddedResource Include="Forms\frmVariableManager.resx">
<DependentUpon>frmVariableManager.vb</DependentUpon> <DependentUpon>frmVariableManager.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx"> <EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator> <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace> <CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType> <SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -272,41 +331,32 @@
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="gbm.ico" /> <Content Include="gbm.ico">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="License\credits.txt"> <Content Include="License\credits.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="References\System.Data.SQLite.dll" /> <Content Include="References\Mono.Data.Sqlite.dll" />
<None Include="Resources\gbm.ico" />
<Content Include="Resources\Admin.png" />
<Content Include="Resources\GBM_Tray_Detected.ico" />
<Content Include="Resources\GBM_Tray_Ready.ico" />
<Content Include="Resources\GBM_Tray_Stopped.ico" />
<Content Include="Resources\User.png" />
<Content Include="Utilities\x64\7za.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x64\7za.exe"> <Content Include="Utilities\x64\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Utilities\x64\7zxa.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x86\7za.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x86\7za.exe"> <Content Include="Utilities\x86\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Utilities\x86\7zxa.dll"> <Content Include="x86\sqlite3.dll" />
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <None Include="Resources\gbm.ico" />
</Content> <Content Include="Resources\Admin.png" />
<Content Include="x64\SQLite.Interop.dll"> <Content Include="Resources\Clock.png" />
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Content Include="Resources\file.ico" />
</Content> <Content Include="Resources\folder.ico" />
<Content Include="x86\SQLite.Interop.dll"> <Content Include="Resources\GBM_Tray_Detected.ico" />
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Content Include="Resources\GBM_Tray_Ready.ico" />
</Content> <Content Include="Resources\GBM_Tray_Stopped.ico" />
<Content Include="Resources\Inbox.png" />
<Content Include="Resources\type.ico" />
<Content Include="Resources\User.png" />
<Content Include="x64\sqlite3.dll" />
<None Include="Resources\Stopped.png" /> <None Include="Resources\Stopped.png" />
<None Include="Resources\Detected.png" /> <None Include="Resources\Detected.png" />
<None Include="Resources\Ready.png" /> <None Include="Resources\Ready.png" />
@@ -338,6 +388,7 @@
<EmbedInteropTypes>True</EmbedInteropTypes> <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference> </COMReference>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
@@ -345,5 +396,6 @@
</Target> </Target>
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>
+1 -1
View File
@@ -3,7 +3,7 @@
License for use and distribution License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2015 Igor Pavlov. Copyright (C) 1999-2016 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license. 7-Zip Extra files are under the GNU LGPL license.
+2 -2
View File
@@ -1,5 +1,5 @@
GBM - Game Backup Monitor GBM - Game Backup Monitor
Copyright (C) 2015 Michael J. Seiferling Copyright (C) 2016 Michael J. Seiferling
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -16,4 +16,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact Information: Contact Information:
mseiferling@gmail.com gamebackupmonitor@gmail.com
+108 -66
View File
@@ -1,4 +1,5 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class mgrBackup Public Class mgrBackup
@@ -41,7 +42,7 @@ Public Class mgrBackup
'Create manifest item 'Create manifest item
oItem.Name = oGameInfo.Name oItem.Name = oGameInfo.Name
'Keep the path relative to the manifest location 'Keep the path relative to the manifest location
oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & "\", "") oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & Path.DirectorySeparatorChar, "")
oItem.RestorePath = oGameInfo.TruePath oItem.RestorePath = oGameInfo.TruePath
oItem.AbsolutePath = oGameInfo.AbsolutePath oItem.AbsolutePath = oGameInfo.AbsolutePath
oItem.DateUpdated = dTimeStamp oItem.DateUpdated = dTimeStamp
@@ -49,15 +50,15 @@ Public Class mgrBackup
oItem.CheckSum = sCheckSum oItem.CheckSum = sCheckSum
'Save Remote Manifest 'Save Remote Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then If mgrManifest.DoSpecificManifestCheck(oItem, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Remote) mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote)
Else Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote) mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote)
End If End If
'Save Local Manifest 'Save Local Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then If mgrManifest.DoGlobalManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestUpdateByName(oItem, mgrSQLite.Database.Local)
Else Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
End If End If
@@ -74,16 +75,65 @@ Public Class mgrBackup
Using oStream Using oStream
If sList <> String.Empty Then If sList <> String.Empty Then
For Each sTypeItem As String In sList.Split(":") For Each sTypeItem As String In sList.Split(":")
oStream.WriteLine("""" & sBackupPath & "\" & sTypeItem & """") oStream.WriteLine("""" & sBackupPath & Path.DirectorySeparatorChar & sTypeItem & """")
Next Next
End If End If
oStream.Flush() oStream.Flush()
End Using End Using
Catch ex As Exception Catch ex As Exception
RaiseEvent UpdateLog("An error occured creating a file list: " & ex.Message, False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorFileList, ex.Message), False, ToolTipIcon.Error, True)
End Try End Try
End Sub End Sub
Public Function CheckBackupPrereq(ByVal oGame As clsGame) As Boolean
Dim sBackupFile As String = oSettings.BackupFolder
If oSettings.CreateSubFolder Then sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
If mgrRestore.CheckManifest(oGame.Name) Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmManifestConflict, oGame.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrBackup_ErrorManifestConflict, False, ToolTipIcon.Error, True)
Return False
End If
End If
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) And Not oGame.AppendTimeStamp Then
If mgrCommon.ShowMessage(mgrBackup_ConfirmOverwrite, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOverwriteAbort, oGame.Name), False, ToolTipIcon.Error, True)
Return False
End If
End If
Return True
End Function
Private Sub CheckOldBackups(ByVal oGame As clsGame)
Dim oGameBackups As List(Of clsBackup) = mgrManifest.DoManifestGetByName(oGame.Name, mgrSQLite.Database.Remote)
Dim oGameBackup As clsBackup
Dim sOldBackup As String
Dim iBackupCount As Integer = oGameBackups.Count
Dim iDelCount As Integer
'If we've hit or exceeded the maximum backup limit
If oGameBackups.Count >= oGame.BackupLimit Then
'How many do we need to delete
iDelCount = (oGameBackups.Count - oGame.BackupLimit) + 1
'Delete the oldest backup(s) (Manifest entry and backup file)
For i = 1 To iDelCount
oGameBackup = oGameBackups(oGameBackups.Count - i)
sOldBackup = Settings.BackupFolder & Path.DirectorySeparatorChar & oGameBackup.FileName
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Remote)
mgrManifest.DoManifestDeletebyID(oGameBackup, mgrSQLite.Database.Local)
mgrCommon.DeleteFile(sOldBackup)
mgrCommon.DeleteDirectoryByBackup(Settings.BackupFolder & Path.DirectorySeparatorChar, oGameBackup)
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupLimitExceeded, Path.GetFileName(sOldBackup)), False, ToolTipIcon.Info, True)
Next
End If
End Sub
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame)) Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame Dim oGame As clsGame
Dim bDoBackup As Boolean Dim bDoBackup As Boolean
@@ -108,42 +158,29 @@ Public Class mgrBackup
CancelOperation = False CancelOperation = False
RaiseEvent UpdateBackupInfo(oGame) RaiseEvent UpdateBackupInfo(oGame)
If mgrRestore.CheckManifest(oGame.Name) Then
If MsgBox("The manifest shows the backup folder contains a backup for " & oGame.Name & " that has not been restored on this computer." & vbCrLf & vbCrLf & "Do you want to overwrite this file anyway?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog("Backup aborted by user due to manifest conflict.", False, ToolTipIcon.Error, True)
bDoBackup = False
End If
End If
If oSettings.CreateSubFolder Then If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & "\" & oGame.Name sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name
Try Try
If Not Directory.Exists(sBackupFile) Then If Not Directory.Exists(sBackupFile) Then
Directory.CreateDirectory(sBackupFile) Directory.CreateDirectory(sBackupFile)
End If End If
Catch ex As Exception Catch ex As Exception
RaiseEvent UpdateLog("Backup Aborted. A failure occured while creating backup sub-folder for " & oGame.Name & vbCrLf & ex.Message, False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorSubFolderCreate, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
bDoBackup = False bDoBackup = False
End Try End Try
End If End If
If oGame.AppendTimeStamp Then If oGame.AppendTimeStamp Then
sBackupFile = sBackupFile & "\" & oGame.Name & sTimeStamp & ".7z" CheckOldBackups(oGame)
sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & sTimeStamp & ".7z"
Else Else
sBackupFile = sBackupFile & "\" & oGame.Name & ".7z" sBackupFile = sBackupFile & Path.DirectorySeparatorChar & oGame.Name & ".7z"
End If
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) Then
If MsgBox("A file with the same name already exists in the backup folder." & vbCrLf & vbCrLf & "Do you want to overwrite this file?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog(oGame.Name & " backup aborted by user due to overwrite.", False, ToolTipIcon.Error, True)
bDoBackup = False
End If
End If End If
If bDoBackup Then If bDoBackup Then
If oGame.AbsolutePath = False Then If oGame.AbsolutePath = False Then
If oGame.Path <> String.Empty Then If oGame.Path <> String.Empty Then
sSavePath = oGame.ProcessPath & "\" & oGame.Path sSavePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oGame.Path
Else Else
sSavePath = oGame.ProcessPath sSavePath = oGame.ProcessPath
End If End If
@@ -152,7 +189,7 @@ Public Class mgrBackup
End If End If
If oGame.FolderSave = True Then If oGame.FolderSave = True Then
BuildFileList(sSavePath, "*.*", mgrPath.IncludeFileLocation) BuildFileList(sSavePath, "*", mgrPath.IncludeFileLocation)
Else Else
BuildFileList(sSavePath, oGame.FileType, mgrPath.IncludeFileLocation) BuildFileList(sSavePath, oGame.FileType, mgrPath.IncludeFileLocation)
End If End If
@@ -160,53 +197,58 @@ Public Class mgrBackup
BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation) BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation)
Try Try
'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
If File.Exists(sBackupFile) Then
File.Delete(sBackupFile)
End If
If Directory.Exists(sSavePath) Then If Directory.Exists(sSavePath) Then
prs7z.StartInfo.Arguments = "a -t7z " & "-i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r" If Settings.Is7zUtilityValid Then
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation 'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
prs7z.StartInfo.UseShellExecute = False 'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
prs7z.StartInfo.RedirectStandardOutput = True If File.Exists(sBackupFile) Then
prs7z.StartInfo.CreateNoWindow = True File.Delete(sBackupFile)
prs7z.Start()
RaiseEvent UpdateLog("Backup of " & sSavePath & " in progress...", True, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog("Backup Aborted by user. The backup file for " & oGame.Name & " will be unusable.", False, ToolTipIcon.Error, True)
Exit While
End If End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While prs7z.StartInfo.Arguments = "a" & oSettings.Prepared7zArguments & "-t7z -mx" & oSettings.CompressionLevel & " -i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
prs7z.WaitForExit() prs7z.StartInfo.FileName = oSettings.Utility7zLocation
If Not CancelOperation Then prs7z.StartInfo.UseShellExecute = False
If prs7z.ExitCode = 0 Then prs7z.StartInfo.RedirectStandardOutput = True
RaiseEvent UpdateLog(oGame.Name & " backup completed.", False, ToolTipIcon.Info, True) prs7z.StartInfo.CreateNoWindow = True
bBackupCompleted = True prs7z.Start()
Else RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupInProgress, sSavePath), False, ToolTipIcon.Info, True)
RaiseEvent UpdateLog(oGame.Name & " backup operation finished with warnings or errors.", False, ToolTipIcon.Error, True) While Not prs7z.StandardOutput.EndOfStream
bBackupCompleted = False If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorFullAbort, oGame.Name), True, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupComplete, New String() {oGame.Name, mgrCommon.GetFileSize(sBackupFile)}), False, ToolTipIcon.Info, True)
bBackupCompleted = True
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_BackupWarnings, oGame.Name), True, ToolTipIcon.Warning, True)
bBackupCompleted = False
End If
End If End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bBackupCompleted = False
End If End If
prs7z.Dispose()
Else Else
RaiseEvent UpdateLog("Backup Aborted. The path " & sSavePath & " for " & oGame.Name & " does not exist.", False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorNoSavePath, oGame.Name), True, ToolTipIcon.Error, True)
bBackupCompleted = False bBackupCompleted = False
End If End If
'Write Main Manifest 'Write Main Manifest
If bBackupCompleted Then If bBackupCompleted Then
If oSettings.CheckSum Then
RaiseEvent UpdateLog("Generating SHA-256 hash for " & oGame.Name & " backup file.", False, ToolTipIcon.Info, True) 'Generate checksum for new backup
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_GenerateHash, oGame.Name), False, ToolTipIcon.Info, True)
End If sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then
RaiseEvent UpdateLog("The manifest update for " & oGame.Name & " failed.", False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorManifestFailure, oGame.Name), True, ToolTipIcon.Error, True)
End If End If
'Write the process path if we have it 'Write the process path if we have it
@@ -215,14 +257,14 @@ Public Class mgrBackup
End If End If
End If End If
Catch ex As Exception Catch ex As Exception
RaiseEvent UpdateLog("An unexpected error occured during the backup process of " & oGame.Name & vbCrLf & ex.Message, False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrBackup_ErrorOtherFailure, New String() {oGame.Name, ex.Message}), False, ToolTipIcon.Error, True)
End Try End Try
End If End If
If bBackupCompleted Then If bBackupCompleted Then
RaiseEvent SetLastAction(oGame.CroppedName & " backup completed") RaiseEvent SetLastAction(mgrCommon.FormatString(mgrBackup_ActionComplete, oGame.CroppedName))
Else Else
RaiseEvent SetLastAction(oGame.CroppedName & " backup failed") RaiseEvent SetLastAction(mgrCommon.FormatString(mgrBackup_ActionFailed, oGame.CroppedName))
End If End If
Next Next
End Sub End Sub
+228 -8
View File
@@ -1,7 +1,27 @@
Imports System.Net Imports GBM.My.Resources
Imports System.Net
Imports System.IO
Imports System.Security.Principal
Public Class mgrCommon Public Class mgrCommon
'These need to be updated when upgrading the packaged 7z utility
Private Shared sUtility64Hash As String = "05ACEE3BAC0C6C4E396116EF27B953F992DE8D28DD14D317977F45692304C318" 'v16.02 7za.exe x64
Private Shared sUtility32Hash As String = "7AA7056DB4348229A288EEF49027B94C0D8D1A3C3AEDC6FA89B640334C7B37E9" 'v16.02 7za.exe x86
Public Shared ReadOnly Property UtilityHash As String
Get
Select Case mgrPath.ReleaseType
Case 64
Return sUtility64Hash
Case 32
Return sUtility32Hash
Case Else
Return sUtility32Hash
End Select
End Get
End Property
Public Shared ReadOnly Property BuildVersion As Integer Public Shared ReadOnly Property BuildVersion As Integer
Get Get
Return My.Application.Info.Version.Build Return My.Application.Info.Version.Build
@@ -10,7 +30,7 @@ Public Class mgrCommon
Public Shared ReadOnly Property AppVersion As Integer Public Shared ReadOnly Property AppVersion As Integer
Get Get
Return (My.Application.Info.Version.Major * 100) + My.Application.Info.Version.Minor Return (My.Application.Info.Version.Major * 100) + (My.Application.Info.Version.Minor * 10) + My.Application.Info.Version.Build
End Get End Get
End Property End Property
@@ -18,6 +38,7 @@ Public Class mgrCommon
Try Try
Dim request As WebRequest = WebRequest.Create(URL) Dim request As WebRequest = WebRequest.Create(URL)
Dim response As WebResponse = request.GetResponse() Dim response As WebResponse = request.GetResponse()
response.Close()
Catch ex As Exception Catch ex As Exception
Return False Return False
End Try End Try
@@ -34,9 +55,9 @@ Public Class mgrCommon
Public Shared Function BooleanYesNo(ByVal bBool As Boolean) As String Public Shared Function BooleanYesNo(ByVal bBool As Boolean) As String
If bBool Then If bBool Then
Return "Yes" Return mgrCommon_Yes
Else Else
Return "No" Return mgrCommon_No
End If End If
End Function End Function
@@ -44,7 +65,7 @@ Public Class mgrCommon
Dim fbBrowser As New SaveFileDialog Dim fbBrowser As New SaveFileDialog
fbBrowser.Title = sTitle fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = sFileType & " files (*." & sExtension & ")|*." & sExtension fbBrowser.Filter = FormatString(mgrCommon_FilesFilter, New String() {sFileType, sExtension, sExtension})
fbBrowser.InitialDirectory = sDefaultFolder fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.FileName = sDefaultFile fbBrowser.FileName = sDefaultFile
@@ -59,7 +80,7 @@ Public Class mgrCommon
Dim fbBrowser As New OpenFileDialog Dim fbBrowser As New OpenFileDialog
fbBrowser.Title = sTitle fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = sFileType & " files (*." & sExtension & ")|*." & sExtension fbBrowser.Filter = FormatString(mgrCommon_FilesFilter, New String() {sFileType, sExtension, sExtension})
fbBrowser.InitialDirectory = sDefaultFolder fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.Multiselect = bMulti fbBrowser.Multiselect = bMulti
@@ -91,14 +112,40 @@ Public Class mgrCommon
Return String.Empty Return String.Empty
End Function End Function
Public Shared Function IsElevated() As Boolean Public Shared Function IsProcessNotSearchable(ByVal oGame As clsGame) As Boolean
If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then 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
Return True Return True
Else Else
Return False Return False
End If End If
End Function End Function
Public Shared Function IsUnix() As Boolean
If Path.DirectorySeparatorChar = "/" Then
Return True
End If
Return False
End Function
Public Shared Function IsElevated() As Boolean
Dim oID As WindowsIdentity = WindowsIdentity.GetCurrent
Dim oPrincipal As New WindowsPrincipal(oID)
Return oPrincipal.IsInRole(WindowsBuiltInRole.Administrator)
End Function
Public Shared Sub RestartAsAdmin() Public Shared Sub RestartAsAdmin()
Dim oProcess As New Process Dim oProcess As New Process
@@ -110,4 +157,177 @@ Public Class mgrCommon
oProcess.Start() oProcess.Start()
End Sub End Sub
Public Shared Function SetSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
Return eSyncFields Or eSyncField
End Function
Public Shared Function RemoveSyncField(ByVal eSyncFields As clsGame.eOptionalSyncFields, ByVal eSyncField As clsGame.eOptionalSyncFields) As clsGame.eOptionalSyncFields
Return eSyncFields And (Not eSyncField)
End Function
'Delete file based on OS type
Public Shared Sub DeleteFile(ByVal sPath As String, Optional ByVal bRecycle As Boolean = True)
If File.Exists(sPath) Then
If IsUnix() Then
File.Delete(sPath)
Else
If bRecycle Then
My.Computer.FileSystem.DeleteFile(sPath, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
Else
File.Delete(sPath)
End If
End If
End If
End Sub
'Delete directory based on OS type
Public Shared Sub DeleteDirectory(ByVal sPath As String, Optional ByVal bRecursive As Boolean = False)
If Directory.Exists(sPath) Then
If IsUnix() Then
Directory.Delete(sPath, bRecursive)
Else
My.Computer.FileSystem.DeleteDirectory(sPath, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
End If
End If
End Sub
'Delete a sub-folder based on the provided backup information
Public Shared Sub DeleteDirectoryByBackup(ByVal sBackupFolder As String, ByVal oBackup As clsBackup)
Dim oDir As DirectoryInfo
Dim sDir As String = sBackupFolder & oBackup.Name
'Delete sub directory if it's empty
If oBackup.FileName.StartsWith(oBackup.Name & Path.DirectorySeparatorChar) Then
If Directory.Exists(sDir) Then
'Check if there's any sub-directories or files remaining
oDir = New DirectoryInfo(sDir)
If oDir.GetDirectories.Length = 0 And oDir.GetFiles.Length = 0 Then
'Folder is empty, delete the empty sub-folder
If Directory.Exists(sDir) Then DeleteDirectory(sDir)
End If
End If
End If
End Sub
'Save string as text file
Public Shared Sub SaveText(ByVal sText As String, ByVal sPath As String)
Dim oStream As StreamWriter
Try
If File.Exists(sPath) Then DeleteFile(sPath, False)
oStream = New StreamWriter(sPath)
oStream.Write(sText)
oStream.Flush()
oStream.Close()
Catch ex As Exception
ShowMessage(mgrCommon_ErrorWritingTextFile, ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
'Get a file size
Public Shared Function GetFileSize(ByVal sFile As String) As String
Dim oFileInfo As FileInfo
Dim dFileSize As Double
Try
oFileInfo = New FileInfo(sFile)
dFileSize = oFileInfo.Length
If dFileSize > 1048576 Then
Return FormatString(App_MB, Math.Round(dFileSize / 1048576, 2).ToString)
Else
Return FormatString(App_KB, Math.Round(dFileSize / 1024, 2).ToString)
End If
Catch ex As Exception
Return String.Empty
End Try
End Function
'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
oResult = MsgBox(FormatString(sMsg), oType, My.Resources.App_NameLong)
Return oResult
End Function
'Handles single parameter stings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParam As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
oResult = MsgBox(FormatString(sMsg, sParam), oType, My.Resources.App_NameLong)
Return oResult
End Function
'Handles multi-parameter strings
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal sParams As String(), ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
oResult = MsgBox(FormatString(sMsg, sParams), oType, My.Resources.App_NameLong)
Return oResult
End Function
'Handles no extra parameters
Public Shared Function FormatString(ByVal sString As String) As String
sString = sString.Replace("[BR]", vbCrLf)
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)
sString = sString.Replace("[PARAM]", sParam)
Return sString
End Function
'Handles multi-parameter strings
Public Shared Function FormatString(ByVal sString As String, ByVal sParams As String()) As String
Dim iParam As Integer
sString = sString.Replace("[BR]", vbCrLf)
For Each s As String In sParams
iParam = sString.IndexOf("[PARAM]")
sString = sString.Remove(iParam, 7)
sString = sString.Insert(iParam, s)
Next
Return sString
End Function
'Compare functions
Public Shared Function CompareImportTagsByName(oItem1 As Tag, oItem2 As Tag) As Integer
Return String.Compare(oItem1.Name, oItem2.Name)
End Function
Public Shared Function CompareByListBoxItemByValue(sItem1 As KeyValuePair(Of String, String), sItem2 As KeyValuePair(Of String, String)) As Integer
Return String.Compare(sItem1.Value, sItem2.Value)
End Function
'Maintenance Only - Function for string management
Public Shared Sub GetAllStrings(ByVal ctlParent As Control, ByRef sResource As String, ByRef sCode As String, ByVal sFormName As String)
For Each ctl As Control In ctlParent.Controls
If TypeOf ctl Is GroupBox Then
sResource &= sFormName & "_" & ctl.Name & vbTab & ctl.Text & vbCrLf
sCode &= ctl.Name & ".Text = " & sFormName & "_" & ctl.Name & vbCrLf
GetAllStrings(ctl, sResource, sCode, sFormName)
ElseIf TypeOf ctl Is TabControl Then
For Each tb As TabPage In ctl.Controls
GetAllStrings(tb, sResource, sCode, sFormName)
Next
ElseIf TypeOf ctl Is Label Then
sResource &= sFormName & "_" & ctl.Name & vbTab & ctl.Text & vbCrLf
sCode &= ctl.Name & ".Text = " & sFormName & "_" & ctl.Name & vbCrLf
ElseIf TypeOf ctl Is Button Then
sResource &= sFormName & "_" & ctl.Name & vbTab & ctl.Text & vbCrLf
sCode &= ctl.Name & ".Text = " & sFormName & "_" & ctl.Name & vbCrLf
ElseIf TypeOf ctl Is RadioButton Then
sResource &= sFormName & "_" & ctl.Name & vbTab & ctl.Text & vbCrLf
sCode &= ctl.Name & ".Text = " & sFormName & "_" & ctl.Name & vbCrLf
ElseIf TypeOf ctl Is CheckBox Then
sResource &= sFormName & "_" & ctl.Name & vbTab & ctl.Text & vbCrLf
sCode &= ctl.Name & ".Text = " & sFormName & "_" & ctl.Name & vbCrLf
End If
Next
End Sub
End Class End Class
+284
View File
@@ -0,0 +1,284 @@
Public Class mgrGameTags
Public Shared Sub DoGameTagAdd(ByVal oGameTag As clsGameTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "INSERT INTO gametags VALUES (@TagID, @MonitorID)"
hshParams.Add("TagID", oGameTag.TagID)
hshParams.Add("MonitorID", oGameTag.MonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoGameTagAddBatch(ByVal oGameTags As List(Of clsGameTag))
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 gametags VALUES (@TagID, @MonitorID);"
For Each oGameTag As clsGameTag In oGameTags
hshParams = New Hashtable
hshParams.Add("TagID", oGameTag.TagID)
hshParams.Add("MonitorID", oGameTag.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoGameTagDelete(ByVal oGameTags As List(Of clsGameTag))
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 gametags "
sSQL &= "WHERE TagID = @TagID AND MonitorID = @MonitorID;"
For Each oGameTag As clsGameTag In oGameTags
hshParams = New Hashtable
hshParams.Add("TagID", oGameTag.TagID)
hshParams.Add("MonitorID", oGameTag.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoGameTagDeleteByGame(ByVal sMonitorID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE MonitorID = @ID;"
hshParams.Add("ID", sMonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoGameTagDeleteByTag(ByVal sTagID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE TagID = @ID;"
hshParams.Add("ID", sTagID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function GetTagsByGame(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 oTag As clsTag
sSQL = "SELECT TagID, tags.Name FROM gametags NATURAL JOIN tags WHERE MonitorID = @ID"
hshParams.Add("ID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
hshList.Add(oTag.Name, oTag)
Next
Return hshList
End Function
Public Shared Function GetTagsByGameForExport(ByVal sMonitorID As String) As List(Of Tag)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim oList As New List(Of Tag)
Dim hshParams As New Hashtable
Dim oTag As Tag
sSQL = "SELECT TagID, tags.Name FROM gametags NATURAL JOIN tags WHERE MonitorID = @ID"
hshParams.Add("ID", sMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = New Tag
oTag.Name = CStr(dr("Name"))
oList.Add(oTag)
Next
Return oList
End Function
Public Shared Function GetTagsByGameMulti(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 oTag As clsTag
Dim iCounter As Integer
sSQL = "SELECT DISTINCT TagID, tags.Name FROM gametags NATURAL JOIN tags 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
oTag = New clsTag
oTag.ID = CStr(dr(0))
oTag.Name = CStr(dr(1))
hshList.Add(oTag.Name, oTag)
Next
Return hshList
End Function
Public Shared Function ReadGameTags(Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim sCompoundKey As String
Dim hshList As New Hashtable
Dim oGameTag As clsGameTag
sSQL = "SELECT * from gametags"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oGameTag = New clsGameTag
oGameTag.TagID = CStr(dr("TagID"))
oGameTag.MonitorID = CStr(dr("MonitorID"))
sCompoundKey = oGameTag.TagID & ":" & oGameTag.MonitorID
hshList.Add(sCompoundKey, oGameTag)
Next
Return hshList
End Function
Public Shared Sub DoGameTagAddSync(ByVal hshTags As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "INSERT INTO gametags VALUES (@TagID, @MonitorID);"
For Each oGameTag As clsGameTag In hshTags.Values
hshParams = New Hashtable
hshParams.Add("TagID", oGameTag.TagID)
hshParams.Add("MonitorID", oGameTag.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoGameTagDeleteSync(ByVal hshTags As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE TagID = @TagID AND MonitorID = @MonitorID;"
For Each oGameTag As clsGameTag In hshTags.Values
hshParams = New Hashtable
hshParams.Add("TagID", oGameTag.TagID)
hshParams.Add("MonitorID", oGameTag.MonitorID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Function SyncGameTags(Optional ByVal bToRemote As Boolean = True) As Integer
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim hshDeleteItems As Hashtable
Dim oFromItem As clsGameTag
Dim oToItem As clsGameTag
Dim sCompoundKey As String
'Add / Update Sync
If bToRemote Then
hshCompareFrom = ReadGameTags(mgrSQLite.Database.Local)
hshCompareTo = ReadGameTags(mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadGameTags(mgrSQLite.Database.Remote)
hshCompareTo = ReadGameTags(mgrSQLite.Database.Local)
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
sCompoundKey = oFromItem.TagID & ":" & oFromItem.MonitorID
If hshCompareTo.Contains(sCompoundKey) Then
oToItem = DirectCast(hshCompareTo(sCompoundKey), clsGameTag)
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(sCompoundKey)
End If
End If
Next
If bToRemote Then
DoGameTagAddSync(hshSyncItems, mgrSQLite.Database.Remote)
Else
DoGameTagAddSync(hshSyncItems, mgrSQLite.Database.Local)
End If
'Delete Sync
If bToRemote Then
hshCompareFrom = ReadGameTags(mgrSQLite.Database.Local)
hshCompareTo = ReadGameTags(mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadGameTags(mgrSQLite.Database.Remote)
hshCompareTo = ReadGameTags(mgrSQLite.Database.Local)
End If
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
sCompoundKey = oToItem.TagID & ":" & oToItem.MonitorID
If hshCompareFrom.Contains(sCompoundKey) Then
oFromItem = DirectCast(hshCompareFrom(sCompoundKey), clsGameTag)
If oToItem.CoreEquals(oFromItem) Then
hshDeleteItems.Remove(sCompoundKey)
End If
End If
Next
If bToRemote Then
DoGameTagDeleteSync(hshDeleteItems, mgrSQLite.Database.Remote)
Else
DoGameTagDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
End If
Return hshDeleteItems.Count + hshSyncItems.Count
End Function
End Class
-4
View File
@@ -1,4 +0,0 @@
Public Class mgrGlobals
Public Shared LocalDatabaseHash As String = String.Empty
Public Shared RemoteDatabaseHash As String = String.Empty
End Class
-1
View File
@@ -1,5 +1,4 @@
Imports System.IO Imports System.IO
Imports System.Security
Imports System.Security.Cryptography Imports System.Security.Cryptography
Public Class mgrHash Public Class mgrHash
+156 -58
View File
@@ -1,8 +1,37 @@
Imports System.IO Public Class mgrManifest
Public Class mgrManifest Private Shared Function MapToObject(ByVal dr As DataRow) As clsBackup
Dim oBackupItem As clsBackup
Public Shared Function ReadManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList oBackupItem = New clsBackup
oBackupItem.ID = CStr(dr("ManifestID"))
oBackupItem.Name = CStr(dr("Name"))
oBackupItem.FileName = CStr(dr("FileName"))
oBackupItem.RestorePath = CStr(dr("RestorePath"))
oBackupItem.AbsolutePath = CBool(dr("AbsolutePath"))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated"))
oBackupItem.UpdatedBy = CStr(dr("UpdatedBy"))
If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum"))
Return oBackupItem
End Function
Private Shared Function SetCoreParameters(ByVal oBackupItem As clsBackup) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oBackupItem.ID)
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
Return hshParams
End Function
Public Shared Function ReadFullManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
@@ -13,15 +42,26 @@ Public Class mgrManifest
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = New clsBackup oBackupItem = MapToObject(dr)
oBackupItem.ID = CStr(dr(0)) slList.Add(oBackupItem.ID, oBackupItem)
oBackupItem.Name = CStr(dr(1)) Next
oBackupItem.FileName = CStr(dr(2))
oBackupItem.RestorePath = CStr(dr(3)) Return slList
oBackupItem.AbsolutePath = CBool(dr(4))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr(5)) End Function
oBackupItem.UpdatedBy = CStr(dr(6))
If Not IsDBNull(dr(7)) Then oBackupItem.CheckSum = CStr(dr(7)) Public Shared Function ReadLatestManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim oBackupItem As clsBackup
Dim slList As New SortedList
sSQL = "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, Max(DateUpdated) As DateUpdated, UpdatedBy, CheckSum FROM manifest GROUP BY Name ORDER By Name ASC"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
slList.Add(oBackupItem.Name, oBackupItem) slList.Add(oBackupItem.Name, oBackupItem)
Next Next
@@ -29,7 +69,80 @@ Public Class mgrManifest
End Function End Function
Public Shared Function DoManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As List(Of clsBackup)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name ORDER BY DateUpdated Desc"
hshParams.Add("Name", sName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
oList.Add(oBackupItem)
Next
Return oList
End Function
Public Shared Function DoManifestGetByID(ByVal sID As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
Dim oList As New List(Of clsBackup)
sSQL = "SELECT * from manifest "
sSQL &= "WHERE ManifestID = @ID ORDER BY DateUpdated Desc"
hshParams.Add("ID", sID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oBackupItem = MapToObject(dr)
Next
Return oBackupItem
End Function
'This should only be used to update specific entries in the remote manifest
Public Shared Function DoSpecificManifestCheck(ByRef oItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name AND FileName = @FileName"
hshParams.Add("Name", oItem.Name)
hshParams.Add("FileName", oItem.FileName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
For Each dr As DataRow In oData.Tables(0).Rows
oItem.ID = CStr(dr("ManifestID"))
Next
Return True
Else
Return False
End If
End Function
'This should only be used to update entries in the local manifest
Public Shared Function DoGlobalManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
@@ -50,12 +163,11 @@ Public Class mgrManifest
End Function End Function
Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup Public Shared Function DoManifestNameCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet Dim oData As DataSet
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim oBackupItem As New clsBackup
sSQL = "SELECT * from manifest " sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name" sSQL &= "WHERE Name = @Name"
@@ -64,82 +176,55 @@ Public Class mgrManifest
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows If oData.Tables(0).Rows.Count > 0 Then
oBackupItem = New clsBackup Return True
oBackupItem.ID = CStr(dr(0)) Else
oBackupItem.Name = CStr(dr(1)) Return False
oBackupItem.FileName = CStr(dr(2)) End If
oBackupItem.RestorePath = CStr(dr(3))
oBackupItem.AbsolutePath = CBool(dr(4))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr(5))
oBackupItem.UpdatedBy = CStr(dr(6))
If Not IsDBNull(dr(7)) Then oBackupItem.CheckSum = CStr(dr(7))
Next
Return oBackupItem
End Function End Function
Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)" sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)"
hshParams.Add("ID", oBackupItem.ID) hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("Name", oBackupItem.Name)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoManifestUpdate(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Public Shared Sub DoManifestUpdateByName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, " sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName" sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName"
hshParams.Add("Name", oBackupItem.Name) hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("FileName", oBackupItem.FileName)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
hshParams.Add("QueryName", oBackupItem.Name) hshParams.Add("QueryName", oBackupItem.Name)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoManifestNameUpdate(ByVal sOriginalName As String, ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Public Shared Sub DoManifestUpdateByID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, " sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, "
sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE Name = @QueryName" sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID"
hshParams.Add("Name", oBackupItem.Name) hshParams = SetCoreParameters(oBackupItem)
hshParams.Add("FileName", oBackupItem.FileName) hshParams.Add("QueryID", oBackupItem.ID)
hshParams.Add("Path", oBackupItem.TruePath)
hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath)
hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix)
hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy)
hshParams.Add("CheckSum", oBackupItem.CheckSum)
hshParams.Add("QueryName", sOriginalName)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoManifestDelete(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Public Shared Sub DoManifestDeletebyName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
@@ -152,6 +237,19 @@ Public Class mgrManifest
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoManifestDeletebyID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM manifest "
sSQL &= "WHERE ManifestID = @ID"
hshParams.Add("ID", oBackupItem.ID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestHashWipe() Public Shared Sub DoManifestHashWipe()
Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote) Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
+511 -345
View File
@@ -1,212 +1,63 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class mgrMonitorList Public Class mgrMonitorList
Public Enum eListTypes As Integer Public Enum eListTypes As Integer
FullList = 1 FullList = 1
ScanList = 2 ScanList = 2
ListByKey = 3
End Enum End Enum
Public Shared Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean) Public Shared Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
Public Shared Sub HandleBackupLocationChange() Private Shared Function MapToObject(ByVal dr As DataRow) As clsGame
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote) Dim oGame As New clsGame
Dim iGameCount As Integer
'Check if a remote database already exists in the new backup location oGame.ID = CStr(dr("MonitorID"))
If oDatabase.CheckDB() Then oGame.Name = CStr(dr("Name"))
'Make sure database is the latest version oGame.ProcessName = CStr(dr("Process"))
oDatabase.DatabaseUpgrade() If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
oGame.FolderSave = CBool(dr("FolderSave"))
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
oGame.AppendTimeStamp = CBool(dr("TimeStamp"))
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
If Not IsDBNull(dr("ProcessPath")) Then oGame.ProcessPath = CStr(dr("ProcessPath"))
If Not IsDBNull(dr("Icon")) Then oGame.Icon = CStr(dr("Icon"))
oGame.Hours = CDbl(dr("Hours"))
If Not IsDBNull(dr("Version")) Then oGame.Version = CStr(dr("Version"))
If Not IsDBNull(dr("Company")) Then oGame.Company = CStr(dr("Company"))
oGame.Enabled = CBool(dr("Enabled"))
oGame.MonitorOnly = CBool(dr("MonitorOnly"))
oGame.BackupLimit = CInt(dr("BackupLimit"))
oGame.CleanFolder = CBool(dr("CleanFolder"))
'See if the remote database is empty Return oGame
iGameCount = mgrMonitorList.ReadList(eListTypes.FullList, mgrSQLite.Database.Remote).Count End Function
'If the remote database actually contains a list, then ask what to do Private Shared Function SetCoreParameters(ByVal oGame As clsGame) As Hashtable
If iGameCount > 0 Then Dim hshParams As New Hashtable
If MsgBox("GBM data already exists in the backup folder." & vbCrLf & vbCrLf & _
"Do you want to make your local game list the new master game list in this folder? (Recommended)" & vbCrLf & vbCrLf & _
"Choosing No will sync your local game list to the current master game list in this folder.", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
mgrMonitorList.SyncMonitorLists()
Else
mgrMonitorList.SyncMonitorLists(False)
End If
Else
mgrMonitorList.SyncMonitorLists()
End If
Else
mgrMonitorList.SyncMonitorLists()
End If
End Sub
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) hshParams.Add("ID", oGame.ID)
Dim hshCompareFrom As Hashtable hshParams.Add("Name", oGame.Name)
Dim hshCompareTo As Hashtable hshParams.Add("Process", oGame.TrueProcess)
Dim hshSyncItems As Hashtable hshParams.Add("Path", oGame.TruePath)
Dim oFromItem As clsGame hshParams.Add("AbsolutePath", oGame.AbsolutePath)
Dim oToItem As clsGame hshParams.Add("FolderSave", oGame.FolderSave)
Dim iItems As Integer = 0 hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("ProcessPath", oGame.ProcessPath)
hshParams.Add("Icon", oGame.Icon)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("Version", oGame.Version)
hshParams.Add("Company", oGame.Company)
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
hshParams.Add("BackupLimit", oGame.BackupLimit)
hshParams.Add("CleanFolder", oGame.CleanFolder)
Cursor.Current = Cursors.WaitCursor Return hshParams
'Add / Update Sync
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, bWebRead)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.ProcessName) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ProcessName), clsGame)
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.ProcessName)
End If
End If
Next
Cursor.Current = Cursors.Default
If hshSyncItems.Count > 0 Then
Dim frm As New frmAdvancedImport
frm.ImportData = hshSyncItems
If frm.ShowDialog() = DialogResult.OK Then
Cursor.Current = Cursors.WaitCursor
For Each oGame As clsGame In frm.ImportData.Values
If Not DoDuplicateListCheck(oGame.Name, oGame.TrueProcess) Then
DoListAdd(oGame, mgrSQLite.Database.Local)
iItems += 1
End If
Next
Cursor.Current = Cursors.Default
MsgBox("Import Complete. " & iItems & " entries have been imported.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
Else
MsgBox("This list does not contain any new games to import.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
Application.DoEvents()
End Sub
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
Dim hshList As Hashtable = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
Dim bSuccess As Boolean
bSuccess = mgrXML.ExportMonitorList(hshList, sLocation)
If bSuccess Then
MsgBox("Export Complete. " & hshList.Count & " entries have been exported.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
End Sub
Public Shared Sub SyncMonitorLists(Optional ByVal bToRemote As Boolean = True)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim hshDeleteItems As Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Cursor.Current = Cursors.WaitCursor
If bToRemote Then
RaiseEvent UpdateLog("A sync to the master game list has been triggered.", False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog("A sync from the master game list has been triggered.", False, ToolTipIcon.Info, True)
End If
'Delete Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
If hshCompareFrom.Contains(oToItem.ProcessName) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.ProcessName), clsGame)
If oToItem.CoreEquals(oFromItem) Then
hshDeleteItems.Remove(oToItem.ProcessName)
End If
End If
Next
For Each oGame As clsGame In hshDeleteItems.Values
If bToRemote Then
DoListDeleteSync(oGame, mgrSQLite.Database.Remote)
Else
DoListDeleteSync(oGame, mgrSQLite.Database.Local)
End If
Next
'Add / Update Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.ProcessName) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ProcessName), clsGame)
If oFromItem.SyncEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.ProcessName)
End If
End If
Next
For Each oGame As clsGame In hshSyncItems.Values
'Clear Extra Data
oGame.Version = String.Empty
oGame.Company = String.Empty
oGame.ProcessPath = String.Empty
oGame.Icon = String.Empty
If bToRemote Then
If DoDuplicateListCheck(oGame.Name, oGame.TrueProcess, mgrSQLite.Database.Remote) Then
DoListUpdateSync(oGame, mgrSQLite.Database.Remote)
Else
DoListAdd(oGame, mgrSQLite.Database.Remote)
End If
Else
If DoDuplicateListCheck(oGame.Name, oGame.TrueProcess, mgrSQLite.Database.Local) Then
DoListUpdateSync(oGame, mgrSQLite.Database.Local)
Else
DoListAdd(oGame, mgrSQLite.Database.Local)
End If
End If
Next
RaiseEvent UpdateLog(hshDeleteItems.Count + hshSyncItems.Count & " change(s) synced.", False, ToolTipIcon.Info, True)
Cursor.Current = Cursors.Default
Application.DoEvents()
End Sub
Public Shared Function DoImport(ByVal sPath As String) As Boolean
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or _
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
If mgrCommon.CheckAddress(sPath) Then
ImportMonitorList(sPath, True)
Return True
Else
MsgBox("There's no response from:" & vbCrLf & vbCrLf & sPath & vbCrLf & vbCrLf & "Either the server is not responding or the URL is invalid.")
Return False
End If
Else
If File.Exists(sPath) Then
ImportMonitorList(sPath)
Return True
Else
MsgBox("The file:" & vbCrLf & sPath & vbCrLf & "cannot be found.")
Return False
End If
End If
End Function End Function
Public Shared Function ReadList(ByVal eListType As eListTypes, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable Public Shared Function ReadList(ByVal eListType As eListTypes, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
@@ -216,56 +67,23 @@ Public Class mgrMonitorList
Dim hshList As New Hashtable Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable Dim hshDupeList As New Hashtable
Dim oGame As clsGame Dim oGame As clsGame
Dim oDupeGame As clsGame
sSQL = "SELECT * from monitorlist ORDER BY Name Asc" sSQL = "Select * from monitorlist ORDER BY Name Asc"
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
Select Case eListType Select Case eListType
Case eListTypes.FullList Case eListTypes.FullList
If hshList.Contains(oGame.ProcessName) Or hshDupeList.Contains(oGame.ProcessName) Then 'Don't wrap this, if it fails there's a problem with the database
oDupeGame = DirectCast(hshList.Item(oGame.ProcessName), clsGame) hshList.Add(oGame.ProcessName & ":" & oGame.Name, oGame)
If Not hshDupeList.Contains(oGame.ProcessName) Then
hshDupeList.Add(oGame.ProcessName, oDupeGame)
hshList.Remove(oDupeGame.ProcessName)
oDupeGame.Duplicate = True
oDupeGame.ProcessName = oDupeGame.ProcessName & ":" & oDupeGame.Name
hshList.Add(oDupeGame.ProcessName, oDupeGame)
End If
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True
End If
hshList.Add(oGame.ProcessName, oGame)
Case eListTypes.ScanList Case eListTypes.ScanList
If hshList.Contains(oGame.ProcessName) Then If hshList.Contains(oGame.ProcessName) Then
DirectCast(hshList.Item(oGame.ProcessName), clsGame).Duplicate = True DirectCast(hshList.Item(oGame.ProcessName), clsGame).Duplicate = True
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True oGame.Duplicate = True
End If End If
If oGame.Enabled Then hshList.Add(oGame.ProcessName, oGame) If oGame.Enabled Then hshList.Add(oGame.ProcessName, oGame)
Case eListTypes.ListByKey
hshList.Add(oGame.ID, oGame)
End Select End Select
Next Next
@@ -275,28 +93,13 @@ Public Class mgrMonitorList
Public Shared Sub DoListAdd(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) Public Shared Sub DoListAdd(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, " sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly)" sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder)"
'Parameters 'Parameters
hshParams.Add("ID", oGame.ID) hshParams = SetCoreParameters(oGame)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("ProcessPath", oGame.ProcessPath)
hshParams.Add("Icon", oGame.Icon)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("Version", oGame.Version)
hshParams.Add("Company", oGame.Company)
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -305,29 +108,14 @@ Public Class mgrMonitorList
Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, " sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, " sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly WHERE MonitorID=@ID" sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, CleanFolder=@CleanFolder WHERE MonitorID=@ID"
'Parameters 'Parameters
hshParams.Add("Name", oGame.Name) hshParams = SetCoreParameters(oGame)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("ProcessPath", oGame.ProcessPath)
hshParams.Add("Icon", oGame.Icon)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("Version", oGame.Version)
hshParams.Add("Company", oGame.Company)
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
hshParams.Add("ID", oGame.ID)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -358,53 +146,15 @@ Public Class mgrMonitorList
End Sub End Sub
Public Shared Sub DoListUpdateSync(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, Hours=@Hours "
sSQL &= "WHERE Name=@QueryName AND Process=@QueryProcess"
'Parameters
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("QueryName", oGame.Name)
hshParams.Add("QueryProcess", oGame.TrueProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListDeleteSync(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM monitorlist "
sSQL &= "WHERE Name = @Name AND Process= @Process"
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListDelete(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) Public Shared Sub DoListDelete(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB) Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
sSQL = "DELETE FROM monitorlist " sSQL = "DELETE FROM gametags "
sSQL &= "WHERE MonitorID = @MonitorID" sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID;"
hshParams.Add("MonitorID", sMonitorID) hshParams.Add("MonitorID", sMonitorID)
@@ -418,7 +168,7 @@ Public Class mgrMonitorList
Dim hshParams As New Hashtable Dim hshParams As New Hashtable
Dim iCounter As Integer Dim iCounter As Integer
sSQL = "DELETE FROM monitorlist " sSQL = "DELETE FROM gametags "
sSQL &= "WHERE MonitorID IN (" sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs For Each s As String In sMonitorIDs
@@ -428,7 +178,19 @@ Public Class mgrMonitorList
Next Next
sSQL = sSQL.TrimEnd(",") sSQL = sSQL.TrimEnd(",")
sSQL &= ")" sSQL &= ");"
sSQL &= "DELETE FROM monitorlist "
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 &= ");"
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
@@ -448,23 +210,7 @@ Public Class mgrMonitorList
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
Next Next
Return oGame Return oGame
@@ -487,23 +233,7 @@ Public Class mgrMonitorList
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame oGame = MapToObject(dr)
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
hshGames.Add(iCounter, oGame) hshGames.Add(iCounter, oGame)
iCounter += 1 iCounter += 1
Next Next
@@ -536,4 +266,440 @@ Public Class mgrMonitorList
End If End If
End Function End Function
'Sync Functions
Public Shared Sub DoListAddUpdateSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local,
Optional ByVal eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
'Handle Optional Sync Fields
Dim sGamePath As String
Dim sIcon As String
Dim sVersion As String
Dim sCompany As String
Dim sMonitorGame As String
Dim sTimeStamp As String
Dim sBackupLimit As String
'Setup SQL for optional fields
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
sCompany = "@Company"
Else
sCompany = "(SELECT Company FROM monitorlist WHERE MonitorID=@ID)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
sGamePath = "@ProcessPath"
Else
sGamePath = "(SELECT ProcessPath FROM monitorlist WHERE MonitorID=@ID)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
sIcon = "@Icon"
Else
sIcon = "(SELECT Icon FROM monitorlist WHERE MonitorID=@ID)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
sMonitorGame = "@Enabled"
Else
sMonitorGame = "COALESCE((SELECT Enabled FROM monitorlist WHERE MonitorID=@ID),1)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
sTimeStamp = "@TimeStamp"
sBackupLimit = "@BackupLimit"
Else
sTimeStamp = "COALESCE((SELECT TimeStamp FROM monitorlist WHERE MonitorID=@ID),0)"
sBackupLimit = "COALESCE((SELECT BackupLimit FROM monitorlist WHERE MonitorID=@ID),2)"
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
sVersion = "@Version"
Else
sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)"
End If
sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder) "
sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, "
sSQL &= sTimeStamp & ", @ExcludeList, " & sGamePath & ", "
sSQL &= sIcon & ", @Hours, " & sVersion & ", "
sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ",@CleanFolder);"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
'Core Parameters
hshParams.Add("ID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
hshParams.Add("CleanFolder", oGame.CleanFolder)
'Optional Parameters
If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then
hshParams.Add("Company", oGame.Company)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.GamePath) = clsGame.eOptionalSyncFields.GamePath Then
hshParams.Add("ProcessPath", oGame.ProcessPath)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Icon) = clsGame.eOptionalSyncFields.Icon Then
hshParams.Add("Icon", oGame.Icon)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.MonitorGame) = clsGame.eOptionalSyncFields.MonitorGame Then
hshParams.Add("Enabled", oGame.Enabled)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.TimeStamp) = clsGame.eOptionalSyncFields.TimeStamp Then
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("BackupLimit", oGame.BackupLimit)
End If
If (eSyncFields And clsGame.eOptionalSyncFields.Version) = clsGame.eOptionalSyncFields.Version Then
hshParams.Add("Version", oGame.Version)
End If
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoListDeleteSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE MonitorID = @MonitorID;"
sSQL &= "DELETE FROM monitorlist "
sSQL &= "WHERE Name = @Name AND Process= @Process;"
For Each oGame As clsGame In hshGames.Values
hshParams = New Hashtable
hshParams.Add("MonitorID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub SyncMonitorLists(ByVal eSyncFields As clsGame.eOptionalSyncFields, Optional ByVal bToRemote As Boolean = True)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim hshDeleteItems As Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Dim iChanges As Integer
Cursor.Current = Cursors.WaitCursor
If bToRemote Then
RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog(mgrMonitorList_SyncFromMaster, False, ToolTipIcon.Info, True)
End If
'Add / Update Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
If oFromItem.SyncEquals(oToItem, eSyncFields) Then
hshSyncItems.Remove(oFromItem.CompoundKey)
End If
End If
Next
If bToRemote Then
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote, eSyncFields)
Else
DoListAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local, eSyncFields)
End If
'Sync Tags
iChanges = mgrTags.SyncTags(bToRemote)
iChanges += mgrGameTags.SyncGameTags(bToRemote)
'Delete Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
If hshCompareFrom.Contains(oToItem.CompoundKey) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.CompoundKey), clsGame)
If oToItem.MinimalEquals(oFromItem) Then
hshDeleteItems.Remove(oToItem.CompoundKey)
End If
End If
Next
If bToRemote Then
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Remote)
Else
DoListDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
End If
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True)
Cursor.Current = Cursors.Default
Application.DoEvents()
End Sub
'Filter Functions
Private Shared Function BuildFilterQuery(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, ByRef hshParams As Hashtable) As String
Dim sSQL As String = String.Empty
Dim iCounter As Integer = 0
Select Case eFilterType
Case frmFilter.eFilterType.NoFilter
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder FROM monitorlist ORDER BY Name Asc"
Case frmFilter.eFilterType.FieldAnd, frmFilter.eFilterType.FieldOr
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder FROM monitorlist"
If hshStringFilters.Count > 0 Then
sSQL &= " WHERE ("
For Each de As DictionaryEntry In hshStringFilters
sSQL &= de.Key & " LIKE @" & de.Key
hshParams.Add(de.Key, "%" & de.Value.ToString & "%")
iCounter += 1
If iCounter <> hshStringFilters.Count Then
Select Case eFilterType
Case frmFilter.eFilterType.FieldAnd
sSQL &= " AND "
Case frmFilter.eFilterType.FieldOr
sSQL &= " OR "
End Select
End If
Next
sSQL &= ")"
End If
sSQL &= " ORDER BY Name Asc"
Case frmFilter.eFilterType.AnyTag
sSQL = "SELECT DISTINCT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder FROM monitorlist "
sSQL &= "NATURAL JOIN gametags WHERE gametags.TagID IN ("
For Each oTag As clsTag In oTagFilters
sSQL &= "@TagID" & iCounter & ","
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ") ORDER BY Name Asc"
Case frmFilter.eFilterType.AllTags
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder FROM monitorlist WHERE MonitorID IN "
For Each oTag As clsTag In oTagFilters
sSQL &= "(SELECT MonitorID FROM gametags WHERE monitorlist.MonitorID = gametags.MonitorID And TagID = @TagID" & iCounter & ")"
If iCounter <> oTagFilters.Count - 1 Then
sSQL &= " AND MonitorID IN "
End If
hshParams.Add("TagID" & iCounter, oTag.ID)
iCounter += 1
Next
sSQL &= " ORDER BY Name Asc"
Case frmFilter.eFilterType.NoTags
sSQL = "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder FROM monitorlist WHERE MonitorID NOT IN (SELECT MonitorID FROM gametags) ORDER BY Name Asc"
End Select
Return sSQL
End Function
Public Shared Function ReadFilteredList(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String = String.Empty
Dim hshList As New Hashtable
Dim oGame As clsGame
Dim hshParams As New Hashtable
Dim iCounter As Integer = 0
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = MapToObject(dr)
hshList.Add(oGame.ID, oGame)
Next
Return hshList
End Function
'Import / Export Functions
Public Shared Function ReadListForExport(ByVal oTagFilters As List(Of clsTag), ByVal hshStringFilters As Hashtable, ByVal eFilterType As frmFilter.eFilterType, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As List(Of Game)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String = String.Empty
Dim sID As String
Dim oList As New List(Of Game)
Dim oGame As Game
Dim hshParams As New Hashtable
sSQL = BuildFilterQuery(oTagFilters, hshStringFilters, eFilterType, hshParams)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = New Game
sID = CStr(dr("MonitorID"))
oGame.Name = CStr(dr("Name"))
oGame.ProcessName = CStr(dr("Process"))
If Not IsDBNull(dr("Path")) Then oGame.Path = CStr(dr("Path"))
oGame.AbsolutePath = CBool(dr("AbsolutePath"))
oGame.FolderSave = CBool(dr("FolderSave"))
If Not IsDBNull(dr("FileType")) Then oGame.FileType = CStr(dr("FileType"))
If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList"))
oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID)
oList.Add(oGame)
Next
Return oList
End Function
Public Shared Function DoImport(ByVal sPath As String) As Boolean
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
If mgrCommon.CheckAddress(sPath) Then
ImportMonitorList(sPath, True)
Return True
Else
mgrCommon.ShowMessage(mgrMonitorList_WebNoReponse, sPath, MsgBoxStyle.Exclamation)
Return False
End If
Else
If File.Exists(sPath) Then
ImportMonitorList(sPath)
Return True
Else
mgrCommon.ShowMessage(mgrMonitorList_FileNotFound, sPath, MsgBoxStyle.Exclamation)
Return False
End If
End If
Return True
End Function
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Cursor.Current = Cursors.WaitCursor
'Add / Update Sync
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, bWebRead)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.CompoundKey) Then
oToItem = DirectCast(hshCompareTo(oFromItem.CompoundKey), clsGame)
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.CompoundKey)
End If
End If
Next
Cursor.Current = Cursors.Default
If hshSyncItems.Count > 0 Then
Dim frm As New frmAdvancedImport
frm.ImportData = hshSyncItems
If frm.ShowDialog() = DialogResult.OK Then
Cursor.Current = Cursors.WaitCursor
DoListAddUpdateSync(frm.FinalData)
mgrTags.DoTagAddImport(frm.FinalData)
Cursor.Current = Cursors.Default
mgrCommon.ShowMessage(mgrMonitorList_ImportComplete, MsgBoxStyle.Information)
End If
Else
mgrCommon.ShowMessage(mgrMonitorList_ImportNothing, MsgBoxStyle.Information)
End If
Application.DoEvents()
End Sub
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
Dim oList As List(Of Game)
Dim bSuccess As Boolean = False
Dim oTagFilters As New List(Of clsTag)
Dim oStringFilters As New Hashtable
Dim eCurrentFilter As frmFilter.eFilterType = frmFilter.eFilterType.NoFilter
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmApplyFilter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Dim frm As New frmFilter
frm.ShowDialog()
oTagFilters = frm.TagFilters
oStringFilters = frm.StringFilters
eCurrentFilter = frm.FilterType
End If
oList = ReadListForExport(oTagFilters, oStringFilters, eCurrentFilter)
bSuccess = mgrXML.SerializeAndExport(oList, sLocation)
If bSuccess Then
mgrCommon.ShowMessage(mgrMonitorList_ExportComplete, oList.Count, MsgBoxStyle.Information)
End If
End Sub
'Other Functions
Public Shared Sub HandleBackupLocationChange(ByVal oSettings As mgrSettings)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
Dim iGameCount As Integer
'Check if a remote database already exists in the new backup location
If oDatabase.CheckDB() Then
'Make sure database is the latest version
oDatabase.DatabaseUpgrade()
'See if the remote database is empty
iGameCount = mgrMonitorList.ReadList(eListTypes.FullList, mgrSQLite.Database.Remote).Count
'If the remote database actually contains a list, then ask what to do
If iGameCount > 0 Then
If mgrCommon.ShowMessage(mgrMonitorList_ConfirmExistingData, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields, False)
End If
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End If
Else
mgrMonitorList.SyncMonitorLists(oSettings.SyncFields)
End If
End Sub
End Class End Class
+97 -92
View File
@@ -1,16 +1,15 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Reflection Imports System.Reflection
Public Class mgrPath Public Class mgrPath
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath 'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\gbm" Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & Path.DirectorySeparatorChar & "gbm"
Private Shared sDBLocation As String = sSettingsRoot & "\gbm.s3db" Private Shared sDBLocation As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm.s3db"
Private Shared sIncludeFile As String = sSettingsRoot & "\gbm_include.txt" Private Shared sIncludeFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_include.txt"
Private Shared sExcludeFile As String = sSettingsRoot & "\gbm_exclude.txt" Private Shared sExcludeFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_exclude.txt"
Private Shared sOfficialImportURL As String = "http://backupmonitor.sourceforge.net/GBM_Official.xml" Private Shared sLogFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_log_" & Date.Now.ToString("dd-MM-yyyy-HH-mm-ss") & ".txt"
Private Shared sOfficialManualURL As String = "http://backupmonitor.sourceforge.net/manual.php"
Private Shared sOfficialUpdatesURL As String = "http://backupmonitor.sourceforge.net/"
Private Shared sRemoteDatabaseLocation As String Private Shared sRemoteDatabaseLocation As String
Private Shared hshCustomVariables As Hashtable Private Shared hshCustomVariables As Hashtable
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
@@ -38,8 +37,12 @@ Public Class mgrPath
End Get End Get
End Property End Property
Shared ReadOnly Property Utility7zLocation As String Shared ReadOnly Property Default7zLocation As String
Get Get
If mgrCommon.IsUnix Then
Return "/usr/bin/7za"
End If
Select Case oReleaseType Select Case oReleaseType
Case ProcessorArchitecture.Amd64 Case ProcessorArchitecture.Amd64
Return Application.StartupPath & "\Utilities\x64\7za.exe" Return Application.StartupPath & "\Utilities\x64\7za.exe"
@@ -75,21 +78,9 @@ Public Class mgrPath
End Get End Get
End Property End Property
Shared ReadOnly Property OfficialManualURL As String Shared ReadOnly Property LogFileLocation As String
Get Get
Return sOfficialManualURL Return sLogFile
End Get
End Property
Shared ReadOnly Property OfficialUpdatesURL As String
Get
Return sOfficialUpdatesURL
End Get
End Property
Shared ReadOnly Property OfficialImportURL As String
Get
Return sOfficialImportURL
End Get End Get
End Property End Property
@@ -104,14 +95,12 @@ Public Class mgrPath
Return sRemoteDatabaseLocation Return sRemoteDatabaseLocation
End Get End Get
Set(value As String) Set(value As String)
sRemoteDatabaseLocation = value & "\gbm.s3db" sRemoteDatabaseLocation = value & Path.DirectorySeparatorChar & "gbm.s3db"
End Set End Set
End Property End Property
Public Shared Function ValidateForFileSystem(ByVal sCheckString As String) As String Public Shared Function ValidateForFileSystem(ByVal sCheckString As String) As String
Dim cInvalidCharacters As Char() = {"\", "/", ":", "*", "?", """", "<", ">", "|"} Dim cInvalidCharacters As Char() = {"\", "/", ":", "*", "?", """", "<", ">", "|", "."}
For Each c As Char In cInvalidCharacters For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "") sCheckString = sCheckString.Replace(c, "")
@@ -121,8 +110,9 @@ Public Class mgrPath
sCheckString = sCheckString.Substring(0, 257) sCheckString = sCheckString.Substring(0, 257)
End If End If
Return sCheckString Return sCheckString.Trim
End Function End Function
Public Shared Function DetermineRelativePath(ByVal sProcessPath As String, ByVal sSavePath As String) As String Public Shared Function DetermineRelativePath(ByVal sProcessPath As String, ByVal sSavePath As String) As String
Dim sPath1Array As String() Dim sPath1Array As String()
Dim sPath2Array As String() Dim sPath2Array As String()
@@ -133,19 +123,27 @@ Public Class mgrPath
Dim iRemove As Integer = 0 Dim iRemove As Integer = 0
Dim iBackFolders As Integer = 0 Dim iBackFolders As Integer = 0
Dim bDeep As Boolean Dim bDeep As Boolean
Dim cDS As Char = Path.DirectorySeparatorChar 'Set the directory seperator based on the OS
'We are working with a case insenstive file system, ensure a uniform case If Not mgrCommon.IsUnix Then
sProcessPath = sProcessPath.ToLower 'If we are working with a case insenstive file system, use a uniform case to reduce possible issues
sSavePath = sSavePath.ToLower sProcessPath = sProcessPath.ToLower
sSavePath = sSavePath.ToLower
Else
'If we are on Unix trim the root off
sProcessPath = sProcessPath.TrimStart(cDS)
sSavePath = sSavePath.TrimStart(cDS)
End If
'We need to ensure we have a single trailing slash on the parameters 'We need to ensure we have a single trailing slash on the parameters
sProcessPath = sProcessPath.TrimEnd("\") sProcessPath = sProcessPath.TrimEnd(cDS)
sSavePath = sSavePath.TrimEnd("\") sSavePath = sSavePath.TrimEnd(cDS)
sProcessPath &= "\" sProcessPath &= cDS
sSavePath &= "\" sSavePath &= cDS
'Determines the direction we need to go, we always want to be relative to the process location 'Determines the direction we need to go, we always want to be relative to the process location
If sSavePath.Split("\").Length > sProcessPath.Split("\").Length Then If sSavePath.Split(cDS).Length > sProcessPath.Split(cDS).Length Then
sPath1 = sProcessPath sPath1 = sProcessPath
sPath2 = sSavePath sPath2 = sSavePath
bDeep = True bDeep = True
@@ -156,8 +154,8 @@ Public Class mgrPath
End If End If
'Build an array of folders to work with from each path 'Build an array of folders to work with from each path
sPath1Array = sPath1.Split("\") sPath1Array = sPath1.Split(cDS)
sPath2Array = sPath2.Split("\") sPath2Array = sPath2.Split(cDS)
'Take the shortest path and remove the common folders from both 'Take the shortest path and remove the common folders from both
For Each s As String In sPath1Array For Each s As String In sPath1Array
@@ -169,25 +167,25 @@ Public Class mgrPath
Next Next
'Remove the trailing slashes 'Remove the trailing slashes
sPath1 = sPath1.TrimEnd("\") sPath1 = sPath1.TrimEnd(cDS)
sPath2 = sPath2.TrimEnd("\") sPath2 = sPath2.TrimEnd(cDS)
'Determine which way we go 'Determine which way we go
If bDeep Then If bDeep Then
If sPath1.Length > 0 Then If sPath1.Length > 0 Then
iBackFolders = sPath1.Split("\").Length iBackFolders = sPath1.Split(cDS).Length
End If End If
sResult = sPath2 sResult = sPath2
Else Else
If sPath2.Length > 0 Then If sPath2.Length > 0 Then
iBackFolders = sPath2.Split("\").Length iBackFolders = sPath2.Split(cDS).Length
End If End If
sResult = sPath1 sResult = sPath1
End If End If
'Insert direction modifiers based on how many folders are left 'Insert direction modifiers based on how many folders are left
For i = 1 To iBackFolders For i = 1 To iBackFolders
sResult = "..\" & sResult sResult = ".." & cDS & sResult
Next i Next i
'Done 'Done
@@ -202,13 +200,12 @@ Public Class mgrPath
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable Dim oCustomVariable As clsPathVariable
If sValue.Contains("*mydocs*") Then
Return sValue.Replace("*mydocs*", sMyDocs)
End If
If sValue.Contains("*publicdocs*") Then For Each oCustomVariable In hshCustomVariables.Values
Return sValue.Replace("*publicdocs*", sPublicDocs) If sValue.Contains(oCustomVariable.FormattedName) Then
End If Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
End If
Next
If sValue.Contains("*appdatalocal*") Then If sValue.Contains("*appdatalocal*") Then
Return sValue.Replace("*appdatalocal*", sAppDataLocal) Return sValue.Replace("*appdatalocal*", sAppDataLocal)
@@ -218,15 +215,21 @@ Public Class mgrPath
Return sValue.Replace("*appdataroaming*", sAppDataRoaming) Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
End If End If
If sValue.Contains("*currentuser*") Then 'This needs to be tested last for Unix compatability
Return sValue.Replace("*currentuser*", sCurrentUser) If sValue.Contains("*mydocs*") Then
Return sValue.Replace("*mydocs*", sMyDocs)
End If End If
For Each oCustomVariable In hshCustomVariables.Values 'Don't use these in Unix
If sValue.Contains(oCustomVariable.FormattedName) Then If Not mgrCommon.IsUnix Then
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path) If sValue.Contains("*publicdocs*") Then
Return sValue.Replace("*publicdocs*", sPublicDocs)
End If End If
Next
If sValue.Contains("*currentuser*") Then
Return sValue.Replace("*currentuser*", sCurrentUser)
End If
End If
Return sValue Return sValue
End Function End Function
@@ -239,13 +242,11 @@ Public Class mgrPath
Dim sCurrentUser As String = "*currentuser*" Dim sCurrentUser As String = "*currentuser*"
Dim oCustomVariable As clsPathVariable Dim oCustomVariable As clsPathVariable
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then For Each oCustomVariable In hshCustomVariables.Values
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs) If sValue.Contains(oCustomVariable.Path) Then
End If Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then Next
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal) Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal)
@@ -255,15 +256,21 @@ Public Class mgrPath
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming) Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming)
End If End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then 'This needs to be tested last for Unix compatability
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser) If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs)
End If End If
For Each oCustomVariable In hshCustomVariables.Values 'Don't use these in Unix
If sValue.Contains(oCustomVariable.Path) Then If Not mgrCommon.IsUnix Then
Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName) If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
End If End If
Next
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser)
End If
End If
Return sValue Return sValue
End Function End Function
@@ -273,11 +280,16 @@ Public Class mgrPath
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
Dim oCustomVariable As clsPathVariable Dim oCustomVariable As clsPathVariable
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
'Don't use these in Unix
If Not mgrCommon.IsUnix Then
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
End If
'Load Custom Variables 'Load Custom Variables
For Each oCustomVariable In hshCustomVariables.Values For Each oCustomVariable In hshCustomVariables.Values
@@ -319,11 +331,11 @@ Public Class mgrPath
hshCustomVariables = mgrVariables.ReadVariables hshCustomVariables = mgrVariables.ReadVariables
End Sub End Sub
Public Shared Function SetManualgamePath() As String Public Shared Function SetManualGamePath() As String
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sNewPath As String Dim sNewPath As String
sNewPath = mgrCommon.OpenFolderBrowser("Choose the game folder containing the executable.", sDefaultFolder, False) sNewPath = mgrCommon.OpenFolderBrowser(mgrPath_ChoosePath, sDefaultFolder, False)
Return sNewPath Return sNewPath
End Function End Function
@@ -334,48 +346,43 @@ Public Class mgrPath
Dim sFolder As String = String.Empty Dim sFolder As String = String.Empty
Dim bSearchFailed As Boolean = False Dim bSearchFailed As Boolean = False
frmFind.GameName = sGameName
frmFind.SearchItem = sProcess & ".*" frmFind.SearchItem = sProcess & ".*"
frmFind.FolderSearch = False frmFind.FolderSearch = False
'We can't automatically search for certain game types 'We can't automatically search for certain game types
If bNoAuto Then If bNoAuto Then
sMessage = sSearchReason & vbCrLf & vbCrLf & "Do you wish to manually set the game path? (Path will be saved)" sMessage = mgrCommon.FormatString(mgrPath_ConfirmManualPath, sSearchReason)
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath() sFolder = SetManualgamePath()
End If End If
Return sFolder Return sFolder
End If End If
sMessage = sSearchReason & vbCrLf & vbCrLf & "Do you wish to automatically search for the game path? (Path will be saved)" sMessage = mgrCommon.FormatString(mgrPath_ConfirmAutoPath, sSearchReason)
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
frmFind.ShowDialog() frmFind.ShowDialog()
If frmFind.FoundItem <> String.Empty Then If frmFind.FoundItem <> String.Empty Then
sFolder = IO.Path.GetDirectoryName(frmFind.FoundItem) Return frmFind.FoundItem
sMessage = sGameName & " was located in the following folder:" & vbCrLf & vbCrLf & _
sFolder & vbCrLf & vbCrLf & "Is this correct?"
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
Return sFolder
Else
sFolder = String.Empty
End If
Else Else
bSearchFailed = True bSearchFailed = True
End If End If
If bSearchFailed Then If bSearchFailed Then
sMessage = "The search failed to locate the path for " & sGameName & "." & vbCrLf & vbCrLf & _ sMessage = mgrCommon.FormatString(mgrPath_ConfirmAutoFailure, sGameName)
"Do you wish to manually set the game path? (Path will be saved)"
Else Else
sMessage = "Do you wish to manually set the game path? (Path will be saved)" sMessage = mgPath_ConfirmManualPathNoParam
End If End If
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then If mgrCommon.ShowMessage(sMessage, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sFolder = SetManualgamePath() sFolder = SetManualgamePath()
End If End If
frmFind.Dispose()
End If End If
Return sFolder Return sFolder
@@ -385,9 +392,7 @@ Public Class mgrPath
Dim dBrowser As FolderBrowserDialog Dim dBrowser As FolderBrowserDialog
If Not Directory.Exists(sBackupPath) Then If Not Directory.Exists(sBackupPath) Then
If MsgBox("The backup location " & sBackupPath & " is not available." & vbCrLf & _ If mgrCommon.ShowMessage(mgrPath_ConfirmBackupLocation, sBackupPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
"It may be on an external or network drive that isn't connected." & vbCrLf & vbCrLf & _
"Do you want to select another backup location and continue?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
dBrowser = New FolderBrowserDialog dBrowser = New FolderBrowserDialog
dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
If dBrowser.ShowDialog = DialogResult.OK Then If dBrowser.ShowDialog = DialogResult.OK Then
+68 -24
View File
@@ -77,15 +77,7 @@ Public Class mgrProcesses
bDuplicates = True bDuplicates = True
oDuplicateGames.Clear() oDuplicateGames.Clear()
For Each o As clsGame In hshScanList.Values For Each o As clsGame In hshScanList.Values
If o.ProcessName.Contains("dosbox") Then sProcess = o.ProcessName.Split(":")(0)
If o.ProcessName.Split(":").Length = 3 Then
sProcess = o.ProcessName.Remove(o.ProcessName.LastIndexOf(":"))
Else
sProcess = o.ProcessName
End If
Else
sProcess = o.ProcessName.Split(":")(0)
End If
If o.Duplicate = True And sProcess = oGame.TrueProcess Then If o.Duplicate = True And sProcess = oGame.TrueProcess Then
oDuplicateGames.Add(o.ShallowCopy) oDuplicateGames.Add(o.ShallowCopy)
@@ -93,25 +85,69 @@ Public Class mgrProcesses
Next Next
End Sub End Sub
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer) As Boolean 'This function will only work correctly on Unix
Private Function GetUnixProcessArguments(ByVal prs As Process) As String()
Dim sArguments As String
Try
sArguments = File.ReadAllText("/proc/" & prs.Id.ToString() & "/cmdline")
Return sArguments.Split(vbNullChar)
Catch ex As Exception
Return New String() {String.Empty}
End Try
End Function
'This function will only work correctly on Unix
Private Function GetUnixSymLinkDirectory(ByVal prs As Process) As String
Dim prsls As Process
Dim slsinfo As String()
'This is the best way I can think of to determine the end point of a symlink without doing even more crazy shit
Try
prsls = New Process
prsls.StartInfo.FileName = "/bin/bash"
prsls.StartInfo.Arguments = "-c ""ls -l /proc/" & prs.Id.ToString & " | grep cwd"""
prsls.StartInfo.UseShellExecute = False
prsls.StartInfo.RedirectStandardOutput = True
prsls.StartInfo.CreateNoWindow = True
prsls.Start()
slsinfo = prsls.StandardOutput.ReadToEnd().Split(">")
Return slsinfo(slsinfo.Length - 1).Trim
Catch ex As Exception
Return String.Empty
End Try
End Function
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean
Dim prsList() As Process = Process.GetProcesses Dim prsList() As Process = Process.GetProcesses
Dim sDBoxProcess As String()
Dim sProcessCheck As String = String.Empty Dim sProcessCheck As String = String.Empty
Dim sProcessList As String = String.Empty
Dim bWineProcess As Boolean = False
For Each prsCurrent As Process In prsList For Each prsCurrent As Process In prsList
'Handle DOSBox Processes 'This needs to be wrapped due to issues with Mono.
If prsCurrent.ProcessName.ToLower = "dosbox" Then Try
sDBoxProcess = prsCurrent.MainWindowTitle.Split(":")
'If the dosbox process title doesn't have 3 elements it's not ready yet.
If sDBoxProcess.Length = 3 Then
sProcessCheck = "dosbox:" & sDBoxProcess(2).Trim
Else
'Drop out for now
Return False
End If
Else
sProcessCheck = prsCurrent.ProcessName sProcessCheck = prsCurrent.ProcessName
End If
'Unix Handler
'We need some special handling for Wine processes
If mgrCommon.IsUnix And (sProcessCheck.ToLower = "wine-preloader" Or sProcessCheck.ToLower = "wine64-preloader") Then
Dim sWinePath As String()
'We can't use Path.GetFileName here, Wine uses the Windows seperator in arguments and Mono expects a different one in Unix.
sWinePath = GetUnixProcessArguments(prsCurrent)(0).Split("\")
sProcessCheck = sWinePath(sWinePath.Length - 1).Replace(".exe", "")
bWineProcess = True
Else
bWineProcess = False
End If
If bDebugMode And mgrCommon.IsUnix Then
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & " " & GetUnixProcessArguments(prsCurrent)(0) & vbCrLf
ElseIf bDebugMode Then
sProcessList &= prsCurrent.Id & " " & prsCurrent.ProcessName & vbCrLf
End If
Catch ex As Exception
'Do Nothing
End Try
If hshScanList.ContainsKey(sProcessCheck) Then If hshScanList.ContainsKey(sProcessCheck) Then
prsFoundProcess = prsCurrent prsFoundProcess = prsCurrent
@@ -126,7 +162,11 @@ Public Class mgrProcesses
If Not oGame.AbsolutePath Or oGame.Duplicate Then If Not oGame.AbsolutePath Or oGame.Duplicate Then
Try Try
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName) If Not bWineProcess Then
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName)
Else
oGame.ProcessPath = GetUnixSymLinkDirectory(prsCurrent)
End If
Catch exWin32 As System.ComponentModel.Win32Exception Catch exWin32 As System.ComponentModel.Win32Exception
'If an exception occurs the process is: 'If an exception occurs the process is:
'Running as administrator and the app isn't. 'Running as administrator and the app isn't.
@@ -138,10 +178,12 @@ Public Class mgrProcesses
bNeedsPath = True bNeedsPath = True
iErrorCode = 299 iErrorCode = 299
Else Else
If bDebugMode Then mgrCommon.ShowMessage(exWin32.NativeErrorCode & " " & exWin32.Message & vbCrLf & vbCrLf & exWin32.StackTrace, MsgBoxStyle.Critical)
'A different failure occured, drop out and continue to scan. 'A different failure occured, drop out and continue to scan.
Return False Return False
End If End If
Catch exAll As Exception Catch exAll As Exception
If bDebugMode Then mgrCommon.ShowMessage(exAll.Message & vbCrLf & vbCrLf & exAll.StackTrace, MsgBoxStyle.Critical)
'A different failure occured, drop out and continue to scan. 'A different failure occured, drop out and continue to scan.
Return False Return False
End Try End Try
@@ -158,6 +200,8 @@ Public Class mgrProcesses
End If End If
Next Next
If bDebugMode Then mgrCommon.SaveText(sProcessList, mgrPath.SettingsRoot & "/gbm_process_list.txt")
Return False Return False
End Function End Function
+116 -89
View File
@@ -1,4 +1,5 @@
Imports System.IO Imports GBM.My.Resources
Imports System.IO
Public Class mgrRestore Public Class mgrRestore
@@ -27,21 +28,41 @@ Public Class mgrRestore
Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup) Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup)
Public Event SetLastAction(sMessage As String) Public Event SetLastAction(sMessage As String)
Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame) As Boolean 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 sProcess As String
Dim sRestorePath As String Dim sRestorePath As String
Dim bNoAuto As Boolean Dim bNoAuto As Boolean
DoPathOverride(oRestoreInfo, oGame)
If Not oRestoreInfo.AbsolutePath Then If Not oRestoreInfo.AbsolutePath Then
If oGame.ProcessPath <> String.Empty Then If oGame.ProcessPath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & "\" & oRestoreInfo.RestorePath oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
Else Else
sProcess = oGame.TrueProcess sProcess = oGame.TrueProcess
If oGame.Duplicate = True Or oGame.ProcessName.Contains("dosbox") Then bNoAuto = True If mgrCommon.IsProcessNotSearchable(oGame) Then bNoAuto = True
sRestorePath = mgrPath.ProcessPathSearch(oRestoreInfo.Name, sProcess, oRestoreInfo.Name & " uses a relative path and has never been detected on this computer.", bNoAuto) sRestorePath = mgrPath.ProcessPathSearch(oRestoreInfo.Name, sProcess, mgrCommon.FormatString(mgrRestore_RelativeNeedPath, oRestoreInfo.Name), bNoAuto)
If sRestorePath <> String.Empty Then If sRestorePath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = sRestorePath & "\" & oRestoreInfo.RestorePath 'Update the process path in game object, save it, and make sure a monitor list reload is triggered
oGame.ProcessPath = sRestorePath
mgrMonitorList.DoListUpdate(oGame)
bTriggerReload = True
'Set path for restore
oRestoreInfo.RelativeRestorePath = sRestorePath & Path.DirectorySeparatorChar & oRestoreInfo.RestorePath
Else Else
Return False Return False
End If End If
@@ -59,8 +80,8 @@ Public Class mgrRestore
Dim bLocal As Boolean = False Dim bLocal As Boolean = False
Dim bRemote As Boolean = False Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
If slLocalManifest.Contains(sAppName) Then If slLocalManifest.Contains(sAppName) Then
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup) oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
@@ -75,8 +96,6 @@ Public Class mgrRestore
If bLocal And bRemote Then If bLocal And bRemote Then
'Compare 'Compare
If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then
oRemoteItem.LastDateUpdated = oLocalItem.DateUpdated
oRemoteItem.LastUpdatedBy = oLocalItem.UpdatedBy
Return True Return True
End If End If
End If End If
@@ -96,26 +115,18 @@ Public Class mgrRestore
Dim bLocal As Boolean = False Dim bLocal As Boolean = False
Dim bRemote As Boolean = False Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slRemoteManifest.Values For Each oItem As clsBackup In slRemoteManifest.Values
If slLocalManifest.Contains(oItem.Name) Then If slLocalManifest.Contains(oItem.Name) Then
oLocalItem = DirectCast(slLocalManifest(oItem.Name), clsBackup) oLocalItem = DirectCast(slLocalManifest(oItem.Name), clsBackup)
If oItem.DateUpdated > oLocalItem.DateUpdated Then If oItem.DateUpdated > oLocalItem.DateUpdated Then
oLocalItem.FileName = oItem.FileName slRestoreItems.Add(oItem.Name, oItem)
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If End If
Else Else
oLocalItem = oItem slRestoreItems.Add(oItem.Name, oItem)
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
oLocalItem.DateUpdated = Nothing
oLocalItem.UpdatedBy = Nothing
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If End If
Next Next
@@ -127,33 +138,81 @@ Public Class mgrRestore
Dim slRemoteManifest As SortedList Dim slRemoteManifest As SortedList
Dim slRemovedItems As New SortedList Dim slRemovedItems As New SortedList
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slLocalManifest.Values For Each oItem As clsBackup In slLocalManifest.Values
If Not slRemoteManifest.Contains(oItem.Name) Then If Not slRemoteManifest.Contains(oItem.Name) Then
slRemovedItems.Add(oItem.Name, oItem) slRemovedItems.Add(oItem.Name, oItem)
mgrManifest.DoManifestDelete(oItem, mgrSQLite.Database.Local) mgrManifest.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local)
End If End If
Next Next
Return slRemovedItems Return slRemovedItems
End Function End Function
Public Function CheckRestorePrereq(ByVal oBackupInfo As clsBackup, ByVal bCleanFolder As Boolean) As Boolean
Dim sHash As String
Dim sExtractPath As String
Dim sBackupFile As String = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
Else
sExtractPath = oBackupInfo.RelativeRestorePath
End If
'Check if restore location exists, prompt to create if it doesn't.
If Not Directory.Exists(sExtractPath) Then
If mgrCommon.ShowMessage(mgrRestore_ConfirmCreatePath, sExtractPath, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Try
Directory.CreateDirectory(sExtractPath)
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorCreatePath, ex.Message), False, ToolTipIcon.Error, True)
Return False
End Try
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorNoPath, sExtractPath), False, ToolTipIcon.Error, True)
Return False
End If
Else
If bCleanFolder Then
mgrCommon.DeleteDirectory(sExtractPath, True)
Directory.CreateDirectory(sExtractPath)
End If
End If
'Check file integrity
If oBackupInfo.CheckSum <> String.Empty Then
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If sHash <> oBackupInfo.CheckSum Then
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFailedCheck, oBackupInfo.Name), False, ToolTipIcon.Info, True)
If mgrCommon.ShowMessage(mgrRestore_ConfirmFailedCheck, oBackupInfo.Name, MsgBoxStyle.YesNo) = MsgBoxResult.No Then
RaiseEvent UpdateLog(mgrRestore_ErrorCheckAbort, False, ToolTipIcon.Info, True)
Return False
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_Verified, oBackupInfo.Name), False, ToolTipIcon.Info, True)
End If
Else
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_NoVerify, oBackupInfo.Name), False, ToolTipIcon.Info, True)
End If
Return True
End Function
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup)) Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup))
Dim prs7z As Process Dim prs7z As Process
Dim sBackupFile As String Dim sBackupFile As String
Dim sExtractPath As String Dim sExtractPath As String
Dim bDoRestore As Boolean
Dim bRestoreCompleted As Boolean Dim bRestoreCompleted As Boolean
Dim sHash As String
For Each oBackupInfo In oRestoreList For Each oBackupInfo In oRestoreList
'Init 'Init
prs7z = New Process prs7z = New Process
sBackupFile = oSettings.BackupFolder & "\" & oBackupInfo.FileName sBackupFile = oSettings.BackupFolder & Path.DirectorySeparatorChar & oBackupInfo.FileName
sExtractPath = String.Empty sExtractPath = String.Empty
bDoRestore = True
bRestoreCompleted = False bRestoreCompleted = False
CancelOperation = False CancelOperation = False
RaiseEvent UpdateRestoreInfo(oBackupInfo) RaiseEvent UpdateRestoreInfo(oBackupInfo)
@@ -164,55 +223,20 @@ Public Class mgrRestore
sExtractPath = oBackupInfo.RelativeRestorePath sExtractPath = oBackupInfo.RelativeRestorePath
End If End If
'Check if restore location exists, prompt to create if it doesn't. Try
If Not Directory.Exists(sExtractPath) Then If File.Exists(sBackupFile) Then
If MsgBox("The restore path " & sExtractPath & " does not exist." & vbCrLf & vbCrLf & _ If Settings.Is7zUtilityValid Then
"Do you want to create the folder and continue?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then prs7z.StartInfo.Arguments = "x" & oSettings.Prepared7zArguments & """" & sBackupFile & """ -o""" & sExtractPath & Path.DirectorySeparatorChar & """ -aoa -r"
Try prs7z.StartInfo.FileName = oSettings.Utility7zLocation
Directory.CreateDirectory(sExtractPath)
Catch ex As Exception
RaiseEvent UpdateLog("The restore path could not be created due to an unexpected error." & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
bDoRestore = False
End Try
Else
RaiseEvent UpdateLog("Restored Aborted. The path " & sExtractPath & " does not exist.", False, ToolTipIcon.Error, True)
bDoRestore = False
End If
End If
'Check file integrity
If oSettings.CheckSum Then
If oBackupInfo.CheckSum <> String.Empty Then
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If sHash <> oBackupInfo.CheckSum Then
RaiseEvent UpdateLog("The backup file for " & oBackupInfo.Name & " has failed the file integrity check.", False, ToolTipIcon.Info, True)
If MsgBox("The backup file for " & oBackupInfo.Name & " has failed the file intergity check. It may be corrupted, not exist or been modified by another application." & vbCrLf & vbCrLf & _
"Do you still want to restore this backup? (Not Recommended)", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog("Restored Aborted by user due to a failed file integrity check.", False, ToolTipIcon.Info, True)
bDoRestore = False
End If
Else
RaiseEvent UpdateLog(oBackupInfo.Name & " backup has been verified.", False, ToolTipIcon.Info, True)
End If
Else
RaiseEvent UpdateLog(oBackupInfo.Name & " has no stored checksum, verification has been skipped.", False, ToolTipIcon.Info, True)
End If
End If
If bDoRestore Then
Try
If File.Exists(sBackupFile) Then
prs7z.StartInfo.Arguments = "x """ & sBackupFile & """ -o""" & sExtractPath & "\"" -aoa -r"
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True prs7z.StartInfo.CreateNoWindow = True
prs7z.Start() prs7z.Start()
RaiseEvent UpdateLog("Restore to " & sExtractPath & " in progress...", True, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreInProgress, sExtractPath), False, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then If CancelOperation Then
prs7z.Kill() prs7z.Kill()
RaiseEvent UpdateLog("Restored Aborted by user. The save games for " & oBackupInfo.Name & " will be damaged or invalid.", False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorFullAbort, oBackupInfo.Name), True, ToolTipIcon.Error, True)
Exit While Exit While
End If End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False) RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
@@ -220,35 +244,38 @@ Public Class mgrRestore
prs7z.WaitForExit() prs7z.WaitForExit()
If Not CancelOperation Then If Not CancelOperation Then
If prs7z.ExitCode = 0 Then If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(oBackupInfo.Name & " backup restored.", True, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreComplete, oBackupInfo.Name), False, ToolTipIcon.Info, True)
bRestoreCompleted = True bRestoreCompleted = True
Else Else
RaiseEvent UpdateLog(oBackupInfo.Name & " restore operation finished with warnings or errors.", False, ToolTipIcon.Info, True) RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_RestoreWarnings, oBackupInfo.Name), True, ToolTipIcon.Warning, True)
bRestoreCompleted = False bRestoreCompleted = False
End If End If
End If End If
prs7z.Dispose() prs7z.Dispose()
Else Else
RaiseEvent UpdateLog("Restore Aborted. The backup file could not be found. Ensure the backup location is available.", False, ToolTipIcon.Error, True) RaiseEvent UpdateLog(App_Invalid7zDetected, True, ToolTipIcon.Error, True)
bRestoreCompleted = False
End If End If
Else
If bRestoreCompleted Then RaiseEvent UpdateLog(mgrRestore_ErrorNoBackup, True, ToolTipIcon.Error, True)
'Save Local Manifest End If
If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
End If
Catch ex As Exception
RaiseEvent UpdateLog("An unexpected error occured during the restore process." & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
End Try
If bRestoreCompleted Then If bRestoreCompleted Then
RaiseEvent SetLastAction(oBackupInfo.CroppedName & " backup restored") 'Save Local Manifest
Else If mgrManifest.DoGlobalManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
RaiseEvent SetLastAction(oBackupInfo.CroppedName & " restore failed") mgrManifest.DoManifestUpdateByName(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
End If End If
Catch ex As Exception
RaiseEvent UpdateLog(mgrCommon.FormatString(mgrRestore_ErrorOtherFailure, ex.Message), False, ToolTipIcon.Error, True)
End Try
If bRestoreCompleted Then
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionComplete, oBackupInfo.CroppedName))
Else
RaiseEvent SetLastAction(mgrCommon.FormatString(mgrRestore_ActionFailed, oBackupInfo.CroppedName))
End If End If
Next Next
End Sub End Sub
+264 -36
View File
@@ -1,5 +1,6 @@
Imports System.IO Imports GBM.My.Resources
Imports System.Data.SQLite Imports System.IO
Imports Mono.Data.Sqlite
Public Class mgrSQLite Public Class mgrSQLite
@@ -39,7 +40,7 @@ Public Class mgrSQLite
File.Copy(mgrPath.RemoteDatabaseLocation, sNewFile, False) File.Copy(mgrPath.RemoteDatabaseLocation, sNewFile, False)
End Select End Select
Catch ex As Exception Catch ex As Exception
MsgBox("An error occured creating a backup of the database file at " & sNewFile & vbCrLf & vbCrLf & ex.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorBackupFailure, New String() {sNewFile, ex.Message}, MsgBoxStyle.Exclamation)
End Try End Try
End Sub End Sub
@@ -69,21 +70,29 @@ Public Class mgrSQLite
SQLiteConnection.CreateFile(sDatabaseLocation) SQLiteConnection.CreateFile(sDatabaseLocation)
'Add Tables (Settings) '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, " & _ sSql = "CREATE TABLE settings (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " & _ "DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, CheckSum BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL);" "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);"
'Add Tables (Monitor List) 'Add Tables (Monitor List)
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & _ sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & _ "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & _ "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));" "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
'Add Tables (Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
'Add Tables (Game Tags)
sSql &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
'Add Tables (Variables) 'Add Tables (Variables)
sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);" sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
'Add Tables (Local Manifest) 'Add Tables (Local Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & _ sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Set Version 'Set Version
@@ -91,8 +100,8 @@ Public Class mgrSQLite
RunParamQuery(sSql, New Hashtable) RunParamQuery(sSql, New Hashtable)
Return True Return True
Catch e As Exception Catch ex As Exception
MsgBox("An error has occured attempting to create the local application database: " & vbCrLf & vbCrLf & e.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorCreatingLocalDB, ex.Message, MsgBoxStyle.Critical)
Return False Return False
End Try End Try
End Function End Function
@@ -102,25 +111,31 @@ Public Class mgrSQLite
Try Try
'Create the DB 'Create the DB
SQLiteConnection.CreateFile(sDatabaseLocation) SqliteConnection.CreateFile(sDatabaseLocation)
'Add Tables (Remote Monitor List) 'Add Tables (Remote Monitor List)
sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & _ sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " &
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & _ "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " &
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & _ "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " &
"PRIMARY KEY(Name, Process));" "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
'Add Tables (Remote Manifest) 'Add Tables (Remote Manifest)
sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & _ sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " &
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Add Tables (Remote Tags)
sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
'Add Tables (Remote Game Tags)
sSql &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
'Set Version 'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
RunParamQuery(sSql, New Hashtable) RunParamQuery(sSql, New Hashtable)
Return True Return True
Catch e As Exception Catch ex As Exception
MsgBox("An error has occured attempting to create the remote application database: " & vbCrLf & vbCrLf & e.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorCreatingRemoteDB, ex.Message, MsgBoxStyle.Critical)
Return False Return False
End Try End Try
End Function End Function
@@ -140,7 +155,7 @@ Public Class mgrSQLite
Public Sub Connect() Public Sub Connect()
If CheckDB() Then If CheckDB() Then
db = New SQLiteConnection(sConnectString) db = New SqliteConnection(sConnectString)
db.Open() db.Open()
Else Else
CreateDB() CreateDB()
@@ -152,27 +167,53 @@ Public Class mgrSQLite
db.Close() db.Close()
End Sub End Sub
Private Sub BuildParams(ByRef command As SQLiteCommand, ByRef hshParams As Hashtable) Private Sub BuildParams(ByRef command As SqliteCommand, ByRef hshParams As Hashtable)
For Each de As DictionaryEntry In hshParams For Each de As DictionaryEntry In hshParams
command.Parameters.AddWithValue(de.Key, de.Value) command.Parameters.AddWithValue(de.Key, de.Value)
Next Next
End Sub End Sub
Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean
Dim trans As SQLiteTransaction Dim trans As SqliteTransaction
Dim command As SQLiteCommand Dim command As SqliteCommand
Connect() Connect()
command = New SQLiteCommand(sSQL, db) command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams) BuildParams(command, hshParams)
trans = db.BeginTransaction() trans = db.BeginTransaction()
Try Try
command.ExecuteNonQuery() command.ExecuteNonQuery()
trans.Commit() trans.Commit()
Catch e As Exception Catch ex As Exception
trans.Rollback() trans.Rollback()
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Return False
Finally
command.Dispose()
Disconnect()
End Try
Return True
End Function
Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean
Dim trans As SqliteTransaction
Dim command As SqliteCommand
Connect()
command = New SqliteCommand(sSQL, db)
trans = db.BeginTransaction()
Try
For Each hshParams In oParamList
BuildParams(command, hshParams)
command.ExecuteNonQuery()
Next
trans.Commit()
Catch ex As Exception
trans.Rollback()
mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Return False Return False
Finally Finally
command.Dispose() command.Dispose()
@@ -183,19 +224,20 @@ Public Class mgrSQLite
End Function End Function
Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet
Dim adapter As SQLiteDataAdapter Dim adapter As SqliteDataAdapter
Dim command As SQLiteCommand Dim command As SqliteCommand
Dim oData As New DataSet Dim oData As New DataSet
Connect() Connect()
command = New SQLiteCommand(sSQL, db) command = New SqliteCommand(sSQL, db)
BuildParams(command, hshParams) BuildParams(command, hshParams)
Try Try
adapter = New SQLiteDataAdapter(command) adapter = New SqliteDataAdapter()
adapter.SelectCommand = command
adapter.Fill(oData) adapter.Fill(oData)
Catch e As Exception Catch ex As Exception
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Finally Finally
command.Dispose() command.Dispose()
Disconnect() Disconnect()
@@ -411,6 +453,192 @@ Public Class mgrSQLite
End If End If
End If End If
'0.94 Upgrade
If GetDatabaseVersion() < 94 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v93")
'Add Tags Tables
sSQL = "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
'Add new setting
sSQL &= "ALTER TABLE settings ADD COLUMN TimeTracking BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=94"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v93")
'Add Tags Tables
sSQL = "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); "
sSQL &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); "
sSQL &= "PRAGMA user_version=94"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'0.95 Upgrade
If GetDatabaseVersion() < 95 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v94")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN SupressBackup BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN SupressBackupThreshold INTEGER NOT NULL DEFAULT 10;"
sSQL &= "PRAGMA user_version=95"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v94")
sSQL = "PRAGMA user_version=95"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'0.96 Upgrade
If GetDatabaseVersion() < 96 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v95")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN CompressionLevel INTEGER NOT NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=96"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v95")
sSQL = "PRAGMA user_version=96"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'0.97 Upgrade
If GetDatabaseVersion() < 97 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v96")
'Add new settings
sSQL = "ALTER TABLE settings ADD COLUMN Custom7zArguments TEXT;"
sSQL &= "ALTER TABLE settings ADD COLUMN Custom7zLocation TEXT;"
sSQL &= "ALTER TABLE settings ADD COLUMN SyncFields INTEGER NOT NULL DEFAULT 32;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoSaveLog BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=97"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v96")
sSQL = "PRAGMA user_version=97"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'0.98 Upgrade
If GetDatabaseVersion() < 98 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v97")
'Overhaul Manifest Table
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=98"
RunParamQuery(sSQL, New Hashtable)
'Run a compact
CompactDatabase()
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v97")
'Overhaul Manifest Table
sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) "
sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;"
sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;"
'Add backup limit field
sSQL &= "ALTER TABLE monitorlist ADD COLUMN BackupLimit INTEGER NOT NULL DEFAULT 5;"
sSQL &= "PRAGMA user_version=98"
RunParamQuery(sSQL, New Hashtable)
'Run a compact
CompactDatabase()
End If
End If
'1.01 Upgrade
If GetDatabaseVersion() < 101 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v98")
'Remove checksum field
sSQL = "CREATE TABLE settings_new (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " &
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " &
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL, TimeTracking BOOLEAN NOT NULL, " &
"SupressBackup BOOLEAN NOT NULL, SupressBackupThreshold INTEGER NOT NULL, CompressionLevel INTEGER NOT NULL, Custom7zArguments TEXT, " &
"Custom7zLocation TEXT, SyncFields INTEGER NOT NULL, AutoSaveLog BOOLEAN NOT NULL);"
sSQL &= "INSERT INTO settings_new (SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog) " &
"SELECT SettingsID, MonitorOnStartup, StartToTray, ShowDetectionToolTips, DisableConfirmation, CreateSubFolder, " &
"ShowOverwriteWarning, RestoreOnLaunch, BackupFolder, Sync, StartWithWindows, TimeTracking, SupressBackup, SupressBackupThreshold, " &
"CompressionLevel, Custom7zArguments, Custom7zLocation, SyncFields, AutoSaveLog FROM settings;" &
"DROP TABLE settings; ALTER TABLE settings_new RENAME TO settings;"
'Add new field(s)
sSQL &= "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoRestore BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "ALTER TABLE settings ADD COLUMN AutoMark BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v98")
'Add new field(s)
sSQL = "ALTER TABLE monitorlist ADD COLUMN CleanFolder BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=101"
RunParamQuery(sSQL, New Hashtable)
End If
End If
End Sub End Sub
Public Function GetDBSize() As Long Public Function GetDBSize() As Long
@@ -429,8 +657,8 @@ Public Class mgrSQLite
Try Try
command.ExecuteNonQuery() command.ExecuteNonQuery()
Catch e As Exception Catch ex As Exception
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message) mgrCommon.ShowMessage(mgrSQLite_ErrorQueryFailure, New String() {sSQL, ex.Message}, MsgBoxStyle.Exclamation)
Finally Finally
command.Dispose() command.Dispose()
Disconnect() Disconnect()
+175 -18
View File
@@ -9,9 +9,18 @@ Public Class mgrSettings
Private bCreateSubFolder As Boolean = False Private bCreateSubFolder As Boolean = False
Private bShowOverwriteWarning As Boolean = True Private bShowOverwriteWarning As Boolean = True
Private bRestoreOnLaunch As Boolean = False Private bRestoreOnLaunch As Boolean = False
Private bAutoRestore As Boolean = False
Private bAutoMark As Boolean = False
Private bSync As Boolean = True Private bSync As Boolean = True
Private bCheckSum As Boolean = True Private bTimeTracking As Boolean = True
Private bSupressBackup As Boolean = False
Private iSupressBackupThreshold As Integer = 10
Private iCompressionLevel As Integer = 5
Private s7zArguments As String = String.Empty
Private s7zLocation As String = String.Empty
Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"}) Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"})
Private eSyncFields As clsGame.eOptionalSyncFields = clsGame.eOptionalSyncFields.None Or clsGame.eOptionalSyncFields.TimeStamp
Private bAutoSaveLog As Boolean = False
Property StartWithWindows As Boolean Property StartWithWindows As Boolean
Get Get
@@ -85,6 +94,24 @@ Public Class mgrSettings
End Set End Set
End Property End Property
Property AutoRestore As Boolean
Get
Return bAutoRestore
End Get
Set(value As Boolean)
bAutoRestore = value
End Set
End Property
Property AutoMark As Boolean
Get
Return bAutoMark
End Get
Set(value As Boolean)
bAutoMark = value
End Set
End Property
Property Sync As Boolean Property Sync As Boolean
Get Get
Return bSync Return bSync
@@ -94,15 +121,108 @@ Public Class mgrSettings
End Set End Set
End Property End Property
Property CheckSum As Boolean Property TimeTracking As Boolean
Get Get
Return bCheckSum Return bTimeTracking
End Get End Get
Set(value As Boolean) Set(value As Boolean)
bCheckSum = value bTimeTracking = value
End Set End Set
End Property End Property
Property SupressBackup As Boolean
Get
Return bSupressBackup
End Get
Set(value As Boolean)
bSupressBackup = value
End Set
End Property
Property SupressBackupThreshold As Integer
Get
Return iSupressBackupThreshold
End Get
Set(value As Integer)
iSupressBackupThreshold = value
End Set
End Property
Property CompressionLevel As Integer
Get
Return iCompressionLevel
End Get
Set(value As Integer)
iCompressionLevel = value
End Set
End Property
Property Custom7zArguments As String
Get
Return s7zArguments
End Get
Set(value As String)
s7zArguments = value
End Set
End Property
ReadOnly Property Prepared7zArguments As String
Get
'Prepare custom 7z arguments
Dim sPreparedArguments As String
If s7zArguments <> String.Empty Then
'Surround the arguments with spaces to be inserted into command
sPreparedArguments = " " & s7zArguments & " "
Else
'The command always needs at least one space inserted
sPreparedArguments = " "
End If
Return sPreparedArguments
End Get
End Property
Property Custom7zLocation As String
Get
Return s7zLocation
End Get
Set(value As String)
s7zLocation = value
End Set
End Property
ReadOnly Property Is7zUtilityValid As Boolean
Get
'We don't use a packaged 7za on Unix, assume valid.
If mgrCommon.IsUnix Then
Return True
End If
If s7zLocation = String.Empty Then
'Verify stored hash of the default utility if we're using it
Return mgrCommon.UtilityHash = mgrHash.Generate_SHA256_Hash(mgrPath.Default7zLocation)
Else
'When using a custom utility assume it's valid, we have no way to be sure.
Return True
End If
End Get
End Property
ReadOnly Property Utility7zLocation As String
Get
'Return default utility when custom setting is not used
If s7zLocation = String.Empty Then
Return mgrPath.Default7zLocation
Else
'Check if custom utility is available, if not use the default utility
If File.Exists(s7zLocation) Then
Return s7zLocation
Else
Return mgrPath.Default7zLocation
End If
End If
End Get
End Property
Property BackupFolder As String Property BackupFolder As String
Get Get
Return sBackupFolder Return sBackupFolder
@@ -112,6 +232,24 @@ Public Class mgrSettings
End Set End Set
End Property End Property
Property SyncFields As clsGame.eOptionalSyncFields
Get
Return eSyncFields
End Get
Set(value As clsGame.eOptionalSyncFields)
eSyncFields = value
End Set
End Property
Property AutoSaveLog As Boolean
Get
Return bAutoSaveLog
End Get
Set(value As Boolean)
bAutoSaveLog = value
End Set
End Property
Private Sub SaveFromClass() Private Sub SaveFromClass()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
@@ -121,7 +259,9 @@ Public Class mgrSettings
oDatabase.RunParamQuery(sSQL, New Hashtable) oDatabase.RunParamQuery(sSQL, New Hashtable)
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, " sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @CheckSum, @StartWithWindows)" sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @StartWithWindows, "
sSQL &= "@TimeTracking, @SupressBackup, @SupressBackupThreshold, @CompressionLevel, @Custom7zArguments, @Custom7zLocation, "
sSQL &= "@SyncFields, @AutoSaveLog, @AutoRestore, @AutoMark)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup) hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray) hshParams.Add("StartToTray", StartToTray)
@@ -132,9 +272,17 @@ Public Class mgrSettings
hshParams.Add("RestoreOnLaunch", RestoreOnLaunch) hshParams.Add("RestoreOnLaunch", RestoreOnLaunch)
hshParams.Add("BackupFolder", BackupFolder) hshParams.Add("BackupFolder", BackupFolder)
hshParams.Add("Sync", Sync) hshParams.Add("Sync", Sync)
hshParams.Add("CheckSum", CheckSum)
hshParams.Add("StartWithWindows", StartWithWindows) hshParams.Add("StartWithWindows", StartWithWindows)
hshParams.Add("TimeTracking", TimeTracking)
hshParams.Add("SupressBackup", SupressBackup)
hshParams.Add("SupressBackupThreshold", SupressBackupThreshold)
hshParams.Add("CompressionLevel", CompressionLevel)
hshParams.Add("Custom7zArguments", Custom7zArguments)
hshParams.Add("Custom7zLocation", Custom7zLocation)
hshParams.Add("SyncFields", SyncFields)
hshParams.Add("AutoSaveLog", AutoSaveLog)
hshParams.Add("AutoRestore", AutoRestore)
hshParams.Add("AutoMark", AutoMark)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
@@ -149,17 +297,26 @@ Public Class mgrSettings
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
MonitorOnStartup = CBool(dr(1)) MonitorOnStartup = CBool(dr("MonitorOnStartup"))
StartToTray = CBool(dr(2)) StartToTray = CBool(dr("StartToTray"))
ShowDetectionToolTips = CBool(dr(3)) ShowDetectionToolTips = CBool(dr("ShowDetectionToolTips"))
DisableConfirmation = CBool(dr(4)) DisableConfirmation = CBool(dr("DisableConfirmation"))
CreateSubFolder = CBool(dr(5)) CreateSubFolder = CBool(dr("CreateSubFolder"))
ShowOverwriteWarning = CBool(dr(6)) ShowOverwriteWarning = CBool(dr("ShowOverwriteWarning"))
RestoreOnLaunch = CBool(dr(7)) RestoreOnLaunch = CBool(dr("RestoreOnLaunch"))
BackupFolder = CStr(dr(8)) BackupFolder = CStr(dr("BackupFolder"))
Sync = CBool(dr(9)) Sync = CBool(dr("Sync"))
CheckSum = CBool(dr(10)) StartWithWindows = CBool(dr("StartWithWindows"))
StartWithWindows = CBool(dr(11)) TimeTracking = CBool(dr("TimeTracking"))
SupressBackup = CBool(dr("SupressBackup"))
SupressBackupThreshold = CInt(dr("SupressBackupThreshold"))
CompressionLevel = CInt(dr("CompressionLevel"))
If Not IsDBNull(dr("Custom7zArguments")) Then Custom7zArguments = CStr(dr("Custom7zArguments"))
If Not IsDBNull(dr("Custom7zLocation")) Then Custom7zLocation = CStr(dr("Custom7zLocation"))
SyncFields = CInt(dr("SyncFields"))
AutoSaveLog = CBool(dr("AutoSaveLog"))
AutoRestore = CBool(dr("AutoRestore"))
AutoMark = CBool(dr("AutoMark"))
Next Next
oDatabase.Disconnect() oDatabase.Disconnect()
+276
View File
@@ -0,0 +1,276 @@
Public Class mgrTags
Private Shared Function MapToObject(ByVal dr As DataRow) As clsTag
Dim oTag As New clsTag
oTag.ID = CStr(dr("TagID"))
oTag.Name = CStr(dr("Name"))
Return oTag
End Function
Private Shared Function SetCoreParameters(ByVal oTag As clsTag) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name)
Return hshParams
End Function
Public Shared Sub DoTagAdd(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "INSERT INTO tags VALUES (@ID, @Name)"
hshParams = SetCoreParameters(oTag)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoTagUpdate(ByVal oTag As clsTag, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
sSQL = "UPDATE tags SET Name=@Name "
sSQL &= "WHERE TagID = @ID"
hshParams = SetCoreParameters(oTag)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoTagDelete(ByVal sTagID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE TagID = @ID;"
sSQL = "DELETE FROM tags "
sSQL &= "WHERE TagID = @ID;"
hshParams.Add("ID", sTagID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function DoTagGetbyID(ByVal sTagID As String) As clsTag
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oTag As New clsTag
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM tags "
sSQL &= "WHERE TagID = @ID"
hshParams.Add("ID", sTagID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = MapToObject(dr)
Next
Return oTag
End Function
Public Shared Function DoTagGetbyName(ByVal sTagName As String) As clsTag
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oTag As New clsTag
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM tags "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sTagName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = MapToObject(dr)
Next
Return oTag
End Function
Public Shared Function DoCheckDuplicate(ByVal sTagName As String, Optional ByVal sExcludeID As String = "", Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM tags "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sTagName)
If sExcludeID <> String.Empty Then
sSQL &= " AND TagID <> @TagID"
hshParams.Add("TagID", 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 ReadTags(Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim oTag As clsTag
sSQL = "SELECT * from tags"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oTag = MapToObject(dr)
hshList.Add(oTag.Name, oTag)
Next
Return hshList
End Function
Public Shared Sub DoTagAddImport(ByVal hshTags As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim sMonitorID As String
Dim oTag As clsTag
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);"
For Each oGame As clsGame In hshTags.Values
sMonitorID = oGame.ID
For Each t As Tag In oGame.ImportTags
hshParams = New Hashtable
oTag = New clsTag
oTag.Name = t.Name
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name)
hshParams.Add("MonitorID", sMonitorID)
oParamList.Add(hshParams)
Next
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Sub DoTagAddUpdateSync(ByVal hshTags As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "INSERT OR REPLACE INTO tags VALUES (@ID, @Name);"
For Each oTag As clsTag In hshTags.Values
hshParams = New Hashtable
hshParams.Add("ID", oTag.ID)
hshParams.Add("Name", oTag.Name)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Private Shared Sub DoTagDeleteSync(ByVal hshTags As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As Hashtable
Dim oParamList As New List(Of Hashtable)
sSQL = "DELETE FROM gametags "
sSQL &= "WHERE TagID = @ID;"
sSQL = "DELETE FROM tags "
sSQL &= "WHERE TagID = @ID;"
For Each oTag As clsTag In hshTags.Values
hshParams = New Hashtable
hshParams.Add("ID", oTag.ID)
oParamList.Add(hshParams)
Next
oDatabase.RunMassParamQuery(sSQL, oParamList)
End Sub
Public Shared Function SyncTags(Optional ByVal bToRemote As Boolean = True) As Integer
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim hshDeleteItems As Hashtable
Dim oFromItem As clsTag
Dim oToItem As clsTag
'Add / Update Sync
If bToRemote Then
hshCompareFrom = ReadTags(mgrSQLite.Database.Local)
hshCompareTo = ReadTags(mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadTags(mgrSQLite.Database.Remote)
hshCompareTo = ReadTags(mgrSQLite.Database.Local)
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.Name) Then
oToItem = DirectCast(hshCompareTo(oFromItem.Name), clsTag)
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.Name)
End If
End If
Next
If bToRemote Then
DoTagAddUpdateSync(hshSyncItems, mgrSQLite.Database.Remote)
Else
DoTagAddUpdateSync(hshSyncItems, mgrSQLite.Database.Local)
End If
'Delete Sync
If bToRemote Then
hshCompareFrom = ReadTags(mgrSQLite.Database.Local)
hshCompareTo = ReadTags(mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadTags(mgrSQLite.Database.Remote)
hshCompareTo = ReadTags(mgrSQLite.Database.Local)
End If
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
If hshCompareFrom.Contains(oToItem.Name) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.Name), clsTag)
If oToItem.MinimalEquals(oFromItem) Then
hshDeleteItems.Remove(oToItem.Name)
End If
End If
Next
If bToRemote Then
DoTagDeleteSync(hshDeleteItems, mgrSQLite.Database.Remote)
Else
DoTagDeleteSync(hshDeleteItems, mgrSQLite.Database.Local)
End If
Return hshDeleteItems.Count + hshSyncItems.Count
End Function
End Class
+27 -22
View File
@@ -1,6 +1,24 @@
Imports System.IO Public Class mgrVariables
Public Class mgrVariables Private Shared Function MapToObject(ByVal dr As DataRow) As clsPathVariable
Dim oCustomVariable As New clsPathVariable
oCustomVariable.ID = CStr(dr("VariableID"))
oCustomVariable.Name = CStr(dr("Name"))
oCustomVariable.Path = CStr(dr("Path"))
Return oCustomVariable
End Function
Private Shared Function SetCoreParameters(ByVal oCustomVariable As clsPathVariable) As Hashtable
Dim hshParams As New Hashtable
hshParams.Add("ID", oCustomVariable.ID)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
Return hshParams
End Function
Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String) Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
@@ -17,26 +35,22 @@ Public Class mgrVariables
Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable) Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)" sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)"
hshParams.Add("ID", oCustomVariable.ID) hshParams = SetCoreParameters(oCustomVariable)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
End Sub End Sub
Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable) Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String Dim sSQL As String
Dim hshParams As New Hashtable Dim hshParams As Hashtable
sSQL = "UPDATE variables SET Name=@Name, Path = @Path " sSQL = "UPDATE variables SET Name=@Name, Path = @Path "
sSQL &= "WHERE VariableID = @ID" sSQL &= "WHERE VariableID = @ID"
hshParams.Add("Name", oCustomVariable.Name) hshParams = SetCoreParameters(oCustomVariable)
hshParams.Add("Path", oCustomVariable.Path)
hshParams.Add("ID", oCustomVariable.ID)
oDatabase.RunParamQuery(sSQL, hshParams) oDatabase.RunParamQuery(sSQL, hshParams)
@@ -71,10 +85,7 @@ Public Class mgrVariables
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
Next Next
Return oCustomVariable Return oCustomVariable
@@ -95,10 +106,7 @@ Public Class mgrVariables
oData = oDatabase.ReadParamData(sSQL, hshParams) oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
Next Next
Return oCustomVariable Return oCustomVariable
@@ -140,10 +148,7 @@ Public Class mgrVariables
oData = oDatabase.ReadParamData(sSQL, New Hashtable) oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable oCustomVariable = MapToObject(dr)
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
hshList.Add(oCustomVariable.Name, oCustomVariable) hshList.Add(oCustomVariable.Name, oCustomVariable)
Next Next
+59 -70
View File
@@ -1,99 +1,88 @@
Imports System.Xml Imports GBM.My.Resources
Imports System.Xml.Serialization
Imports System.IO Imports System.IO
Imports System.Text Imports System.Net
Public Class mgrXML Public Class mgrXML
Public Shared Function ReadMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) As Hashtable Public Shared Function ReadMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) As Hashtable
Dim xFileReader As XmlTextReader Dim oList As List(Of Game)
Dim hshList As New Hashtable Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable Dim hshDupeList As New Hashtable
Dim oGame As clsGame Dim oGame As clsGame
Dim oDupeGame As clsGame
'If the file doesn't exist return an empty list 'If the file doesn't exist return an empty list
If Not File.Exists(sLocation) And Not bWebRead Then If Not File.Exists(sLocation) And Not bWebRead Then
Return hshList Return hshList
End If End If
Try oList = ImportandDeserialize(sLocation, bWebRead)
xFileReader = New XmlTextReader(sLocation)
xFileReader.WhitespaceHandling = WhitespaceHandling.None
While (xFileReader.Read()) For Each g As Game In oList
If xFileReader.Name = "app" Then oGame = New clsGame
oGame = New clsGame oGame.Name = g.Name
oGame.Name = xFileReader.GetAttribute("name") oGame.ProcessName = g.ProcessName
xFileReader.Read() oGame.AbsolutePath = g.AbsolutePath
oGame.ProcessName = xFileReader.ReadElementString("process") oGame.Path = g.Path
oGame.AbsolutePath = xFileReader.ReadElementString("absolutepath") oGame.FolderSave = g.FolderSave
oGame.Path = xFileReader.ReadElementString("savelocation") oGame.FileType = g.FileType
oGame.FolderSave = xFileReader.ReadElementString("foldersave") oGame.ExcludeList = g.ExcludeList
oGame.FileType = xFileReader.ReadElementString("filetype") For Each t As Tag In g.Tags
oGame.AppendTimeStamp = xFileReader.ReadElementString("appendtimestamp") oGame.ImportTags.Add(t)
oGame.ExcludeList = xFileReader.ReadElementString("excludelist") Next
If hshList.Contains(oGame.ProcessName) Or hshDupeList.Contains(oGame.ProcessName) Then 'This should be wrapped just in case we get some bad data
oDupeGame = DirectCast(hshList.Item(oGame.ProcessName), clsGame) Try
If Not hshDupeList.Contains(oGame.ProcessName) Then hshList.Add(oGame.ProcessName & ":" & oGame.Name, oGame)
hshDupeList.Add(oGame.ProcessName, oDupeGame) Catch e As Exception
hshList.Remove(oDupeGame.ProcessName) 'Do Nothing
oDupeGame.Duplicate = True End Try
oDupeGame.ProcessName = oDupeGame.ProcessName & ":" & oDupeGame.Name Next
hshList.Add(oDupeGame.ProcessName, oDupeGame)
End If
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True
End If
hshList.Add(oGame.ProcessName, oGame)
End If
End While
xFileReader.Close()
'We need to trigger a manual garbage collection here to prevent issues with the reader freezing up with multiple uses.
'There's no way to properly dispose a xml text reader in .NET 4, that's only fixed in 4.5+.
GC.Collect()
Catch ex As Exception
MsgBox("An error occured reading the monitor list import file." & vbCrLf & ex.Message, MsgBoxStyle.Exclamation, "Game Backup Monitor")
End Try
Return hshList Return hshList
End Function End Function
Public Shared Function ExportMonitorList(ByVal hshList As Hashtable, ByVal sLocation As String) As Boolean Public Shared Function ImportandDeserialize(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) As List(Of Game)
Dim xFileWriter As XmlTextWriter Dim oReader As StreamReader
Dim oWebClient As WebClient
Dim oSerializer As XmlSerializer
Dim oList As New List(Of Game)
Try Try
xFileWriter = New XmlTextWriter(sLocation, System.Text.Encoding.Unicode) If bWebRead Then
xFileWriter.Formatting = Formatting.Indented oWebClient = New WebClient
xFileWriter.WriteStartDocument() oReader = New StreamReader(oWebClient.OpenRead(sLocation))
xFileWriter.WriteComment("GBM Export: " & Date.Now) Else
xFileWriter.WriteComment("Entries: " & hshList.Count) oReader = New StreamReader(sLocation)
xFileWriter.WriteStartElement("aMon") End If
For Each o As clsGame In hshList.Values
xFileWriter.WriteStartElement("app") oSerializer = New XmlSerializer(oList.GetType(), New XmlRootAttribute("gbm"))
xFileWriter.WriteAttributeString("name", o.Name) oList = oSerializer.Deserialize(oReader)
xFileWriter.WriteElementString("process", o.TrueProcess) oReader.Close()
xFileWriter.WriteElementString("absolutepath", o.AbsolutePath) Catch ex As Exception
xFileWriter.WriteElementString("savelocation", o.TruePath) mgrCommon.ShowMessage(mgrXML_ErrorImportFailure, ex.Message, MsgBoxStyle.Exclamation)
xFileWriter.WriteElementString("foldersave", o.FolderSave) End Try
xFileWriter.WriteElementString("filetype", o.FileType)
xFileWriter.WriteElementString("appendtimestamp", o.AppendTimeStamp) Return oList
xFileWriter.WriteElementString("excludelist", o.ExcludeList) End Function
xFileWriter.WriteEndElement()
Next Public Shared Function SerializeAndExport(ByVal oList As List(Of Game), ByVal sLocation As String) As Boolean
xFileWriter.WriteEndElement() Dim oSerializer As XmlSerializer
xFileWriter.WriteEndDocument() Dim oWriter As StreamWriter
xFileWriter.Flush()
xFileWriter.Close() Try
oSerializer = New XmlSerializer(oList.GetType(), New XmlRootAttribute("gbm"))
oWriter = New StreamWriter(sLocation)
oSerializer.Serialize(oWriter.BaseStream, oList)
oWriter.Flush()
oWriter.Close()
Return True Return True
Catch ex As Exception Catch ex As Exception
MsgBox("An error occured exporting the monitor list. " & ex.Message, MsgBoxStyle.Exclamation, "Game Backup Monitor") mgrCommon.ShowMessage(mgrXML_ErrorExportFailure, ex.Message, MsgBoxStyle.Exclamation)
Return False Return False
End Try End Try
End Function End Function
End Class End Class
+7 -3
View File
@@ -1,3 +1,5 @@
Imports System.Resources
Imports System Imports System
Imports System.Reflection Imports System.Reflection
Imports System.Runtime.InteropServices Imports System.Runtime.InteropServices
@@ -12,7 +14,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyDescription("Game Backup Monitor")> <Assembly: AssemblyDescription("Game Backup Monitor")>
<Assembly: AssemblyCompany("Michael J. Seiferling")> <Assembly: AssemblyCompany("Michael J. Seiferling")>
<Assembly: AssemblyProduct("Game Backup Monitor")> <Assembly: AssemblyProduct("Game Backup Monitor")>
<Assembly: AssemblyCopyright("Copyright © 2015 Michael J. Seiferling")> <Assembly: AssemblyCopyright("Copyright © 2016 Michael J. Seiferling")>
<Assembly: AssemblyTrademark("")> <Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)> <Assembly: ComVisible(False)>
@@ -31,5 +33,7 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("0.94.*")> <Assembly: AssemblyVersion("1.0.1.*")>
<Assembly: AssemblyFileVersion("0.94.0.0")> <Assembly: AssemblyFileVersion("1.0.1.0")>
<Assembly: NeutralResourcesLanguageAttribute("en")>
+4855 -20
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+17 -116
View File
@@ -1,121 +1,22 @@
Game Backup Monitor v0.93 Readme Game Backup Monitor v1.01 Readme
http://backupmonitor.sourceforge.net/ http://mikemaximus.github.io/gbm-web/
gamebackupmonitor@gmail.com
October 13, 2015 April 1, 2017
Disclaimer: New in 1.01
This is beta release software. You may still encounter some bugs. - (All) Added features to automatically handle new backup files.
- Automatically restore new backup files when they are detected.
- Automatically mark new backup files as restored if the game isn't installed on the current PC.
- These new features are available in the "Backup and Restore" section of the Settings. They are optional and disabled by default.
- (All) Added new configuration option to delete saved game folder on restore
- This option is used for games that change the file names of their saves, which results in a mix of old and new saved games if the old saves aren't deleted first.
- This option has limitations and is not part of official configurations or import/export features.
- (All) The "Verify backup files with a checksum" option has been removed. This feature is now baked into GBM and cannot be disabled.
- (All) GBM will now behave consistently across different configurations (such as LAN) when performing sync operations.
- (Windows) Fixed rare issue related to DPI display scaling.
Introduction: Read the "Settings" and "The Game Manager" sections of the manual (http://mikemaximus.github.io/gbm-web/manual.html) for more details on how the new features work and their limitations.
This application is designed to run in the system tray and monitor for games you play. When you exit a game your save files will be automatically compressed (7z compression), saved to a folder you specify. This may be a cloud folder or external backup drive that other computers will be accessing. GBM can also take care of restoring the save data to other computers that have access to the main backup folder. The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html
GBM has been designed with mostly classic gaming in mind, but it can be used for any application!
Important Upgrade Information:
1. You may notice one or more backup dates are incorrect after upgrading to v0.93. This is due to fallback behavior during the upgrade process when a date cannot be converted correctly.
2. Due to core changes to how GBM handles backups, some game configurations that exclude sub-folders may break in v0.93, including official configurations.
If you have any issues with the following game backups after upgrading to v0.93, delete them from the Game Manager and re-import them from the official list.
Call of Cthulhu - Dark Corners of The Earth
Dead State
Democracy 3
Grand Theft Auto - San Andreas
Kerbal Space Program
POD Gold
Simcity 4 Deluxe
The Settlers: Rise of an Empire
Tropico 4
Victor Vran
Please check the Game Manager section of the manual if you're having problems with your custom game entries.
New in 0.93
- GBM now handles date/time fields in an efficient manner, this will solve all issues with regional date formats.
- GBM will now gracefully exit with an error message if it detects a database version is newer than the program version itself.
- "Access Denied" errors should no longer occur when dragging shortcuts into the Add Game Wizard.
- Redesigned how the backup includes and excludes files. The changes allow for more complex backup configurations.
- Added an "Open Restore Path" button to the Game Manager, this will automatically open the current backup's restore location in Windows Explorer.
- Game names are now cropped in many places to prevent errors when messages and/or notifications exceed control limits.
New in 0.92
- GBM now properly handles detecting games in DOSBox that share the same DOS executable name.
- "Start with Windows" toggle is now available in settings. Defaults to off and applies to Current User only.
- Added "Backups Only" filter option to the Game Manager, this lets you view only games that have backups.
- "Backups Only" and "Pending Restore" filters will now list existing backup data for games have been deleted from the game list.
- The game list sync is now more verbose in the log.
- GBM now triggers a master to local sync when the master data is changed by another application, such as your cloud client downloading an updated version of the master data after GBM is already running.
- When importing game configurations, you can now choose exactly which game configurations to import. This applies to the official list or importing an xml file.
- Added a Sync toggle to Settings. Disabling sync will speed up the application for users that use GBM on a single computer.
- GBM should now properly display a wait cursor in instances that the UI is unavailable.
- Added a "Compact Databases" tool, this is used to rebuild GBM's databases to use an optimal amount of disk space. It shouldn't be needed often.
- Game detection has been changed. It will take slightly longer for GBM detect a game but this should fix a few long outstanding issues.
- Backup & Restore has been optimized to handle everything more efficiently.
- GBM will now use the 2015 build of 7-Zip for compression, as well use the 64-bit version of 7z when using the 64-bit version of GBM. 64-bit users will see a huge speed improvement when backing up games with large complex saves, such as Divinity: Original Sin.
- GBM now allows you to cancel monitoring via the File menu, system tray menu and monitor status button. You can also now exit the application while a game is being monitored.
- The GBM system tray icon tooltip will now display it's current task.
- Replaced the icons in GBM with some better looking ones, the system tray icon will now visually represent GBM's current action.
- You can now cancel a backup or restore operation in progress. Intended for emergency situations only, cancelling will not undo any actions completed before the operation terminated.
- GBM now uses SHA-256 to verify your backup files before restoring them. This is optional, but will be enabled by default.
- Overhauled the backend, GBM will use more space to store records, but the improved database design will prevent future bugs.
- GBM will now back up your configuration data automatically on a version upgrade.
- Another ton of minor fixes and tweaks too various to list.
New in 0.84
- Tons of bug fixes and tweaks. GBM is stable enough to move to Beta!
- Removed Backup Manager and Restore Manager. All backup & restore functionality is now integrated into the Game Manager.
- You can now backup and restore mutliple games at the same time.
- You can now edit multiple games at the same time, only on toggle fields for now.
- Added a "Monitor Only" option. GBM can only monitor the time you've played a game and not trigger a backup when it's closed.
- Deleting a backup will now delete the sub-folder for the game, if it's not empty a confirmation will be displayed first.
- Since it can't reliably find them, GBM will no longer attempt to automatically search for dosbox games or games that share a process name.
- You can now multi-select on the Game Manager screen to delete multiple games.
- When changing your backup folder, if the newly selected backup folder already contains GBM data you now have a choice on how you want to handle the initial game list sync.
New in 0.81
- Fixed a critical bug with the Game Manager which allowed you to add duplicate entries. This resulted in a crash and the inability start the app again. 0.81 fixes this bug and will repair any database broken by this issue so the app will function again. (Thanks Nirth from GOG.com)
- Fixed an annoying bug where extra game data was being lost when syncing hours spent between computers.
- Fixed a potential issue with changing the backup folder.
- The Add Game Wizard will now properly handle entries with spaces while working with the Exclude and File Type helper.
New in 0.8
- Since it's all about the games anyway, re-branded ABM to GBM - Game Backup Manager.
- Removed confusing utilities and screens and replaced them with a user friendly Game Manager.
- Rebuilt the Custom Path Variable screen with the new Game Manager look.
- 64-bit build available, this will allow GBM to fully detect 64 bit and 32 bit applications. (32-bit will be default download)
- Switched back-end from XML to SQLite 3. Old configurations will be imported and upgraded.
- Automatic syncing of game list and applicable extra data (such as Hours played) between computers sharing the same backup folder. See "Notes on Automatic Syncing" in this readme for details.
- All import features redesigned to work more consistently. Added export feature.
- In the rare instance the user is asked to manually find a path, GBM will now search for the location automatically.
New in 0.7.1.2:
- Better Monitoring: You no longer need to run ABM as Administrator to monitor certain applications in 99% of situations. See "Current Limitations" for details.
- Time Tracking: ABM now tracks the amount of time spent in each application, similar to Steam.
- Search: You can now search for a specific application using the new search feature on all applicable forms.
- Application Data: You can now add or override application details by using the new "Edit Application Cache" feature.
New in 0.7.0.7:
- Fixed some monitor list saving and validation issues.
- Fixed the manual backup feature, required application data wasn't being cached.
- Fixed possible issue with official import.
- Minor Tweaks.
New in 0.7.0.5:
- Start-up Wizard: A simple guide to setup the basics when first starting the program.
- Add Application Wizard: A more user friendly way to add applications to monitor and backup. The classic monitor list is still available for more advanced configurations and management.
- Custom Path Variables: An advanced feature to allow the configuration for more applications to be shared between computers.
- Manual Backups: Execute a backup for any monitored application on demand (some applications will be need to be detected by ABM at least once to use this feature)
- Various tweaks to make things look and run a little better.
- Many bug fixes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+11 -8
View File
@@ -1,12 +1,15 @@
# Game Backup Monitor # [Game Backup Monitor](http://mikemaximus.github.io/gbm-web/)
<b>Important Notice:</b> This project is currently in the process of being transferred from Sourceforge. Releases and documentation will be available soon, for now the latest release and documentation for this project are available at http://backupmonitor.sourceforge.net. ![Screenshot](http://mikemaximus.github.io/gbm-web/images/manual/manual_01.jpg)
Game Backup Monitor is a Windows system tray application that automatically detects games as you play them. When you're finished playing, a compressed backup of the save data will be automatically created in a location you've specified, such as a cloud folder, network folder or external drive. Game Backup Monitor is a simple, but flexible application that detects games as you play them. Once you finish playing a game, a backup of the saved games will be made automatically using 7-Zip compression. GBM can be used on a single computer, or on multiple computers to effectively add cloud support to any game or application.
If you use Game Backup Monitor on multiple computers and share the same backup folder, you can effectively add cloud support to any game or application. GBM can notify you of new files to be restored when you move to each computer. **License**: GNU General Public License version 3.0 (GPLv3)<br />
**Language**: English ([Translation FAQ](http://mikemaximus.github.io/gbm-web/translations.html))<br />
Game Backup Monitor was designed with classic DRM-free gaming in mind, but it can be used to monitor any application on your PC! **Platform**: Windows (.NET 4) & Linux (Mono)
Game Backup Monitor is currently only available in English.
[About Game Backup Monitor](http://mikemaximus.github.io/gbm-web/about.html) <br />
[Game Backup Monitor FAQ](http://mikemaximus.github.io/gbm-web/faq.html) <br />
[Game Backup Monitor Manual](http://mikemaximus.github.io/gbm-web/manual.html) <br />
[List of Preconfigured Games](http://mikemaximus.github.io/gbm-web/GBM_Official.xml) <br /> <br />
Updates regarding this project are available via the [Game Backup Monitor web site](http://mikemaximus.github.io/gbm-web/).