From 11101f7f229d01be87637f53c3389e54a3457f92 Mon Sep 17 00:00:00 2001 From: MikeMaximus Date: Thu, 7 Dec 2017 15:50:37 -0600 Subject: [PATCH] Added session viewer for issue #99 --- GBM/Forms/frmMain.Designer.vb | 26 ++++-- GBM/Forms/frmMain.vb | 13 +++ GBM/Forms/frmSessions.Designer.vb | 85 +++++++++++++++++++ GBM/Forms/frmSessions.resx | 120 +++++++++++++++++++++++++++ GBM/Forms/frmSessions.vb | 61 ++++++++++++++ GBM/Game Backup Monitor.vbproj | 9 ++ GBM/Managers/mgrSessions.vb | 20 +++-- GBM/My Project/Resources.Designer.vb | 45 ++++++++++ GBM/My Project/Resources.resx | 15 ++++ 9 files changed, 383 insertions(+), 11 deletions(-) create mode 100644 GBM/Forms/frmSessions.Designer.vb create mode 100644 GBM/Forms/frmSessions.resx create mode 100644 GBM/Forms/frmSessions.vb diff --git a/GBM/Forms/frmMain.Designer.vb b/GBM/Forms/frmMain.Designer.vb index 8ba204b..4ecf822 100644 --- a/GBM/Forms/frmMain.Designer.vb +++ b/GBM/Forms/frmMain.Designer.vb @@ -68,6 +68,7 @@ Partial Class frmMain Me.gMonToolsLog = New System.Windows.Forms.ToolStripMenuItem() Me.gMonLogClear = New System.Windows.Forms.ToolStripMenuItem() Me.gMonLogSave = New System.Windows.Forms.ToolStripMenuItem() + Me.gMonToolsSessions = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpWebSite = New System.Windows.Forms.ToolStripMenuItem() Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem() @@ -84,6 +85,7 @@ Partial Class frmMain Me.lblStatus2 = New System.Windows.Forms.Label() Me.lblStatus3 = New System.Windows.Forms.Label() Me.pbTime = New System.Windows.Forms.PictureBox() + Me.gMonTrayToolsSessions = New System.Windows.Forms.ToolStripMenuItem() Me.gMonTrayMenu.SuspendLayout() Me.gMonStatusStrip.SuspendLayout() Me.gMonMainMenu.SuspendLayout() @@ -103,7 +105,7 @@ Partial Class frmMain ' Me.gMonTrayMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayNotification, Me.gMonTrayShow, Me.gMonTraySep2, Me.gMonTrayMon, Me.gMonTraySettings, Me.gMonTraySetup, Me.gMonTrayTools, Me.gMonTraySep1, Me.gMonTrayExit}) Me.gMonTrayMenu.Name = "gMonTrayMenu" - Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 170) + Me.gMonTrayMenu.Size = New System.Drawing.Size(162, 192) ' 'gMonTrayNotification ' @@ -168,7 +170,7 @@ Partial Class frmMain ' 'gMonTrayTools ' - Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog}) + Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog, Me.gMonTrayToolsSessions}) Me.gMonTrayTools.Name = "gMonTrayTools" Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22) Me.gMonTrayTools.Text = "&Tools" @@ -195,13 +197,13 @@ Partial Class frmMain 'gMonTrayLogClear ' Me.gMonTrayLogClear.Name = "gMonTrayLogClear" - Me.gMonTrayLogClear.Size = New System.Drawing.Size(101, 22) + Me.gMonTrayLogClear.Size = New System.Drawing.Size(152, 22) Me.gMonTrayLogClear.Text = "&Clear" ' 'gMonTrayLogSave ' Me.gMonTrayLogSave.Name = "gMonTrayLogSave" - Me.gMonTrayLogSave.Size = New System.Drawing.Size(101, 22) + Me.gMonTrayLogSave.Size = New System.Drawing.Size(152, 22) Me.gMonTrayLogSave.Text = "&Save" ' 'gMonTraySep1 @@ -348,7 +350,7 @@ Partial Class frmMain ' 'gMonTools ' - Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog}) + Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog, Me.gMonToolsSessions}) Me.gMonTools.Name = "gMonTools" Me.gMonTools.Size = New System.Drawing.Size(47, 20) Me.gMonTools.Text = "&Tools" @@ -384,6 +386,12 @@ Partial Class frmMain Me.gMonLogSave.Size = New System.Drawing.Size(101, 22) Me.gMonLogSave.Text = "&Save" ' + 'gMonToolsSessions + ' + Me.gMonToolsSessions.Name = "gMonToolsSessions" + Me.gMonToolsSessions.Size = New System.Drawing.Size(184, 22) + Me.gMonToolsSessions.Text = "&Session Viewer..." + ' 'gMonHelp ' Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout}) @@ -524,6 +532,12 @@ Partial Class frmMain Me.pbTime.TabIndex = 18 Me.pbTime.TabStop = False ' + 'gMonTrayToolsSessions + ' + Me.gMonTrayToolsSessions.Name = "gMonTrayToolsSessions" + Me.gMonTrayToolsSessions.Size = New System.Drawing.Size(184, 22) + Me.gMonTrayToolsSessions.Text = "&Session Viewer..." + ' 'frmMain ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -621,4 +635,6 @@ Partial Class frmMain Friend WithEvents gMonTrayLogSave As ToolStripMenuItem Friend WithEvents gMonStripAdminButton As System.Windows.Forms.ToolStripStatusLabel Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents gMonToolsSessions As ToolStripMenuItem + Friend WithEvents gMonTrayToolsSessions As ToolStripMenuItem End Class diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb index 8bd4884..099a390 100644 --- a/GBM/Forms/frmMain.vb +++ b/GBM/Forms/frmMain.vb @@ -878,6 +878,13 @@ Public Class frmMain ResumeScan() End Sub + Private Sub OpenSessions() + Dim frm As New frmSessions + PauseScan() + frm.ShowDialog() + ResumeScan() + End Sub + Private Sub OpenGameWizard() Dim frm As New frmAddWizard PauseScan() @@ -1287,6 +1294,7 @@ Public Class frmMain gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan gMonToolsCompact.Text = frmMain_gMonToolsCompact gMonToolsLog.Text = frmMain_gMonToolsLog + gMonToolsSessions.Text = frmMain_gMonToolsSessions gMonLogClear.Text = frmMain_gMonLogClear gMonLogSave.Text = frmMain_gMonLogSave gMonHelp.Text = frmMain_gMonHelp @@ -1308,6 +1316,7 @@ Public Class frmMain gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact gMonTrayToolsLog.Text = frmMain_gMonToolsLog + gMonTrayToolsSessions.Text = frmMain_gMonToolsSessions gMonTrayLogClear.Text = frmMain_gMonLogClear gMonTrayLogSave.Text = frmMain_gMonLogSave gMonTrayExit.Text = frmMain_gMonFileExit @@ -1631,6 +1640,10 @@ Public Class frmMain SaveLog() End Sub + Private Sub gMonToolsSessions_Click(sender As Object, e As EventArgs) Handles gMonToolsSessions.Click, gMonTrayToolsSessions.Click + OpenSessions() + End Sub + Private Sub gMonNotification_Click(sender As Object, e As EventArgs) Handles gMonNotification.Click, gMonTrayNotification.Click gMonNotification.Visible = False gMonTrayNotification.Visible = False diff --git a/GBM/Forms/frmSessions.Designer.vb b/GBM/Forms/frmSessions.Designer.vb new file mode 100644 index 0000000..5640618 --- /dev/null +++ b/GBM/Forms/frmSessions.Designer.vb @@ -0,0 +1,85 @@ + _ +Partial Class frmSessions + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + 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. + _ + Private Sub InitializeComponent() + Me.lblQuickFilter = New System.Windows.Forms.Label() + Me.txtFilter = New System.Windows.Forms.TextBox() + Me.dgSessions = New System.Windows.Forms.DataGridView() + CType(Me.dgSessions, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblQuickFilter + ' + Me.lblQuickFilter.AutoSize = True + Me.lblQuickFilter.Location = New System.Drawing.Point(12, 9) + Me.lblQuickFilter.Name = "lblQuickFilter" + Me.lblQuickFilter.Size = New System.Drawing.Size(63, 13) + Me.lblQuickFilter.TabIndex = 0 + Me.lblQuickFilter.Text = "Game Filter:" + ' + 'txtFilter + ' + Me.txtFilter.Location = New System.Drawing.Point(80, 6) + Me.txtFilter.Name = "txtFilter" + Me.txtFilter.Size = New System.Drawing.Size(160, 20) + Me.txtFilter.TabIndex = 1 + ' + 'dgSessions + ' + Me.dgSessions.AllowUserToAddRows = False + Me.dgSessions.AllowUserToDeleteRows = False + Me.dgSessions.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.dgSessions.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dgSessions.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnF2 + Me.dgSessions.Location = New System.Drawing.Point(12, 32) + Me.dgSessions.Name = "dgSessions" + Me.dgSessions.ReadOnly = True + Me.dgSessions.RowHeadersVisible = False + Me.dgSessions.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.dgSessions.Size = New System.Drawing.Size(760, 517) + Me.dgSessions.TabIndex = 2 + ' + 'frmSessions + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(784, 561) + Me.Controls.Add(Me.dgSessions) + Me.Controls.Add(Me.lblQuickFilter) + Me.Controls.Add(Me.txtFilter) + Me.Name = "frmSessions" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Session Viewer" + CType(Me.dgSessions, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents lblQuickFilter As Label + Friend WithEvents txtFilter As TextBox + Friend WithEvents dgSessions As DataGridView +End Class diff --git a/GBM/Forms/frmSessions.resx b/GBM/Forms/frmSessions.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/GBM/Forms/frmSessions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GBM/Forms/frmSessions.vb b/GBM/Forms/frmSessions.vb new file mode 100644 index 0000000..fa8425f --- /dev/null +++ b/GBM/Forms/frmSessions.vb @@ -0,0 +1,61 @@ +Imports GBM.My.Resources + +Public Class frmSessions + + Private WithEvents tmFilterTimer As Timer + + Private Sub FormatGrid() + dgSessions.Columns.Add("Name", frmSessions_ColumnGameName) + dgSessions.Columns.Add("Start", frmSessions_ColumnStart) + dgSessions.Columns.Add("End", frmSessions_ColumnEnd) + End Sub + + Private Sub LoadData() + Dim oData As DataSet + Dim sFilter As String + + If txtFilter.Text = String.Empty Then + oData = mgrSessions.GetSessions + Else + sFilter = txtFilter.Text.ToLower + oData = mgrSessions.GetSessionsByGameName(sFilter) + End If + + dgSessions.Rows.Clear() + + For Each dr As DataRow In oData.Tables(0).Rows + dgSessions.Rows.Add(New Object() {dr("Name"), mgrCommon.UnixToDate(dr("Start")), mgrCommon.UnixToDate(dr("End"))}) + Next + + dgSessions.AutoResizeColumns() + End Sub + + Private Sub SetForm() + Me.Text = frmSessions_Name + + 'Init Filter Timer + tmFilterTimer = New Timer() + tmFilterTimer.Interval = 1000 + tmFilterTimer.Enabled = False + 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() + tmFilterTimer.Stop() + tmFilterTimer.Enabled = False + End Sub + + Private Sub frmSession_Load(sender As Object, e As EventArgs) Handles MyBase.Load + SetForm() + FormatGrid() + LoadData() + End Sub + +End Class \ No newline at end of file diff --git a/GBM/Game Backup Monitor.vbproj b/GBM/Game Backup Monitor.vbproj index d77d052..dc616fb 100644 --- a/GBM/Game Backup Monitor.vbproj +++ b/GBM/Game Backup Monitor.vbproj @@ -171,6 +171,12 @@ Form + + frmSessions.vb + + + Form + frmStartUpWizard.vb @@ -271,6 +277,9 @@ frmIncludeExclude.vb + + frmSessions.vb + frmStartUpWizard.vb Designer diff --git a/GBM/Managers/mgrSessions.vb b/GBM/Managers/mgrSessions.vb index b87c884..9eac59e 100644 --- a/GBM/Managers/mgrSessions.vb +++ b/GBM/Managers/mgrSessions.vb @@ -6,7 +6,6 @@ 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 @@ -17,7 +16,6 @@ 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 @@ -27,21 +25,31 @@ Dim sSQL As String Dim hshParams As Hashtable - sSQL = "INSERT INTO sessions (MonitorID, Start, End, ComputerName) VALUES (@MonitorID, @Start, @End, @ComputerName);" + sSQL = "INSERT INTO sessions (MonitorID, Start, End) VALUES (@MonitorID, @Start, @End);" hshParams = SetCoreParameters(oSession) oDatabase.RunParamQuery(sSQL, hshParams) End Sub - Public Shared Function GetSessionsByGame(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As DataSet + Public Shared Function GetSessions(Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As DataSet Dim oDatabase As New mgrSQLite(iSelectDB) Dim sSQL As String Dim hshParams As New Hashtable - sSQL = "SELECT Start, End, ComputerName FROM sessions WHERE MonitorID = @MonitorID;" + sSQL = "SELECT Name, Start, End FROM sessions NATURAL JOIN monitorlist;" - hshParams.Add("MonitorID", sMonitorID) + Return oDatabase.ReadParamData(sSQL, hshParams) + End Function + + Public Shared Function GetSessionsByGameName(ByVal sGameName As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As DataSet + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim sSQL As String + Dim hshParams As New Hashtable + + sSQL = "SELECT Name, Start, End FROM sessions NATURAL JOIN monitorlist WHERE monitorlist.Name LIKE @Name;" + + hshParams.Add("Name", "%" & sGameName & "%") Return oDatabase.ReadParamData(sSQL, hshParams) End Function diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb index e5a32b4..090a8d6 100644 --- a/GBM/My Project/Resources.Designer.vb +++ b/GBM/My Project/Resources.Designer.vb @@ -3237,6 +3237,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to &Session Viewer.... + ''' + Friend ReadOnly Property frmMain_gMonToolsSessions() As String + Get + Return ResourceManager.GetString("frmMain_gMonToolsSessions", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Show / Hide. ''' @@ -3597,6 +3606,42 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized string similar to End. + ''' + Friend ReadOnly Property frmSessions_ColumnEnd() As String + Get + Return ResourceManager.GetString("frmSessions_ColumnEnd", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Game. + ''' + Friend ReadOnly Property frmSessions_ColumnGameName() As String + Get + Return ResourceManager.GetString("frmSessions_ColumnGameName", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Start. + ''' + Friend ReadOnly Property frmSessions_ColumnStart() As String + Get + Return ResourceManager.GetString("frmSessions_ColumnStart", resourceCulture) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Session Viewer. + ''' + Friend ReadOnly Property frmSessions_Name() As String + Get + Return ResourceManager.GetString("frmSessions_Name", resourceCulture) + End Get + End Property + ''' ''' Looks up a localized string similar to Executable. ''' diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx index 0c37006..8f06d19 100644 --- a/GBM/My Project/Resources.resx +++ b/GBM/My Project/Resources.resx @@ -1900,4 +1900,19 @@ Not + + &Session Viewer... + + + End + + + Game + + + Start + + + Session Viewer + \ No newline at end of file