From bfe2346e8ae0d1a5664be421b5efae939250a970 Mon Sep 17 00:00:00 2001 From: "Michael J. Seiferling" Date: Sun, 21 Aug 2016 11:25:10 -0600 Subject: [PATCH] Manifest Re-write (Functional, Pass 1) --- GBM/Forms/frmGameManager.vb | 82 ++++++++------- GBM/Forms/frmMain.vb | 2 +- GBM/Managers/mgrBackup.vb | 8 +- GBM/Managers/mgrManifest.vb | 203 ++++++++++++++++++++++++++++-------- GBM/Managers/mgrRestore.vb | 18 ++-- GBM/Managers/mgrSQLite.vb | 64 +++++++++--- 6 files changed, 265 insertions(+), 112 deletions(-) diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb index 103c080..f62e2f6 100644 --- a/GBM/Forms/frmGameManager.vb +++ b/GBM/Forms/frmGameManager.vb @@ -142,8 +142,8 @@ Public Class frmGameManager End Property Private Sub LoadBackupData() - oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) - oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local) + oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) + oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local) End Sub Private Function ConvertToRelativePath(ByVal sSavePath As String, ByVal sAppPath As String) As String @@ -160,48 +160,54 @@ Public Class frmGameManager End Function Private Sub CheckManifestandUpdate(ByVal oOriginalApp As clsGame, ByVal oNewApp As clsGame) - Dim oBackupItem As clsBackup + Dim oBackupItems As List(Of clsBackup) Dim sDirectory As String Dim sNewDirectory As String Dim sFileName As String Dim sNewFileName As String - 'If there is a name change, check and update the manifest + 'If there is a name change, check and update the manifest If oNewApp.Name <> oOriginalApp.Name Then 'Local - If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then - oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local) + If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Local) Then + oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Local) - 'Rename Current Backup File & Folder - sFileName = BackupFolder & oBackupItem.FileName + For Each oBackupItem As clsBackup In oBackupItems + 'Rename Current Backup File & Folder + sFileName = BackupFolder & oBackupItem.FileName - 'Rename Backup File - sNewFileName = Path.GetDirectoryName(sFileName) & Path.DirectorySeparatorChar & Path.GetFileName(sFileName).Replace(oOriginalApp.Name, oNewApp.Name) - If File.Exists(sFileName) Then - FileSystem.Rename(sFileName, sNewFileName) - End If - - 'Rename Directory - sDirectory = Path.GetDirectoryName(sFileName) - sNewDirectory = sDirectory.Replace(oOriginalApp.Name, oNewApp.Name) - If sDirectory <> sNewDirectory Then - If Directory.Exists(sDirectory) Then - FileSystem.Rename(sDirectory, sNewDirectory) + 'Rename Backup File + sNewFileName = Path.GetDirectoryName(sFileName) & Path.DirectorySeparatorChar & Path.GetFileName(sFileName).Replace(oOriginalApp.Name, oNewApp.Name) + If File.Exists(sFileName) Then + FileSystem.Rename(sFileName, sNewFileName) End If - End If - oBackupItem.Name = oNewApp.Name - oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) - mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Local) - oLocalBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Local) + 'Rename Directory + sDirectory = Path.GetDirectoryName(sFileName) + sNewDirectory = sDirectory.Replace(oOriginalApp.Name, oNewApp.Name) + If sDirectory <> sNewDirectory Then + If Directory.Exists(sDirectory) Then + FileSystem.Rename(sDirectory, sNewDirectory) + End If + End If + + oBackupItem.Name = oNewApp.Name + oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) + mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Local) + Next + oLocalBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local) End If + 'Remote - If mgrManifest.DoManifestCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then - oBackupItem = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote) - oBackupItem.Name = oNewApp.Name - oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) - mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Remote) - oRemoteBackupData = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) + If mgrManifest.DoManifestNameCheck(oOriginalApp.Name, mgrSQLite.Database.Remote) Then + oBackupItems = mgrManifest.DoManifestGetByName(oOriginalApp.Name, mgrSQLite.Database.Remote) + + For Each oBackupItem As clsBackup In oBackupItems + oBackupItem.Name = oNewApp.Name + oBackupItem.FileName = oBackupItem.FileName.Replace(oOriginalApp.Name, oNewApp.Name) + mgrManifest.DoManifestNameUpdate(oOriginalApp.Name, oBackupItem, mgrSQLite.Database.Remote) + Next + oRemoteBackupData = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) End If End If End Sub @@ -606,8 +612,8 @@ Public Class frmGameManager Dim sSubDir As String If mgrCommon.ShowMessage(frmGameManager_ConfirmBackupDelete, CurrentBackupItem.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - mgrManifest.DoManifestDelete(CurrentBackupItem, mgrSQLite.Database.Local) - mgrManifest.DoManifestDelete(CurrentBackupItem, mgrSQLite.Database.Remote) + mgrManifest.DoManifestDeletebyID(CurrentBackupItem, mgrSQLite.Database.Local) + mgrManifest.DoManifestDeletebyID(CurrentBackupItem, mgrSQLite.Database.Remote) 'Delete referenced backup file from the backup folder mgrCommon.DeleteFile(BackupFolder & CurrentBackupItem.FileName) @@ -1172,7 +1178,7 @@ Public Class frmGameManager oBackup.CheckSum = String.Empty 'Reset date oBackup.DateUpdated = Date.Now - mgrManifest.DoManifestUpdate(oBackup, mgrSQLite.Database.Remote) + mgrManifest.DoManifestUpdateByID(oBackup, mgrSQLite.Database.Remote) 'Refresh backup data and GUI bIsLoading = True LoadBackupData() @@ -1206,8 +1212,8 @@ Public Class frmGameManager If oMarkList.Count = 1 Then If mgrCommon.ShowMessage(frmGameManager_ConfirmMark, oMarkList(0).Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then bWasUpdated = True - If mgrManifest.DoManifestCheck(oMarkList(0).Name, mgrSQLite.Database.Local) Then - mgrManifest.DoManifestUpdate(oMarkList(0), mgrSQLite.Database.Local) + If mgrManifest.DoManifestCheck(oMarkList(0).Name, oMarkList(0).FileName, mgrSQLite.Database.Local) Then + mgrManifest.DoManifestUpdateByID(oMarkList(0), mgrSQLite.Database.Local) Else mgrManifest.DoManifestAdd(oMarkList(0), mgrSQLite.Database.Local) End If @@ -1216,8 +1222,8 @@ Public Class frmGameManager If mgrCommon.ShowMessage(frmGameManager_ConfirmMultiMark, oMarkList.Count, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then bWasUpdated = True For Each oGameBackup In oMarkList - If mgrManifest.DoManifestCheck(oGameBackup.Name, mgrSQLite.Database.Local) Then - mgrManifest.DoManifestUpdate(oGameBackup, mgrSQLite.Database.Local) + If mgrManifest.DoManifestCheck(oGameBackup.Name, oGameBackup.FileName, mgrSQLite.Database.Local) Then + mgrManifest.DoManifestUpdateByID(oGameBackup, mgrSQLite.Database.Local) Else mgrManifest.DoManifestAdd(oGameBackup, mgrSQLite.Database.Local) End If diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb index 3f3792f..8b622c3 100644 --- a/GBM/Forms/frmMain.vb +++ b/GBM/Forms/frmMain.vb @@ -158,7 +158,7 @@ Public Class frmMain End Sub Private Sub RunRestore(ByVal oRestoreList As List(Of clsGame)) - Dim oBackupData As SortedList = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) + Dim oBackupData As SortedList = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) Dim oGame As clsGame Dim oReadyList As New List(Of clsBackup) Dim oRestoreInfo As clsBackup diff --git a/GBM/Managers/mgrBackup.vb b/GBM/Managers/mgrBackup.vb index 2a1de0e..776ee55 100644 --- a/GBM/Managers/mgrBackup.vb +++ b/GBM/Managers/mgrBackup.vb @@ -50,15 +50,15 @@ Public Class mgrBackup oItem.CheckSum = sCheckSum 'Save Remote Manifest - If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then - mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Remote) + If mgrManifest.DoManifestCheck(oItem.Name, oItem.FileName, mgrSQLite.Database.Remote) Then + mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Remote) Else mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Remote) End If 'Save Local Manifest - If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Local) Then - mgrManifest.DoManifestUpdate(oItem, mgrSQLite.Database.Local) + If mgrManifest.DoManifestCheck(oItem.Name, oItem.FileName, mgrSQLite.Database.Local) Then + mgrManifest.DoManifestUpdateByID(oItem, mgrSQLite.Database.Local) Else mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local) End If diff --git a/GBM/Managers/mgrManifest.vb b/GBM/Managers/mgrManifest.vb index 4f8ff26..070d080 100644 --- a/GBM/Managers/mgrManifest.vb +++ b/GBM/Managers/mgrManifest.vb @@ -1,6 +1,6 @@ Public Class mgrManifest - Public Shared Function ReadManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList + Public Shared Function ReadFullManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList Dim oDatabase As New mgrSQLite(iSelectDB) Dim oData As DataSet Dim sSQL As String @@ -10,6 +10,33 @@ sSQL = "SELECT * from manifest ORDER BY Name Asc" oData = oDatabase.ReadParamData(sSQL, New Hashtable) + For Each dr As DataRow In oData.Tables(0).Rows + oBackupItem = New clsBackup + oBackupItem.ID = CStr(dr("ManifestID")) + oBackupItem.Name = CStr(dr("Name")) + oBackupItem.FileName = CStr(dr("FileName")) + oBackupItem.RestorePath = CStr(dr("RestorePath")) + oBackupItem.AbsolutePath = CBool(dr("AbsolutePath")) + oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated")) + oBackupItem.UpdatedBy = CStr(dr("UpdatedBy")) + If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum")) + slList.Add(oBackupItem.ID, oBackupItem) + Next + + Return slList + + End Function + + Public Shared Function ReadLatestManifest(ByVal iSelectDB As mgrSQLite.Database) As SortedList + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim oData As DataSet + Dim sSQL As String + Dim oBackupItem As clsBackup + Dim slList As New SortedList + + sSQL = "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, Max(DateUpdated) As DateUpdated, UpdatedBy, CheckSum FROM manifest GROUP BY Name ORDER By Name ASC" + oData = oDatabase.ReadParamData(sSQL, New Hashtable) + For Each dr As DataRow In oData.Tables(0).Rows oBackupItem = New clsBackup oBackupItem.ID = CStr(dr("ManifestID")) @@ -27,7 +54,87 @@ End Function - Public Shared Function DoManifestCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean + Public Shared Function ReadManifestByGame(ByVal sGame As String, ByVal iSelectDB As mgrSQLite.Database) As SortedList + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim oData As DataSet + Dim sSQL As String + Dim oBackupItem As clsBackup + Dim slList As New SortedList + + sSQL = "SELECT * from manifest WHERE Name=@Name ORDER BY DateUpdated Desc" + oData = oDatabase.ReadParamData(sSQL, New Hashtable) + + For Each dr As DataRow In oData.Tables(0).Rows + oBackupItem = New clsBackup + oBackupItem.ID = CStr(dr("ManifestID")) + oBackupItem.Name = CStr(dr("Name")) + oBackupItem.FileName = CStr(dr("FileName")) + oBackupItem.RestorePath = CStr(dr("RestorePath")) + oBackupItem.AbsolutePath = CBool(dr("AbsolutePath")) + oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated")) + oBackupItem.UpdatedBy = CStr(dr("UpdatedBy")) + If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum")) + slList.Add(oBackupItem.ID, oBackupItem) + Next + + Return slList + + End Function + + Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As List(Of clsBackup) + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim oData As DataSet + Dim sSQL As String + Dim hshParams As New Hashtable + Dim oList As New List(Of clsBackup) + Dim oBackupItem As New clsBackup + + sSQL = "SELECT * from manifest " + sSQL &= "WHERE Name = @Name" + + hshParams.Add("Name", sName) + + oData = oDatabase.ReadParamData(sSQL, hshParams) + + For Each dr As DataRow In oData.Tables(0).Rows + oBackupItem = New clsBackup + oBackupItem.ID = CStr(dr("ManifestID")) + oBackupItem.Name = CStr(dr("Name")) + oBackupItem.FileName = CStr(dr("FileName")) + oBackupItem.RestorePath = CStr(dr("RestorePath")) + oBackupItem.AbsolutePath = CBool(dr("AbsolutePath")) + oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated")) + oBackupItem.UpdatedBy = CStr(dr("UpdatedBy")) + If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum")) + oList.Add(oBackupItem) + Next + + Return oList + End Function + + Public Shared Function DoManifestCheck(ByVal sName As String, ByVal sFileName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim oData As DataSet + Dim sSQL As String + Dim hshParams As New Hashtable + + sSQL = "SELECT * from manifest " + sSQL &= "WHERE Name = @Name AND FileName = @FileName" + + hshParams.Add("Name", sName) + hshParams.Add("FileName", sFileName) + + oData = oDatabase.ReadParamData(sSQL, hshParams) + + If oData.Tables(0).Rows.Count > 0 Then + Return True + Else + Return False + End If + + End Function + + Public Shared Function DoManifestNameCheck(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As Boolean Dim oDatabase As New mgrSQLite(iSelectDB) Dim oData As DataSet Dim sSQL As String @@ -48,41 +155,12 @@ End Function - Public Shared Function DoManifestGetByName(ByVal sName As String, ByVal iSelectDB As mgrSQLite.Database) As clsBackup - Dim oDatabase As New mgrSQLite(iSelectDB) - Dim oData As DataSet - Dim sSQL As String - Dim hshParams As New Hashtable - Dim oBackupItem As New clsBackup - - sSQL = "SELECT * from manifest " - sSQL &= "WHERE Name = @Name" - - hshParams.Add("Name", sName) - - oData = oDatabase.ReadParamData(sSQL, hshParams) - - For Each dr As DataRow In oData.Tables(0).Rows - oBackupItem = New clsBackup - oBackupItem.ID = CStr(dr("ManifestID")) - oBackupItem.Name = CStr(dr("Name")) - oBackupItem.FileName = CStr(dr("FileName")) - oBackupItem.RestorePath = CStr(dr("RestorePath")) - oBackupItem.AbsolutePath = CBool(dr("AbsolutePath")) - oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr("DateUpdated")) - oBackupItem.UpdatedBy = CStr(dr("UpdatedBy")) - If Not IsDBNull(dr("CheckSum")) Then oBackupItem.CheckSum = CStr(dr("CheckSum")) - Next - - Return oBackupItem - End Function - Public Shared Sub DoManifestAdd(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Dim oDatabase As New mgrSQLite(iSelectDB) Dim sSQL As String Dim hshParams As New Hashtable - sSQL = "INSERT OR REPLACE INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)" + sSQL = "INSERT INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)" hshParams.Add("ID", oBackupItem.ID) hshParams.Add("Name", oBackupItem.Name) @@ -96,7 +174,7 @@ oDatabase.RunParamQuery(sSQL, hshParams) End Sub - Public Shared Sub DoManifestUpdate(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) + Public Shared Sub DoManifestUpdateByName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Dim oDatabase As New mgrSQLite(iSelectDB) Dim sSQL As String Dim hshParams As New Hashtable @@ -116,6 +194,52 @@ oDatabase.RunParamQuery(sSQL, hshParams) End Sub + Public Shared Sub DoManifestUpdateByID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim sSQL As String + Dim hshParams As New Hashtable + + sSQL = "UPDATE manifest SET Name = @Name, FileName = @FileName, RestorePath = @Path, AbsolutePath = @AbsolutePath, " + sSQL &= "DateUpdated = @DateUpdated, UpdatedBy = @UpdatedBy, CheckSum = @CheckSum WHERE ManifestID = @QueryID" + + hshParams.Add("Name", oBackupItem.Name) + hshParams.Add("FileName", oBackupItem.FileName) + hshParams.Add("Path", oBackupItem.TruePath) + hshParams.Add("AbsolutePath", oBackupItem.AbsolutePath) + hshParams.Add("DateUpdated", oBackupItem.DateUpdatedUnix) + hshParams.Add("UpdatedBy", oBackupItem.UpdatedBy) + hshParams.Add("CheckSum", oBackupItem.CheckSum) + hshParams.Add("QueryID", oBackupItem.ID) + + oDatabase.RunParamQuery(sSQL, hshParams) + End Sub + + Public Shared Sub DoManifestDeletebyName(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim sSQL As String + Dim hshParams As New Hashtable + + sSQL = "DELETE FROM manifest " + sSQL &= "WHERE Name = @Name" + + hshParams.Add("Name", oBackupItem.Name) + + oDatabase.RunParamQuery(sSQL, hshParams) + End Sub + + Public Shared Sub DoManifestDeletebyID(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) + Dim oDatabase As New mgrSQLite(iSelectDB) + Dim sSQL As String + Dim hshParams As New Hashtable + + sSQL = "DELETE FROM manifest " + sSQL &= "WHERE ManifestID = @ID" + + hshParams.Add("ID", oBackupItem.ID) + + oDatabase.RunParamQuery(sSQL, hshParams) + End Sub + Public Shared Sub DoManifestNameUpdate(ByVal sOriginalName As String, ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) Dim oDatabase As New mgrSQLite(iSelectDB) Dim sSQL As String @@ -137,19 +261,6 @@ End Sub - Public Shared Sub DoManifestDelete(ByVal oBackupItem As clsBackup, ByVal iSelectDB As mgrSQLite.Database) - Dim oDatabase As New mgrSQLite(iSelectDB) - Dim sSQL As String - Dim hshParams As New Hashtable - - sSQL = "DELETE FROM manifest " - sSQL &= "WHERE Name = @Name" - - hshParams.Add("Name", oBackupItem.Name) - - oDatabase.RunParamQuery(sSQL, hshParams) - End Sub - Public Shared Sub DoManifestHashWipe() Dim oLocalDatabase As New mgrSQLite(mgrSQLite.Database.Local) Dim oRemoteDatabase As New mgrSQLite(mgrSQLite.Database.Remote) diff --git a/GBM/Managers/mgrRestore.vb b/GBM/Managers/mgrRestore.vb index 358d912..7e37371 100644 --- a/GBM/Managers/mgrRestore.vb +++ b/GBM/Managers/mgrRestore.vb @@ -80,8 +80,8 @@ Public Class mgrRestore Dim bLocal As Boolean = False Dim bRemote As Boolean = False - slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) - slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) + slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local) + slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) If slLocalManifest.Contains(sAppName) Then oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup) @@ -117,8 +117,8 @@ Public Class mgrRestore Dim bLocal As Boolean = False Dim bRemote As Boolean = False - slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) - slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) + slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local) + slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) For Each oItem As clsBackup In slRemoteManifest.Values If slLocalManifest.Contains(oItem.Name) Then @@ -148,13 +148,13 @@ Public Class mgrRestore Dim slRemoteManifest As SortedList Dim slRemovedItems As New SortedList - slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local) - slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote) + slLocalManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Local) + slRemoteManifest = mgrManifest.ReadLatestManifest(mgrSQLite.Database.Remote) For Each oItem As clsBackup In slLocalManifest.Values If Not slRemoteManifest.Contains(oItem.Name) Then slRemovedItems.Add(oItem.Name, oItem) - mgrManifest.DoManifestDelete(oItem, mgrSQLite.Database.Local) + mgrManifest.DoManifestDeletebyName(oItem, mgrSQLite.Database.Local) End If Next @@ -268,8 +268,8 @@ Public Class mgrRestore If bRestoreCompleted Then 'Save Local Manifest - If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then - mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local) + If mgrManifest.DoManifestCheck(oBackupInfo.Name, oBackupInfo.FileName, mgrSQLite.Database.Local) Then + mgrManifest.DoManifestUpdateByID(oBackupInfo, mgrSQLite.Database.Local) Else mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local) End If diff --git a/GBM/Managers/mgrSQLite.vb b/GBM/Managers/mgrSQLite.vb index 1de4ad0..994ee8a 100644 --- a/GBM/Managers/mgrSQLite.vb +++ b/GBM/Managers/mgrSQLite.vb @@ -92,7 +92,7 @@ Public Class mgrSQLite sSql &= "CREATE TABLE variables (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);" 'Add Tables (Local Manifest) - sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & + sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" 'Set Version @@ -111,7 +111,7 @@ Public Class mgrSQLite Try 'Create the DB - SQLiteConnection.CreateFile(sDatabaseLocation) + SqliteConnection.CreateFile(sDatabaseLocation) 'Add Tables (Remote Monitor List) sSql = "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & @@ -120,7 +120,7 @@ Public Class mgrSQLite "PRIMARY KEY(Name, Process));" 'Add Tables (Remote Manifest) - sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & + sSql &= "CREATE TABLE manifest (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, " & "AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" 'Add Tables (Remote Tags) @@ -155,7 +155,7 @@ Public Class mgrSQLite Public Sub Connect() If CheckDB() Then - db = New SQLiteConnection(sConnectString) + db = New SqliteConnection(sConnectString) db.Open() Else CreateDB() @@ -167,18 +167,18 @@ Public Class mgrSQLite db.Close() End Sub - Private Sub BuildParams(ByRef command As SQLiteCommand, ByRef hshParams As Hashtable) + Private Sub BuildParams(ByRef command As SqliteCommand, ByRef hshParams As Hashtable) For Each de As DictionaryEntry In hshParams command.Parameters.AddWithValue(de.Key, de.Value) Next End Sub Public Function RunParamQuery(ByVal sSQL As String, ByVal hshParams As Hashtable) As Boolean - Dim trans As SQLiteTransaction - Dim command As SQLiteCommand + Dim trans As SqliteTransaction + Dim command As SqliteCommand Connect() - command = New SQLiteCommand(sSQL, db) + command = New SqliteCommand(sSQL, db) BuildParams(command, hshParams) trans = db.BeginTransaction() @@ -198,11 +198,11 @@ Public Class mgrSQLite End Function Public Function RunMassParamQuery(ByVal sSQL As String, ByVal oParamList As List(Of Hashtable)) As Boolean - Dim trans As SQLiteTransaction - Dim command As SQLiteCommand + Dim trans As SqliteTransaction + Dim command As SqliteCommand Connect() - command = New SQLiteCommand(sSQL, db) + command = New SqliteCommand(sSQL, db) trans = db.BeginTransaction() Try @@ -224,12 +224,12 @@ Public Class mgrSQLite End Function Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet - Dim adapter As SQLiteDataAdapter - Dim command As SQLiteCommand + Dim adapter As SqliteDataAdapter + Dim command As SqliteCommand Dim oData As New DataSet Connect() - command = New SQLiteCommand(sSQL, db) + command = New SqliteCommand(sSQL, db) BuildParams(command, hshParams) Try @@ -556,6 +556,42 @@ Public Class mgrSQLite End If End If + '0.98 Upgrade + If GetDatabaseVersion() < 98 Then + If eDatabase = Database.Local Then + 'Backup DB before starting + BackupDB("v97") + + 'Overhaul Manifest Table + sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" + sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) " + sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" + sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" + sSQL &= "PRAGMA user_version=98" + + RunParamQuery(sSQL, New Hashtable) + + 'Run a compact + CompactDatabase() + End If + If eDatabase = Database.Remote Then + 'Backup DB before starting + BackupDB("v97") + + 'Overhaul Manifest Table + sSQL = "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL PRIMARY KEY, Name TEXT NOT NULL, FileName TEXT NOT NULL, RestorePath TEXT NOT NULL, AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);" + sSQL &= "INSERT INTO manifest_new (ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy) " + sSQL &= "SELECT ManifestID, Name, FileName, RestorePath, AbsolutePath, DateUpdated, UpdatedBy FROM manifest;" + sSQL &= "DROP TABLE manifest; ALTER TABLE manifest_new RENAME TO manifest;" + sSQL &= "PRAGMA user_version=98" + + RunParamQuery(sSQL, New Hashtable) + + 'Run a compact + CompactDatabase() + End If + End If + End Sub Public Function GetDBSize() As Long