From 66d280df498d6b0b2cc266bde0a330fc53c1fa78 Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Mon, 5 Feb 2018 12:50:13 -0600 Subject: [PATCH] Changes for issue #98 --- GBM/Classes/XML Serialize Classes/Game.vb | 10 ++ GBM/Classes/clsGame.vb | 13 +++ GBM/Forms/frmFilter.vb | 8 ++ GBM/Forms/frmGameManager.Designer.vb | 123 ++++++++++++---------- GBM/Forms/frmGameManager.vb | 4 + GBM/Managers/mgrMonitorList.vb | 16 ++- GBM/Managers/mgrProcesses.vb | 63 +++++++---- GBM/Managers/mgrSQLite.vb | 29 ++++- GBM/Managers/mgrXML.vb | 1 + GBM/My Project/AssemblyInfo.vb | 4 +- GBM/My Project/Resources.Designer.vb | 27 +++++ GBM/My Project/Resources.resx | 9 ++ 12 files changed, 223 insertions(+), 84 deletions(-) diff --git a/GBM/Classes/XML Serialize Classes/Game.vb b/GBM/Classes/XML Serialize Classes/Game.vb index f3be5dd..73bd512 100644 --- a/GBM/Classes/XML Serialize Classes/Game.vb +++ b/GBM/Classes/XML Serialize Classes/Game.vb @@ -9,6 +9,7 @@ Private sExcludeList As String Private bMonitorOnly As Boolean Private sComments As String + Private bIsRegEx As Boolean Private oTags As List(Of Tag) Property Name As String @@ -101,6 +102,15 @@ End Get End Property + Property IsRegEx As Boolean + Set(value As Boolean) + bIsRegEx = value + End Set + Get + Return bIsRegEx + End Get + End Property + Property Tags As List(Of Tag) Get Return oTags diff --git a/GBM/Classes/clsGame.vb b/GBM/Classes/clsGame.vb index 3dea47f..a3f8dc7 100644 --- a/GBM/Classes/clsGame.vb +++ b/GBM/Classes/clsGame.vb @@ -20,6 +20,7 @@ Public Class clsGame Private bEnabled As Boolean = True Private bMonitorOnly As Boolean = False Private sComments As String = String.Empty + Private bIsRegEx As Boolean = False Private bDuplicate As Boolean = False Private bTempGame As Boolean = False Private oImportTags As New List(Of Tag) @@ -230,6 +231,15 @@ Public Class clsGame End Set End Property + Property IsRegEx As Boolean + Get + Return bIsRegEx + End Get + Set(value As Boolean) + bIsRegEx = value + End Set + End Property + Property Duplicate As Boolean Get Return bDuplicate @@ -337,6 +347,9 @@ Public Class clsGame If Comments <> oGame.Comments Then Return False End If + If IsRegEx <> oGame.IsRegEx Then + Return False + End If 'Optional Sync Fields If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then diff --git a/GBM/Forms/frmFilter.vb b/GBM/Forms/frmFilter.vb index 3f2fd69..2cbae61 100644 --- a/GBM/Forms/frmFilter.vb +++ b/GBM/Forms/frmFilter.vb @@ -223,6 +223,14 @@ Public Class frmFilter oField.Status = clsGameFilterField.eFieldStatus.ValidFilter oValidFields.Add(oField) + 'IsRegEx + oField = New clsGameFilterField + oField.FieldName = "IsRegEx" + oField.FriendlyFieldName = frmFilter_FieldIsRegEx + oField.Type = clsGameFilterField.eDataType.fBool + oField.Status = clsGameFilterField.eFieldStatus.ValidFilter + oValidFields.Add(oField) + 'Game Path oField = New clsGameFilterField oField.FieldName = "ProcessPath" diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb index cc094b2..7fc5ea4 100644 --- a/GBM/Forms/frmGameManager.Designer.vb +++ b/GBM/Forms/frmGameManager.Designer.vb @@ -28,6 +28,7 @@ Partial Class frmGameManager Me.btnBackup = New System.Windows.Forms.Button() Me.btnClose = New System.Windows.Forms.Button() Me.grpConfig = New System.Windows.Forms.GroupBox() + Me.chkRegEx = New System.Windows.Forms.CheckBox() Me.lblComments = New System.Windows.Forms.Label() Me.txtComments = New System.Windows.Forms.TextBox() Me.txtParameter = New System.Windows.Forms.TextBox() @@ -115,7 +116,7 @@ Partial Class frmGameManager ' Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) Me.btnAdd.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnAdd.Location = New System.Drawing.Point(12, 586) + Me.btnAdd.Location = New System.Drawing.Point(12, 626) Me.btnAdd.Name = "btnAdd" Me.btnAdd.Size = New System.Drawing.Size(30, 23) Me.btnAdd.TabIndex = 4 @@ -126,7 +127,7 @@ Partial Class frmGameManager ' Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) Me.btnDelete.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnDelete.Location = New System.Drawing.Point(48, 586) + Me.btnDelete.Location = New System.Drawing.Point(48, 626) Me.btnDelete.Name = "btnDelete" Me.btnDelete.Size = New System.Drawing.Size(30, 23) Me.btnDelete.TabIndex = 5 @@ -136,7 +137,7 @@ Partial Class frmGameManager 'btnBackup ' Me.btnBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnBackup.Location = New System.Drawing.Point(616, 586) + Me.btnBackup.Location = New System.Drawing.Point(616, 626) Me.btnBackup.Name = "btnBackup" Me.btnBackup.Size = New System.Drawing.Size(75, 23) Me.btnBackup.TabIndex = 18 @@ -146,7 +147,7 @@ Partial Class frmGameManager 'btnClose ' Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnClose.Location = New System.Drawing.Point(697, 586) + Me.btnClose.Location = New System.Drawing.Point(697, 626) Me.btnClose.Name = "btnClose" Me.btnClose.Size = New System.Drawing.Size(75, 23) Me.btnClose.TabIndex = 19 @@ -156,6 +157,7 @@ Partial Class frmGameManager 'grpConfig ' Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.grpConfig.Controls.Add(Me.chkRegEx) Me.grpConfig.Controls.Add(Me.lblComments) Me.grpConfig.Controls.Add(Me.txtComments) Me.grpConfig.Controls.Add(Me.txtParameter) @@ -181,15 +183,25 @@ Partial Class frmGameManager Me.grpConfig.Enabled = False Me.grpConfig.Location = New System.Drawing.Point(247, 12) Me.grpConfig.Name = "grpConfig" - Me.grpConfig.Size = New System.Drawing.Size(525, 215) + Me.grpConfig.Size = New System.Drawing.Size(525, 258) Me.grpConfig.TabIndex = 8 Me.grpConfig.TabStop = False Me.grpConfig.Text = "Configuration" ' + 'chkRegEx + ' + Me.chkRegEx.AutoSize = True + Me.chkRegEx.Location = New System.Drawing.Point(402, 47) + Me.chkRegEx.Name = "chkRegEx" + Me.chkRegEx.Size = New System.Drawing.Size(117, 17) + Me.chkRegEx.TabIndex = 5 + Me.chkRegEx.Text = "Regular Expression" + Me.chkRegEx.UseVisualStyleBackColor = True + ' 'lblComments ' Me.lblComments.AutoSize = True - Me.lblComments.Location = New System.Drawing.Point(7, 157) + Me.lblComments.Location = New System.Drawing.Point(7, 181) Me.lblComments.Name = "lblComments" Me.lblComments.Size = New System.Drawing.Size(59, 13) Me.lblComments.TabIndex = 18 @@ -197,24 +209,24 @@ Partial Class frmGameManager ' 'txtComments ' - Me.txtComments.Location = New System.Drawing.Point(70, 154) + Me.txtComments.Location = New System.Drawing.Point(70, 181) Me.txtComments.Multiline = True Me.txtComments.Name = "txtComments" Me.txtComments.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.txtComments.Size = New System.Drawing.Size(413, 54) - Me.txtComments.TabIndex = 17 + Me.txtComments.Size = New System.Drawing.Size(413, 71) + Me.txtComments.TabIndex = 19 ' 'txtParameter ' - Me.txtParameter.Location = New System.Drawing.Point(333, 45) + Me.txtParameter.Location = New System.Drawing.Point(70, 71) Me.txtParameter.Name = "txtParameter" - Me.txtParameter.Size = New System.Drawing.Size(150, 20) + Me.txtParameter.Size = New System.Drawing.Size(414, 20) Me.txtParameter.TabIndex = 7 ' 'lblParameter ' Me.lblParameter.AutoSize = True - Me.lblParameter.Location = New System.Drawing.Point(269, 48) + Me.lblParameter.Location = New System.Drawing.Point(7, 74) Me.lblParameter.Name = "lblParameter" Me.lblParameter.Size = New System.Drawing.Size(58, 13) Me.lblParameter.TabIndex = 6 @@ -223,48 +235,48 @@ Partial Class frmGameManager 'chkCleanFolder ' Me.chkCleanFolder.AutoSize = True - Me.chkCleanFolder.Location = New System.Drawing.Point(329, 101) + Me.chkCleanFolder.Location = New System.Drawing.Point(330, 127) Me.chkCleanFolder.Name = "chkCleanFolder" Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17) - Me.chkCleanFolder.TabIndex = 13 + Me.chkCleanFolder.TabIndex = 14 Me.chkCleanFolder.Text = "Delete folder on restore" Me.chkCleanFolder.UseVisualStyleBackColor = True ' 'lblLimit ' Me.lblLimit.AutoSize = True - Me.lblLimit.Location = New System.Drawing.Point(375, 130) + Me.lblLimit.Location = New System.Drawing.Point(376, 160) Me.lblLimit.Name = "lblLimit" Me.lblLimit.Size = New System.Drawing.Size(68, 13) - Me.lblLimit.TabIndex = 16 + Me.lblLimit.TabIndex = 17 Me.lblLimit.Text = "Backup Limit" Me.lblLimit.Visible = False ' 'nudLimit ' - Me.nudLimit.Location = New System.Drawing.Point(329, 128) + Me.nudLimit.Location = New System.Drawing.Point(330, 155) Me.nudLimit.Minimum = New Decimal(New Integer() {2, 0, 0, 0}) Me.nudLimit.Name = "nudLimit" Me.nudLimit.Size = New System.Drawing.Size(40, 20) - Me.nudLimit.TabIndex = 15 + Me.nudLimit.TabIndex = 16 Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0}) Me.nudLimit.Visible = False ' 'btnExclude ' - Me.btnExclude.Location = New System.Drawing.Point(9, 125) + Me.btnExclude.Location = New System.Drawing.Point(10, 152) Me.btnExclude.Name = "btnExclude" Me.btnExclude.Size = New System.Drawing.Size(175, 23) - Me.btnExclude.TabIndex = 11 + Me.btnExclude.TabIndex = 12 Me.btnExclude.Text = "E&xclude Items..." Me.btnExclude.UseVisualStyleBackColor = True ' 'btnInclude ' - Me.btnInclude.Location = New System.Drawing.Point(9, 97) + Me.btnInclude.Location = New System.Drawing.Point(10, 123) Me.btnInclude.Name = "btnInclude" Me.btnInclude.Size = New System.Drawing.Size(175, 23) - Me.btnInclude.TabIndex = 10 + Me.btnInclude.TabIndex = 11 Me.btnInclude.Text = "In&clude Items..." Me.btnInclude.UseVisualStyleBackColor = True ' @@ -280,29 +292,29 @@ Partial Class frmGameManager ' 'btnSavePathBrowse ' - Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71) + Me.btnSavePathBrowse.Location = New System.Drawing.Point(490, 97) Me.btnSavePathBrowse.Name = "btnSavePathBrowse" Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20) - Me.btnSavePathBrowse.TabIndex = 9 + Me.btnSavePathBrowse.TabIndex = 10 Me.btnSavePathBrowse.Text = "..." Me.btnSavePathBrowse.UseVisualStyleBackColor = True ' 'btnProcessBrowse ' - Me.btnProcessBrowse.Location = New System.Drawing.Point(225, 44) + Me.btnProcessBrowse.Location = New System.Drawing.Point(366, 43) Me.btnProcessBrowse.Name = "btnProcessBrowse" Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20) - Me.btnProcessBrowse.TabIndex = 5 + Me.btnProcessBrowse.TabIndex = 4 Me.btnProcessBrowse.Text = "..." Me.btnProcessBrowse.UseVisualStyleBackColor = True ' 'lblSavePath ' Me.lblSavePath.AutoSize = True - Me.lblSavePath.Location = New System.Drawing.Point(6, 74) + Me.lblSavePath.Location = New System.Drawing.Point(7, 100) Me.lblSavePath.Name = "lblSavePath" Me.lblSavePath.Size = New System.Drawing.Size(60, 13) - Me.lblSavePath.TabIndex = 2 + Me.lblSavePath.TabIndex = 8 Me.lblSavePath.Text = "Save Path:" ' 'lblProcess @@ -311,7 +323,7 @@ Partial Class frmGameManager Me.lblProcess.Location = New System.Drawing.Point(6, 48) Me.lblProcess.Name = "lblProcess" Me.lblProcess.Size = New System.Drawing.Size(48, 13) - Me.lblProcess.TabIndex = 1 + Me.lblProcess.TabIndex = 2 Me.lblProcess.Text = "Process:" ' 'lblName @@ -325,7 +337,7 @@ Partial Class frmGameManager ' 'txtExclude ' - Me.txtExclude.Location = New System.Drawing.Point(489, 122) + Me.txtExclude.Location = New System.Drawing.Point(489, 154) Me.txtExclude.Name = "txtExclude" Me.txtExclude.Size = New System.Drawing.Size(30, 20) Me.txtExclude.TabIndex = 0 @@ -334,7 +346,7 @@ Partial Class frmGameManager ' 'txtFileType ' - Me.txtFileType.Location = New System.Drawing.Point(489, 99) + Me.txtFileType.Location = New System.Drawing.Point(489, 125) Me.txtFileType.Name = "txtFileType" Me.txtFileType.Size = New System.Drawing.Size(30, 20) Me.txtFileType.TabIndex = 0 @@ -344,48 +356,48 @@ Partial Class frmGameManager 'chkTimeStamp ' Me.chkTimeStamp.AutoSize = True - Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129) + Me.chkTimeStamp.Location = New System.Drawing.Point(191, 156) Me.chkTimeStamp.Name = "chkTimeStamp" Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17) - Me.chkTimeStamp.TabIndex = 14 + Me.chkTimeStamp.TabIndex = 15 Me.chkTimeStamp.Text = "Save multiple backups" Me.chkTimeStamp.UseVisualStyleBackColor = True ' 'chkFolderSave ' Me.chkFolderSave.AutoSize = True - Me.chkFolderSave.Location = New System.Drawing.Point(190, 101) + Me.chkFolderSave.Location = New System.Drawing.Point(191, 127) Me.chkFolderSave.Name = "chkFolderSave" Me.chkFolderSave.Size = New System.Drawing.Size(109, 17) - Me.chkFolderSave.TabIndex = 12 + Me.chkFolderSave.TabIndex = 13 Me.chkFolderSave.Text = "Save entire folder" Me.chkFolderSave.UseVisualStyleBackColor = True ' 'txtSavePath ' - Me.txtSavePath.Location = New System.Drawing.Point(69, 71) + Me.txtSavePath.Location = New System.Drawing.Point(70, 97) Me.txtSavePath.Name = "txtSavePath" Me.txtSavePath.Size = New System.Drawing.Size(414, 20) - Me.txtSavePath.TabIndex = 8 + Me.txtSavePath.TabIndex = 9 ' 'txtProcess ' - Me.txtProcess.Location = New System.Drawing.Point(69, 45) + Me.txtProcess.Location = New System.Drawing.Point(70, 44) Me.txtProcess.Name = "txtProcess" - Me.txtProcess.Size = New System.Drawing.Size(150, 20) - Me.txtProcess.TabIndex = 4 + Me.txtProcess.Size = New System.Drawing.Size(290, 20) + Me.txtProcess.TabIndex = 3 ' 'txtName ' - Me.txtName.Location = New System.Drawing.Point(69, 19) + Me.txtName.Location = New System.Drawing.Point(70, 19) Me.txtName.Name = "txtName" Me.txtName.Size = New System.Drawing.Size(414, 20) - Me.txtName.TabIndex = 3 + Me.txtName.TabIndex = 1 ' 'chkMonitorOnly ' Me.chkMonitorOnly.AutoSize = True - Me.chkMonitorOnly.Location = New System.Drawing.Point(363, 398) + Me.chkMonitorOnly.Location = New System.Drawing.Point(363, 441) Me.chkMonitorOnly.Name = "chkMonitorOnly" Me.chkMonitorOnly.Size = New System.Drawing.Size(83, 17) Me.chkMonitorOnly.TabIndex = 11 @@ -409,7 +421,7 @@ Partial Class frmGameManager Me.grpExtra.Controls.Add(Me.txtAppPath) Me.grpExtra.Controls.Add(Me.nudHours) Me.grpExtra.Controls.Add(Me.lblHours) - Me.grpExtra.Location = New System.Drawing.Point(248, 233) + Me.grpExtra.Location = New System.Drawing.Point(248, 276) Me.grpExtra.Name = "grpExtra" Me.grpExtra.Size = New System.Drawing.Size(525, 155) Me.grpExtra.TabIndex = 9 @@ -540,7 +552,7 @@ Partial Class frmGameManager ' 'btnTags ' - Me.btnTags.Location = New System.Drawing.Point(535, 394) + Me.btnTags.Location = New System.Drawing.Point(535, 437) Me.btnTags.Name = "btnTags" Me.btnTags.Size = New System.Drawing.Size(75, 23) Me.btnTags.TabIndex = 12 @@ -561,7 +573,7 @@ Partial Class frmGameManager Me.grpStats.Controls.Add(Me.lblBackupFile) Me.grpStats.Controls.Add(Me.lblRemote) Me.grpStats.Controls.Add(Me.lblLocalData) - Me.grpStats.Location = New System.Drawing.Point(247, 423) + Me.grpStats.Location = New System.Drawing.Point(248, 466) Me.grpStats.Name = "grpStats" Me.grpStats.Size = New System.Drawing.Size(525, 154) Me.grpStats.TabIndex = 15 @@ -676,7 +688,7 @@ Partial Class frmGameManager 'btnMarkAsRestored ' Me.btnMarkAsRestored.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 586) + Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 626) Me.btnMarkAsRestored.Name = "btnMarkAsRestored" Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23) Me.btnMarkAsRestored.TabIndex = 16 @@ -686,7 +698,7 @@ Partial Class frmGameManager 'btnRestore ' Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnRestore.Location = New System.Drawing.Point(535, 586) + Me.btnRestore.Location = New System.Drawing.Point(535, 626) Me.btnRestore.Name = "btnRestore" Me.btnRestore.Size = New System.Drawing.Size(75, 23) Me.btnRestore.TabIndex = 17 @@ -696,7 +708,7 @@ Partial Class frmGameManager 'btnSave ' Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnSave.Location = New System.Drawing.Point(616, 394) + Me.btnSave.Location = New System.Drawing.Point(616, 437) Me.btnSave.Name = "btnSave" Me.btnSave.Size = New System.Drawing.Size(75, 23) Me.btnSave.TabIndex = 13 @@ -709,13 +721,13 @@ Partial Class frmGameManager Me.lstGames.Location = New System.Drawing.Point(12, 160) Me.lstGames.Name = "lstGames" Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstGames.Size = New System.Drawing.Size(228, 420) + Me.lstGames.Size = New System.Drawing.Size(228, 459) Me.lstGames.TabIndex = 3 ' 'btnCancel ' Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnCancel.Location = New System.Drawing.Point(697, 394) + Me.btnCancel.Location = New System.Drawing.Point(697, 437) Me.btnCancel.Name = "btnCancel" Me.btnCancel.Size = New System.Drawing.Size(75, 23) Me.btnCancel.TabIndex = 14 @@ -725,7 +737,7 @@ Partial Class frmGameManager 'chkEnabled ' Me.chkEnabled.AutoSize = True - Me.chkEnabled.Location = New System.Drawing.Point(248, 398) + Me.chkEnabled.Location = New System.Drawing.Point(248, 441) Me.chkEnabled.Name = "chkEnabled" Me.chkEnabled.Size = New System.Drawing.Size(109, 17) Me.chkEnabled.TabIndex = 10 @@ -791,7 +803,7 @@ Partial Class frmGameManager ' 'btnImport ' - Me.btnImport.Location = New System.Drawing.Point(84, 586) + Me.btnImport.Location = New System.Drawing.Point(84, 626) Me.btnImport.Name = "btnImport" Me.btnImport.Size = New System.Drawing.Size(75, 23) Me.btnImport.TabIndex = 6 @@ -800,7 +812,7 @@ Partial Class frmGameManager ' 'btnExport ' - Me.btnExport.Location = New System.Drawing.Point(165, 586) + Me.btnExport.Location = New System.Drawing.Point(165, 626) Me.btnExport.Name = "btnExport" Me.btnExport.Size = New System.Drawing.Size(75, 23) Me.btnExport.TabIndex = 7 @@ -865,7 +877,7 @@ Partial Class frmGameManager ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(784, 621) + Me.ClientSize = New System.Drawing.Size(784, 661) Me.Controls.Add(Me.lblQuickFilter) Me.Controls.Add(Me.txtQuickFilter) Me.Controls.Add(Me.btnExport) @@ -987,4 +999,5 @@ Partial Class frmGameManager Friend WithEvents lblParameter As Label Friend WithEvents lblComments As Label Friend WithEvents txtComments As TextBox + Friend WithEvents chkRegEx As CheckBox End Class diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 57cee42..1396440 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -757,6 +757,7 @@ Public Class frmGameManager txtID.Text = oApp.ID txtName.Text = oApp.Name txtProcess.Text = oApp.TrueProcess + chkRegEx.Checked = oApp.IsRegEx txtParameter.Text = oApp.Parameter txtSavePath.Text = oApp.Path txtFileType.Text = oApp.FileType @@ -1180,6 +1181,7 @@ Public Class frmGameManager oApp.AppendTimeStamp = chkTimeStamp.Checked oApp.BackupLimit = nudLimit.Value oApp.Comments = txtComments.Text + oApp.IsRegEx = chkRegEx.Checked oApp.Enabled = chkEnabled.Checked oApp.MonitorOnly = chkMonitorOnly.Checked oApp.ProcessPath = txtAppPath.Text @@ -1553,6 +1555,8 @@ Public Class frmGameManager lblLimit.Text = frmGameManager_lblLimit cmsDeleteOne.Text = frmGameManager_cmsDeleteOne cmsDeleteAll.Text = frmGameManager_cmsDeleteAll + lblComments.Text = frmGameManager_lblComments + chkRegEx.Text = frmGameManager_chkRegEx 'Init Filter Timer tmFilterTimer = New Timer() diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb index 263aece..83da602 100644 --- a/GBM/Managers/mgrMonitorList.vb +++ b/GBM/Managers/mgrMonitorList.vb @@ -34,6 +34,7 @@ Public Class mgrMonitorList oGame.CleanFolder = CBool(dr("CleanFolder")) If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter")) If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments")) + oGame.IsRegEx = CBool(dr("IsRegEx")) Return oGame End Function @@ -61,6 +62,7 @@ Public Class mgrMonitorList hshParams.Add("CleanFolder", oGame.CleanFolder) hshParams.Add("Parameter", oGame.Parameter) hshParams.Add("Comments", oGame.Comments) + hshParams.Add("IsRegEx", oGame.IsRegEx) Return hshParams End Function @@ -101,7 +103,8 @@ Public Class mgrMonitorList Dim hshParams As Hashtable sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, " - sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments)" + sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, " + sSQL &= "@Parameter, @Comments, @IsRegEx)" 'Parameters hshParams = SetCoreParameters(oGame) @@ -117,7 +120,8 @@ Public Class mgrMonitorList 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 &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments WHERE MonitorID=@ID" + sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, " + sSQL &= "CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments, IsRegEx=@IsRegEx WHERE MonitorID=@ID" 'Parameters hshParams = SetCoreParameters(oGame) @@ -365,11 +369,11 @@ Public Class mgrMonitorList sVersion = "(SELECT Version FROM monitorlist WHERE MonitorID=@ID)" End If - sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments) " + sSQL = "INSERT OR REPLACE INTO monitorlist (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx) " sSQL &= "VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, " sSQL &= sTimeStamp & ", @ExcludeList, " & sGamePath & ", " sSQL &= sIcon & ", @Hours, " & sVersion & ", " - sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ", @CleanFolder, @Parameter, @Comments);" + sSQL &= sCompany & ", " & sMonitorGame & ", @MonitorOnly, " & sBackupLimit & ", @CleanFolder, @Parameter, @Comments, @IsRegEx);" For Each oGame As clsGame In hshGames.Values hshParams = New Hashtable @@ -388,6 +392,7 @@ Public Class mgrMonitorList hshParams.Add("CleanFolder", oGame.CleanFolder) hshParams.Add("Parameter", oGame.Parameter) hshParams.Add("Comments", oGame.Comments) + hshParams.Add("IsRegEx", oGame.IsRegEx) 'Optional Parameters If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then @@ -527,7 +532,7 @@ Public Class mgrMonitorList ByRef hshParams As Hashtable) As String Dim sSQL As String = String.Empty Dim iCounter As Integer = 0 - Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments FROM monitorlist" + Dim sBaseSelect As String = "MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly, BackupLimit, CleanFolder, Parameter, Comments, IsRegEx FROM monitorlist" Dim sSort As String = " ORDER BY " & sSortField If bSortAsc Then @@ -722,6 +727,7 @@ Public Class mgrMonitorList oGame.MonitorOnly = CBool(dr("MonitorOnly")) If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter")) If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments")) + oGame.IsRegEx = CBool(dr("IsRegEx")) oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID) oList.Add(oGame) Next diff --git a/GBM/Managers/mgrProcesses.vb b/GBM/Managers/mgrProcesses.vb index 808f0a4..1e5a70f 100644 --- a/GBM/Managers/mgrProcesses.vb +++ b/GBM/Managers/mgrProcesses.vb @@ -1,5 +1,6 @@ Imports System.IO Imports System.Management +Imports System.Text.RegularExpressions Public Class mgrProcesses @@ -162,6 +163,27 @@ Public Class mgrProcesses End Try End Function + Private Function IsMatch(ByRef oGame As clsGame, ByRef sProcessCheck As String) As Boolean + Dim oProcessRegEx As Regex + + If oGame.IsRegEx Then + Try + oProcessRegEx = New Regex(oGame.ProcessName) + If oProcessRegEx.IsMatch(sProcessCheck) Then + Return True + End If + Catch + 'Ignore malformed regular expressions + End Try + Else + If oGame.ProcessName = sProcessCheck Then + Return True + End If + End If + + Return False + End Function + Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer, ByVal bDebugMode As Boolean) As Boolean Dim prsList() As Process = Process.GetProcesses Dim sProcessCheck As String = String.Empty @@ -198,32 +220,33 @@ Public Class mgrProcesses End Try 'Detection Pass 1 - If hshScanList.ContainsKey(sProcessCheck) Then - prsFoundProcess = prsCurrent - oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy - bPass = True + For Each oCurrentGame As clsGame In hshScanList.Values + If IsMatch(oCurrentGame, sProcessCheck) Then + prsFoundProcess = prsCurrent + oGame = oCurrentGame.ShallowCopy + bPass = True - If mgrCommon.IsUnix Then - GetUnixCommand(prsCurrent) - Else - GetWindowsCommand(prsCurrent) - End If + If mgrCommon.IsUnix Then + GetUnixCommand(prsCurrent) + Else + GetWindowsCommand(prsCurrent) + End If - If oGame.Duplicate = True Then - If HandleDuplicates(hshScanList) Then + If oGame.Duplicate = True Then + If HandleDuplicates(hshScanList) Then + bDuplicates = False + oDuplicateGames.Clear() + End If + Else bDuplicates = False oDuplicateGames.Clear() End If - Else - bDuplicates = False - oDuplicateGames.Clear() + + If Duplicate And DuplicateList.Count = 0 Then bPass = False + + If oGame.Parameter <> String.Empty And Not Duplicate And Not FullCommand.Contains(oGame.Parameter) Then bPass = False End If - - If Duplicate And DuplicateList.Count = 0 Then bPass = False - - If oGame.Parameter <> String.Empty And Not Duplicate And Not FullCommand.Contains(oGame.Parameter) Then bPass = False - - End If + Next 'Detection Pass 2 If bPass Then diff --git a/GBM/Managers/mgrSQLite.vb b/GBM/Managers/mgrSQLite.vb index bb6b928..252842f 100644 --- a/GBM/Managers/mgrSQLite.vb +++ b/GBM/Managers/mgrSQLite.vb @@ -83,7 +83,7 @@ Public Class mgrSQLite sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & - "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, PRIMARY KEY(Name, Process));" + "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));" 'Add Tables (Tags) sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); " @@ -123,7 +123,7 @@ Public Class mgrSQLite sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & "AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & "ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & - "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, PRIMARY KEY(Name, Process));" + "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, IsRegEx BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));" 'Add Tables (Remote Manifest) sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & @@ -734,6 +734,31 @@ Public Class mgrSQLite End If End If + '1.08 Upgrade + If GetDatabaseVersion() < 108 Then + If eDatabase = Database.Local Then + 'Backup DB before starting + BackupDB("v105") + + 'Add new field(s) + sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;" + + sSQL &= "PRAGMA user_version=108" + + RunParamQuery(sSQL, New Hashtable) + End If + If eDatabase = Database.Remote Then + 'Backup DB before starting + BackupDB("v105") + + 'Add new field(s) + sSQL = "ALTER TABLE monitorlist ADD COLUMN IsRegEx BOOLEAN NOT NULL DEFAULT 0;" + + sSQL &= "PRAGMA user_version=108" + + RunParamQuery(sSQL, New Hashtable) + End If + End If End Sub Public Function GetDBSize() As Long diff --git a/GBM/Managers/mgrXML.vb b/GBM/Managers/mgrXML.vb index 5f48229..ee5a6e7 100644 --- a/GBM/Managers/mgrXML.vb +++ b/GBM/Managers/mgrXML.vb @@ -35,6 +35,7 @@ Public Class mgrXML oGame.MonitorOnly = g.MonitorOnly oGame.Parameter = g.Parameter oGame.Comments = g.Comments + oGame.IsRegEx = g.IsRegEx For Each t As Tag In g.Tags oGame.ImportTags.Add(t) Next diff --git a/GBM/My Project/AssemblyInfo.vb b/GBM/My Project/AssemblyInfo.vb index 2c5b9cb..053293a 100644 --- a/GBM/My Project/AssemblyInfo.vb +++ b/GBM/My Project/AssemblyInfo.vb @@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + \ No newline at end of file diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index 512e9b1..3b20572 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -1104,6 +1104,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Regular Expression. + ''' + Friend ReadOnly Property frmFilter_FieldIsRegEx() As String + Get + Return ResourceManager.GetString("frmFilter_FieldIsRegEx", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Monitor Only. ''' @@ -1617,6 +1626,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Regular Expression. + ''' + Friend ReadOnly Property frmGameManager_chkRegEx() As String + Get + Return ResourceManager.GetString("frmGameManager_chkRegEx", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Save multiple backups. ''' @@ -2094,6 +2112,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to Comments:. + ''' + Friend ReadOnly Property frmGameManager_lblComments() As String + Get + Return ResourceManager.GetString("frmGameManager_lblComments", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Company:. ''' diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index d9e3c78..c29613e 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -2008,4 +2008,13 @@ &Export Grid + + Regular Expression + + + Regular Expression + + + Comments: + \ No newline at end of file