diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 1a4fd40..4a0a8f1 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -1927,9 +1927,6 @@ Public Class frmGameManager tmFilterTimer = New Timer() tmFilterTimer.Interval = 1000 tmFilterTimer.Enabled = False - - 'Handlers - AddHandler mgrSync.PushEnded, AddressOf LoadBackupData End Sub Private Sub frmGameManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb index 7600ae0..f1ea5a4 100644 --- a/GBM/Forms/frmMain.vb +++ b/GBM/Forms/frmMain.vb @@ -1556,11 +1556,8 @@ Public Class frmMain End Sub Private Sub QueueSyncWatcher() Handles oFileWatcher.Changed - 'This is the easiest (but probably sloppiest) way to block unnecessary sync calls after the remote db is updated by GBM itself. - If eCurrentStatus <> eStatus.Paused And eCurrentStatus <> eStatus.Monitoring Then - tmFileWatcherQueue.Stop() - tmFileWatcherQueue.Start() - End If + tmFileWatcherQueue.Stop() + tmFileWatcherQueue.Start() End Sub Private Sub HandleSyncWatcher() Handles tmFileWatcherQueue.Elapsed @@ -1805,8 +1802,8 @@ Public Class frmMain StartSyncWatcher() AddHandler mgrSync.UpdateLog, AddressOf UpdateLog - AddHandler mgrSync.PushStarted, AddressOf StopSyncWatcher - AddHandler mgrSync.PushEnded, AddressOf StartSyncWatcher + AddHandler mgrSQLite.DatabaseOpened, AddressOf StopSyncWatcher + AddHandler mgrSQLite.DatabaseClosed, AddressOf StartSyncWatcher bInitComplete = True End If diff --git a/GBM/Game Backup Monitor.vbproj b/GBM/Game Backup Monitor.vbproj index deebb96..deb83d0 100644 --- a/GBM/Game Backup Monitor.vbproj +++ b/GBM/Game Backup Monitor.vbproj @@ -1,5 +1,5 @@  - + Debug x86 @@ -13,7 +13,7 @@ GBM 512 WindowsForms - v4.5 + v4.8 false @@ -110,11 +110,11 @@ False References\Mono.Data.Sqlite.dll - - ..\packages\NHotkey.2.1.1\lib\net45\NHotkey.dll + + ..\packages\NHotkey.3.0.0\lib\net462\NHotkey.dll - - ..\packages\NHotkey.WindowsForms.2.1.1\lib\net45\NHotkey.WindowsForms.dll + + ..\packages\NHotkey.WindowsForms.3.0.0\lib\net462\NHotkey.WindowsForms.dll @@ -123,8 +123,8 @@ - - ..\packages\YamlDotNet.13.7.1\lib\net45\YamlDotNet.dll + + ..\packages\YamlDotNet.15.1.4\lib\net47\YamlDotNet.dll diff --git a/GBM/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb index 71d92da..d83f01e 100644 --- a/GBM/Managers/mgrCommon.vb +++ b/GBM/Managers/mgrCommon.vb @@ -8,8 +8,8 @@ Imports System.Text.RegularExpressions Public Class mgrCommon 'These need to be updated when upgrading the packaged 7z utility - Private Shared sUtility64Hash As String = "356BEA8B6E9EB84DFA0DD8674E7C03428C641A47789DF605C5BEA0730DE4AED2" 'v23.01 7za.exe x64 - Private Shared sUtility32Hash As String = "F00836A63BE7EBF14E1B8C40100C59777FE3432506B330927EA1F1B7FD47EE44" 'v23.01 7za.exe x86 + Private Shared sUtility64Hash As String = "3FEBE53A8C52113C24D6319A5013C89D644E081E488635640BFC72210A6C60AB" 'v24.06 7za.exe x64 + Private Shared sUtility32Hash As String = "BB6B9F15FF2FC1B938693BE31965D50C23BD79244C013F0223F2E39FE08944CE" 'v24.06 7za.exe x86 Private Shared sBlackList As String() = {"dosbox", "scummvm", "java", "python", "python.real", "python2.7", "mono", "wine"} Public Enum eSounds As Integer diff --git a/GBM/Managers/mgrMonitorList.vb b/GBM/Managers/mgrMonitorList.vb index 64b90d5..1ad7ca3 100644 --- a/GBM/Managers/mgrMonitorList.vb +++ b/GBM/Managers/mgrMonitorList.vb @@ -479,6 +479,9 @@ Public Class mgrMonitorList End If 'Handle Quick Filter + Dim sValidFields As String() = {"Name", "Process", "Parameter", "Path", "Version", "Company", "Comments"} + Dim bRefined As Boolean + If Not sQuickFilter = String.Empty Then If eFilterType = frmFilter.eFilterType.BaseFilter And oFilters.Count = 0 Then sSQL &= " WHERE " @@ -489,10 +492,29 @@ Public Class mgrMonitorList sSQL &= "MonitorID IN (SELECT MonitorID FROM gametags NATURAL JOIN tags WHERE tags.Name=@QuickTag COLLATE NOCASE)" hshParams.Add("QuickTag", sQuickFilter.Remove(0, 1)) Else - sSQL &= "MonitorID IN (SELECT MonitorID FROM monitorlist WHERE Name LIKE @QuickName)" - hshParams.Add("QuickName", "%" & sQuickFilter & "%") + bRefined = False + + 'Use a refined search + For Each sField As String In sValidFields + If sQuickFilter.StartsWith(sField & ":") Then + bRefined = True + sSQL &= "MonitorID IN (SELECT MonitorID FROM monitorlist WHERE " & sField & " LIKE @QuickQuery)" + hshParams.Add("QuickQuery", "%" & sQuickFilter.Remove(0, sField.Length + 1) & "%") + End If + Next + + 'Use a wide search + If Not bRefined Then + sSQL &= "MonitorID IN (SELECT MonitorID FROM monitorlist WHERE " + For Each sField As String In sValidFields + sSQL &= sField & " LIKE @QuickQuery OR " + Next + sSQL &= "MonitorID IN (SELECT MonitorID FROM gametags NATURAL JOIN tags WHERE tags.Name=@QuickTag COLLATE NOCASE))" + hshParams.Add("QuickQuery", "%" & sQuickFilter & "%") + hshParams.Add("QuickTag", sQuickFilter) + End If + End If End If - End If 'Handle Sorting sSQL &= sSort diff --git a/GBM/Managers/mgrSQLite.vb b/GBM/Managers/mgrSQLite.vb index c2a9d95..8f048d5 100644 --- a/GBM/Managers/mgrSQLite.vb +++ b/GBM/Managers/mgrSQLite.vb @@ -108,6 +108,9 @@ Public Class mgrSQLite Private eDatabase As Database Private db As SqliteConnection + Public Shared Event DatabaseOpened() + Public Shared Event DatabaseClosed() + Public Sub New(ByVal eSelectDB As Database) Select Case eSelectDB Case Database.Local @@ -259,10 +262,12 @@ Public Class mgrSQLite CreateDB() db.Open() End If + RaiseEvent DatabaseOpened() End Sub Public Sub Disconnect() db.Close() + RaiseEvent DatabaseClosed() End Sub Private Sub RollBack(ByRef trans As SqliteTransaction) diff --git a/GBM/Managers/mgrSync.vb b/GBM/Managers/mgrSync.vb index c89def3..2677cb9 100644 --- a/GBM/Managers/mgrSync.vb +++ b/GBM/Managers/mgrSync.vb @@ -16,8 +16,6 @@ Public Class mgrSync Private Shared Property SyncThread As Thread Public Shared Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean) - Public Shared Event PushStarted() - Public Shared Event PushEnded() 'Sync Functions Public Shared Sub DoListAddUpdateSync(ByVal hshGames As Hashtable, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, @@ -179,8 +177,6 @@ Public Class mgrSync Dim oToItem As clsGame Dim iChanges As Integer - If oSyncOptions.ToRemote Then RaiseEvent PushStarted() - If Not mgrSettings.DisableSyncMessages Then If oSyncOptions.ToRemote Then RaiseEvent UpdateLog(mgrMonitorList_SyncToMaster, False, ToolTipIcon.Info, True) @@ -260,8 +256,6 @@ Public Class mgrSync If Not mgrSettings.DisableSyncMessages Then RaiseEvent UpdateLog(mgrCommon.FormatString(mgrMonitorList_SyncChanges, (hshDeleteItems.Count + hshSyncItems.Count + iChanges).ToString), False, ToolTipIcon.Info, True) End If - - If oSyncOptions.ToRemote Then RaiseEvent PushEnded() End Sub 'Other Functions diff --git a/GBM/My Project/AssemblyInfo.vb b/GBM/My Project/AssemblyInfo.vb index 0acdb3e..21e4430 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/Utilities/x64/7za.exe b/GBM/Utilities/x64/7za.exe index 18342b3..f7fe7b8 100644 Binary files a/GBM/Utilities/x64/7za.exe and b/GBM/Utilities/x64/7za.exe differ diff --git a/GBM/Utilities/x86/7za.exe b/GBM/Utilities/x86/7za.exe index dcc0622..96d8e9a 100644 Binary files a/GBM/Utilities/x86/7za.exe and b/GBM/Utilities/x86/7za.exe differ diff --git a/GBM/app.config b/GBM/app.config index c1479dd..b5cb6d5 100644 --- a/GBM/app.config +++ b/GBM/app.config @@ -20,4 +20,4 @@ - + diff --git a/GBM/packages.config b/GBM/packages.config index f87608f..a3b1859 100644 --- a/GBM/packages.config +++ b/GBM/packages.config @@ -1,6 +1,6 @@  - - - + + + \ No newline at end of file diff --git a/GBM/readme.txt b/GBM/readme.txt index 951d143..18caaaa 100644 --- a/GBM/readme.txt +++ b/GBM/readme.txt @@ -1,21 +1,28 @@ -Game Backup Monitor v1.3.8 Readme +Game Backup Monitor v1.3.9 Readme https://mikemaximus.github.io/gbm-web/ gamebackupmonitor@gmail.com -December 21, 2023 +May 28, 2024 -New in 1.3.8 +New in 1.3.9 All Platforms: -- Updated YamlDotNet to 13.7.1. +- Game Backup Monitor is now built for .NET v4.8. +- Improved how GBM detects when other software has modified it's manifest database. +- Improved quick search (Main Window and Game Manager) + - The default quick search is now wide, using most text fields and tags. + - These fields currently include: Name, Process, Parameter, Path, Version, Company, Comments. + - You can now do a refined quick search by prepending it with the field name (case-sensitive) and a colon. Ex. Name:Doom or Company:Sega + - A refined tag search is still supported by prepending with a hashtag, Ex. #GOG + - You cannot combine refined searches in a single quick search, use the "Custom Filter" on the Game Manager for complex queries. +- Updated NHotkey to 3.0.0. +- Updated YamlDotNet to 15.1.4. Windows: -- Updated SQLite to 3.44.2. +- Updated 7-Zip to 24.06. +- Updated SQLite to 3.45.3. +- Installers are now built with NSIS 3.10. -Linux: - -- Stopped a ghost window from appearing on startup when the "Start Minimized" option is used. - The entire version history of GBM releases is available at http://mikemaximus.github.io/gbm-web/versionhistory.html \ No newline at end of file diff --git a/GBM/x64/sqlite3.dll b/GBM/x64/sqlite3.dll index 5bb4c84..881cb96 100644 Binary files a/GBM/x64/sqlite3.dll and b/GBM/x64/sqlite3.dll differ diff --git a/GBM/x86/sqlite3.dll b/GBM/x86/sqlite3.dll index 62e4e86..c2d697f 100644 Binary files a/GBM/x86/sqlite3.dll and b/GBM/x86/sqlite3.dll differ