From 7c0a342f1df09d7e0003d9445416f23b8ff0d4aa Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Thu, 16 Nov 2017 12:35:15 -0600 Subject: [PATCH] Changes for issues #97 and #99 --- GBM/Classes/XML Serialize Classes/Game.vb | 10 ++++++ GBM/Classes/clsGame.vb | 13 +++++++ GBM/Classes/clsSession.vb | 44 +++++++++++++++++++++++ GBM/Forms/frmMain.vb | 21 +++++++++-- GBM/Game Backup Monitor.vbproj | 2 ++ GBM/Managers/mgrMonitorList.vb | 10 ++++-- GBM/Managers/mgrSQLite.vb | 38 ++++++++++++++++++-- GBM/Managers/mgrSessions.vb | 37 +++++++++++++++++++ GBM/My Project/AssemblyInfo.vb | 4 +-- 9 files changed, 170 insertions(+), 9 deletions(-) create mode 100644 GBM/Classes/clsSession.vb create mode 100644 GBM/Managers/mgrSessions.vb diff --git a/GBM/Classes/XML Serialize Classes/Game.vb b/GBM/Classes/XML Serialize Classes/Game.vb index 1bc63d4..f3be5dd 100644 --- a/GBM/Classes/XML Serialize Classes/Game.vb +++ b/GBM/Classes/XML Serialize Classes/Game.vb @@ -8,6 +8,7 @@ Private sFileType As String Private sExcludeList As String Private bMonitorOnly As Boolean + Private sComments As String Private oTags As List(Of Tag) Property Name As String @@ -91,6 +92,15 @@ End Get End Property + Property Comments As String + Set(value As String) + sComments = value + End Set + Get + Return sComments + 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 fb7ce2e..3dea47f 100644 --- a/GBM/Classes/clsGame.vb +++ b/GBM/Classes/clsGame.vb @@ -19,6 +19,7 @@ Public Class clsGame Private sCompany As String = String.Empty Private bEnabled As Boolean = True Private bMonitorOnly As Boolean = False + Private sComments As String = String.Empty Private bDuplicate As Boolean = False Private bTempGame As Boolean = False Private oImportTags As New List(Of Tag) @@ -220,6 +221,15 @@ Public Class clsGame End Set End Property + Property Comments As String + Get + Return sComments + End Get + Set(value As String) + sComments = value + End Set + End Property + Property Duplicate As Boolean Get Return bDuplicate @@ -324,6 +334,9 @@ Public Class clsGame If MonitorOnly <> oGame.MonitorOnly Then Return False End If + If Comments <> oGame.Comments Then + Return False + End If 'Optional Sync Fields If (eSyncFields And eOptionalSyncFields.Company) = eOptionalSyncFields.Company Then diff --git a/GBM/Classes/clsSession.vb b/GBM/Classes/clsSession.vb new file mode 100644 index 0000000..cec5e2b --- /dev/null +++ b/GBM/Classes/clsSession.vb @@ -0,0 +1,44 @@ +Public Class clsSession + + Private sMonitorID As String + Private dStart As DateTime + Private dEnd As DateTime + Private sComputerName As String = My.Computer.Name + + Public Property MonitorID As String + Set(value As String) + sMonitorID = value + End Set + Get + Return sMonitorID + End Get + End Property + + Public Property SessionStart As DateTime + Set(value As DateTime) + dStart = value + End Set + Get + Return dStart + End Get + End Property + + Public Property SessionEnd As DateTime + Set(value As DateTime) + dEnd = value + End Set + Get + Return dEnd + End Get + End Property + + Public Property ComputerName As String + Set(value As String) + sComputerName = value + End Set + Get + Return sComputerName + End Get + End Property + +End Class diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb index 31c81b2..db15ac7 100644 --- a/GBM/Forms/frmMain.vb +++ b/GBM/Forms/frmMain.vb @@ -714,6 +714,17 @@ Public Class frmMain UpdateTimeSpent(dCurrentHours, oProcess.TimeSpent.TotalHours) End Sub + Private Sub HandleSession() + Dim oSession As New clsSession + + 'Record Session + oSession.MonitorID = oProcess.GameInfo.ID + oSession.SessionStart = oProcess.StartTime + oSession.SessionEnd = oProcess.EndTime + + mgrSessions.AddSession(oSession) + End Sub + Private Function SupressBackup() As Boolean Dim iSession As Integer If oSettings.SupressBackup Then @@ -1764,7 +1775,10 @@ Public Class frmMain LoadGameSettings() Else bContinue = False - If oSettings.TimeTracking Then HandleTimeSpent() + If oSettings.TimeTracking Then + HandleTimeSpent() + HandleSession() + End If UpdateLog(mgrCommon.FormatString(frmMain_ErrorBackupUnknownPath, oProcess.GameInfo.Name), False) oProcess.GameInfo = Nothing ResetGameInfo() @@ -1775,7 +1789,10 @@ Public Class frmMain If bContinue Then If DoMultiGameCheck() Then UpdateLog(mgrCommon.FormatString(frmMain_GameEnded, oProcess.GameInfo.Name), False) - If oSettings.TimeTracking Then HandleTimeSpent() + If oSettings.TimeTracking Then + HandleTimeSpent() + HandleSession() + End If RunBackup() Else UpdateLog(frmMain_UnknownGameEnded, False) diff --git a/GBM/Game Backup Monitor.vbproj b/GBM/Game Backup Monitor.vbproj index d4826e5..ea4b379 100644 --- a/GBM/Game Backup Monitor.vbproj +++ b/GBM/Game Backup Monitor.vbproj @@ -125,6 +125,7 @@ + @@ -225,6 +226,7 @@ + diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb index 5aa9d1d..edd08c7 100644 --- a/GBM/Managers/mgrMonitorList.vb +++ b/GBM/Managers/mgrMonitorList.vb @@ -33,6 +33,7 @@ Public Class mgrMonitorList oGame.BackupLimit = CInt(dr("BackupLimit")) 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")) Return oGame End Function @@ -59,6 +60,7 @@ Public Class mgrMonitorList hshParams.Add("BackupLimit", oGame.BackupLimit) hshParams.Add("CleanFolder", oGame.CleanFolder) hshParams.Add("Parameter", oGame.Parameter) + hshParams.Add("Comments", oGame.Comments) Return hshParams End Function @@ -99,7 +101,7 @@ 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)" + sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly, @BackupLimit, @CleanFolder, @Parameter, @Comments)" 'Parameters hshParams = SetCoreParameters(oGame) @@ -115,7 +117,7 @@ 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 WHERE MonitorID=@ID" + sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly, BackupLimit=@BackupLimit, CleanFolder=@CleanFolder, Parameter=@Parameter, Comments=@Comments WHERE MonitorID=@ID" 'Parameters hshParams = SetCoreParameters(oGame) @@ -367,6 +369,7 @@ Public Class mgrMonitorList hshParams.Add("MonitorOnly", oGame.MonitorOnly) hshParams.Add("CleanFolder", oGame.CleanFolder) hshParams.Add("Parameter", oGame.Parameter) + hshParams.Add("Comments", oGame.Comments) 'Optional Parameters If (eSyncFields And clsGame.eOptionalSyncFields.Company) = clsGame.eOptionalSyncFields.Company Then @@ -501,7 +504,7 @@ Public Class mgrMonitorList ByVal bSortAsc As Boolean, ByVal sSortField As String, 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 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 FROM monitorlist" Dim sSort As String = " ORDER BY " & sSortField If bSortAsc Then @@ -632,6 +635,7 @@ Public Class mgrMonitorList If Not IsDBNull(dr("ExcludeList")) Then oGame.ExcludeList = CStr(dr("ExcludeList")) oGame.MonitorOnly = CBool(dr("MonitorOnly")) If Not IsDBNull(dr("Parameter")) Then oGame.Parameter = CStr(dr("Parameter")) + If Not IsDBNull(dr("Comments")) Then oGame.Comments = CStr(dr("Comments")) oGame.Tags = mgrGameTags.GetTagsByGameForExport(sID) oList.Add(oGame) Next diff --git a/GBM/Managers/mgrSQLite.vb b/GBM/Managers/mgrSQLite.vb index d34e808..937a0a1 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, PRIMARY KEY(Name, Process));" + "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, PRIMARY KEY(Name, Process));" 'Add Tables (Tags) sSql &= "CREATE TABLE tags (TagID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY); " @@ -120,7 +120,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, PRIMARY KEY(Name, Process));" + "BackupLimit INTEGER NOT NULL, CleanFolder BOOLEAN NOT NULL, Parameter TEXT, Comments TEXT, 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, " & @@ -132,6 +132,10 @@ Public Class mgrSQLite 'Add Tables (Remote Game Tags) sSql &= "CREATE TABLE gametags (TagID TEXT NOT NULL, MonitorID TEXT NOT NULL, PRIMARY KEY(TagID, MonitorID)); " + 'Add Tables (Sessions) + sSql &= "CREATE TABLE sessions (MonitorID TEXT NOT NULL, Start INTEGER NOT NULL, End INTEGER NOT NULL, " & + "ComputerName TEXT NOT NULL, PRIMARY KEY(MonitorID, Start));" + 'Set Version sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion @@ -680,6 +684,36 @@ Public Class mgrSQLite End If End If + '1.05 Upgrade + If GetDatabaseVersion() < 105 Then + If eDatabase = Database.Local Then + 'Backup DB before starting + BackupDB("v102") + + 'Add new field(s) + sSQL = "ALTER TABLE monitorlist ADD COLUMN Comments TEXT;" + + sSQL &= "PRAGMA user_version=105" + + RunParamQuery(sSQL, New Hashtable) + End If + If eDatabase = Database.Remote Then + 'Backup DB before starting + BackupDB("v102") + + 'Add Tables (Sessions) + sSQL = "CREATE TABLE sessions (MonitorID TEXT NOT NULL, Start INTEGER NOT NULL, End INTEGER NOT NULL, " & + "ComputerName TEXT NOT NULL, PRIMARY KEY(MonitorID, Start));" + + 'Add new field(s) + sSQL &= "ALTER TABLE monitorlist ADD COLUMN Comments TEXT;" + + sSQL &= "PRAGMA user_version=105" + + RunParamQuery(sSQL, New Hashtable) + End If + End If + End Sub Public Function GetDBSize() As Long diff --git a/GBM/Managers/mgrSessions.vb b/GBM/Managers/mgrSessions.vb new file mode 100644 index 0000000..bea09b6 --- /dev/null +++ b/GBM/Managers/mgrSessions.vb @@ -0,0 +1,37 @@ +Public Class mgrSessions + + Private Shared Function MapToObject(ByVal dr As DataRow) As clsSession + Dim oSession As New clsSession + + oSession.MonitorID = CStr(dr("MonitorID")) + oSession.SessionStart = mgrCommon.UnixToDate(CInt(dr("Start"))) + oSession.SessionEnd = mgrCommon.UnixToDate(CInt(dr("End"))) + oSession.ComputerName = CStr(dr("ComputerName")) + + Return oSession + End Function + + Private Shared Function SetCoreParameters(ByVal oSession As clsSession) As Hashtable + Dim hshParams As New Hashtable + + hshParams.Add("MonitorID", oSession.MonitorID) + hshParams.Add("Start", mgrCommon.DateToUnix(oSession.SessionStart)) + hshParams.Add("End", mgrCommon.DateToUnix(oSession.SessionEnd)) + hshParams.Add("ComputerName", oSession.ComputerName) + + Return hshParams + End Function + + Public Shared Sub AddSession(ByVal oSession As clsSession) + Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote) + Dim sSQL As String + Dim hshParams As Hashtable + + sSQL = "INSERT INTO sessions (MonitorID, Start, End, ComputerName) VALUES (@MonitorID, @Start, @End, @ComputerName);" + + hshParams = SetCoreParameters(oSession) + + oDatabase.RunParamQuery(sSQL, hshParams) + End Sub + +End Class diff --git a/GBM/My Project/AssemblyInfo.vb b/GBM/My Project/AssemblyInfo.vb index 66ef53c..3acf9cd 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