diff --git a/GBM/Forms/frmChooseGame.vb b/GBM/Forms/frmChooseGame.vb
index f79125e..a0690dc 100644
--- a/GBM/Forms/frmChooseGame.vb
+++ b/GBM/Forms/frmChooseGame.vb
@@ -30,8 +30,10 @@ Public Class frmChooseGame
lstGameBox.DisplayMember = "Value"
For Each o As clsGame In Process.DuplicateList
- lstGameBox.Items.Add(New KeyValuePair(Of String, String)(o.ID, o.Name))
- oGamesHash.Add(o.ID, o)
+ If o.Parameter = String.Empty Then
+ lstGameBox.Items.Add(New KeyValuePair(Of String, String)(o.ID, o.Name))
+ oGamesHash.Add(o.ID, o)
+ End If
Next
lstGameBox.SelectedIndex = 0
diff --git a/GBM/Forms/frmGameManager.Designer.vb b/GBM/Forms/frmGameManager.Designer.vb
index 9f8379b..b1316a0 100644
--- a/GBM/Forms/frmGameManager.Designer.vb
+++ b/GBM/Forms/frmGameManager.Designer.vb
@@ -28,6 +28,8 @@ Partial Class frmGameManager
Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox()
+ Me.txtParameter = New System.Windows.Forms.TextBox()
+ Me.lblParameter = New System.Windows.Forms.Label()
Me.chkCleanFolder = New System.Windows.Forms.CheckBox()
Me.lblLimit = New System.Windows.Forms.Label()
Me.nudLimit = New System.Windows.Forms.NumericUpDown()
@@ -96,8 +98,6 @@ Partial Class frmGameManager
Me.cmsDeleteBackup = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmsDeleteOne = New System.Windows.Forms.ToolStripMenuItem()
Me.cmsDeleteAll = New System.Windows.Forms.ToolStripMenuItem()
- Me.lblParameter = New System.Windows.Forms.Label()
- Me.txtParameter = New System.Windows.Forms.TextBox()
Me.grpConfig.SuspendLayout()
CType(Me.nudLimit, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpExtra.SuspendLayout()
@@ -182,13 +182,29 @@ Partial Class frmGameManager
Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration"
'
+ 'txtParameter
+ '
+ Me.txtParameter.Location = New System.Drawing.Point(333, 45)
+ Me.txtParameter.Name = "txtParameter"
+ Me.txtParameter.Size = New System.Drawing.Size(150, 20)
+ Me.txtParameter.TabIndex = 7
+ '
+ 'lblParameter
+ '
+ Me.lblParameter.AutoSize = True
+ Me.lblParameter.Location = New System.Drawing.Point(269, 48)
+ Me.lblParameter.Name = "lblParameter"
+ Me.lblParameter.Size = New System.Drawing.Size(58, 13)
+ Me.lblParameter.TabIndex = 6
+ Me.lblParameter.Text = "Parameter:"
+ '
'chkCleanFolder
'
Me.chkCleanFolder.AutoSize = True
Me.chkCleanFolder.Location = New System.Drawing.Point(329, 101)
Me.chkCleanFolder.Name = "chkCleanFolder"
Me.chkCleanFolder.Size = New System.Drawing.Size(136, 17)
- Me.chkCleanFolder.TabIndex = 11
+ Me.chkCleanFolder.TabIndex = 13
Me.chkCleanFolder.Text = "Delete folder on restore"
Me.chkCleanFolder.UseVisualStyleBackColor = True
'
@@ -198,7 +214,7 @@ Partial Class frmGameManager
Me.lblLimit.Location = New System.Drawing.Point(375, 130)
Me.lblLimit.Name = "lblLimit"
Me.lblLimit.Size = New System.Drawing.Size(68, 13)
- Me.lblLimit.TabIndex = 14
+ Me.lblLimit.TabIndex = 16
Me.lblLimit.Text = "Backup Limit"
Me.lblLimit.Visible = False
'
@@ -208,7 +224,7 @@ Partial Class frmGameManager
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 = 13
+ Me.nudLimit.TabIndex = 15
Me.nudLimit.Value = New Decimal(New Integer() {2, 0, 0, 0})
Me.nudLimit.Visible = False
'
@@ -217,7 +233,7 @@ Partial Class frmGameManager
Me.btnExclude.Location = New System.Drawing.Point(9, 125)
Me.btnExclude.Name = "btnExclude"
Me.btnExclude.Size = New System.Drawing.Size(175, 23)
- Me.btnExclude.TabIndex = 9
+ Me.btnExclude.TabIndex = 11
Me.btnExclude.Text = "E&xclude Items..."
Me.btnExclude.UseVisualStyleBackColor = True
'
@@ -226,7 +242,7 @@ Partial Class frmGameManager
Me.btnInclude.Location = New System.Drawing.Point(9, 97)
Me.btnInclude.Name = "btnInclude"
Me.btnInclude.Size = New System.Drawing.Size(175, 23)
- Me.btnInclude.TabIndex = 8
+ Me.btnInclude.TabIndex = 10
Me.btnInclude.Text = "In&clude Items..."
Me.btnInclude.UseVisualStyleBackColor = True
'
@@ -245,7 +261,7 @@ Partial Class frmGameManager
Me.btnSavePathBrowse.Location = New System.Drawing.Point(489, 71)
Me.btnSavePathBrowse.Name = "btnSavePathBrowse"
Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20)
- Me.btnSavePathBrowse.TabIndex = 7
+ Me.btnSavePathBrowse.TabIndex = 9
Me.btnSavePathBrowse.Text = "..."
Me.btnSavePathBrowse.UseVisualStyleBackColor = True
'
@@ -309,7 +325,7 @@ Partial Class frmGameManager
Me.chkTimeStamp.Location = New System.Drawing.Point(190, 129)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(133, 17)
- Me.chkTimeStamp.TabIndex = 12
+ Me.chkTimeStamp.TabIndex = 14
Me.chkTimeStamp.Text = "Save multiple backups"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
@@ -319,7 +335,7 @@ Partial Class frmGameManager
Me.chkFolderSave.Location = New System.Drawing.Point(190, 101)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
- Me.chkFolderSave.TabIndex = 10
+ Me.chkFolderSave.TabIndex = 12
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
@@ -328,7 +344,7 @@ Partial Class frmGameManager
Me.txtSavePath.Location = New System.Drawing.Point(69, 71)
Me.txtSavePath.Name = "txtSavePath"
Me.txtSavePath.Size = New System.Drawing.Size(414, 20)
- Me.txtSavePath.TabIndex = 6
+ Me.txtSavePath.TabIndex = 8
'
'txtProcess
'
@@ -823,22 +839,6 @@ Partial Class frmGameManager
Me.cmsDeleteAll.Size = New System.Drawing.Size(114, 22)
Me.cmsDeleteAll.Text = "&All Files"
'
- 'lblParameter
- '
- Me.lblParameter.AutoSize = True
- Me.lblParameter.Location = New System.Drawing.Point(269, 48)
- Me.lblParameter.Name = "lblParameter"
- Me.lblParameter.Size = New System.Drawing.Size(58, 13)
- Me.lblParameter.TabIndex = 15
- Me.lblParameter.Text = "Parameter:"
- '
- 'txtParameter
- '
- Me.txtParameter.Location = New System.Drawing.Point(333, 45)
- Me.txtParameter.Name = "txtParameter"
- Me.txtParameter.Size = New System.Drawing.Size(150, 20)
- Me.txtParameter.TabIndex = 16
- '
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb
index 39d6b3c..c6d473f 100644
--- a/GBM/Forms/frmGameManager.vb
+++ b/GBM/Forms/frmGameManager.vb
@@ -1259,6 +1259,13 @@ Public Class frmGameManager
Return False
End If
+ If oApp.Parameter <> String.Empty Then
+ If mgrMonitorList.DoDuplicateParameterCheck(oApp.ProcessName, oApp.Parameter, , oApp.ID) Then
+ mgrCommon.ShowMessage(frmGameManager_ErrorProcessParameterDupe, MsgBoxStyle.Exclamation)
+ Return False
+ End If
+ End If
+
Return True
End Function
diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb
index 8ebece1..baaaa80 100644
--- a/GBM/Forms/frmMain.vb
+++ b/GBM/Forms/frmMain.vb
@@ -1463,7 +1463,7 @@ Public Class frmMain
Private Sub CheckForSavedDuplicate()
For Each o As clsGame In oProcess.DuplicateList
- If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower Then
+ If o.ProcessPath.ToLower = oProcess.GameInfo.ProcessPath.ToLower And o.Parameter = String.Empty Then
oProcess.GameInfo = o
oProcess.Duplicate = False
End If
diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb
index 7e36f73..3dd8a4b 100644
--- a/GBM/Managers/mgrMonitorList.vb
+++ b/GBM/Managers/mgrMonitorList.vb
@@ -268,6 +268,31 @@ Public Class mgrMonitorList
End If
End Function
+ Public Shared Function DoDuplicateParameterCheck(ByVal sProcess As String, ByVal sParameter As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, Optional ByVal sExcludeID As String = "") As Boolean
+ Dim oDatabase As New mgrSQLite(iSelectDB)
+ Dim sSQL As String
+ Dim oData As DataSet
+ Dim hshParams As New Hashtable
+
+ sSQL = "SELECT * FROM monitorlist WHERE Process = @Process AND Parameter = @Parameter"
+
+ hshParams.Add("Process", sProcess)
+ hshParams.Add("Parameter", sParameter)
+
+ If sExcludeID <> String.Empty Then
+ sSQL &= " AND MonitorID <> @MonitorID"
+ hshParams.Add("MonitorID", sExcludeID)
+ End If
+
+ oData = oDatabase.ReadParamData(sSQL, hshParams)
+
+ If oData.Tables(0).Rows.Count > 0 Then
+ Return True
+ Else
+ Return False
+ End If
+ 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)
diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb
index 839d2c2..db68857 100644
--- a/GBM/My Project/Resources.Designer.vb
+++ b/GBM/My Project/Resources.Designer.vb
@@ -1635,6 +1635,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to A game with this exact process and parameter already exists..
+ '''
+ Friend ReadOnly Property frmGameManager_ErrorProcessParameterDupe() As String
+ Get
+ Return ResourceManager.GetString("frmGameManager_ErrorProcessParameterDupe", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to You must enter a valid game name..
'''
diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx
index 09b045f..a1fac24 100644
--- a/GBM/My Project/Resources.resx
+++ b/GBM/My Project/Resources.resx
@@ -1786,4 +1786,7 @@
Parameter:
+
+ A game with this exact process and parameter already exists.
+
\ No newline at end of file