@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Generated
+18
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user