Changes for Issue #67 & #70

This commit is contained in:
MikeMaximus
2017-02-19 14:36:52 -06:00
parent 8ce1b00a8c
commit 5a9b3c99b3
5 changed files with 133 additions and 37 deletions
-20
View File
@@ -7,8 +7,6 @@
Private sRelativeRestorePath As String = String.Empty Private sRelativeRestorePath As String = String.Empty
Private dDateUpdated As DateTime = Date.Now Private dDateUpdated As DateTime = Date.Now
Private sUpdatedBy As String = String.Empty Private sUpdatedBy As String = String.Empty
Private dLastDateUpdated As DateTime = Date.Now
Private sLastUpdatedBy As String = String.Empty
Private sCheckSum As String = String.Empty Private sCheckSum As String = String.Empty
Property ID As String Property ID As String
@@ -109,24 +107,6 @@
End Set End Set
End Property End Property
Property LastDateUpdated As DateTime
Get
Return dLastDateUpdated
End Get
Set(value As DateTime)
dLastDateUpdated = value
End Set
End Property
Property LastUpdatedBy As String
Get
Return sLastUpdatedBy
End Get
Set(value As String)
sLastUpdatedBy = value
End Set
End Property
Property CheckSum As String Property CheckSum As String
Get Get
Return sCheckSum Return sCheckSum
+105 -9
View File
@@ -40,12 +40,14 @@ Public Class frmMain
Private sPriorVersion As String Private sPriorVersion As String
Private iFormHeight As Integer Private iFormHeight As Integer
Private iLogSpacer As Integer Private iLogSpacer As Integer
Private iRestoreTimeOut As Integer
'Developer Debug Flags 'Developer Debug Flags
Private bProcessDebugMode As Boolean = False Private bProcessDebugMode As Boolean = False
WithEvents oFileWatcher As New System.IO.FileSystemWatcher WithEvents oFileWatcher As New System.IO.FileSystemWatcher
WithEvents tmScanTimer As New Timer WithEvents tmScanTimer As New Timer
WithEvents tmRestoreCheck As New Timer
Public WithEvents oProcess As New mgrProcesses Public WithEvents oProcess As New mgrProcesses
Public WithEvents oBackup As New mgrBackup Public WithEvents oBackup As New mgrBackup
@@ -53,6 +55,7 @@ Public Class frmMain
Public hshScanList As Hashtable Public hshScanList As Hashtable
Public oSettings As New mgrSettings Public oSettings As New mgrSettings
Delegate Sub UpdateNotifierCallBack(ByVal iCount As Integer)
Delegate Sub UpdateLogCallBack(ByVal sLogUpdate As String, ByVal bTrayUpdate As Boolean, ByVal objIcon As System.Windows.Forms.ToolTipIcon, ByVal bTimeStamp As Boolean) Delegate Sub UpdateLogCallBack(ByVal sLogUpdate As String, ByVal bTrayUpdate As Boolean, ByVal objIcon As System.Windows.Forms.ToolTipIcon, ByVal bTimeStamp As Boolean)
Delegate Sub WorkingGameInfoCallBack(ByVal sTitle As String, ByVal sStatus1 As String, ByVal sStatus2 As String, ByVal sStatus3 As String) Delegate Sub WorkingGameInfoCallBack(ByVal sTitle As String, ByVal sStatus1 As String, ByVal sStatus2 As String, ByVal sStatus3 As String)
Delegate Sub UpdateStatusCallBack(ByVal sStatus As String) Delegate Sub UpdateStatusCallBack(ByVal sStatus As String)
@@ -328,15 +331,17 @@ Public Class frmMain
End If End If
End Sub End Sub
Private Sub CheckRestore() Private Sub UpdateNotifier(ByVal iCount As Integer)
Dim slRestoreData As SortedList = mgrRestore.CompareManifests() 'Thread Safe
Dim sNotification As String If Me.InvokeRequired = True Then
Dim d As New UpdateNotifierCallBack(AddressOf UpdateNotifier)
If slRestoreData.Count > 0 Then Me.Invoke(d, New Object() {iCount})
If slRestoreData.Count > 1 Then Else
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationMulti, slRestoreData.Count) Dim sNotification As String
If iCount > 1 Then
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationMulti, iCount)
Else Else
sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationSingle, slRestoreData.Count) sNotification = mgrCommon.FormatString(frmMain_NewSaveNotificationSingle, iCount)
End If End If
gMonNotification.Image = Icon_Inbox gMonNotification.Image = Icon_Inbox
gMonTrayNotification.Image = Icon_Inbox gMonTrayNotification.Image = Icon_Inbox
@@ -347,6 +352,90 @@ Public Class frmMain
End If End If
End Sub End Sub
Private Sub StartRestoreCheck()
iRestoreTimeOut = -1
tmRestoreCheck.Interval = 60000
tmRestoreCheck.Enabled = True
tmRestoreCheck.Start()
AutoRestoreCheck()
End Sub
Private Sub AutoRestoreCheck()
Dim slRestoreData As SortedList = mgrRestore.CompareManifests()
Dim sNotReady As New List(Of String)
Dim sNotInstalled As New List(Of String)
Dim oBackup As clsBackup
Dim sFileName As String
Dim sExtractPath As String
Dim bFinished As Boolean = True
'Bail out and shut down the timer if there's nothing to do
If slRestoreData.Count = 0 Then
tmRestoreCheck.Stop()
tmRestoreCheck.Enabled = False
Exit Sub
End If
'Increment Timer
iRestoreTimeOut += 1
'Check backup files
For Each de As DictionaryEntry In slRestoreData
oBackup = DirectCast(de.Value, clsBackup)
'Check if backup file is ready to restore
sFileName = oSettings.BackupFolder & IO.Path.DirectorySeparatorChar & oBackup.FileName
If mgrHash.Generate_SHA256_Hash(sFileName) <> oBackup.CheckSum Then
sNotReady.Add(de.Key)
bFinished = False
End If
'Check if the restore location exists, if not we assume the game is not installed and should be auto-marked.
If oBackup.AbsolutePath Then
sExtractPath = oBackup.RestorePath
Else
sExtractPath = oBackup.RelativeRestorePath
End If
If Not IO.Directory.Exists(sExtractPath) Then
If mgrManifest.DoGlobalManifestCheck(de.Key, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdateByName(de.Value, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(de.Value, mgrSQLite.Database.Local)
End If
sNotInstalled.Add(de.Key)
End If
Next
'Remove any backup files that are not ready
For Each s As String In sNotReady
slRestoreData.Remove(s)
UpdateLog(mgrCommon.FormatString(frmMain_RestoreNotReady, s), False, ToolTipIcon.Info, True)
Next
'Remove any backup files that should not be automatically restored
For Each s As String In sNotInstalled
slRestoreData.Remove(s)
UpdateLog(mgrCommon.FormatString(frmMain_AutoMarked, s), False, ToolTipIcon.Info, True)
Next
'When backup files are ready update the notifier
If slRestoreData.Count > 0 Then
UpdateNotifier(slRestoreData.Count)
End If
'Shutdown if we are finished
If bFinished Then
tmRestoreCheck.Stop()
tmRestoreCheck.Enabled = False
End If
'Time out after 15 minutes
If iRestoreTimeOut = 15 Then
tmRestoreCheck.Stop()
tmRestoreCheck.Enabled = False
End If
End Sub
'Functions handling the display of game information 'Functions handling the display of game information
Private Sub SetIcon() Private Sub SetIcon()
Dim sIcon As String Dim sIcon As String
@@ -758,7 +847,7 @@ Public Class frmMain
Private Sub CheckForNewBackups() Private Sub CheckForNewBackups()
If oSettings.RestoreOnLaunch Then If oSettings.RestoreOnLaunch Then
CheckRestore() StartRestoreCheck()
End If End If
End Sub End Sub
@@ -1100,6 +1189,9 @@ Public Class frmMain
End Sub End Sub
Private Sub SetForm() Private Sub SetForm()
'Disable Autosize in Linux (Mono prevents manual resizing when this is enabled)
If mgrCommon.IsUnix Then Me.AutoSize = False
'Set Form Name 'Set Form Name
Me.Name = App_NameLong Me.Name = App_NameLong
@@ -1522,6 +1614,10 @@ Public Class frmMain
End If End If
End Sub End Sub
Private Sub AutoRestoreEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmRestoreCheck.Tick
AutoRestoreCheck()
End Sub
Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick Private Sub ScanTimerEventProcessor(myObject As Object, ByVal myEventArgs As EventArgs) Handles tmScanTimer.Tick
Dim bNeedsPath As Boolean = False Dim bNeedsPath As Boolean = False
Dim bContinue As Boolean = True Dim bContinue As Boolean = True
+4 -8
View File
@@ -96,8 +96,6 @@ Public Class mgrRestore
If bLocal And bRemote Then If bLocal And bRemote Then
'Compare 'Compare
If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then
oRemoteItem.LastDateUpdated = oLocalItem.DateUpdated
oRemoteItem.LastUpdatedBy = oLocalItem.UpdatedBy
Return True Return True
End If End If
End If End If
@@ -126,16 +124,14 @@ Public Class mgrRestore
If oItem.DateUpdated > oLocalItem.DateUpdated Then If oItem.DateUpdated > oLocalItem.DateUpdated Then
oLocalItem.FileName = oItem.FileName oLocalItem.FileName = oItem.FileName
oLocalItem.LastDateUpdated = oItem.DateUpdated oLocalItem.DateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy oLocalItem.UpdatedBy = oItem.UpdatedBy
slRestoreItems.Add(oLocalItem.Name, oLocalItem) slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If End If
Else Else
oLocalItem = oItem oLocalItem = oItem
oLocalItem.LastDateUpdated = oItem.DateUpdated oLocalItem.DateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy oLocalItem.UpdatedBy = oItem.UpdatedBy
oLocalItem.DateUpdated = Nothing
oLocalItem.UpdatedBy = Nothing
slRestoreItems.Add(oLocalItem.Name, oLocalItem) slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If End If
Next Next
+18
View File
@@ -2301,6 +2301,15 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to The saved game folder for [PARAM] does not exist, the backup has been automatically marked as restored..
'''</summary>
Friend ReadOnly Property frmMain_AutoMarked() As String
Get
Return ResourceManager.GetString("frmMain_AutoMarked", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Backup in Progress.... ''' Looks up a localized string similar to Backup in Progress....
'''</summary> '''</summary>
@@ -3156,6 +3165,15 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to The backup file for [PARAM] is not ready to restore..
'''</summary>
Friend ReadOnly Property frmMain_RestoreNotReady() As String
Get
Return ResourceManager.GetString("frmMain_RestoreNotReady", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to GBM is running with Administrator privileges.. ''' Looks up a localized string similar to GBM is running with Administrator privileges..
'''</summary> '''</summary>
+6
View File
@@ -1735,4 +1735,10 @@
<data name="frmGameManager_chkCleanFolder" xml:space="preserve"> <data name="frmGameManager_chkCleanFolder" xml:space="preserve">
<value>Clean folder on restore</value> <value>Clean folder on restore</value>
</data> </data>
<data name="frmMain_AutoMarked" xml:space="preserve">
<value>The saved game folder for [PARAM] does not exist, the backup has been automatically marked as restored.</value>
</data>
<data name="frmMain_RestoreNotReady" xml:space="preserve">
<value>The backup file for [PARAM] is not ready to restore.</value>
</data>
</root> </root>