diff --git a/GBM/Forms/frmGameManager.vb b/GBM/Forms/frmGameManager.vb
index 7ad9965..040e99c 100644
--- a/GBM/Forms/frmGameManager.vb
+++ b/GBM/Forms/frmGameManager.vb
@@ -1204,7 +1204,7 @@ Public Class frmGameManager
Private Sub ExportGameList()
Dim sLocation As String
- sLocation = mgrCommon.SaveFileBrowser(frmGameManager_ChooseExportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Game Backup Monitor Export " & Date.Now.ToString("dd-MMM-yyyy"))
+ sLocation = mgrCommon.SaveFileBrowser(frmGameManager_ChooseExportXML, "xml", frmGameManager_XML, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmGameManager_DefaultExportFileName & " " & Date.Now.ToString("dd-MMM-yyyy"))
If sLocation <> String.Empty Then
mgrMonitorList.ExportMonitorList(sLocation)
diff --git a/GBM/Forms/frmMain.Designer.vb b/GBM/Forms/frmMain.Designer.vb
index 16c5902..a0fc6cb 100644
--- a/GBM/Forms/frmMain.Designer.vb
+++ b/GBM/Forms/frmMain.Designer.vb
@@ -62,6 +62,9 @@ Partial Class frmMain
Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCleanMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
+ Me.gMonToolsLog = New System.Windows.Forms.ToolStripMenuItem()
+ Me.gMonLogClear = New System.Windows.Forms.ToolStripMenuItem()
+ Me.gMonLogSave = 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()
@@ -79,6 +82,9 @@ 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.gMonTrayToolsLog = New System.Windows.Forms.ToolStripMenuItem()
+ Me.gMonTrayLogClear = New System.Windows.Forms.ToolStripMenuItem()
+ Me.gMonTrayLogSave = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayMenu.SuspendLayout()
Me.gMonStatusStrip.SuspendLayout()
Me.gMonMainMenu.SuspendLayout()
@@ -99,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
'
@@ -164,7 +170,7 @@ Partial Class frmMain
'
'gMonTrayTools
'
- Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact})
+ Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsCleanMan, Me.gMonTrayToolsCompact, Me.gMonTrayToolsLog})
Me.gMonTrayTools.Name = "gMonTrayTools"
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayTools.Text = "&Tools"
@@ -329,7 +335,7 @@ Partial Class frmMain
'
'gMonTools
'
- Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact})
+ Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsCleanMan, Me.gMonToolsCompact, Me.gMonToolsLog})
Me.gMonTools.Name = "gMonTools"
Me.gMonTools.Size = New System.Drawing.Size(47, 20)
Me.gMonTools.Text = "&Tools"
@@ -346,6 +352,25 @@ Partial Class frmMain
Me.gMonToolsCompact.Size = New System.Drawing.Size(184, 22)
Me.gMonToolsCompact.Text = "&Compact Databases"
'
+ 'gMonToolsLog
+ '
+ Me.gMonToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonLogClear, Me.gMonLogSave})
+ Me.gMonToolsLog.Name = "gMonToolsLog"
+ Me.gMonToolsLog.Size = New System.Drawing.Size(184, 22)
+ Me.gMonToolsLog.Text = "&Log"
+ '
+ 'gMonLogClear
+ '
+ Me.gMonLogClear.Name = "gMonLogClear"
+ Me.gMonLogClear.Size = New System.Drawing.Size(152, 22)
+ Me.gMonLogClear.Text = "&Clear"
+ '
+ 'gMonLogSave
+ '
+ Me.gMonLogSave.Name = "gMonLogSave"
+ Me.gMonLogSave.Size = New System.Drawing.Size(152, 22)
+ Me.gMonLogSave.Text = "&Save"
+ '
'gMonHelp
'
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpWebSite, Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout})
@@ -483,6 +508,25 @@ Partial Class frmMain
Me.pbTime.TabIndex = 18
Me.pbTime.TabStop = False
'
+ 'gMonTrayToolsLog
+ '
+ Me.gMonTrayToolsLog.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayLogClear, Me.gMonTrayLogSave})
+ Me.gMonTrayToolsLog.Name = "gMonTrayToolsLog"
+ Me.gMonTrayToolsLog.Size = New System.Drawing.Size(184, 22)
+ Me.gMonTrayToolsLog.Text = "&Log"
+ '
+ 'gMonTrayLogClear
+ '
+ Me.gMonTrayLogClear.Name = "gMonTrayLogClear"
+ 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(152, 22)
+ Me.gMonTrayLogSave.Text = "&Save"
+ '
'frmMain
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -578,4 +622,10 @@ Partial Class frmMain
Friend WithEvents pbTime As System.Windows.Forms.PictureBox
Friend WithEvents gMonTrayToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsCleanMan As System.Windows.Forms.ToolStripMenuItem
+ Friend WithEvents gMonToolsLog As ToolStripMenuItem
+ Friend WithEvents gMonLogClear As ToolStripMenuItem
+ Friend WithEvents gMonLogSave As ToolStripMenuItem
+ Friend WithEvents gMonTrayToolsLog As ToolStripMenuItem
+ Friend WithEvents gMonTrayLogClear As ToolStripMenuItem
+ Friend WithEvents gMonTrayLogSave As ToolStripMenuItem
End Class
diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb
index 99f4a87..39ed7c4 100644
--- a/GBM/Forms/frmMain.vb
+++ b/GBM/Forms/frmMain.vb
@@ -920,9 +920,12 @@ Public Class frmMain
Dim d As New UpdateLogCallBack(AddressOf UpdateLog)
Me.Invoke(d, New Object() {sLogUpdate, bTrayUpdate, objIcon, bTimeStamp})
Else
- 'Clear the log if we are approaching the limit
+ 'Auto save and clear the log if we are approaching the limit
If txtLog.TextLength > 16770000 Then
- txtLog.Text = String.Empty
+ Dim sLogFile As String = mgrPath.LogFileLocation
+ mgrCommon.SaveText(txtLog.Text, sLogFile)
+ txtLog.Clear()
+ txtLog.AppendText("[" & Date.Now & "] " & mgrCommon.FormatString(frmMain_LogAutoSave, sLogFile))
End If
'We shouldn't allow any one message to be greater than 255 characters if that same message is pushed to the tray icon
@@ -949,6 +952,22 @@ Public Class frmMain
Application.DoEvents()
End Sub
+ Private Sub ClearLog()
+ If mgrCommon.ShowMessage(frmMain_ConfirmLogClear, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
+ txtLog.Clear()
+ End If
+ End Sub
+
+ Private Sub SaveLog()
+ Dim sLocation As String
+
+ sLocation = mgrCommon.SaveFileBrowser(frmMain_ChooseLogFile, "txt", frmMain_Text, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), frmMain_DefaultLogFileName & " " & Date.Now.ToString("dd-MMM-yyyy"))
+
+ If sLocation <> String.Empty Then
+ mgrCommon.SaveText(txtLog.Text, sLocation)
+ End If
+ End Sub
+
Private Sub SetForm()
'Set Form Name
Me.Name = App_NameLong
@@ -966,6 +985,9 @@ Public Class frmMain
gMonTools.Text = frmMain_gMonTools
gMonToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonToolsCompact.Text = frmMain_gMonToolsCompact
+ gMonToolsLog.Text = frmMain_gMonToolsLog
+ gMonLogClear.Text = frmMain_gMonLogClear
+ gMonLogSave.Text = frmMain_gMonLogSave
gMonHelp.Text = frmMain_gMonHelp
gMonHelpWebSite.Text = frmMain_gMonHelpWebSite
gMonHelpManual.Text = frmMain_gMonHelpManual
@@ -984,6 +1006,9 @@ Public Class frmMain
gMonTrayTools.Text = frmMain_gMonTools
gMonTrayToolsCleanMan.Text = frmMain_gMonToolsCleanMan
gMonTrayToolsCompact.Text = frmMain_gMonToolsCompact
+ gMonTrayToolsLog.Text = frmMain_gMonToolsLog
+ gMonTrayLogClear.Text = frmMain_gMonLogClear
+ gMonTrayLogSave.Text = frmMain_gMonLogSave
gMonTrayExit.Text = frmMain_gMonFileExit
'Set Form Text
@@ -1294,6 +1319,14 @@ Public Class frmMain
OpenCheckforUpdates()
End Sub
+ Private Sub gMonLogClear_Click(sender As Object, e As EventArgs) Handles gMonLogClear.Click, gMonTrayLogClear.Click
+ ClearLog()
+ End Sub
+
+ Private Sub gMonLogSave_Click(sender As Object, e As EventArgs) Handles gMonLogSave.Click, gMonTrayLogSave.Click
+ SaveLog()
+ 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/Managers/mgrCommon.vb b/GBM/Managers/mgrCommon.vb
index 7a4723a..b3a49eb 100644
--- a/GBM/Managers/mgrCommon.vb
+++ b/GBM/Managers/mgrCommon.vb
@@ -1,5 +1,6 @@
Imports GBM.My.Resources
Imports System.Net
+Imports System.IO
Public Class mgrCommon
@@ -126,6 +127,21 @@ Public Class mgrCommon
oProcess.Start()
End Sub
+ 'Save string as text file
+ Public Shared Sub SaveText(ByVal sText As String, ByVal sPath As String)
+ Dim oStream As StreamWriter
+
+ Try
+ If File.Exists(sPath) Then My.Computer.FileSystem.DeleteFile(sPath, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
+ oStream = New StreamWriter(sPath)
+ oStream.Write(sText)
+ oStream.Flush()
+ oStream.Close()
+ Catch ex As Exception
+ ShowMessage(mgrCommon_ErrorWritingTextFile, ex.Message, MsgBoxStyle.Critical)
+ End Try
+ End Sub
+
'Handles no extra parameters
Public Shared Function ShowMessage(ByVal sMsg As String, ByVal oType As MsgBoxStyle) As MsgBoxResult
Dim oResult As MsgBoxResult
diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb
index 65995ed..5aa2747 100644
--- a/GBM/Managers/mgrPath.vb
+++ b/GBM/Managers/mgrPath.vb
@@ -9,6 +9,7 @@ Public Class mgrPath
Private Shared sDBLocation As String = sSettingsRoot & "\gbm.s3db"
Private Shared sIncludeFile As String = sSettingsRoot & "\gbm_include.txt"
Private Shared sExcludeFile As String = sSettingsRoot & "\gbm_exclude.txt"
+ Private Shared sLogFile As String = sSettingsRoot & "\gbm_log_" & Date.Now.ToString("dd-MM-yyyy-HH-mm-ss") & ".txt"
Private Shared sRemoteDatabaseLocation As String
Private Shared hshCustomVariables As Hashtable
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
@@ -73,6 +74,12 @@ Public Class mgrPath
End Get
End Property
+ Shared ReadOnly Property LogFileLocation As String
+ Get
+ Return sLogFile
+ End Get
+ End Property
+
Shared ReadOnly Property SettingsRoot As String
Get
Return sSettingsRoot
diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb
index 4dbaf24..bb9ab36 100644
--- a/GBM/My Project/Resources.Designer.vb
+++ b/GBM/My Project/Resources.Designer.vb
@@ -1374,6 +1374,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Game Backup Monitor Export.
+ '''
+ Friend ReadOnly Property frmGameManager_DefaultExportFileName() As String
+ Get
+ Return ResourceManager.GetString("frmGameManager_DefaultExportFileName", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to A game with this exact name and process already exists..
'''
@@ -2085,6 +2094,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Choose a location for the log file.
+ '''
+ Friend ReadOnly Property frmMain_ChooseLogFile() As String
+ Get
+ Return ResourceManager.GetString("frmMain_ChooseLogFile", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to Do you wish to backup data from [PARAM]?.
'''
@@ -2094,6 +2112,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Are you sure you want to clear the session log?.
+ '''
+ Friend ReadOnly Property frmMain_ConfirmLogClear() As String
+ Get
+ Return ResourceManager.GetString("frmMain_ConfirmLogClear", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to This tool removes orphaned backup information from the local manifest based on the current backup folder. Data can become orphaned when backups are deleted by various computers that share the same backup folder on a cloud or network.[BR][BR]When alternating between different backup folders you should NOT use this tool.[BR][BR]Do you wish to proceed?.
'''
@@ -2130,6 +2157,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Game Backup Monitor Log.
+ '''
+ Friend ReadOnly Property frmMain_DefaultLogFileName() As String
+ Get
+ Return ResourceManager.GetString("frmMain_DefaultLogFileName", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to [PARAM] is a 64-bit game, GBM cannot detect the required information to save your backup..
'''
@@ -2427,6 +2463,24 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to &Clear.
+ '''
+ Friend ReadOnly Property frmMain_gMonLogClear() As String
+ Get
+ Return ResourceManager.GetString("frmMain_gMonLogClear", resourceCulture)
+ End Get
+ End Property
+
+ '''
+ ''' Looks up a localized string similar to &Save.
+ '''
+ Friend ReadOnly Property frmMain_gMonLogSave() As String
+ Get
+ Return ResourceManager.GetString("frmMain_gMonLogSave", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to &Setup.
'''
@@ -2517,6 +2571,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to &Log.
+ '''
+ Friend ReadOnly Property frmMain_gMonToolsLog() As String
+ Get
+ Return ResourceManager.GetString("frmMain_gMonToolsLog", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to Show / Hide.
'''
@@ -2571,6 +2634,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to The session log has been cleared due to size and auto-saved to [PARAM]..
+ '''
+ Friend ReadOnly Property frmMain_LogAutoSave() As String
+ Get
+ Return ResourceManager.GetString("frmMain_LogAutoSave", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to The local manifest is clean..
'''
@@ -2769,6 +2841,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to Text.
+ '''
+ Friend ReadOnly Property frmMain_Text() As String
+ Get
+ Return ResourceManager.GetString("frmMain_Text", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to the unidentified game.
'''
@@ -3781,6 +3862,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to An error has occured writing the text file.[BR][BR][PARAM].
+ '''
+ Friend ReadOnly Property mgrCommon_ErrorWritingTextFile() As String
+ Get
+ Return ResourceManager.GetString("mgrCommon_ErrorWritingTextFile", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to [PARAM] files (*.[PARAM])|*.[PARAM].
'''
diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx
index f875b5c..066490c 100644
--- a/GBM/My Project/Resources.resx
+++ b/GBM/My Project/Resources.resx
@@ -1483,4 +1483,34 @@
The XML file cannot be read, it may be an invalid format or corrupted.[BR][BR][PARAM]
+
+ Game Backup Monitor Export
+
+
+ Choose a location for the log file
+
+
+ Are you sure you want to clear the session log?
+
+
+ Game Backup Monitor Log
+
+
+ &Clear
+
+
+ &Save
+
+
+ &Log
+
+
+ The session log has been cleared due to size and auto-saved to [PARAM].
+
+
+ Text
+
+
+ An error has occured writing the text file.[BR][BR][PARAM]
+
\ No newline at end of file