Initial commit

This commit is contained in:
Michael J. Seiferling
2015-11-08 16:06:31 -06:00
parent 10be205da1
commit 2fd1aecfc9
87 changed files with 19755 additions and 1 deletions
Vendored
-1
View File
@@ -10,7 +10,6 @@
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
build/
bld/
[Bb]in/
+134
View File
@@ -0,0 +1,134 @@
Public Class clsBackup
Private sBackupID As String = Guid.NewGuid.ToString
Private sName As String = String.Empty
Private sFileName As String = String.Empty
Private sRestorePath As String = String.Empty
Private bAbsolutePath As Boolean = False
Private sRelativeRestorePath As String = String.Empty
Private dDateUpdated As DateTime = Date.Now
Private sUpdatedBy As String = String.Empty
Private dLastDateUpdated As DateTime = Date.Now
Private sLastUpdatedBy As String = String.Empty
Private sCheckSum As String = String.Empty
Property ID As String
Get
Return sBackupID
End Get
Set(value As String)
sBackupID = value
End Set
End Property
Property Name As String
Get
Return sName
End Get
Set(value As String)
sName = value
End Set
End Property
ReadOnly Property CroppedName As String
Get
If Name.Length > 40 Then
Return sName.Substring(0, 41) & "..."
Else
Return sName
End If
End Get
End Property
Property FileName As String
Get
Return sFileName
End Get
Set(value As String)
sFileName = value
End Set
End Property
ReadOnly Property TruePath As String
Get
Return sRestorePath
End Get
End Property
Property RestorePath As String
Get
Return mgrPath.ReplaceSpecialPaths(sRestorePath)
End Get
Set(value As String)
sRestorePath = mgrPath.ReverseSpecialPaths(value)
End Set
End Property
Property AbsolutePath As Boolean
Get
Return bAbsolutePath
End Get
Set(value As Boolean)
bAbsolutePath = value
End Set
End Property
Property RelativeRestorePath As String
Get
Return sRelativeRestorePath
End Get
Set(value As String)
sRelativeRestorePath = value
End Set
End Property
Property DateUpdated As DateTime
Get
Return dDateUpdated
End Get
Set(value As DateTime)
dDateUpdated = value
End Set
End Property
ReadOnly Property DateUpdatedUnix As Int64
Get
Return mgrCommon.DateToUnix(DateUpdated)
End Get
End Property
Property UpdatedBy As String
Get
Return sUpdatedBy
End Get
Set(value As String)
sUpdatedBy = value
End Set
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
Get
Return sCheckSum
End Get
Set(value As String)
sCheckSum = value
End Set
End Property
End Class
+291
View File
@@ -0,0 +1,291 @@
Public Class clsGame
Private sGameID As String = Guid.NewGuid.ToString
Private sGameName As String = String.Empty
Private sProcessName As String = String.Empty
Private sPath As String = String.Empty
Private bAbsolutePath As Boolean = False
Private bFolderSave As Boolean = False
Private sFileType As String = String.Empty
Private bAppendTimeStamp As Boolean = False
Private sExcludeList As String = String.Empty
Private sProcessPath As String = String.Empty
Private sIcon As String = String.Empty
Private dHours As Double = 0
Private sVersion As String = String.Empty
Private sCompany As String = String.Empty
Private bEnabled As Boolean = True
Private bMonitorOnly As Boolean = False
Private bDuplicate As Boolean = False
Private sDOSBoxProcess As String = String.Empty
Private bTempGame As Boolean = False
Property ID As String
Set(value As String)
sGameID = value
End Set
Get
Return sGameID
End Get
End Property
ReadOnly Property CroppedName As String
Get
If Name.Length > 40 Then
Return sGameName.Substring(0, 41) & "..."
Else
Return sGameName
End If
End Get
End Property
Property Name As String
Set(value As String)
sGameName = value
End Set
Get
Return sGameName
End Get
End Property
Property ProcessName As String
Set(value As String)
sProcessName = value
End Set
Get
Return sProcessName
End Get
End Property
Property Path As String
Set(value As String)
sPath = mgrPath.ReverseSpecialPaths(value)
End Set
Get
Return mgrPath.ReplaceSpecialPaths(sPath)
End Get
End Property
Property AbsolutePath As Boolean
Set(value As Boolean)
bAbsolutePath = value
End Set
Get
Return bAbsolutePath
End Get
End Property
Property FolderSave As Boolean
Set(value As Boolean)
bFolderSave = value
End Set
Get
Return bFolderSave
End Get
End Property
Property FileType As String
Set(value As String)
sFileType = value
End Set
Get
Return sFileType
End Get
End Property
Property AppendTimeStamp As Boolean
Get
Return bAppendTimeStamp
End Get
Set(value As Boolean)
bAppendTimeStamp = value
End Set
End Property
Property ExcludeList As String
Set(value As String)
sExcludeList = value
End Set
Get
Return sExcludeList
End Get
End Property
Property ProcessPath As String
Set(value As String)
sProcessPath = value
End Set
Get
Return sProcessPath
End Get
End Property
Property Icon As String
Get
Return sIcon
End Get
Set(value As String)
sIcon = value
End Set
End Property
Property Hours As Double
Get
Return dHours
End Get
Set(value As Double)
dHours = value
End Set
End Property
Property Version As String
Get
Return sVersion
End Get
Set(value As String)
sVersion = value
End Set
End Property
Property Company As String
Get
Return sCompany
End Get
Set(value As String)
sCompany = value
End Set
End Property
Property Enabled As Boolean
Set(value As Boolean)
bEnabled = value
End Set
Get
Return bEnabled
End Get
End Property
Property MonitorOnly As Boolean
Set(value As Boolean)
bMonitorOnly = value
End Set
Get
Return bMonitorOnly
End Get
End Property
Property Duplicate As Boolean
Set(value As Boolean)
bDuplicate = value
End Set
Get
Return bDuplicate
End Get
End Property
Property DOSBoxProcess As String
Set(value As String)
sDOSBoxProcess = value
End Set
Get
Return sDOSBoxProcess
End Get
End Property
ReadOnly Property TruePath As String
Get
Return sPath
End Get
End Property
ReadOnly Property TrueProcess As String
Get
Return HandleProcessDuplicates()
End Get
End Property
Property Temporary As Boolean
Get
Return bTempGame
End Get
Set(value As Boolean)
bTempGame = value
End Set
End Property
Public Function SyncEquals(obj As Object) As Boolean
Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then
Return False
Else
If Name <> oGame.Name Then
Return False
End If
If ProcessName <> oGame.ProcessName Then
Return False
End If
If Path <> oGame.Path Then
Return False
End If
If FileType <> oGame.FileType Then
Return False
End If
If ExcludeList <> oGame.ExcludeList Then
Return False
End If
If AbsolutePath <> oGame.AbsolutePath Then
Return False
End If
If FolderSave <> oGame.FolderSave Then
Return False
End If
If AppendTimeStamp <> oGame.AppendTimeStamp Then
Return False
End If
If Hours <> oGame.Hours Then
Return False
End If
Return True
End If
End Function
Public Function CoreEquals(obj As Object) As Boolean
Dim oGame As clsGame = TryCast(obj, clsGame)
If oGame Is Nothing Then
Return False
Else
If Name <> oGame.Name Then
Return False
End If
If ProcessName <> oGame.ProcessName Then
Return False
End If
Return True
End If
End Function
Public Function ShallowCopy() As clsGame
Return DirectCast(Me.MemberwiseClone(), clsGame)
End Function
Private Function HandleProcessDuplicates() As String
Dim sProcessName As String
'Handle Duplicates
sProcessName = Me.ProcessName
If Me.Duplicate Then
If Me.ProcessName.Contains("dosbox") Then
If Me.ProcessName.Split(":").Length = 3 Then
sProcessName = Me.ProcessName.Remove(Me.ProcessName.LastIndexOf(":"))
Else
sProcessName = Me.ProcessName
End If
Else
sProcessName = Me.ProcessName.Split(":")(0)
End If
End If
Return sProcessName
End Function
End Class
+40
View File
@@ -0,0 +1,40 @@
Public Class clsPathVariable
Private sVariableID As String = Guid.NewGuid.ToString
Private sVariableName As String = String.Empty
Private sVariableDescription As String = String.Empty
Private sPath As String = String.Empty
Property ID As String
Get
Return sVariableID
End Get
Set(value As String)
sVariableID = value
End Set
End Property
Property Name As String
Get
Return sVariableName
End Get
Set(value As String)
sVariableName = value
End Set
End Property
ReadOnly Property FormattedName As String
Get
Return "*" & sVariableName & "*"
End Get
End Property
Property Path As String
Get
Return sPath
End Get
Set(value As String)
sPath = value
End Set
End Property
End Class
+23
View File
@@ -0,0 +1,23 @@
Public Class clsRestoreCache
Private sName As String
Private sPath As String
Property Name As String
Get
Return sName
End Get
Set(value As String)
sName = value
End Set
End Property
Property Path As String
Get
Return sPath
End Get
Set(value As String)
sPath = value
End Set
End Property
End Class
+715
View File
@@ -0,0 +1,715 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmAddWizard
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAddWizard))
Me.tabWizard = New System.Windows.Forms.TabControl()
Me.tbPage1 = New System.Windows.Forms.TabPage()
Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblDrag1 = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.txtName = New System.Windows.Forms.TextBox()
Me.lblStep1Intro = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.lbldBox = New System.Windows.Forms.Label()
Me.btndBoxBrowse = New System.Windows.Forms.Button()
Me.txtdBoxProcess = New System.Windows.Forms.TextBox()
Me.lblStep2Title = New System.Windows.Forms.Label()
Me.lblStep2Instructions = New System.Windows.Forms.Label()
Me.lblDrag2 = New System.Windows.Forms.Label()
Me.btnProcessBrowse = New System.Windows.Forms.Button()
Me.txtProcessPath = New System.Windows.Forms.TextBox()
Me.lblStep2Intro = New System.Windows.Forms.Label()
Me.tbPage3 = New System.Windows.Forms.TabPage()
Me.lblStep3Title = New System.Windows.Forms.Label()
Me.lblStep3Instructions = New System.Windows.Forms.Label()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
Me.chkFolderSave = New System.Windows.Forms.CheckBox()
Me.btnSaveBrowse = New System.Windows.Forms.Button()
Me.txtSavePath = New System.Windows.Forms.TextBox()
Me.lblStep3Intro = New System.Windows.Forms.Label()
Me.tbPage3a = New System.Windows.Forms.TabPage()
Me.grpFileTypes = New System.Windows.Forms.GroupBox()
Me.optSpecificFile = New System.Windows.Forms.RadioButton()
Me.btnFileTypeBrowse = New System.Windows.Forms.Button()
Me.optFileType = New System.Windows.Forms.RadioButton()
Me.btnStep3aClear = New System.Windows.Forms.Button()
Me.lblStep3aTitle = New System.Windows.Forms.Label()
Me.lblStep3aInstructions = New System.Windows.Forms.Label()
Me.txtFileTypes = New System.Windows.Forms.TextBox()
Me.tbPage4 = New System.Windows.Forms.TabPage()
Me.grpExclude = New System.Windows.Forms.GroupBox()
Me.optExcludeSpecificFile = New System.Windows.Forms.RadioButton()
Me.btnExcludeBrowse = New System.Windows.Forms.Button()
Me.optExcludeFileType = New System.Windows.Forms.RadioButton()
Me.optExcludeFolder = New System.Windows.Forms.RadioButton()
Me.btnStep4Clear = New System.Windows.Forms.Button()
Me.lblStep4Title = New System.Windows.Forms.Label()
Me.lblStep4Instructions = New System.Windows.Forms.Label()
Me.txtExcludeList = New System.Windows.Forms.TextBox()
Me.tbPage5 = New System.Windows.Forms.TabPage()
Me.lblStep5Intro = New System.Windows.Forms.Label()
Me.lblStep5Title = New System.Windows.Forms.Label()
Me.lstSummary = New System.Windows.Forms.ListView()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnNext = New System.Windows.Forms.Button()
Me.btnBack = New System.Windows.Forms.Button()
Me.optFileTypeFolder = New System.Windows.Forms.RadioButton()
Me.tabWizard.SuspendLayout()
Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout()
Me.tbPage3.SuspendLayout()
Me.tbPage3a.SuspendLayout()
Me.grpFileTypes.SuspendLayout()
Me.tbPage4.SuspendLayout()
Me.grpExclude.SuspendLayout()
Me.tbPage5.SuspendLayout()
Me.SuspendLayout()
'
'tabWizard
'
Me.tabWizard.Controls.Add(Me.tbPage1)
Me.tabWizard.Controls.Add(Me.tbPage2)
Me.tabWizard.Controls.Add(Me.tbPage3)
Me.tabWizard.Controls.Add(Me.tbPage3a)
Me.tabWizard.Controls.Add(Me.tbPage4)
Me.tabWizard.Controls.Add(Me.tbPage5)
Me.tabWizard.Location = New System.Drawing.Point(-6, -24)
Me.tabWizard.Name = "tabWizard"
Me.tabWizard.SelectedIndex = 0
Me.tabWizard.Size = New System.Drawing.Size(370, 220)
Me.tabWizard.TabIndex = 0
Me.tabWizard.TabStop = False
'
'tbPage1
'
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
Me.tbPage1.Controls.Add(Me.lblStep1Title)
Me.tbPage1.Controls.Add(Me.lblDrag1)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
Me.tbPage1.Controls.Add(Me.txtName)
Me.tbPage1.Controls.Add(Me.lblStep1Intro)
Me.tbPage1.Location = New System.Drawing.Point(4, 22)
Me.tbPage1.Name = "tbPage1"
Me.tbPage1.Padding = New System.Windows.Forms.Padding(3)
Me.tbPage1.Size = New System.Drawing.Size(362, 194)
Me.tbPage1.TabIndex = 0
Me.tbPage1.Text = "TabPage1"
'
'lblStep1Title
'
Me.lblStep1Title.AutoSize = True
Me.lblStep1Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep1Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep1Title.Name = "lblStep1Title"
Me.lblStep1Title.Size = New System.Drawing.Size(108, 20)
Me.lblStep1Title.TabIndex = 8
Me.lblStep1Title.Text = "Game Name"
'
'lblDrag1
'
Me.lblDrag1.AllowDrop = True
Me.lblDrag1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblDrag1.Location = New System.Drawing.Point(14, 147)
Me.lblDrag1.Name = "lblDrag1"
Me.lblDrag1.Size = New System.Drawing.Size(303, 37)
Me.lblDrag1.TabIndex = 7
Me.lblDrag1.Text = "Drag a shortcut here to complete this step."
'
'lblStep1Instructions
'
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep1Instructions.Name = "lblStep1Instructions"
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep1Instructions.TabIndex = 6
Me.lblStep1Instructions.Text = "The name of the game is used for the backup file and must conform to Windows file" &
" name standards. It will be automatically filtered for length and invalid chara" &
"cters. "
'
'txtName
'
Me.txtName.AllowDrop = True
Me.txtName.Location = New System.Drawing.Point(17, 61)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(300, 20)
Me.txtName.TabIndex = 4
'
'lblStep1Intro
'
Me.lblStep1Intro.AutoSize = True
Me.lblStep1Intro.Location = New System.Drawing.Point(14, 45)
Me.lblStep1Intro.Name = "lblStep1Intro"
Me.lblStep1Intro.Size = New System.Drawing.Size(190, 13)
Me.lblStep1Intro.TabIndex = 5
Me.lblStep1Intro.Text = "Enter the name of the game to monitor:"
'
'tbPage2
'
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
Me.tbPage2.Controls.Add(Me.lbldBox)
Me.tbPage2.Controls.Add(Me.btndBoxBrowse)
Me.tbPage2.Controls.Add(Me.txtdBoxProcess)
Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
Me.tbPage2.Controls.Add(Me.lblDrag2)
Me.tbPage2.Controls.Add(Me.btnProcessBrowse)
Me.tbPage2.Controls.Add(Me.txtProcessPath)
Me.tbPage2.Controls.Add(Me.lblStep2Intro)
Me.tbPage2.Location = New System.Drawing.Point(4, 22)
Me.tbPage2.Name = "tbPage2"
Me.tbPage2.Padding = New System.Windows.Forms.Padding(3)
Me.tbPage2.Size = New System.Drawing.Size(362, 194)
Me.tbPage2.TabIndex = 1
Me.tbPage2.Text = "TabPage2"
'
'lbldBox
'
Me.lbldBox.AutoSize = True
Me.lbldBox.Location = New System.Drawing.Point(184, 18)
Me.lbldBox.Name = "lbldBox"
Me.lbldBox.Size = New System.Drawing.Size(52, 13)
Me.lbldBox.TabIndex = 14
Me.lbldBox.Text = "DOS File:"
'
'btndBoxBrowse
'
Me.btndBoxBrowse.Location = New System.Drawing.Point(322, 14)
Me.btndBoxBrowse.Name = "btndBoxBrowse"
Me.btndBoxBrowse.Size = New System.Drawing.Size(27, 20)
Me.btndBoxBrowse.TabIndex = 13
Me.btndBoxBrowse.Text = "..."
Me.btndBoxBrowse.UseVisualStyleBackColor = True
'
'txtdBoxProcess
'
Me.txtdBoxProcess.AllowDrop = True
Me.txtdBoxProcess.Location = New System.Drawing.Point(244, 14)
Me.txtdBoxProcess.Name = "txtdBoxProcess"
Me.txtdBoxProcess.Size = New System.Drawing.Size(72, 20)
Me.txtdBoxProcess.TabIndex = 12
'
'lblStep2Title
'
Me.lblStep2Title.AutoSize = True
Me.lblStep2Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep2Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep2Title.Name = "lblStep2Title"
Me.lblStep2Title.Size = New System.Drawing.Size(159, 20)
Me.lblStep2Title.TabIndex = 11
Me.lblStep2Title.Text = "Process to Monitor"
'
'lblStep2Instructions
'
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 93)
Me.lblStep2Instructions.Name = "lblStep2Instructions"
Me.lblStep2Instructions.Size = New System.Drawing.Size(303, 41)
Me.lblStep2Instructions.TabIndex = 10
Me.lblStep2Instructions.Text = "GBM needs to know what to look for when you run the application. Some games use " &
"launchers. Do not monitor launchers, choose the actual game exe file."
'
'lblDrag2
'
Me.lblDrag2.AllowDrop = True
Me.lblDrag2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblDrag2.Location = New System.Drawing.Point(14, 147)
Me.lblDrag2.Name = "lblDrag2"
Me.lblDrag2.Size = New System.Drawing.Size(336, 44)
Me.lblDrag2.TabIndex = 9
Me.lblDrag2.Text = "Drag a shortcut here to complete this step."
'
'btnProcessBrowse
'
Me.btnProcessBrowse.Location = New System.Drawing.Point(323, 60)
Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(27, 20)
Me.btnProcessBrowse.TabIndex = 8
Me.btnProcessBrowse.Text = "..."
Me.btnProcessBrowse.UseVisualStyleBackColor = True
'
'txtProcessPath
'
Me.txtProcessPath.AllowDrop = True
Me.txtProcessPath.Location = New System.Drawing.Point(17, 61)
Me.txtProcessPath.Name = "txtProcessPath"
Me.txtProcessPath.Size = New System.Drawing.Size(300, 20)
Me.txtProcessPath.TabIndex = 6
'
'lblStep2Intro
'
Me.lblStep2Intro.AutoSize = True
Me.lblStep2Intro.Location = New System.Drawing.Point(14, 45)
Me.lblStep2Intro.Name = "lblStep2Intro"
Me.lblStep2Intro.Size = New System.Drawing.Size(224, 13)
Me.lblStep2Intro.TabIndex = 7
Me.lblStep2Intro.Text = "Choose the game's executable file or shortcut:"
'
'tbPage3
'
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3.Controls.Add(Me.lblStep3Title)
Me.tbPage3.Controls.Add(Me.lblStep3Instructions)
Me.tbPage3.Controls.Add(Me.chkTimeStamp)
Me.tbPage3.Controls.Add(Me.chkFolderSave)
Me.tbPage3.Controls.Add(Me.btnSaveBrowse)
Me.tbPage3.Controls.Add(Me.txtSavePath)
Me.tbPage3.Controls.Add(Me.lblStep3Intro)
Me.tbPage3.Location = New System.Drawing.Point(4, 22)
Me.tbPage3.Name = "tbPage3"
Me.tbPage3.Size = New System.Drawing.Size(362, 194)
Me.tbPage3.TabIndex = 2
Me.tbPage3.Text = "TabPage3"
'
'lblStep3Title
'
Me.lblStep3Title.AutoSize = True
Me.lblStep3Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep3Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep3Title.Name = "lblStep3Title"
Me.lblStep3Title.Size = New System.Drawing.Size(164, 20)
Me.lblStep3Title.TabIndex = 10
Me.lblStep3Title.Text = "Game Backup Path"
'
'lblStep3Instructions
'
Me.lblStep3Instructions.Location = New System.Drawing.Point(14, 116)
Me.lblStep3Instructions.Name = "lblStep3Instructions"
Me.lblStep3Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep3Instructions.TabIndex = 9
Me.lblStep3Instructions.Text = "If you're unsure of exactly which files to backup, make sure Save Entire Folder " &
"is checked. You can also time stamp your backup files to make incremental backu" &
"ps."
'
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(139, 87)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(122, 17)
Me.chkTimeStamp.TabIndex = 8
Me.chkTimeStamp.Text = "Time Stamp Backup"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
'
Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(17, 87)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(113, 17)
Me.chkFolderSave.TabIndex = 7
Me.chkFolderSave.Text = "Save Entire Folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
'btnSaveBrowse
'
Me.btnSaveBrowse.Location = New System.Drawing.Point(323, 60)
Me.btnSaveBrowse.Name = "btnSaveBrowse"
Me.btnSaveBrowse.Size = New System.Drawing.Size(27, 20)
Me.btnSaveBrowse.TabIndex = 6
Me.btnSaveBrowse.Text = "..."
Me.btnSaveBrowse.UseVisualStyleBackColor = True
'
'txtSavePath
'
Me.txtSavePath.Location = New System.Drawing.Point(17, 61)
Me.txtSavePath.Name = "txtSavePath"
Me.txtSavePath.Size = New System.Drawing.Size(300, 20)
Me.txtSavePath.TabIndex = 4
'
'lblStep3Intro
'
Me.lblStep3Intro.AutoSize = True
Me.lblStep3Intro.Location = New System.Drawing.Point(14, 45)
Me.lblStep3Intro.Name = "lblStep3Intro"
Me.lblStep3Intro.Size = New System.Drawing.Size(222, 13)
Me.lblStep3Intro.TabIndex = 5
Me.lblStep3Intro.Text = "Choose the location of your game's save files:"
'
'tbPage3a
'
Me.tbPage3a.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3a.Controls.Add(Me.grpFileTypes)
Me.tbPage3a.Controls.Add(Me.btnStep3aClear)
Me.tbPage3a.Controls.Add(Me.lblStep3aTitle)
Me.tbPage3a.Controls.Add(Me.lblStep3aInstructions)
Me.tbPage3a.Controls.Add(Me.txtFileTypes)
Me.tbPage3a.Location = New System.Drawing.Point(4, 22)
Me.tbPage3a.Name = "tbPage3a"
Me.tbPage3a.Size = New System.Drawing.Size(362, 194)
Me.tbPage3a.TabIndex = 3
Me.tbPage3a.Text = "TabPage4"
'
'grpFileTypes
'
Me.grpFileTypes.Controls.Add(Me.optFileTypeFolder)
Me.grpFileTypes.Controls.Add(Me.optSpecificFile)
Me.grpFileTypes.Controls.Add(Me.btnFileTypeBrowse)
Me.grpFileTypes.Controls.Add(Me.optFileType)
Me.grpFileTypes.Location = New System.Drawing.Point(17, 43)
Me.grpFileTypes.Name = "grpFileTypes"
Me.grpFileTypes.Size = New System.Drawing.Size(310, 47)
Me.grpFileTypes.TabIndex = 0
Me.grpFileTypes.TabStop = False
Me.grpFileTypes.Text = "Choose any files or folders to include in the backup"
'
'optSpecificFile
'
Me.optSpecificFile.AutoSize = True
Me.optSpecificFile.Location = New System.Drawing.Point(80, 19)
Me.optSpecificFile.Name = "optSpecificFile"
Me.optSpecificFile.Size = New System.Drawing.Size(82, 17)
Me.optSpecificFile.TabIndex = 2
Me.optSpecificFile.TabStop = True
Me.optSpecificFile.Text = "Specific File"
Me.optSpecificFile.UseVisualStyleBackColor = True
'
'btnFileTypeBrowse
'
Me.btnFileTypeBrowse.Location = New System.Drawing.Point(229, 16)
Me.btnFileTypeBrowse.Name = "btnFileTypeBrowse"
Me.btnFileTypeBrowse.Size = New System.Drawing.Size(75, 23)
Me.btnFileTypeBrowse.TabIndex = 3
Me.btnFileTypeBrowse.Text = "Browse..."
Me.btnFileTypeBrowse.UseVisualStyleBackColor = True
'
'optFileType
'
Me.optFileType.AutoSize = True
Me.optFileType.Location = New System.Drawing.Point(6, 19)
Me.optFileType.Name = "optFileType"
Me.optFileType.Size = New System.Drawing.Size(68, 17)
Me.optFileType.TabIndex = 1
Me.optFileType.TabStop = True
Me.optFileType.Text = "File Type"
Me.optFileType.UseVisualStyleBackColor = True
'
'btnStep3aClear
'
Me.btnStep3aClear.Location = New System.Drawing.Point(253, 93)
Me.btnStep3aClear.Name = "btnStep3aClear"
Me.btnStep3aClear.Size = New System.Drawing.Size(75, 23)
Me.btnStep3aClear.TabIndex = 5
Me.btnStep3aClear.Text = "&Clear"
Me.btnStep3aClear.UseVisualStyleBackColor = True
'
'lblStep3aTitle
'
Me.lblStep3aTitle.AutoSize = True
Me.lblStep3aTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep3aTitle.Location = New System.Drawing.Point(13, 11)
Me.lblStep3aTitle.Name = "lblStep3aTitle"
Me.lblStep3aTitle.Size = New System.Drawing.Size(199, 20)
Me.lblStep3aTitle.TabIndex = 12
Me.lblStep3aTitle.Text = "Choose Files to Backup"
'
'lblStep3aInstructions
'
Me.lblStep3aInstructions.Location = New System.Drawing.Point(14, 126)
Me.lblStep3aInstructions.Name = "lblStep3aInstructions"
Me.lblStep3aInstructions.Size = New System.Drawing.Size(303, 56)
Me.lblStep3aInstructions.TabIndex = 11
Me.lblStep3aInstructions.Text = "Choose any file types, specific files or folders you wish to include in the back" &
"up. You may choose multiple items to include. If you're unsure, go back a step" &
" and choose to save the entire folder. "
'
'txtFileTypes
'
Me.txtFileTypes.Location = New System.Drawing.Point(18, 95)
Me.txtFileTypes.Name = "txtFileTypes"
Me.txtFileTypes.ReadOnly = True
Me.txtFileTypes.Size = New System.Drawing.Size(229, 20)
Me.txtFileTypes.TabIndex = 4
Me.txtFileTypes.TabStop = False
'
'tbPage4
'
Me.tbPage4.BackColor = System.Drawing.SystemColors.Control
Me.tbPage4.Controls.Add(Me.grpExclude)
Me.tbPage4.Controls.Add(Me.btnStep4Clear)
Me.tbPage4.Controls.Add(Me.lblStep4Title)
Me.tbPage4.Controls.Add(Me.lblStep4Instructions)
Me.tbPage4.Controls.Add(Me.txtExcludeList)
Me.tbPage4.Location = New System.Drawing.Point(4, 22)
Me.tbPage4.Name = "tbPage4"
Me.tbPage4.Size = New System.Drawing.Size(362, 194)
Me.tbPage4.TabIndex = 4
Me.tbPage4.Text = "TabPage5"
'
'grpExclude
'
Me.grpExclude.Controls.Add(Me.optExcludeSpecificFile)
Me.grpExclude.Controls.Add(Me.btnExcludeBrowse)
Me.grpExclude.Controls.Add(Me.optExcludeFileType)
Me.grpExclude.Controls.Add(Me.optExcludeFolder)
Me.grpExclude.Location = New System.Drawing.Point(17, 43)
Me.grpExclude.Name = "grpExclude"
Me.grpExclude.Size = New System.Drawing.Size(310, 47)
Me.grpExclude.TabIndex = 0
Me.grpExclude.TabStop = False
Me.grpExclude.Text = "Choose any files or folders to exclude from the backup:"
'
'optExcludeSpecificFile
'
Me.optExcludeSpecificFile.AutoSize = True
Me.optExcludeSpecificFile.Location = New System.Drawing.Point(80, 19)
Me.optExcludeSpecificFile.Name = "optExcludeSpecificFile"
Me.optExcludeSpecificFile.Size = New System.Drawing.Size(82, 17)
Me.optExcludeSpecificFile.TabIndex = 2
Me.optExcludeSpecificFile.TabStop = True
Me.optExcludeSpecificFile.Text = "Specific File"
Me.optExcludeSpecificFile.UseVisualStyleBackColor = True
'
'btnExcludeBrowse
'
Me.btnExcludeBrowse.Location = New System.Drawing.Point(229, 16)
Me.btnExcludeBrowse.Name = "btnExcludeBrowse"
Me.btnExcludeBrowse.Size = New System.Drawing.Size(75, 23)
Me.btnExcludeBrowse.TabIndex = 4
Me.btnExcludeBrowse.Text = "&Browse..."
Me.btnExcludeBrowse.UseVisualStyleBackColor = True
'
'optExcludeFileType
'
Me.optExcludeFileType.AutoSize = True
Me.optExcludeFileType.Location = New System.Drawing.Point(6, 19)
Me.optExcludeFileType.Name = "optExcludeFileType"
Me.optExcludeFileType.Size = New System.Drawing.Size(68, 17)
Me.optExcludeFileType.TabIndex = 1
Me.optExcludeFileType.TabStop = True
Me.optExcludeFileType.Text = "File Type"
Me.optExcludeFileType.UseVisualStyleBackColor = True
'
'optExcludeFolder
'
Me.optExcludeFolder.AutoSize = True
Me.optExcludeFolder.Location = New System.Drawing.Point(168, 19)
Me.optExcludeFolder.Name = "optExcludeFolder"
Me.optExcludeFolder.Size = New System.Drawing.Size(54, 17)
Me.optExcludeFolder.TabIndex = 3
Me.optExcludeFolder.TabStop = True
Me.optExcludeFolder.Text = "Folder"
Me.optExcludeFolder.UseVisualStyleBackColor = True
'
'btnStep4Clear
'
Me.btnStep4Clear.Location = New System.Drawing.Point(253, 93)
Me.btnStep4Clear.Name = "btnStep4Clear"
Me.btnStep4Clear.Size = New System.Drawing.Size(75, 23)
Me.btnStep4Clear.TabIndex = 6
Me.btnStep4Clear.Text = "&Clear"
Me.btnStep4Clear.UseVisualStyleBackColor = True
'
'lblStep4Title
'
Me.lblStep4Title.AutoSize = True
Me.lblStep4Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep4Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep4Title.Name = "lblStep4Title"
Me.lblStep4Title.Size = New System.Drawing.Size(201, 20)
Me.lblStep4Title.TabIndex = 16
Me.lblStep4Title.Text = "Exclude Files or Folders"
'
'lblStep4Instructions
'
Me.lblStep4Instructions.Location = New System.Drawing.Point(14, 126)
Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 59)
Me.lblStep4Instructions.TabIndex = 12
Me.lblStep4Instructions.Text = resources.GetString("lblStep4Instructions.Text")
'
'txtExcludeList
'
Me.txtExcludeList.Location = New System.Drawing.Point(18, 95)
Me.txtExcludeList.Name = "txtExcludeList"
Me.txtExcludeList.ReadOnly = True
Me.txtExcludeList.Size = New System.Drawing.Size(229, 20)
Me.txtExcludeList.TabIndex = 5
Me.txtExcludeList.TabStop = False
'
'tbPage5
'
Me.tbPage5.BackColor = System.Drawing.SystemColors.Control
Me.tbPage5.Controls.Add(Me.lblStep5Intro)
Me.tbPage5.Controls.Add(Me.lblStep5Title)
Me.tbPage5.Controls.Add(Me.lstSummary)
Me.tbPage5.Location = New System.Drawing.Point(4, 22)
Me.tbPage5.Name = "tbPage5"
Me.tbPage5.Size = New System.Drawing.Size(362, 194)
Me.tbPage5.TabIndex = 5
Me.tbPage5.Text = "TabPage6"
'
'lblStep5Intro
'
Me.lblStep5Intro.AutoSize = True
Me.lblStep5Intro.Location = New System.Drawing.Point(15, 40)
Me.lblStep5Intro.Name = "lblStep5Intro"
Me.lblStep5Intro.Size = New System.Drawing.Size(243, 13)
Me.lblStep5Intro.TabIndex = 18
Me.lblStep5Intro.Text = "Verify your settings below and click Finish to save."
'
'lblStep5Title
'
Me.lblStep5Title.AutoSize = True
Me.lblStep5Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep5Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep5Title.Name = "lblStep5Title"
Me.lblStep5Title.Size = New System.Drawing.Size(196, 20)
Me.lblStep5Title.TabIndex = 17
Me.lblStep5Title.Text = "Summary of your Game"
'
'lstSummary
'
Me.lstSummary.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.lstSummary.Location = New System.Drawing.Point(14, 65)
Me.lstSummary.Name = "lstSummary"
Me.lstSummary.Size = New System.Drawing.Size(335, 126)
Me.lstSummary.TabIndex = 1
Me.lstSummary.UseCompatibleStateImageBehavior = False
Me.lstSummary.View = System.Windows.Forms.View.Details
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(272, 202)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 12
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'btnNext
'
Me.btnNext.Location = New System.Drawing.Point(191, 202)
Me.btnNext.Name = "btnNext"
Me.btnNext.Size = New System.Drawing.Size(75, 23)
Me.btnNext.TabIndex = 11
Me.btnNext.Text = "&Next"
Me.btnNext.UseVisualStyleBackColor = True
'
'btnBack
'
Me.btnBack.Location = New System.Drawing.Point(110, 202)
Me.btnBack.Name = "btnBack"
Me.btnBack.Size = New System.Drawing.Size(75, 23)
Me.btnBack.TabIndex = 10
Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True
'
'optFileTypeFolder
'
Me.optFileTypeFolder.AutoSize = True
Me.optFileTypeFolder.Location = New System.Drawing.Point(168, 19)
Me.optFileTypeFolder.Name = "optFileTypeFolder"
Me.optFileTypeFolder.Size = New System.Drawing.Size(54, 17)
Me.optFileTypeFolder.TabIndex = 4
Me.optFileTypeFolder.TabStop = True
Me.optFileTypeFolder.Text = "Folder"
Me.optFileTypeFolder.UseVisualStyleBackColor = True
'
'frmAddWizard
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(359, 237)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnNext)
Me.Controls.Add(Me.btnBack)
Me.Controls.Add(Me.tabWizard)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmAddWizard"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Add Game Wizard"
Me.tabWizard.ResumeLayout(False)
Me.tbPage1.ResumeLayout(False)
Me.tbPage1.PerformLayout()
Me.tbPage2.ResumeLayout(False)
Me.tbPage2.PerformLayout()
Me.tbPage3.ResumeLayout(False)
Me.tbPage3.PerformLayout()
Me.tbPage3a.ResumeLayout(False)
Me.tbPage3a.PerformLayout()
Me.grpFileTypes.ResumeLayout(False)
Me.grpFileTypes.PerformLayout()
Me.tbPage4.ResumeLayout(False)
Me.tbPage4.PerformLayout()
Me.grpExclude.ResumeLayout(False)
Me.grpExclude.PerformLayout()
Me.tbPage5.ResumeLayout(False)
Me.tbPage5.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents tabWizard As System.Windows.Forms.TabControl
Friend WithEvents tbPage1 As System.Windows.Forms.TabPage
Friend WithEvents tbPage2 As System.Windows.Forms.TabPage
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents btnNext As System.Windows.Forms.Button
Friend WithEvents btnBack As System.Windows.Forms.Button
Friend WithEvents tbPage3 As System.Windows.Forms.TabPage
Friend WithEvents tbPage3a As System.Windows.Forms.TabPage
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
Friend WithEvents tbPage5 As System.Windows.Forms.TabPage
Friend WithEvents lblDrag1 As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label
Friend WithEvents lblDrag2 As System.Windows.Forms.Label
Friend WithEvents btnProcessBrowse As System.Windows.Forms.Button
Friend WithEvents txtProcessPath As System.Windows.Forms.TextBox
Friend WithEvents lblStep2Intro As System.Windows.Forms.Label
Friend WithEvents chkTimeStamp As System.Windows.Forms.CheckBox
Friend WithEvents chkFolderSave As System.Windows.Forms.CheckBox
Friend WithEvents btnSaveBrowse As System.Windows.Forms.Button
Friend WithEvents txtSavePath As System.Windows.Forms.TextBox
Friend WithEvents lblStep3Intro As System.Windows.Forms.Label
Friend WithEvents btnFileTypeBrowse As System.Windows.Forms.Button
Friend WithEvents txtFileTypes As System.Windows.Forms.TextBox
Friend WithEvents btnExcludeBrowse As System.Windows.Forms.Button
Friend WithEvents txtExcludeList As System.Windows.Forms.TextBox
Friend WithEvents optSpecificFile As System.Windows.Forms.RadioButton
Friend WithEvents optFileType As System.Windows.Forms.RadioButton
Friend WithEvents lblStep3aInstructions As System.Windows.Forms.Label
Friend WithEvents optExcludeFolder As System.Windows.Forms.RadioButton
Friend WithEvents optExcludeFileType As System.Windows.Forms.RadioButton
Friend WithEvents lblStep4Instructions As System.Windows.Forms.Label
Friend WithEvents optExcludeSpecificFile As System.Windows.Forms.RadioButton
Friend WithEvents lblStep3Instructions As System.Windows.Forms.Label
Friend WithEvents lstSummary As System.Windows.Forms.ListView
Friend WithEvents lblStep1Title As System.Windows.Forms.Label
Friend WithEvents lblStep2Title As System.Windows.Forms.Label
Friend WithEvents lblStep3Title As System.Windows.Forms.Label
Friend WithEvents lblStep4Title As System.Windows.Forms.Label
Friend WithEvents lblStep3aTitle As System.Windows.Forms.Label
Friend WithEvents lblStep5Intro As System.Windows.Forms.Label
Friend WithEvents lblStep5Title As System.Windows.Forms.Label
Friend WithEvents btnStep3aClear As System.Windows.Forms.Button
Friend WithEvents btnStep4Clear As System.Windows.Forms.Button
Friend WithEvents grpExclude As System.Windows.Forms.GroupBox
Friend WithEvents grpFileTypes As System.Windows.Forms.GroupBox
Friend WithEvents lbldBox As System.Windows.Forms.Label
Friend WithEvents btndBoxBrowse As System.Windows.Forms.Button
Friend WithEvents txtdBoxProcess As System.Windows.Forms.TextBox
Friend WithEvents optFileTypeFolder As RadioButton
End Class
+123
View File
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="lblStep4Instructions.Text" xml:space="preserve">
<value>Choose any file types, specific files or folders you wish to exclude from the backup. You may choose multiple items to exclude. A more advanced exclude list can be created manually via the Game Manager. This step can be skipped.</value>
</data>
</root>
+639
View File
@@ -0,0 +1,639 @@
Imports System.IO
Public Class frmAddWizard
Private oGameData As Hashtable
Private oGameToSave As clsGame
Private bDisableAdminWarning As Boolean = False
Private bIsDOSBoxGame As Boolean
Property GameData As Hashtable
Get
Return oGameData
End Get
Set(value As Hashtable)
oGameData = value
End Set
End Property
Private Enum eSteps As Integer
Step1 = 1
Step2 = 2
Step3 = 3
Step3a = 4
Step4 = 5
Step5 = 6
End Enum
Private eCurrentStep As eSteps = eSteps.Step1
Private Sub FormInit()
btndBoxBrowse.Visible = False
txtdBoxProcess.Visible = False
lbldBox.Visible = False
chkFolderSave.Checked = True
chkTimeStamp.Checked = False
optFileType.Checked = True
optExcludeFileType.Checked = True
StepHandler()
End Sub
Private Function StringEmptyText(ByVal sString As String) As String
If sString = String.Empty Then
Return "None"
Else
Return sString
End If
End Function
Private Function BuildSummaryAndData() As clsGame
Dim oGame As New clsGame
Dim sName As String = txtName.Text
Dim sProcessFullPath As String = txtProcessPath.Text
Dim sProcessPath As String = Path.GetDirectoryName(sProcessFullPath)
Dim sProcess As String = Path.GetFileNameWithoutExtension(sProcessFullPath)
Dim sProcessSummaryText As String = Path.GetFileName(sProcessFullPath) & " (" & sProcessPath & ")"
Dim sdBoxProcessFullPath As String = String.Empty
Dim sdBoxProcessPath As String = String.Empty
Dim sdBoxProcess As String = String.Empty
Dim sdBoxProcessSummaryText As String = String.Empty
Dim sSavePath As String = txtSavePath.Text
Dim bIsAbsolute As Boolean = mgrPath.IsAbsolute(sSavePath)
Dim bFolderBackup As Boolean = chkFolderSave.Checked
Dim bTimeStamp As Boolean = chkTimeStamp.Checked
Dim sFileType As String = txtFileTypes.Text
Dim sExcludeList As String = txtExcludeList.Text
Dim sItem As String()
Dim sItems As String()
Dim sValues As String()
Dim lstItem As ListViewItem
If Not bIsAbsolute Then
sSavePath = mgrPath.DetermineRelativePath(sProcessPath, sSavePath)
End If
If bIsDOSBoxGame Then
sdBoxProcessFullPath = txtdBoxProcess.Text
sdBoxProcessPath = Path.GetDirectoryName(sdBoxProcessFullPath)
sdBoxProcess = Path.GetFileNameWithoutExtension(sdBoxProcessFullPath)
sdBoxProcessSummaryText = Path.GetFileName(sdBoxProcessFullPath) & " (" & sdBoxProcessPath & ")"
sProcess = sProcess.ToLower & ":" & sdBoxProcess
End If
'Build Summary Listview
lstSummary.Clear()
lstSummary.Columns.Add("Item")
lstSummary.Columns.Add("Value")
lstSummary.Columns(0).Width = 95
lstSummary.Columns(1).Width = 210
sItems = {"Name", "Process", "DOS Process", "Absolute Path", "Save Path", "Folder Backup", "Specific Files", "Time Stamp", "Exclude List"}
sValues = {sName, sProcessSummaryText, StringEmptyText(sdBoxProcessSummaryText), mgrCommon.BooleanYesNo(bIsAbsolute), sSavePath, mgrCommon.BooleanYesNo(bFolderBackup), StringEmptyText(sFileType), mgrCommon.BooleanYesNo(bTimeStamp), StringEmptyText(sExcludeList)}
For i = 0 To sItems.Length - 1
sItem = {sItems(i), sValues(i)}
lstItem = New ListViewItem(sItem)
lstSummary.Items.Add(lstItem)
Next
'Build Save Object
oGame.Name = sName
oGame.ProcessName = sProcess
oGame.Path = sSavePath
oGame.AbsolutePath = bIsAbsolute
oGame.FolderSave = bFolderBackup
oGame.FileType = sFileType
oGame.AppendTimeStamp = bTimeStamp
oGame.ExcludeList = sExcludeList
Return oGame
End Function
Private Sub StepHandler()
Select Case eCurrentStep
Case eSteps.Step1
btnBack.Enabled = False
btnNext.Enabled = True
tabWizard.SelectTab(0)
Case eSteps.Step2
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(1)
Case eSteps.Step3
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(2)
Case eSteps.Step3a
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(3)
Case eSteps.Step4
btnBack.Enabled = True
btnNext.Enabled = True
btnNext.Text = "&Next"
tabWizard.SelectTab(4)
Case eSteps.Step5
btnBack.Enabled = True
btnNext.Text = "&Finish"
tabWizard.SelectTab(5)
End Select
End Sub
Private Function ValidateName(ByVal strName As String, ByRef sErrorMessage As String) As Boolean
If txtName.Text <> String.Empty Then
txtName.Text = mgrPath.ValidateForFileSystem(txtName.Text)
Return True
Else
sErrorMessage = "You must enter a valid game name."
txtName.Focus()
Return False
End If
Return True
End Function
Private Function CheckforDOSBox(ByVal strpath As String) As Boolean
If strpath.ToLower.Contains("dosbox.exe") Then
bIsDOSBoxGame = True
lbldBox.Visible = True
txtdBoxProcess.Visible = True
btndBoxBrowse.Visible = True
If txtdBoxProcess.Text = String.Empty Then
If MsgBox("You have selected a DOSBox executable, to monitor DOS programs you need to also select the actual DOS executable file." & vbCrLf & vbCrLf & "Would you like to do this now?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
DOSProcessBrowse()
End If
End If
Return True
Else
bIsDOSBoxGame = False
lbldBox.Visible = False
txtdBoxProcess.Text = String.Empty
txtdBoxProcess.Visible = False
btndBoxBrowse.Visible = False
Return False
End If
End Function
Private Function ValidateDOSProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = "You must select the DOS game's executable file (.exe or .com) to continue."
txtProcessPath.Focus()
Return False
End If
If Path.GetExtension(strPath.ToLower) <> ".exe" And Path.GetExtension(strPath.ToLower) <> ".com" Then
sErrorMessage = "The DOS file you selected is not an executable file. (.exe or .com)"
txtProcessPath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The path to the DOS executable must be a full path."
txtProcessPath.Focus()
Return False
End If
If Not File.Exists(strPath) Then
sErrorMessage = "The selected DOS executable file does not exist."
txtProcessPath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateProcessPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = "You must select the game's executable file (.exe) to continue."
txtProcessPath.Focus()
Return False
End If
If Path.GetExtension(strPath.ToLower) <> ".exe" Then
sErrorMessage = "The file you selected is not an executable file."
txtProcessPath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The path to the executable must be a full path."
txtProcessPath.Focus()
Return False
End If
If Not File.Exists(strPath) Then
sErrorMessage = "The selected executable file does not exist."
txtProcessPath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateSavePath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = "You must select the game's save file path to continue."
txtSavePath.Focus()
Return False
End If
If Not Directory.Exists(strPath) Then
sErrorMessage = "The folder you selected does not exist or is not a valid folder."
txtSavePath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The selected path must be a full path."
txtSavePath.Focus()
Return False
End If
Return True
End Function
Private Function ValidateSaveType(ByVal strSaveType As String, ByRef sErrorMessage As String)
If strSaveType = String.Empty Then
sErrorMessage = "You must choose a file type or specific file to backup."
txtFileTypes.Focus()
Return False
End If
Return True
End Function
Private Sub DoSave()
Dim oGames As New List(Of clsGame)
Dim hshDupeCheck As New Hashtable
Dim sExistingGame As String
Dim sNewGame As String = oGameToSave.Name & ":" & oGameToSave.ProcessName
For Each o As clsGame In GameData.Values
oGames.Add(o)
sExistingGame = o.Name & ":" & o.ProcessName
hshDupeCheck.Add(sExistingGame, String.Empty)
Next
If hshDupeCheck.Contains(sNewGame) Then
MsgBox("The monitor list already contains a game with this exact name and process.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
Else
mgrMonitorList.DoListAdd(oGameToSave)
MsgBox(oGameToSave.Name & " has been added to the monitor list.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
Me.Close()
End If
End Sub
Private Sub ValidateBack()
Select Case eCurrentStep
Case eSteps.Step2
eCurrentStep = eSteps.Step1
Case eSteps.Step3
eCurrentStep = eSteps.Step2
Case eSteps.Step3a
eCurrentStep = eSteps.Step3
Case eSteps.Step4
If chkFolderSave.Checked Then
eCurrentStep = eSteps.Step3
Else
eCurrentStep = eSteps.Step3a
End If
Case eSteps.Step5
eCurrentStep = eSteps.Step4
End Select
StepHandler()
End Sub
Private Sub ValidateNext()
Dim bError As Boolean = False
Dim sErrorMessage As String = String.Empty
Select Case eCurrentStep
Case eSteps.Step1
If ValidateName(txtName.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step2
Else
bError = True
End If
Case eSteps.Step2
If ValidateProcessPath(txtProcessPath.Text, sErrorMessage) Then
If CheckforDOSBox(txtProcessPath.Text) Then
If ValidateDOSProcessPath(txtdBoxProcess.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step3
Else
bError = True
End If
Else
eCurrentStep = eSteps.Step3
End If
Else
bError = True
End If
Case eSteps.Step3
If ValidateSavePath(txtSavePath.Text, sErrorMessage) Then
If chkFolderSave.Checked = False Then
eCurrentStep = eSteps.Step3a
Else
eCurrentStep = eSteps.Step4
End If
Else
bError = True
End If
Case eSteps.Step3a
If ValidateSaveType(txtFileTypes.Text, sErrorMessage) Then
eCurrentStep = eSteps.Step4
Else
bError = True
End If
Case eSteps.Step4
oGameToSave = BuildSummaryAndData()
eCurrentStep = eSteps.Step5
Case eSteps.Step5
DoSave()
End Select
If bError Then MsgBox(sErrorMessage, MsgBoxStyle.Exclamation, "Game Backup Monitor")
StepHandler()
End Sub
Private Sub ReadShortcut(ByVal sLinkPath As String)
Dim oShell As Shell32.Shell
Dim oFolder As Shell32.Folder
Dim sDirectory As String = Path.GetDirectoryName(sLinkPath)
Dim sFile As String = Path.GetFileName(sLinkPath)
Dim sExtension As String = Path.GetExtension(sFile)
Dim sTemp As String
If sExtension = ".lnk" Then
Try
oShell = New Shell32.Shell
oFolder = oShell.NameSpace(sDirectory)
If (Not oFolder Is Nothing) Then
Dim oFolderItem As Shell32.FolderItem
oFolderItem = oFolder.ParseName(sFile)
If (Not oFolderItem Is Nothing) Then
Dim oShellLink As Shell32.ShellLinkObject
oShellLink = oFolderItem.GetLink
If (Not oShellLink Is Nothing) Then
If eCurrentStep = eSteps.Step1 Then
txtName.Text = System.IO.Path.GetFileNameWithoutExtension(sFile)
txtProcessPath.Text = oShellLink.Target.Path
Else
txtProcessPath.Text = oShellLink.Target.Path
End If
End If
oShellLink = Nothing
End If
oFolderItem = Nothing
End If
oFolder = Nothing
oShell = Nothing
Catch e1 As Exception
If e1.Message.Contains("E_ACCESSDENIED") Then
sTemp = Path.GetTempPath & Path.GetFileName(sFile)
Try
File.Copy(sLinkPath, sTemp, True)
ReadShortcut(sTemp)
File.Delete(sTemp)
Catch e2 As Exception
MsgBox("An error occured working with the shortcut file." & vbCrLf & vbCrLf & e2.Message, MsgBoxStyle.Critical, "Game Backup Monitor")
End Try
Else
MsgBox("An error occured reading the shortcut file." & vbCrLf & vbCrLf & e1.Message, MsgBoxStyle.Critical, "Game Backup Monitor")
End If
End Try
Else
MsgBox("This file is not a shorcut.")
End If
End Sub
Private Sub DOSProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String
Dim sNewPath As String
If txtProcessPath.Text <> String.Empty Then
sCurrentPath = Path.GetDirectoryName(txtProcessPath.Text)
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFileBrowser("Choose DOS executable file that starts the game", "*", _
"", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtdBoxProcess.Text = sNewPath
End Sub
Private Sub ProcessBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sCurrentPath As String
Dim sNewPath As String
If txtProcessPath.Text <> String.Empty Then
sCurrentPath = Path.GetDirectoryName(txtProcessPath.Text)
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFileBrowser("Choose exe file that starts the game", "exe", _
"Executable", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtProcessPath.Text = sNewPath
End Sub
Private Sub SavePathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtSavePath.Text
Dim sNewPath As String
If txtSavePath.Text <> String.Empty Then
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose the game save folder:", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtSavePath.Text = sNewPath
End Sub
Private Sub SaveTypeBrowse()
Dim sDefaultFolder As String = txtSavePath.Text
Dim sCurrentSaveType As String = txtFileTypes.Text
Dim sSaveType As String
Dim sTitle As String = String.Empty
Dim sSaveTypeList As String()
If optFileType.Checked Then
sTitle = "Choose the type of file to backup"
ElseIf optSpecificFile.Checked Then
sTitle = "Choose a specific file to backup"
Else
sTitle = "Choose a specific folder to backup"
End If
If optFileType.Checked Or optSpecificFile.Checked Then
sSaveType = mgrCommon.OpenFileBrowser(sTitle, "*", "All", sDefaultFolder, False)
If sSaveType <> String.Empty Then
sSaveTypeList = sSaveType.Split("|")
For Each s As String In sSaveTypeList
If optFileType.Checked Then
sSaveType = "*" & Path.GetExtension(s) & ":"
Else
sSaveType = Path.GetFileName(s) & ":"
End If
sSaveType = sSaveType.TrimEnd(":")
If sCurrentSaveType <> String.Empty Then
sCurrentSaveType &= ":" & sSaveType
Else
sCurrentSaveType = sSaveType
End If
Next
End If
Else
sSaveType = mgrCommon.OpenFolderBrowser(sTitle, sDefaultFolder, False)
If sSaveType <> String.Empty Then
Dim sPath As String() = sSaveType.Split("\")
If sCurrentSaveType <> String.Empty Then
sCurrentSaveType &= ":" & sPath(sPath.Length - 1)
Else
sCurrentSaveType = sPath(sPath.Length - 1)
End If
End If
End If
txtFileTypes.Text = sCurrentSaveType
End Sub
Private Sub ExcludeBrowse()
Dim sDefaultFolder As String = txtSavePath.Text
Dim sCurrentExclude As String = txtExcludeList.Text
Dim sExclude As String
Dim sExcludeList As String()
Dim sTitle As String = String.Empty
If optExcludeFileType.Checked Then
sTitle = "Choose the type of file(s) to exclude"
ElseIf optExcludeSpecificFile.Checked Then
sTitle = "Choose any file(s) to exclude"
Else
sTitle = "Choose a folder to exclude"
End If
If optExcludeFileType.Checked Or optExcludeSpecificFile.Checked Then
sExclude = mgrCommon.OpenFileBrowser(sTitle, "*", "All", sDefaultFolder, True)
If sExclude <> String.Empty Then
sExcludeList = sExclude.Split("|")
For Each s As String In sExcludeList
If optExcludeFileType.Checked Then
sExclude = "*" & Path.GetExtension(s) & ":"
Else
sExclude = Path.GetFileName(s) & ":"
End If
sExclude = sExclude.TrimEnd(":")
If sCurrentExclude <> String.Empty Then
sCurrentExclude &= ":" & sExclude
Else
sCurrentExclude = sExclude
End If
Next
End If
Else
sExclude = mgrCommon.OpenFolderBrowser(sTitle, sDefaultFolder, False)
If sExclude <> String.Empty Then
Dim sPath As String() = sExclude.Split("\")
If sCurrentExclude <> String.Empty Then
sCurrentExclude &= ":" & sPath(sPath.Length - 1)
Else
sCurrentExclude = sPath(sPath.Length - 1)
End If
End If
End If
If sCurrentExclude <> String.Empty Then
txtExcludeList.Text = sCurrentExclude
End If
End Sub
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
ValidateBack()
End Sub
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
ValidateNext()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmAddWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FormInit()
End Sub
Private Sub DropTarget_DragEnter(sender As Object, e As DragEventArgs) Handles lblDrag1.DragEnter, lblDrag2.DragEnter, txtName.DragEnter, txtProcessPath.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Copy
End If
End Sub
Private Sub DropTarget_DragDrop(sender As Object, e As DragEventArgs) Handles lblDrag1.DragDrop, lblDrag2.DragDrop, txtName.DragDrop, txtProcessPath.DragDrop
Dim oFiles() As String = e.Data.GetData(DataFormats.FileDrop)
For Each sPath In oFiles
ReadShortcut(sPath)
Next
End Sub
Private Sub btndBoxBrowse_Click(sender As Object, e As EventArgs) Handles btndBoxBrowse.Click
DOSProcessBrowse()
End Sub
Private Sub btnProcessBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
ProcessBrowse()
End Sub
Private Sub btnSaveBrowse_Click(sender As Object, e As EventArgs) Handles btnSaveBrowse.Click
SavePathBrowse()
End Sub
Private Sub btnFileTypeBrowse_Click(sender As Object, e As EventArgs) Handles btnFileTypeBrowse.Click
SaveTypeBrowse()
End Sub
Private Sub btnExcludeBrowse_Click(sender As Object, e As EventArgs) Handles btnExcludeBrowse.Click
ExcludeBrowse()
End Sub
Private Sub btnStep4Clear_Click(sender As Object, e As EventArgs) Handles btnStep4Clear.Click
txtExcludeList.Clear()
End Sub
Private Sub btnStep3aClear_Click(sender As Object, e As EventArgs) Handles btnStep3aClear.Click
txtFileTypes.Clear()
End Sub
Private Sub chkFolderSave_CheckedChanged(sender As Object, e As EventArgs) Handles chkFolderSave.CheckedChanged
txtFileTypes.Clear()
End Sub
End Class
+115
View File
@@ -0,0 +1,115 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmAdvancedImport
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.lstGames = New System.Windows.Forms.CheckedListBox()
Me.btnImport = New System.Windows.Forms.Button()
Me.chkSelectAll = New System.Windows.Forms.CheckBox()
Me.lblGames = New System.Windows.Forms.Label()
Me.lblSelected = New System.Windows.Forms.Label()
Me.btnCancel = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'lstGames
'
Me.lstGames.CheckOnClick = True
Me.lstGames.FormattingEnabled = True
Me.lstGames.Location = New System.Drawing.Point(12, 30)
Me.lstGames.Name = "lstGames"
Me.lstGames.Size = New System.Drawing.Size(335, 334)
Me.lstGames.Sorted = True
Me.lstGames.TabIndex = 1
'
'btnImport
'
Me.btnImport.Location = New System.Drawing.Point(191, 370)
Me.btnImport.Name = "btnImport"
Me.btnImport.Size = New System.Drawing.Size(75, 23)
Me.btnImport.TabIndex = 2
Me.btnImport.Text = "&Import"
Me.btnImport.UseVisualStyleBackColor = True
'
'chkSelectAll
'
Me.chkSelectAll.AutoSize = True
Me.chkSelectAll.Location = New System.Drawing.Point(15, 12)
Me.chkSelectAll.Name = "chkSelectAll"
Me.chkSelectAll.Size = New System.Drawing.Size(15, 14)
Me.chkSelectAll.TabIndex = 0
Me.chkSelectAll.UseVisualStyleBackColor = True
'
'lblGames
'
Me.lblGames.Location = New System.Drawing.Point(12, 12)
Me.lblGames.Name = "lblGames"
Me.lblGames.Size = New System.Drawing.Size(335, 14)
Me.lblGames.TabIndex = 0
Me.lblGames.Text = "Games"
Me.lblGames.TextAlign = System.Drawing.ContentAlignment.TopCenter
'
'lblSelected
'
Me.lblSelected.AutoSize = True
Me.lblSelected.Location = New System.Drawing.Point(9, 375)
Me.lblSelected.Name = "lblSelected"
Me.lblSelected.Size = New System.Drawing.Size(77, 13)
Me.lblSelected.TabIndex = 0
Me.lblSelected.Text = "Selected Items"
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(272, 370)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 3
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'frmAdvancedImport
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(359, 402)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.lblSelected)
Me.Controls.Add(Me.chkSelectAll)
Me.Controls.Add(Me.btnImport)
Me.Controls.Add(Me.lstGames)
Me.Controls.Add(Me.lblGames)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmAdvancedImport"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Import Game Configurations"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents lstGames As System.Windows.Forms.CheckedListBox
Friend WithEvents btnImport As System.Windows.Forms.Button
Friend WithEvents chkSelectAll As System.Windows.Forms.CheckBox
Friend WithEvents lblGames As System.Windows.Forms.Label
Friend WithEvents lblSelected As System.Windows.Forms.Label
Friend WithEvents btnCancel As System.Windows.Forms.Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+83
View File
@@ -0,0 +1,83 @@
Public Class frmAdvancedImport
Private hshImportData As Hashtable
Private bSelectAll As Boolean = False
Private bIsLoading As Boolean = False
Public Property ImportData As Hashtable
Set(value As Hashtable)
hshImportData = value
End Set
Get
Return hshImportData
End Get
End Property
Private Sub SelectToggle()
bSelectAll = Not bSelectAll
For i As Integer = 0 To lstGames.Items.Count - 1
lstGames.SetItemChecked(i, bSelectAll)
Next
UpdateSelected()
End Sub
Private Sub LoadData()
Dim oApp As clsGame
Dim oData As KeyValuePair(Of String, String)
lstGames.ValueMember = "Key"
lstGames.DisplayMember = "Value"
For Each de As DictionaryEntry In ImportData
oApp = DirectCast(de.Value, clsGame)
oData = New KeyValuePair(Of String, String)(oApp.ProcessName, oApp.Name & " (" & oApp.TrueProcess & ")")
lstGames.Items.Add(oData)
Next
End Sub
Private Sub SetForm()
chkSelectAll.Checked = True
lblGames.Text = ImportData.Count & " new configurations available."
End Sub
Private Sub BuildList()
Dim oData As KeyValuePair(Of String, String)
For i As Integer = 0 To lstGames.Items.Count - 1
If Not lstGames.GetItemChecked(i) Then
oData = lstGames.Items(i)
ImportData.Remove(oData.Key)
End If
Next
End Sub
Private Sub UpdateSelected()
lblSelected.Text = lstGames.CheckedItems.Count & " Selected"
End Sub
Private Sub frmAdvancedImport_Load(sender As Object, e As EventArgs) Handles MyBase.Load
bIsLoading = True
SetForm()
LoadData()
SelectToggle()
bIsLoading = False
End Sub
Private Sub chkSelectAll_CheckedChanged(sender As Object, e As EventArgs) Handles chkSelectAll.CheckedChanged
If Not bIsLoading Then SelectToggle()
End Sub
Private Sub lstGames_SelectedValueChanged(sender As Object, e As EventArgs) Handles lstGames.SelectedValueChanged
If Not bIsLoading Then UpdateSelected()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
BuildList()
If ImportData.Count > 0 Then Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
End Sub
End Class
+78
View File
@@ -0,0 +1,78 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmChooseGame
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.lblChoose = New System.Windows.Forms.Label()
Me.btnChoose = New System.Windows.Forms.Button()
Me.lstGameBox = New System.Windows.Forms.ListBox()
Me.SuspendLayout()
'
'lblChoose
'
Me.lblChoose.AutoSize = True
Me.lblChoose.Location = New System.Drawing.Point(12, 9)
Me.lblChoose.Name = "lblChoose"
Me.lblChoose.Size = New System.Drawing.Size(209, 13)
Me.lblChoose.TabIndex = 0
Me.lblChoose.Text = "Please choose the game you were playing:"
'
'btnChoose
'
Me.btnChoose.Location = New System.Drawing.Point(124, 135)
Me.btnChoose.Name = "btnChoose"
Me.btnChoose.Size = New System.Drawing.Size(119, 23)
Me.btnChoose.TabIndex = 2
Me.btnChoose.Text = "C&hoose Game"
Me.btnChoose.UseVisualStyleBackColor = True
'
'lstGameBox
'
Me.lstGameBox.FormattingEnabled = True
Me.lstGameBox.Location = New System.Drawing.Point(15, 34)
Me.lstGameBox.Name = "lstGameBox"
Me.lstGameBox.Size = New System.Drawing.Size(228, 95)
Me.lstGameBox.TabIndex = 1
'
'frmChooseGame
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(255, 166)
Me.Controls.Add(Me.lstGameBox)
Me.Controls.Add(Me.btnChoose)
Me.Controls.Add(Me.lblChoose)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmChooseGame"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Choose Game"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents lblChoose As System.Windows.Forms.Label
Friend WithEvents btnChoose As System.Windows.Forms.Button
Friend WithEvents lstGameBox As System.Windows.Forms.ListBox
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+68
View File
@@ -0,0 +1,68 @@
Public Class frmChooseGame
Private oProcess As mgrProcesses
Private oGame As clsGame
Private oGamesList As New List(Of KeyValuePair(Of String, String))
Private oGamesHash As New Hashtable
Private bGameSelected As Boolean = False
Property Process As mgrProcesses
Get
Return oProcess
End Get
Set(value As mgrProcesses)
oProcess = value
End Set
End Property
Property Game As clsGame
Get
Return oGame
End Get
Set(value As clsGame)
oGame = value
End Set
End Property
Private Sub FillComboBox()
For Each o As clsGame In Process.DuplicateList
oGamesList.Add(New KeyValuePair(Of String, String)(o.ID, o.Name))
oGamesHash.Add(o.ID, o)
Next
lstGameBox.DataSource = oGamesList
lstGameBox.ValueMember = "key"
lstGameBox.DisplayMember = "value"
lstGameBox.SelectedIndex = 0
End Sub
Private Sub SaveSelection()
oGame.ProcessPath = oProcess.GameInfo.ProcessPath
mgrMonitorList.DoListUpdate(oGame)
End Sub
Private Sub GetSelection()
Dim sSelectedGame As String
sSelectedGame = CStr(lstGameBox.SelectedValue)
oGame = DirectCast(oGamesHash.Item(sSelectedGame), clsGame)
SaveSelection()
bGameSelected = True
Me.Close()
End Sub
Private Sub frmChooseGame_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
FillComboBox()
Me.Focus()
End Sub
Private Sub btnChoose_Click(sender As System.Object, e As System.EventArgs) Handles btnChoose.Click
GetSelection()
End Sub
Private Sub frmChooseGame_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If bGameSelected = False Then
e.Cancel = True
End If
End Sub
End Class
+84
View File
@@ -0,0 +1,84 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmFileFolderSearch
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.pgbProgress = New System.Windows.Forms.ProgressBar()
Me.txtCurrentLocation = New System.Windows.Forms.TextBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.bwSearch = New System.ComponentModel.BackgroundWorker()
Me.SuspendLayout()
'
'pgbProgress
'
Me.pgbProgress.Location = New System.Drawing.Point(12, 12)
Me.pgbProgress.MarqueeAnimationSpeed = 0
Me.pgbProgress.Name = "pgbProgress"
Me.pgbProgress.Size = New System.Drawing.Size(460, 23)
Me.pgbProgress.TabIndex = 0
'
'txtCurrentLocation
'
Me.txtCurrentLocation.Location = New System.Drawing.Point(12, 43)
Me.txtCurrentLocation.Name = "txtCurrentLocation"
Me.txtCurrentLocation.ReadOnly = True
Me.txtCurrentLocation.Size = New System.Drawing.Size(379, 20)
Me.txtCurrentLocation.TabIndex = 0
Me.txtCurrentLocation.TabStop = False
'
'btnCancel
'
Me.btnCancel.Location = New System.Drawing.Point(397, 41)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 0
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'bwSearch
'
Me.bwSearch.WorkerSupportsCancellation = True
'
'frmFileFolderSearch
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(484, 77)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.txtCurrentLocation)
Me.Controls.Add(Me.pgbProgress)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmFileFolderSearch"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Search"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents pgbProgress As System.Windows.Forms.ProgressBar
Friend WithEvents txtCurrentLocation As System.Windows.Forms.TextBox
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents bwSearch As System.ComponentModel.BackgroundWorker
End Class
+123
View File
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bwSearch.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
+178
View File
@@ -0,0 +1,178 @@
Imports System.IO
Public Class frmFileFolderSearch
Private sSearchItem As String
Private bIsFolder As Boolean
Private sFoundItem As String
Private oDrives As List(Of DriveInfo)
Private iCurrentDrive As Integer
Private oSearchDrive As DirectoryInfo
Dim bShutdown As Boolean = False
Delegate Sub UpdateInfoCallBack(ByVal sCurrentFolder As String)
Public Property SearchItem As String
Get
Return sSearchItem
End Get
Set(value As String)
sSearchItem = value
End Set
End Property
Public Property FolderSearch As Boolean
Get
Return bIsFolder
End Get
Set(value As Boolean)
bIsFolder = value
End Set
End Property
Public Property FoundItem As String
Get
Return sFoundItem
End Get
Set(value As String)
sFoundItem = value
End Set
End Property
Private Sub UpdateInfo(ByVal sCurrentFolder As String)
If txtCurrentLocation.InvokeRequired = True Then
Dim d As New UpdateInfoCallBack(AddressOf UpdateInfo)
Me.Invoke(d, New Object() {sCurrentFolder})
Else
txtCurrentLocation.Text = sCurrentFolder
End If
End Sub
Private Function SearchDirectory(ByVal dir As DirectoryInfo, ByVal sDirectoryName As String) As String
Dim sSubSearch As String = String.Empty
If bwSearch.CancellationPending Then
Return "Cancel"
End If
UpdateInfo(dir.FullName)
Try
'Search Current Directory
If dir.GetDirectories(sDirectoryName).Length > 0 Then
Return dir.FullName & "\" & sDirectoryName
End If
'Search Sub Directory
Dim subdirs() As DirectoryInfo = dir.GetDirectories("*")
For Each newDir As DirectoryInfo In subdirs
sSubSearch = SearchDirectory(newDir, sDirectoryName)
If sSubSearch <> String.Empty Then
Return sSubSearch
End If
Next
Catch e As System.UnauthorizedAccessException
'Do Nothing
Catch e As Exception
'Do Nothing
End Try
Return sSubSearch
End Function
Private Function SearchFile(ByVal dir As DirectoryInfo, ByVal sFileName As String) As String
Dim sSubSearch As String = String.Empty
If bwSearch.CancellationPending Then
Return "Cancel"
End If
UpdateInfo(dir.FullName)
Try
'Search Current Directory
If dir.GetFiles(sFileName).Length > 0 Then
Return dir.FullName & "\" & sFileName
End If
'Search Sub Directory
Dim subdirs() As DirectoryInfo = dir.GetDirectories("*")
For Each newDir As DirectoryInfo In subdirs
sSubSearch = SearchFile(newDir, sFileName)
If sSubSearch <> String.Empty Then
Return sSubSearch
End If
Next
Catch e As System.UnauthorizedAccessException
'Do Nothing
Catch e As Exception
'Do Nothing
End Try
Return sSubSearch
End Function
Private Sub GetDrives()
oDrives = New List(Of DriveInfo)
For Each oDrive As DriveInfo In My.Computer.FileSystem.Drives
If oDrive.DriveType = IO.DriveType.Fixed Then
oDrives.Add(oDrive)
End If
Next
End Sub
Private Sub Search(ByVal oDrive As DriveInfo)
pgbProgress.Style = ProgressBarStyle.Marquee
pgbProgress.MarqueeAnimationSpeed = 5
oSearchDrive = oDrive.RootDirectory
bwSearch.RunWorkerAsync()
iCurrentDrive += 1
End Sub
Private Sub EndSearch()
Dim oResult As MsgBoxResult
pgbProgress.MarqueeAnimationSpeed = 0
If FoundItem = "Cancel" Then FoundItem = String.Empty
If oDrives.Count > iCurrentDrive And FoundItem = String.Empty Then
oResult = MsgBox("The location was not found on the " & oSearchDrive.Root.ToString & _
" drive. Do you wish to search the " & oDrives(iCurrentDrive).RootDirectory.ToString & _
" drive?", MsgBoxStyle.YesNo, "Game Backup Monitor")
If oResult = MsgBoxResult.Yes Then
Search(oDrives(iCurrentDrive))
Else
bShutdown = True
Me.Close()
End If
Else
bShutdown = True
Me.Close()
End If
End Sub
Private Sub frmFileFolderSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GetDrives()
Search(oDrives(iCurrentDrive))
End Sub
Private Sub bwSearch_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bwSearch.DoWork
If bIsFolder Then
FoundItem = SearchDirectory(oSearchDrive, sSearchItem)
Else
FoundItem = SearchFile(oSearchDrive, sSearchItem)
End If
End Sub
Private Sub bwSearch_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwSearch.RunWorkerCompleted
EndSearch()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
bwSearch.CancelAsync()
End Sub
Private Sub frmFileFolderSearch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
bwSearch.CancelAsync()
If Not bShutdown Then e.Cancel = True
End Sub
End Class
+745
View File
@@ -0,0 +1,745 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmGameManager
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.btnAdd = New System.Windows.Forms.Button()
Me.btnDelete = New System.Windows.Forms.Button()
Me.btnBackup = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpConfig = New System.Windows.Forms.GroupBox()
Me.txtID = New System.Windows.Forms.TextBox()
Me.lblExclude = New System.Windows.Forms.Label()
Me.lblFileType = New System.Windows.Forms.Label()
Me.btnSavePathBrowse = New System.Windows.Forms.Button()
Me.btnProcessBrowse = New System.Windows.Forms.Button()
Me.lblSavePath = New System.Windows.Forms.Label()
Me.lblProcess = New System.Windows.Forms.Label()
Me.lblName = New System.Windows.Forms.Label()
Me.txtExclude = New System.Windows.Forms.TextBox()
Me.txtFileType = New System.Windows.Forms.TextBox()
Me.chkTimeStamp = New System.Windows.Forms.CheckBox()
Me.chkFolderSave = New System.Windows.Forms.CheckBox()
Me.txtSavePath = New System.Windows.Forms.TextBox()
Me.txtProcess = New System.Windows.Forms.TextBox()
Me.txtName = New System.Windows.Forms.TextBox()
Me.chkMonitorOnly = New System.Windows.Forms.CheckBox()
Me.grpExtra = New System.Windows.Forms.GroupBox()
Me.btnIconBrowse = New System.Windows.Forms.Button()
Me.txtIcon = New System.Windows.Forms.TextBox()
Me.lblVersion = New System.Windows.Forms.Label()
Me.txtVersion = New System.Windows.Forms.TextBox()
Me.txtCompany = New System.Windows.Forms.TextBox()
Me.lblCompany = New System.Windows.Forms.Label()
Me.pbIcon = New System.Windows.Forms.PictureBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.btnAppPathBrowse = New System.Windows.Forms.Button()
Me.lblGamePath = New System.Windows.Forms.Label()
Me.txtAppPath = New System.Windows.Forms.TextBox()
Me.nudHours = New System.Windows.Forms.NumericUpDown()
Me.lblHours = New System.Windows.Forms.Label()
Me.grpStats = New System.Windows.Forms.GroupBox()
Me.btnOpenRestorePath = New System.Windows.Forms.Button()
Me.btnOpenBackupFile = New System.Windows.Forms.Button()
Me.txtFileSize = New System.Windows.Forms.TextBox()
Me.btnDeleteBackup = New System.Windows.Forms.Button()
Me.lblFileSize = New System.Windows.Forms.Label()
Me.lblSync = New System.Windows.Forms.Label()
Me.txtCurrentBackup = New System.Windows.Forms.TextBox()
Me.lblCurrentBackup = New System.Windows.Forms.Label()
Me.txtLocalBackup = New System.Windows.Forms.TextBox()
Me.lblLastBackup = New System.Windows.Forms.Label()
Me.btnMarkAsRestored = New System.Windows.Forms.Button()
Me.btnRestore = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
Me.lstGames = New System.Windows.Forms.ListBox()
Me.btnCancel = New System.Windows.Forms.Button()
Me.chkEnabled = New System.Windows.Forms.CheckBox()
Me.grpFilter = New System.Windows.Forms.GroupBox()
Me.optBackupData = New System.Windows.Forms.RadioButton()
Me.optPendingRestores = New System.Windows.Forms.RadioButton()
Me.optAllGames = New System.Windows.Forms.RadioButton()
Me.grpConfig.SuspendLayout()
Me.grpExtra.SuspendLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.nudHours, System.ComponentModel.ISupportInitialize).BeginInit()
Me.grpStats.SuspendLayout()
Me.grpFilter.SuspendLayout()
Me.SuspendLayout()
'
'btnAdd
'
Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnAdd.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnAdd.Location = New System.Drawing.Point(12, 528)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 2
Me.btnAdd.Text = "+"
Me.btnAdd.UseVisualStyleBackColor = True
'
'btnDelete
'
Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDelete.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnDelete.Location = New System.Drawing.Point(48, 528)
Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 3
Me.btnDelete.Text = "-"
Me.btnDelete.UseVisualStyleBackColor = True
'
'btnBackup
'
Me.btnBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnBackup.Location = New System.Drawing.Point(616, 527)
Me.btnBackup.Name = "btnBackup"
Me.btnBackup.Size = New System.Drawing.Size(75, 23)
Me.btnBackup.TabIndex = 13
Me.btnBackup.Text = "&Backup"
Me.btnBackup.UseVisualStyleBackColor = True
'
'btnClose
'
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnClose.Location = New System.Drawing.Point(697, 527)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 14
Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True
'
'grpConfig
'
Me.grpConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpConfig.Controls.Add(Me.txtID)
Me.grpConfig.Controls.Add(Me.lblExclude)
Me.grpConfig.Controls.Add(Me.lblFileType)
Me.grpConfig.Controls.Add(Me.btnSavePathBrowse)
Me.grpConfig.Controls.Add(Me.btnProcessBrowse)
Me.grpConfig.Controls.Add(Me.lblSavePath)
Me.grpConfig.Controls.Add(Me.lblProcess)
Me.grpConfig.Controls.Add(Me.lblName)
Me.grpConfig.Controls.Add(Me.txtExclude)
Me.grpConfig.Controls.Add(Me.txtFileType)
Me.grpConfig.Controls.Add(Me.chkTimeStamp)
Me.grpConfig.Controls.Add(Me.chkFolderSave)
Me.grpConfig.Controls.Add(Me.txtSavePath)
Me.grpConfig.Controls.Add(Me.txtProcess)
Me.grpConfig.Controls.Add(Me.txtName)
Me.grpConfig.Enabled = False
Me.grpConfig.Location = New System.Drawing.Point(238, 12)
Me.grpConfig.Name = "grpConfig"
Me.grpConfig.Size = New System.Drawing.Size(534, 182)
Me.grpConfig.TabIndex = 4
Me.grpConfig.TabStop = False
Me.grpConfig.Text = "Configuration"
'
'txtID
'
Me.txtID.Enabled = False
Me.txtID.Location = New System.Drawing.Point(495, 147)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(33, 20)
Me.txtID.TabIndex = 0
Me.txtID.TabStop = False
Me.txtID.Visible = False
'
'lblExclude
'
Me.lblExclude.AutoSize = True
Me.lblExclude.Location = New System.Drawing.Point(6, 126)
Me.lblExclude.Name = "lblExclude"
Me.lblExclude.Size = New System.Drawing.Size(48, 13)
Me.lblExclude.TabIndex = 13
Me.lblExclude.Text = "Exclude:"
'
'lblFileType
'
Me.lblFileType.AutoSize = True
Me.lblFileType.Location = New System.Drawing.Point(6, 100)
Me.lblFileType.Name = "lblFileType"
Me.lblFileType.Size = New System.Drawing.Size(45, 13)
Me.lblFileType.TabIndex = 12
Me.lblFileType.Text = "Include:"
'
'btnSavePathBrowse
'
Me.btnSavePathBrowse.Location = New System.Drawing.Point(498, 71)
Me.btnSavePathBrowse.Name = "btnSavePathBrowse"
Me.btnSavePathBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnSavePathBrowse.TabIndex = 10
Me.btnSavePathBrowse.Text = "..."
Me.btnSavePathBrowse.UseVisualStyleBackColor = True
'
'btnProcessBrowse
'
Me.btnProcessBrowse.Location = New System.Drawing.Point(498, 45)
Me.btnProcessBrowse.Name = "btnProcessBrowse"
Me.btnProcessBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnProcessBrowse.TabIndex = 8
Me.btnProcessBrowse.Text = "..."
Me.btnProcessBrowse.UseVisualStyleBackColor = True
'
'lblSavePath
'
Me.lblSavePath.AutoSize = True
Me.lblSavePath.Location = New System.Drawing.Point(6, 74)
Me.lblSavePath.Name = "lblSavePath"
Me.lblSavePath.Size = New System.Drawing.Size(60, 13)
Me.lblSavePath.TabIndex = 9
Me.lblSavePath.Text = "Save Path:"
'
'lblProcess
'
Me.lblProcess.AutoSize = True
Me.lblProcess.Location = New System.Drawing.Point(6, 48)
Me.lblProcess.Name = "lblProcess"
Me.lblProcess.Size = New System.Drawing.Size(48, 13)
Me.lblProcess.TabIndex = 8
Me.lblProcess.Text = "Process:"
'
'lblName
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(6, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 7
Me.lblName.Text = "Name:"
'
'txtExclude
'
Me.txtExclude.Location = New System.Drawing.Point(69, 123)
Me.txtExclude.Name = "txtExclude"
Me.txtExclude.Size = New System.Drawing.Size(459, 20)
Me.txtExclude.TabIndex = 12
'
'txtFileType
'
Me.txtFileType.Location = New System.Drawing.Point(69, 97)
Me.txtFileType.Name = "txtFileType"
Me.txtFileType.Size = New System.Drawing.Size(459, 20)
Me.txtFileType.TabIndex = 11
'
'chkTimeStamp
'
Me.chkTimeStamp.AutoSize = True
Me.chkTimeStamp.Location = New System.Drawing.Point(124, 149)
Me.chkTimeStamp.Name = "chkTimeStamp"
Me.chkTimeStamp.Size = New System.Drawing.Size(146, 17)
Me.chkTimeStamp.TabIndex = 14
Me.chkTimeStamp.Text = "Time stamp each backup"
Me.chkTimeStamp.UseVisualStyleBackColor = True
'
'chkFolderSave
'
Me.chkFolderSave.AutoSize = True
Me.chkFolderSave.Location = New System.Drawing.Point(9, 149)
Me.chkFolderSave.Name = "chkFolderSave"
Me.chkFolderSave.Size = New System.Drawing.Size(109, 17)
Me.chkFolderSave.TabIndex = 13
Me.chkFolderSave.Text = "Save entire folder"
Me.chkFolderSave.UseVisualStyleBackColor = True
'
'txtSavePath
'
Me.txtSavePath.Location = New System.Drawing.Point(69, 71)
Me.txtSavePath.Name = "txtSavePath"
Me.txtSavePath.Size = New System.Drawing.Size(423, 20)
Me.txtSavePath.TabIndex = 9
'
'txtProcess
'
Me.txtProcess.Location = New System.Drawing.Point(69, 45)
Me.txtProcess.Name = "txtProcess"
Me.txtProcess.Size = New System.Drawing.Size(423, 20)
Me.txtProcess.TabIndex = 7
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(69, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(459, 20)
Me.txtName.TabIndex = 6
'
'chkMonitorOnly
'
Me.chkMonitorOnly.AutoSize = True
Me.chkMonitorOnly.Location = New System.Drawing.Point(353, 365)
Me.chkMonitorOnly.Name = "chkMonitorOnly"
Me.chkMonitorOnly.Size = New System.Drawing.Size(145, 17)
Me.chkMonitorOnly.TabIndex = 7
Me.chkMonitorOnly.Text = "Monitor only (No backup)"
Me.chkMonitorOnly.UseVisualStyleBackColor = True
'
'grpExtra
'
Me.grpExtra.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpExtra.Controls.Add(Me.btnIconBrowse)
Me.grpExtra.Controls.Add(Me.txtIcon)
Me.grpExtra.Controls.Add(Me.lblVersion)
Me.grpExtra.Controls.Add(Me.txtVersion)
Me.grpExtra.Controls.Add(Me.txtCompany)
Me.grpExtra.Controls.Add(Me.lblCompany)
Me.grpExtra.Controls.Add(Me.pbIcon)
Me.grpExtra.Controls.Add(Me.Label1)
Me.grpExtra.Controls.Add(Me.btnAppPathBrowse)
Me.grpExtra.Controls.Add(Me.lblGamePath)
Me.grpExtra.Controls.Add(Me.txtAppPath)
Me.grpExtra.Controls.Add(Me.nudHours)
Me.grpExtra.Controls.Add(Me.lblHours)
Me.grpExtra.Location = New System.Drawing.Point(238, 200)
Me.grpExtra.Name = "grpExtra"
Me.grpExtra.Size = New System.Drawing.Size(534, 155)
Me.grpExtra.TabIndex = 5
Me.grpExtra.TabStop = False
Me.grpExtra.Text = "Extra Information"
'
'btnIconBrowse
'
Me.btnIconBrowse.Location = New System.Drawing.Point(444, 96)
Me.btnIconBrowse.Name = "btnIconBrowse"
Me.btnIconBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnIconBrowse.TabIndex = 20
Me.btnIconBrowse.Text = "..."
Me.btnIconBrowse.UseVisualStyleBackColor = True
'
'txtIcon
'
Me.txtIcon.Location = New System.Drawing.Point(69, 97)
Me.txtIcon.Name = "txtIcon"
Me.txtIcon.Size = New System.Drawing.Size(369, 20)
Me.txtIcon.TabIndex = 19
'
'lblVersion
'
Me.lblVersion.AutoSize = True
Me.lblVersion.Location = New System.Drawing.Point(6, 74)
Me.lblVersion.Name = "lblVersion"
Me.lblVersion.Size = New System.Drawing.Size(45, 13)
Me.lblVersion.TabIndex = 20
Me.lblVersion.Text = "Version:"
'
'txtVersion
'
Me.txtVersion.Location = New System.Drawing.Point(69, 71)
Me.txtVersion.Name = "txtVersion"
Me.txtVersion.Size = New System.Drawing.Size(459, 20)
Me.txtVersion.TabIndex = 18
'
'txtCompany
'
Me.txtCompany.Location = New System.Drawing.Point(69, 45)
Me.txtCompany.Name = "txtCompany"
Me.txtCompany.Size = New System.Drawing.Size(459, 20)
Me.txtCompany.TabIndex = 17
'
'lblCompany
'
Me.lblCompany.AutoSize = True
Me.lblCompany.Location = New System.Drawing.Point(6, 48)
Me.lblCompany.Name = "lblCompany"
Me.lblCompany.Size = New System.Drawing.Size(54, 13)
Me.lblCompany.TabIndex = 17
Me.lblCompany.Text = "Company:"
'
'pbIcon
'
Me.pbIcon.InitialImage = Nothing
Me.pbIcon.Location = New System.Drawing.Point(480, 100)
Me.pbIcon.Name = "pbIcon"
Me.pbIcon.Size = New System.Drawing.Size(48, 48)
Me.pbIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.pbIcon.TabIndex = 15
Me.pbIcon.TabStop = False
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(6, 100)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(31, 13)
Me.Label1.TabIndex = 16
Me.Label1.Text = "Icon:"
'
'btnAppPathBrowse
'
Me.btnAppPathBrowse.Location = New System.Drawing.Point(498, 19)
Me.btnAppPathBrowse.Name = "btnAppPathBrowse"
Me.btnAppPathBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnAppPathBrowse.TabIndex = 16
Me.btnAppPathBrowse.Text = "..."
Me.btnAppPathBrowse.UseVisualStyleBackColor = True
'
'lblGamePath
'
Me.lblGamePath.AutoSize = True
Me.lblGamePath.Location = New System.Drawing.Point(6, 23)
Me.lblGamePath.Name = "lblGamePath"
Me.lblGamePath.Size = New System.Drawing.Size(63, 13)
Me.lblGamePath.TabIndex = 13
Me.lblGamePath.Text = "Game Path:"
'
'txtAppPath
'
Me.txtAppPath.Location = New System.Drawing.Point(69, 19)
Me.txtAppPath.Name = "txtAppPath"
Me.txtAppPath.Size = New System.Drawing.Size(423, 20)
Me.txtAppPath.TabIndex = 15
'
'nudHours
'
Me.nudHours.DecimalPlaces = 1
Me.nudHours.Increment = New Decimal(New Integer() {1, 0, 0, 65536})
Me.nudHours.Location = New System.Drawing.Point(69, 124)
Me.nudHours.Maximum = New Decimal(New Integer() {10000, 0, 0, 0})
Me.nudHours.Name = "nudHours"
Me.nudHours.Size = New System.Drawing.Size(88, 20)
Me.nudHours.TabIndex = 21
'
'lblHours
'
Me.lblHours.AutoSize = True
Me.lblHours.Location = New System.Drawing.Point(6, 126)
Me.lblHours.Name = "lblHours"
Me.lblHours.Size = New System.Drawing.Size(38, 13)
Me.lblHours.TabIndex = 0
Me.lblHours.Text = "Hours:"
'
'grpStats
'
Me.grpStats.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpStats.Controls.Add(Me.btnOpenRestorePath)
Me.grpStats.Controls.Add(Me.btnOpenBackupFile)
Me.grpStats.Controls.Add(Me.txtFileSize)
Me.grpStats.Controls.Add(Me.btnDeleteBackup)
Me.grpStats.Controls.Add(Me.lblFileSize)
Me.grpStats.Controls.Add(Me.lblSync)
Me.grpStats.Controls.Add(Me.txtCurrentBackup)
Me.grpStats.Controls.Add(Me.lblCurrentBackup)
Me.grpStats.Controls.Add(Me.txtLocalBackup)
Me.grpStats.Controls.Add(Me.lblLastBackup)
Me.grpStats.Location = New System.Drawing.Point(238, 390)
Me.grpStats.Name = "grpStats"
Me.grpStats.Size = New System.Drawing.Size(534, 129)
Me.grpStats.TabIndex = 10
Me.grpStats.TabStop = False
Me.grpStats.Text = "Backup Information"
'
'btnOpenRestorePath
'
Me.btnOpenRestorePath.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnOpenRestorePath.Location = New System.Drawing.Point(336, 100)
Me.btnOpenRestorePath.Name = "btnOpenRestorePath"
Me.btnOpenRestorePath.Size = New System.Drawing.Size(114, 23)
Me.btnOpenRestorePath.TabIndex = 28
Me.btnOpenRestorePath.Text = "O&pen Restore Path"
Me.btnOpenRestorePath.UseVisualStyleBackColor = True
'
'btnOpenBackupFile
'
Me.btnOpenBackupFile.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnOpenBackupFile.Location = New System.Drawing.Point(216, 100)
Me.btnOpenBackupFile.Name = "btnOpenBackupFile"
Me.btnOpenBackupFile.Size = New System.Drawing.Size(114, 23)
Me.btnOpenBackupFile.TabIndex = 27
Me.btnOpenBackupFile.Text = "&Open Backup File"
Me.btnOpenBackupFile.UseVisualStyleBackColor = True
'
'txtFileSize
'
Me.txtFileSize.Location = New System.Drawing.Point(96, 74)
Me.txtFileSize.Name = "txtFileSize"
Me.txtFileSize.ReadOnly = True
Me.txtFileSize.Size = New System.Drawing.Size(275, 20)
Me.txtFileSize.TabIndex = 0
Me.txtFileSize.TabStop = False
'
'btnDeleteBackup
'
Me.btnDeleteBackup.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnDeleteBackup.Location = New System.Drawing.Point(96, 100)
Me.btnDeleteBackup.Name = "btnDeleteBackup"
Me.btnDeleteBackup.Size = New System.Drawing.Size(114, 23)
Me.btnDeleteBackup.TabIndex = 26
Me.btnDeleteBackup.Text = "&Delete Backup"
Me.btnDeleteBackup.UseVisualStyleBackColor = True
'
'lblFileSize
'
Me.lblFileSize.AutoSize = True
Me.lblFileSize.Location = New System.Drawing.Point(6, 77)
Me.lblFileSize.Name = "lblFileSize"
Me.lblFileSize.Size = New System.Drawing.Size(70, 13)
Me.lblFileSize.TabIndex = 108
Me.lblFileSize.Text = "Backup Size:"
'
'lblSync
'
Me.lblSync.AutoSize = True
Me.lblSync.Location = New System.Drawing.Point(6, 105)
Me.lblSync.Name = "lblSync"
Me.lblSync.Size = New System.Drawing.Size(62, 13)
Me.lblSync.TabIndex = 24
Me.lblSync.Text = "Up to Date!"
Me.lblSync.Visible = False
'
'txtCurrentBackup
'
Me.txtCurrentBackup.Location = New System.Drawing.Point(96, 24)
Me.txtCurrentBackup.Name = "txtCurrentBackup"
Me.txtCurrentBackup.ReadOnly = True
Me.txtCurrentBackup.Size = New System.Drawing.Size(275, 20)
Me.txtCurrentBackup.TabIndex = 0
Me.txtCurrentBackup.TabStop = False
'
'lblCurrentBackup
'
Me.lblCurrentBackup.AutoSize = True
Me.lblCurrentBackup.Location = New System.Drawing.Point(6, 27)
Me.lblCurrentBackup.Name = "lblCurrentBackup"
Me.lblCurrentBackup.Size = New System.Drawing.Size(84, 13)
Me.lblCurrentBackup.TabIndex = 22
Me.lblCurrentBackup.Text = "Current Backup:"
'
'txtLocalBackup
'
Me.txtLocalBackup.Location = New System.Drawing.Point(96, 50)
Me.txtLocalBackup.Name = "txtLocalBackup"
Me.txtLocalBackup.ReadOnly = True
Me.txtLocalBackup.Size = New System.Drawing.Size(275, 20)
Me.txtLocalBackup.TabIndex = 0
Me.txtLocalBackup.TabStop = False
'
'lblLastBackup
'
Me.lblLastBackup.AutoSize = True
Me.lblLastBackup.Location = New System.Drawing.Point(6, 53)
Me.lblLastBackup.Name = "lblLastBackup"
Me.lblLastBackup.Size = New System.Drawing.Size(76, 13)
Me.lblLastBackup.TabIndex = 20
Me.lblLastBackup.Text = "Local Backup:"
'
'btnMarkAsRestored
'
Me.btnMarkAsRestored.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnMarkAsRestored.Location = New System.Drawing.Point(429, 527)
Me.btnMarkAsRestored.Name = "btnMarkAsRestored"
Me.btnMarkAsRestored.Size = New System.Drawing.Size(100, 23)
Me.btnMarkAsRestored.TabIndex = 11
Me.btnMarkAsRestored.Text = "&Mark as Restored"
Me.btnMarkAsRestored.UseVisualStyleBackColor = True
'
'btnRestore
'
Me.btnRestore.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnRestore.Location = New System.Drawing.Point(535, 527)
Me.btnRestore.Name = "btnRestore"
Me.btnRestore.Size = New System.Drawing.Size(75, 23)
Me.btnRestore.TabIndex = 12
Me.btnRestore.Text = "&Restore"
Me.btnRestore.UseVisualStyleBackColor = True
'
'btnSave
'
Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnSave.Location = New System.Drawing.Point(616, 361)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 8
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'lstGames
'
Me.lstGames.FormattingEnabled = True
Me.lstGames.Location = New System.Drawing.Point(12, 112)
Me.lstGames.Name = "lstGames"
Me.lstGames.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
Me.lstGames.Size = New System.Drawing.Size(220, 407)
Me.lstGames.Sorted = True
Me.lstGames.TabIndex = 1
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Location = New System.Drawing.Point(697, 361)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 9
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'chkEnabled
'
Me.chkEnabled.AutoSize = True
Me.chkEnabled.Location = New System.Drawing.Point(238, 365)
Me.chkEnabled.Name = "chkEnabled"
Me.chkEnabled.Size = New System.Drawing.Size(109, 17)
Me.chkEnabled.TabIndex = 6
Me.chkEnabled.Text = "Monitor this game"
Me.chkEnabled.UseVisualStyleBackColor = True
'
'grpFilter
'
Me.grpFilter.Controls.Add(Me.optBackupData)
Me.grpFilter.Controls.Add(Me.optPendingRestores)
Me.grpFilter.Controls.Add(Me.optAllGames)
Me.grpFilter.Location = New System.Drawing.Point(12, 12)
Me.grpFilter.Name = "grpFilter"
Me.grpFilter.Size = New System.Drawing.Size(220, 91)
Me.grpFilter.TabIndex = 0
Me.grpFilter.TabStop = False
Me.grpFilter.Text = "Games Filter"
'
'optBackupData
'
Me.optBackupData.AutoSize = True
Me.optBackupData.Location = New System.Drawing.Point(6, 41)
Me.optBackupData.Name = "optBackupData"
Me.optBackupData.Size = New System.Drawing.Size(91, 17)
Me.optBackupData.TabIndex = 1
Me.optBackupData.TabStop = True
Me.optBackupData.Text = "Backups Only"
Me.optBackupData.UseVisualStyleBackColor = True
'
'optPendingRestores
'
Me.optPendingRestores.AutoSize = True
Me.optPendingRestores.Location = New System.Drawing.Point(6, 64)
Me.optPendingRestores.Name = "optPendingRestores"
Me.optPendingRestores.Size = New System.Drawing.Size(104, 17)
Me.optPendingRestores.TabIndex = 2
Me.optPendingRestores.TabStop = True
Me.optPendingRestores.Text = "Pending Restore"
Me.optPendingRestores.UseVisualStyleBackColor = True
'
'optAllGames
'
Me.optAllGames.AutoSize = True
Me.optAllGames.Location = New System.Drawing.Point(6, 20)
Me.optAllGames.Name = "optAllGames"
Me.optAllGames.Size = New System.Drawing.Size(36, 17)
Me.optAllGames.TabIndex = 0
Me.optAllGames.TabStop = True
Me.optAllGames.Text = "All"
Me.optAllGames.UseVisualStyleBackColor = True
'
'frmGameManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(784, 562)
Me.Controls.Add(Me.grpFilter)
Me.Controls.Add(Me.chkEnabled)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.chkMonitorOnly)
Me.Controls.Add(Me.btnMarkAsRestored)
Me.Controls.Add(Me.btnRestore)
Me.Controls.Add(Me.lstGames)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpStats)
Me.Controls.Add(Me.grpExtra)
Me.Controls.Add(Me.grpConfig)
Me.Controls.Add(Me.btnBackup)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.btnDelete)
Me.Controls.Add(Me.btnAdd)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmGameManager"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Game Manager"
Me.grpConfig.ResumeLayout(False)
Me.grpConfig.PerformLayout()
Me.grpExtra.ResumeLayout(False)
Me.grpExtra.PerformLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.nudHours, System.ComponentModel.ISupportInitialize).EndInit()
Me.grpStats.ResumeLayout(False)
Me.grpStats.PerformLayout()
Me.grpFilter.ResumeLayout(False)
Me.grpFilter.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents btnDelete As System.Windows.Forms.Button
Friend WithEvents btnBackup As System.Windows.Forms.Button
Friend WithEvents btnClose As System.Windows.Forms.Button
Friend WithEvents grpConfig As System.Windows.Forms.GroupBox
Friend WithEvents txtSavePath As System.Windows.Forms.TextBox
Friend WithEvents txtProcess As System.Windows.Forms.TextBox
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents grpExtra As System.Windows.Forms.GroupBox
Friend WithEvents grpStats As System.Windows.Forms.GroupBox
Friend WithEvents chkTimeStamp As System.Windows.Forms.CheckBox
Friend WithEvents chkFolderSave As System.Windows.Forms.CheckBox
Friend WithEvents lblSavePath As System.Windows.Forms.Label
Friend WithEvents lblProcess As System.Windows.Forms.Label
Friend WithEvents lblName As System.Windows.Forms.Label
Friend WithEvents txtExclude As System.Windows.Forms.TextBox
Friend WithEvents txtFileType As System.Windows.Forms.TextBox
Friend WithEvents btnSavePathBrowse As System.Windows.Forms.Button
Friend WithEvents btnProcessBrowse As System.Windows.Forms.Button
Friend WithEvents lblExclude As System.Windows.Forms.Label
Friend WithEvents lblFileType As System.Windows.Forms.Label
Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents btnAppPathBrowse As System.Windows.Forms.Button
Friend WithEvents lblGamePath As System.Windows.Forms.Label
Friend WithEvents txtAppPath As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents pbIcon As System.Windows.Forms.PictureBox
Friend WithEvents lblVersion As System.Windows.Forms.Label
Friend WithEvents txtVersion As System.Windows.Forms.TextBox
Friend WithEvents txtCompany As System.Windows.Forms.TextBox
Friend WithEvents lblCompany As System.Windows.Forms.Label
Friend WithEvents nudHours As System.Windows.Forms.NumericUpDown
Friend WithEvents lblHours As System.Windows.Forms.Label
Friend WithEvents chkMonitorOnly As System.Windows.Forms.CheckBox
Friend WithEvents lstGames As System.Windows.Forms.ListBox
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents btnIconBrowse As System.Windows.Forms.Button
Friend WithEvents txtIcon As System.Windows.Forms.TextBox
Friend WithEvents txtID As System.Windows.Forms.TextBox
Friend WithEvents txtCurrentBackup As System.Windows.Forms.TextBox
Friend WithEvents lblCurrentBackup As System.Windows.Forms.Label
Friend WithEvents txtLocalBackup As System.Windows.Forms.TextBox
Friend WithEvents lblLastBackup As System.Windows.Forms.Label
Friend WithEvents lblSync As System.Windows.Forms.Label
Friend WithEvents chkEnabled As System.Windows.Forms.CheckBox
Friend WithEvents txtFileSize As System.Windows.Forms.TextBox
Friend WithEvents lblFileSize As System.Windows.Forms.Label
Friend WithEvents btnMarkAsRestored As System.Windows.Forms.Button
Friend WithEvents btnRestore As System.Windows.Forms.Button
Friend WithEvents btnDeleteBackup As System.Windows.Forms.Button
Friend WithEvents btnOpenBackupFile As System.Windows.Forms.Button
Friend WithEvents grpFilter As System.Windows.Forms.GroupBox
Friend WithEvents optPendingRestores As System.Windows.Forms.RadioButton
Friend WithEvents optAllGames As System.Windows.Forms.RadioButton
Friend WithEvents optBackupData As System.Windows.Forms.RadioButton
Friend WithEvents btnOpenRestorePath As System.Windows.Forms.Button
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
File diff suppressed because it is too large Load Diff
+585
View File
@@ -0,0 +1,585 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmMain
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain))
Me.gMonTray = New System.Windows.Forms.NotifyIcon(Me.components)
Me.gMonTrayMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.gMonTrayShow = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySep2 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayMon = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySettings = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetup = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupAddWizard = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupGameManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameImportOfficialList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameImportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsGameExportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsSyncMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTrayToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTraySep1 = New System.Windows.Forms.ToolStripSeparator()
Me.gMonTrayExit = New System.Windows.Forms.ToolStripMenuItem()
Me.bwMonitor = New System.ComponentModel.BackgroundWorker()
Me.txtLog = New System.Windows.Forms.TextBox()
Me.gMonStatusStrip = New System.Windows.Forms.StatusStrip()
Me.gMonStripAdminButton = New System.Windows.Forms.ToolStripSplitButton()
Me.gMonStripTxtStatus = New System.Windows.Forms.ToolStripStatusLabel()
Me.gMonStripStatusButton = New System.Windows.Forms.ToolStripSplitButton()
Me.gMonMainMenu = New System.Windows.Forms.MenuStrip()
Me.gMonFile = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonFileMonitor = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonMonitorSep = New System.Windows.Forms.ToolStripSeparator()
Me.gMonFileSettings = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonExitSep = New System.Windows.Forms.ToolStripSeparator()
Me.gMonFileExit = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetup = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupGameManager = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupAddWizard = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonSetupCustomVariables = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonTools = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameImportOfficialList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameImportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsGameExportList = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsSyncMan = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonToolsCompact = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelp = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpManual = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpCheckforUpdates = New System.Windows.Forms.ToolStripMenuItem()
Me.gMonHelpAbout = New System.Windows.Forms.ToolStripMenuItem()
Me.pbIcon = New System.Windows.Forms.PictureBox()
Me.btnLogToggle = New System.Windows.Forms.Button()
Me.lblGameTitle = New System.Windows.Forms.Label()
Me.lblLastAction = New System.Windows.Forms.Label()
Me.lblLastActionTitle = New System.Windows.Forms.Label()
Me.lblTimeTitle = New System.Windows.Forms.Label()
Me.lblTimeSpent = New System.Windows.Forms.Label()
Me.txtGameInfo = New System.Windows.Forms.TextBox()
Me.btnCancelOperation = New System.Windows.Forms.Button()
Me.gMonTrayMenu.SuspendLayout()
Me.gMonStatusStrip.SuspendLayout()
Me.gMonMainMenu.SuspendLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'gMonTray
'
Me.gMonTray.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info
Me.gMonTray.BalloonTipTitle = "GBM"
Me.gMonTray.ContextMenuStrip = Me.gMonTrayMenu
Me.gMonTray.Icon = CType(resources.GetObject("gMonTray.Icon"), System.Drawing.Icon)
Me.gMonTray.Text = "GBM"
Me.gMonTray.Visible = True
'
'gMonTrayMenu
'
Me.gMonTrayMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {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, 148)
'
'gMonTrayShow
'
Me.gMonTrayShow.Name = "gMonTrayShow"
Me.gMonTrayShow.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayShow.Text = "S&how / Hide"
'
'gMonTraySep2
'
Me.gMonTraySep2.Name = "gMonTraySep2"
Me.gMonTraySep2.Size = New System.Drawing.Size(158, 6)
'
'gMonTrayMon
'
Me.gMonTrayMon.Name = "gMonTrayMon"
Me.gMonTrayMon.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayMon.Text = "S&tart Monitoring"
'
'gMonTraySettings
'
Me.gMonTraySettings.Name = "gMonTraySettings"
Me.gMonTraySettings.Size = New System.Drawing.Size(161, 22)
Me.gMonTraySettings.Text = "S&ettings"
'
'gMonTraySetup
'
Me.gMonTraySetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTraySetupAddWizard, Me.gMonTraySetupGameManager, Me.gMonTraySetupCustomVariables})
Me.gMonTraySetup.Name = "gMonTraySetup"
Me.gMonTraySetup.Size = New System.Drawing.Size(161, 22)
Me.gMonTraySetup.Text = "&Setup"
'
'gMonTraySetupAddWizard
'
Me.gMonTraySetupAddWizard.Name = "gMonTraySetupAddWizard"
Me.gMonTraySetupAddWizard.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupAddWizard.Text = "Add Game &Wizard..."
'
'gMonTraySetupGameManager
'
Me.gMonTraySetupGameManager.Name = "gMonTraySetupGameManager"
Me.gMonTraySetupGameManager.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupGameManager.Text = "&Game Manager..."
'
'gMonTraySetupCustomVariables
'
Me.gMonTraySetupCustomVariables.Name = "gMonTraySetupCustomVariables"
Me.gMonTraySetupCustomVariables.Size = New System.Drawing.Size(201, 22)
Me.gMonTraySetupCustomVariables.Text = "Custom &Path Variables..."
'
'gMonTrayTools
'
Me.gMonTrayTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsGameList, Me.gMonTrayToolsSyncMan, Me.gMonTrayToolsCompact})
Me.gMonTrayTools.Name = "gMonTrayTools"
Me.gMonTrayTools.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayTools.Text = "&Tools"
'
'gMonTrayToolsGameList
'
Me.gMonTrayToolsGameList.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonTrayToolsGameImportOfficialList, Me.gMonTrayToolsGameImportList, Me.gMonTrayToolsGameExportList})
Me.gMonTrayToolsGameList.Name = "gMonTrayToolsGameList"
Me.gMonTrayToolsGameList.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsGameList.Text = "&Game List"
'
'gMonTrayToolsGameImportOfficialList
'
Me.gMonTrayToolsGameImportOfficialList.Name = "gMonTrayToolsGameImportOfficialList"
Me.gMonTrayToolsGameImportOfficialList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameImportOfficialList.Text = "Import from &Official List"
'
'gMonTrayToolsGameImportList
'
Me.gMonTrayToolsGameImportList.Name = "gMonTrayToolsGameImportList"
Me.gMonTrayToolsGameImportList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameImportList.Text = "I&mport Game List"
'
'gMonTrayToolsGameExportList
'
Me.gMonTrayToolsGameExportList.Name = "gMonTrayToolsGameExportList"
Me.gMonTrayToolsGameExportList.Size = New System.Drawing.Size(201, 22)
Me.gMonTrayToolsGameExportList.Text = "E&xport Game List"
'
'gMonTrayToolsSyncMan
'
Me.gMonTrayToolsSyncMan.Name = "gMonTrayToolsSyncMan"
Me.gMonTrayToolsSyncMan.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsSyncMan.Text = "Sync Ma&nifests"
'
'gMonTrayToolsCompact
'
Me.gMonTrayToolsCompact.Name = "gMonTrayToolsCompact"
Me.gMonTrayToolsCompact.Size = New System.Drawing.Size(179, 22)
Me.gMonTrayToolsCompact.Text = "&Compact Databases"
'
'gMonTraySep1
'
Me.gMonTraySep1.Name = "gMonTraySep1"
Me.gMonTraySep1.Size = New System.Drawing.Size(158, 6)
'
'gMonTrayExit
'
Me.gMonTrayExit.Name = "gMonTrayExit"
Me.gMonTrayExit.Size = New System.Drawing.Size(161, 22)
Me.gMonTrayExit.Text = "E&xit"
'
'bwMonitor
'
Me.bwMonitor.WorkerSupportsCancellation = True
'
'txtLog
'
Me.txtLog.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.txtLog.Location = New System.Drawing.Point(12, 161)
Me.txtLog.Multiline = True
Me.txtLog.Name = "txtLog"
Me.txtLog.ReadOnly = True
Me.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtLog.Size = New System.Drawing.Size(500, 177)
Me.txtLog.TabIndex = 2
Me.txtLog.TabStop = False
'
'gMonStatusStrip
'
Me.gMonStatusStrip.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.gMonStatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonStripAdminButton, Me.gMonStripTxtStatus, Me.gMonStripStatusButton})
Me.gMonStatusStrip.Location = New System.Drawing.Point(0, 350)
Me.gMonStatusStrip.Name = "gMonStatusStrip"
Me.gMonStatusStrip.ShowItemToolTips = True
Me.gMonStatusStrip.Size = New System.Drawing.Size(524, 22)
Me.gMonStatusStrip.SizingGrip = False
Me.gMonStatusStrip.TabIndex = 3
'
'gMonStripAdminButton
'
Me.gMonStripAdminButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
Me.gMonStripAdminButton.DropDownButtonWidth = 0
Me.gMonStripAdminButton.Image = Global.GBM.My.Resources.Resources.User
Me.gMonStripAdminButton.ImageTransparentColor = System.Drawing.Color.Magenta
Me.gMonStripAdminButton.Name = "gMonStripAdminButton"
Me.gMonStripAdminButton.Size = New System.Drawing.Size(21, 20)
Me.gMonStripAdminButton.Text = "Elevation"
Me.gMonStripAdminButton.ToolTipText = "Elevation"
'
'gMonStripTxtStatus
'
Me.gMonStripTxtStatus.Name = "gMonStripTxtStatus"
Me.gMonStripTxtStatus.Size = New System.Drawing.Size(395, 17)
Me.gMonStripTxtStatus.Spring = True
Me.gMonStripTxtStatus.Text = "Monitor Status"
Me.gMonStripTxtStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'gMonStripStatusButton
'
Me.gMonStripStatusButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right
Me.gMonStripStatusButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
Me.gMonStripStatusButton.DropDownButtonWidth = 0
Me.gMonStripStatusButton.ImageTransparentColor = System.Drawing.Color.Magenta
Me.gMonStripStatusButton.Name = "gMonStripStatusButton"
Me.gMonStripStatusButton.Size = New System.Drawing.Size(93, 20)
Me.gMonStripStatusButton.Text = "Monitor Status:"
Me.gMonStripStatusButton.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage
Me.gMonStripStatusButton.ToolTipText = "Click to toggle monitoring on or off."
'
'gMonMainMenu
'
Me.gMonMainMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonFile, Me.gMonSetup, Me.gMonTools, Me.gMonHelp})
Me.gMonMainMenu.Location = New System.Drawing.Point(0, 0)
Me.gMonMainMenu.Name = "gMonMainMenu"
Me.gMonMainMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System
Me.gMonMainMenu.Size = New System.Drawing.Size(524, 24)
Me.gMonMainMenu.TabIndex = 8
Me.gMonMainMenu.Text = "MenuStrip1"
'
'gMonFile
'
Me.gMonFile.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonFileMonitor, Me.gMonMonitorSep, Me.gMonFileSettings, Me.gMonExitSep, Me.gMonFileExit})
Me.gMonFile.Name = "gMonFile"
Me.gMonFile.Size = New System.Drawing.Size(37, 20)
Me.gMonFile.Text = "&File"
'
'gMonFileMonitor
'
Me.gMonFileMonitor.Name = "gMonFileMonitor"
Me.gMonFileMonitor.Size = New System.Drawing.Size(161, 22)
Me.gMonFileMonitor.Text = "Start &Monitoring"
'
'gMonMonitorSep
'
Me.gMonMonitorSep.Name = "gMonMonitorSep"
Me.gMonMonitorSep.Size = New System.Drawing.Size(158, 6)
'
'gMonFileSettings
'
Me.gMonFileSettings.Name = "gMonFileSettings"
Me.gMonFileSettings.Size = New System.Drawing.Size(161, 22)
Me.gMonFileSettings.Text = "&Settings..."
'
'gMonExitSep
'
Me.gMonExitSep.Name = "gMonExitSep"
Me.gMonExitSep.Size = New System.Drawing.Size(158, 6)
'
'gMonFileExit
'
Me.gMonFileExit.Name = "gMonFileExit"
Me.gMonFileExit.Size = New System.Drawing.Size(161, 22)
Me.gMonFileExit.Text = "E&xit"
'
'gMonSetup
'
Me.gMonSetup.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonSetupGameManager, Me.gMonSetupAddWizard, Me.gMonSetupCustomVariables})
Me.gMonSetup.Name = "gMonSetup"
Me.gMonSetup.Size = New System.Drawing.Size(49, 20)
Me.gMonSetup.Text = "&Setup"
'
'gMonSetupGameManager
'
Me.gMonSetupGameManager.Name = "gMonSetupGameManager"
Me.gMonSetupGameManager.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupGameManager.Text = "&Game Manager..."
'
'gMonSetupAddWizard
'
Me.gMonSetupAddWizard.Name = "gMonSetupAddWizard"
Me.gMonSetupAddWizard.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupAddWizard.Text = "Add Game &Wizard..."
'
'gMonSetupCustomVariables
'
Me.gMonSetupCustomVariables.Name = "gMonSetupCustomVariables"
Me.gMonSetupCustomVariables.Size = New System.Drawing.Size(201, 22)
Me.gMonSetupCustomVariables.Text = "Custom &Path Variables..."
'
'gMonTools
'
Me.gMonTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsGameList, Me.gMonToolsSyncMan, Me.gMonToolsCompact})
Me.gMonTools.Name = "gMonTools"
Me.gMonTools.Size = New System.Drawing.Size(47, 20)
Me.gMonTools.Text = "&Tools"
'
'gMonToolsGameList
'
Me.gMonToolsGameList.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonToolsGameImportOfficialList, Me.gMonToolsGameImportList, Me.gMonToolsGameExportList})
Me.gMonToolsGameList.Name = "gMonToolsGameList"
Me.gMonToolsGameList.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsGameList.Text = "&Game List"
'
'gMonToolsGameImportOfficialList
'
Me.gMonToolsGameImportOfficialList.Name = "gMonToolsGameImportOfficialList"
Me.gMonToolsGameImportOfficialList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameImportOfficialList.Text = "Import from &Official List"
'
'gMonToolsGameImportList
'
Me.gMonToolsGameImportList.Name = "gMonToolsGameImportList"
Me.gMonToolsGameImportList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameImportList.Text = "I&mport Game List"
'
'gMonToolsGameExportList
'
Me.gMonToolsGameExportList.Name = "gMonToolsGameExportList"
Me.gMonToolsGameExportList.Size = New System.Drawing.Size(201, 22)
Me.gMonToolsGameExportList.Text = "E&xport Game List"
'
'gMonToolsSyncMan
'
Me.gMonToolsSyncMan.Name = "gMonToolsSyncMan"
Me.gMonToolsSyncMan.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsSyncMan.Text = "Sync Ma&nifests"
'
'gMonToolsCompact
'
Me.gMonToolsCompact.Name = "gMonToolsCompact"
Me.gMonToolsCompact.Size = New System.Drawing.Size(179, 22)
Me.gMonToolsCompact.Text = "&Compact Databases"
'
'gMonHelp
'
Me.gMonHelp.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.gMonHelpManual, Me.gMonHelpCheckforUpdates, Me.gMonHelpAbout})
Me.gMonHelp.Name = "gMonHelp"
Me.gMonHelp.Size = New System.Drawing.Size(44, 20)
Me.gMonHelp.Text = "&Help"
'
'gMonHelpManual
'
Me.gMonHelpManual.Name = "gMonHelpManual"
Me.gMonHelpManual.Size = New System.Drawing.Size(171, 22)
Me.gMonHelpManual.Text = "Online &Manual"
'
'gMonHelpCheckforUpdates
'
Me.gMonHelpCheckforUpdates.Name = "gMonHelpCheckforUpdates"
Me.gMonHelpCheckforUpdates.Size = New System.Drawing.Size(171, 22)
Me.gMonHelpCheckforUpdates.Text = "Check for Updates"
'
'gMonHelpAbout
'
Me.gMonHelpAbout.Name = "gMonHelpAbout"
Me.gMonHelpAbout.Size = New System.Drawing.Size(171, 22)
Me.gMonHelpAbout.Text = "&About"
'
'pbIcon
'
Me.pbIcon.Location = New System.Drawing.Point(12, 36)
Me.pbIcon.Name = "pbIcon"
Me.pbIcon.Size = New System.Drawing.Size(48, 48)
Me.pbIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.pbIcon.TabIndex = 9
Me.pbIcon.TabStop = False
'
'btnLogToggle
'
Me.btnLogToggle.Location = New System.Drawing.Point(437, 132)
Me.btnLogToggle.Name = "btnLogToggle"
Me.btnLogToggle.Size = New System.Drawing.Size(75, 23)
Me.btnLogToggle.TabIndex = 1
Me.btnLogToggle.Text = "Show &Log"
Me.btnLogToggle.UseVisualStyleBackColor = True
'
'lblGameTitle
'
Me.lblGameTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblGameTitle.Location = New System.Drawing.Point(66, 36)
Me.lblGameTitle.Name = "lblGameTitle"
Me.lblGameTitle.Size = New System.Drawing.Size(446, 16)
Me.lblGameTitle.TabIndex = 10
Me.lblGameTitle.Text = "Game Title"
'
'lblLastAction
'
Me.lblLastAction.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLastAction.Location = New System.Drawing.Point(12, 139)
Me.lblLastAction.Name = "lblLastAction"
Me.lblLastAction.Size = New System.Drawing.Size(419, 16)
Me.lblLastAction.TabIndex = 11
Me.lblLastAction.Text = "Last Action"
'
'lblLastActionTitle
'
Me.lblLastActionTitle.AutoSize = True
Me.lblLastActionTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLastActionTitle.Location = New System.Drawing.Point(12, 126)
Me.lblLastActionTitle.Name = "lblLastActionTitle"
Me.lblLastActionTitle.Size = New System.Drawing.Size(75, 13)
Me.lblLastActionTitle.TabIndex = 12
Me.lblLastActionTitle.Text = "Last Action:"
'
'lblTimeTitle
'
Me.lblTimeTitle.AutoSize = True
Me.lblTimeTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblTimeTitle.Location = New System.Drawing.Point(66, 55)
Me.lblTimeTitle.Name = "lblTimeTitle"
Me.lblTimeTitle.Size = New System.Drawing.Size(75, 13)
Me.lblTimeTitle.TabIndex = 13
Me.lblTimeTitle.Text = "Time Spent:"
'
'lblTimeSpent
'
Me.lblTimeSpent.AutoSize = True
Me.lblTimeSpent.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblTimeSpent.Location = New System.Drawing.Point(139, 55)
Me.lblTimeSpent.Name = "lblTimeSpent"
Me.lblTimeSpent.Size = New System.Drawing.Size(44, 13)
Me.lblTimeSpent.TabIndex = 14
Me.lblTimeSpent.Text = "0 Hours"
'
'txtGameInfo
'
Me.txtGameInfo.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtGameInfo.Cursor = System.Windows.Forms.Cursors.Default
Me.txtGameInfo.Location = New System.Drawing.Point(69, 71)
Me.txtGameInfo.Multiline = True
Me.txtGameInfo.Name = "txtGameInfo"
Me.txtGameInfo.ReadOnly = True
Me.txtGameInfo.Size = New System.Drawing.Size(443, 52)
Me.txtGameInfo.TabIndex = 0
Me.txtGameInfo.TabStop = False
Me.txtGameInfo.WordWrap = False
'
'btnCancelOperation
'
Me.btnCancelOperation.Location = New System.Drawing.Point(437, 103)
Me.btnCancelOperation.Name = "btnCancelOperation"
Me.btnCancelOperation.Size = New System.Drawing.Size(75, 23)
Me.btnCancelOperation.TabIndex = 0
Me.btnCancelOperation.Text = "&Cancel"
Me.btnCancelOperation.UseVisualStyleBackColor = True
'
'frmMain
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(524, 372)
Me.Controls.Add(Me.btnCancelOperation)
Me.Controls.Add(Me.txtGameInfo)
Me.Controls.Add(Me.lblTimeSpent)
Me.Controls.Add(Me.lblTimeTitle)
Me.Controls.Add(Me.lblLastActionTitle)
Me.Controls.Add(Me.lblLastAction)
Me.Controls.Add(Me.lblGameTitle)
Me.Controls.Add(Me.btnLogToggle)
Me.Controls.Add(Me.pbIcon)
Me.Controls.Add(Me.gMonStatusStrip)
Me.Controls.Add(Me.gMonMainMenu)
Me.Controls.Add(Me.txtLog)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MainMenuStrip = Me.gMonMainMenu
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmMain"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Game Backup Monitor"
Me.gMonTrayMenu.ResumeLayout(False)
Me.gMonStatusStrip.ResumeLayout(False)
Me.gMonStatusStrip.PerformLayout()
Me.gMonMainMenu.ResumeLayout(False)
Me.gMonMainMenu.PerformLayout()
CType(Me.pbIcon, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents gMonTray As System.Windows.Forms.NotifyIcon
Friend WithEvents gMonTrayMenu As System.Windows.Forms.ContextMenuStrip
Friend WithEvents gMonTrayExit As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayShow As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySep1 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents bwMonitor As System.ComponentModel.BackgroundWorker
Friend WithEvents txtLog As System.Windows.Forms.TextBox
Friend WithEvents gMonTrayMon As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonStatusStrip As System.Windows.Forms.StatusStrip
Friend WithEvents gMonStripTxtStatus As System.Windows.Forms.ToolStripStatusLabel
Friend WithEvents gMonTraySettings As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySep2 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents gMonTraySetup As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonMainMenu As System.Windows.Forms.MenuStrip
Friend WithEvents gMonFile As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonFileMonitor As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonMonitorSep As System.Windows.Forms.ToolStripSeparator
Friend WithEvents gMonFileSettings As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonExitSep As System.Windows.Forms.ToolStripSeparator
Friend WithEvents gMonFileExit As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetup As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelp As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpAbout As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonStripStatusButton As System.Windows.Forms.ToolStripSplitButton
Friend WithEvents pbIcon As System.Windows.Forms.PictureBox
Friend WithEvents btnLogToggle As System.Windows.Forms.Button
Friend WithEvents lblGameTitle As System.Windows.Forms.Label
Friend WithEvents lblLastAction As System.Windows.Forms.Label
Friend WithEvents lblLastActionTitle As System.Windows.Forms.Label
Friend WithEvents gMonTools As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsSyncMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayTools As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsSyncMan As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupAddWizard As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTraySetupAddWizard As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents lblTimeTitle As System.Windows.Forms.Label
Friend WithEvents lblTimeSpent As System.Windows.Forms.Label
Friend WithEvents txtGameInfo As System.Windows.Forms.TextBox
Friend WithEvents gMonToolsGameList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameImportOfficialList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameImportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsGameExportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameImportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameExportList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsGameImportOfficialList As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupGameManager As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonSetupCustomVariables As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonToolsCompact As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonTrayToolsCompact As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpManual As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents gMonHelpCheckforUpdates As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents btnCancelOperation As System.Windows.Forms.Button
Friend WithEvents gMonStripAdminButton As ToolStripSplitButton
End Class
File diff suppressed because it is too large Load Diff
+1379
View File
File diff suppressed because it is too large Load Diff
+105
View File
@@ -0,0 +1,105 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmManifestViewer
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.dgView = New System.Windows.Forms.DataGridView()
Me.btnCancel = New System.Windows.Forms.Button()
Me.lblError = New System.Windows.Forms.Label()
Me.fbBrowser = New System.Windows.Forms.FolderBrowserDialog()
Me.cboManifest = New System.Windows.Forms.ComboBox()
CType(Me.dgView, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'dgView
'
Me.dgView.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.dgView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
Me.dgView.BackgroundColor = System.Drawing.SystemColors.Window
Me.dgView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgView.Location = New System.Drawing.Point(12, 12)
Me.dgView.Name = "dgView"
Me.dgView.RowHeadersVisible = False
Me.dgView.Size = New System.Drawing.Size(960, 338)
Me.dgView.TabIndex = 0
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Location = New System.Drawing.Point(897, 356)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 2
Me.btnCancel.Text = "C&lose"
Me.btnCancel.UseVisualStyleBackColor = True
'
'lblError
'
Me.lblError.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lblError.AutoSize = True
Me.lblError.Location = New System.Drawing.Point(139, 362)
Me.lblError.Name = "lblError"
Me.lblError.Size = New System.Drawing.Size(54, 13)
Me.lblError.TabIndex = 5
Me.lblError.Text = "Info Label"
'
'fbBrowser
'
Me.fbBrowser.ShowNewFolderButton = False
'
'cboManifest
'
Me.cboManifest.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.cboManifest.FormattingEnabled = True
Me.cboManifest.Location = New System.Drawing.Point(12, 359)
Me.cboManifest.Name = "cboManifest"
Me.cboManifest.Size = New System.Drawing.Size(121, 21)
Me.cboManifest.TabIndex = 6
'
'frmManifestViewer
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(984, 392)
Me.Controls.Add(Me.cboManifest)
Me.Controls.Add(Me.lblError)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.dgView)
Me.MinimizeBox = False
Me.Name = "frmManifestViewer"
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Manifest Viewer"
CType(Me.dgView, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents dgView As System.Windows.Forms.DataGridView
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lblError As System.Windows.Forms.Label
Friend WithEvents fbBrowser As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents cboManifest As System.Windows.Forms.ComboBox
End Class
+123
View File
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="fbBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
+149
View File
@@ -0,0 +1,149 @@
Public Class frmManifestViewer
Private bShutdown As Boolean = False
Private oLocalManifest As SortedList
Private oRemoteManfiest As SortedList
Private oRestoreInfo As clsBackup
Private oDataTable As DataTable
Property RestoreInfo As clsBackup
Get
Return oRestoreInfo
End Get
Set(value As clsBackup)
oRestoreInfo = value
End Set
End Property
Property LocalManifestData As SortedList
Get
Return oLocalManifest
End Get
Set(value As SortedList)
oLocalManifest = value
End Set
End Property
Property RemoteManifestData As SortedList
Get
Return oRemoteManfiest
End Get
Set(value As SortedList)
oRemoteManfiest = value
End Set
End Property
Private Sub FormatManifest(ByVal iManifest As Integer)
Dim oRow As Object()
Dim oLoadData As SortedList
If iManifest = 1 Then
oLoadData = LocalManifestData
Else
oLoadData = RemoteManifestData
End If
oDataTable = New DataTable
'Setup Columns
oDataTable.Columns.Add("Name")
oDataTable.Columns.Add("Backup Path")
oDataTable.Columns.Add("Restore Path")
oDataTable.Columns.Add("Absolute Path")
oDataTable.Columns.Add("Date Updated")
oDataTable.Columns.Add("Updated By")
'Setup Data Types
oDataTable.Columns(0).DataType = GetType(String)
oDataTable.Columns(1).DataType = GetType(String)
oDataTable.Columns(2).DataType = GetType(String)
oDataTable.Columns(3).DataType = GetType(Boolean)
oDataTable.Columns(4).DataType = GetType(DateTime)
oDataTable.Columns(5).DataType = GetType(String)
For Each o As clsBackup In oLoadData.Values
oRow = New Object() {o.Name, o.FileName, o.RestorePath, o.AbsolutePath, o.DateUpdated, o.UpdatedBy}
oDataTable.Rows.Add(oRow)
Next
'Sort
oDataTable.DefaultView.Sort = "Name asc"
dgView.DataSource = oDataTable
'Setup Column Widths
dgView.Columns(0).MinimumWidth = 100
dgView.Columns(1).MinimumWidth = 175
dgView.Columns(2).MinimumWidth = 175
dgView.Columns(3).MinimumWidth = 60
dgView.Columns(4).MinimumWidth = 125
dgView.Columns(5).MinimumWidth = 100
dgView.Columns(0).FillWeight = 100
dgView.Columns(1).FillWeight = 100
dgView.Columns(2).FillWeight = 100
dgView.Columns(3).FillWeight = 25
dgView.Columns(4).FillWeight = 50
dgView.Columns(5).FillWeight = 50
End Sub
Private Sub LoadCombo()
Dim oCombo As New List(Of KeyValuePair(Of Integer, String))
oCombo.Add(New KeyValuePair(Of Integer, String)(1, "Local Manifest"))
oCombo.Add(New KeyValuePair(Of Integer, String)(2, "Remote Manifest"))
cboManifest.DataSource = oCombo
cboManifest.ValueMember = "key"
cboManifest.DisplayMember = "value"
End Sub
Private Sub frmManifestInfo_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
dgView.ReadOnly = True
dgView.AllowUserToAddRows = False
lblError.Text = String.Empty
LoadCombo()
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
Private Sub dgView_CellStateChanged(sender As Object, e As DataGridViewCellStateChangedEventArgs) Handles dgView.CellStateChanged
lblError.ForeColor = Color.Black
Select Case dgView.Columns(e.Cell.ColumnIndex).Index
Case 0
lblError.Text = "The name of the application."
Case 1
lblError.Text = "The location of the backup file to restore."
Case 2
lblError.Text = "When the backup file was updated from this computer."
Case 3
lblError.Text = "The name of this computer."
Case 4
lblError.Text = "When the local backup file was last updated."
Case 5
lblError.Text = "The name of the computer that performed the last backup."
End Select
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub frmGameInfo_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Not bShutdown Then
If MsgBox("Are you sure you want to close?", MsgBoxStyle.YesNo, "ABM") = MsgBoxResult.Yes Then
bShutdown = True
End If
End If
If Not bShutdown Then
e.Cancel = True
End If
End Sub
Private Sub cboManifest_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboManifest.SelectionChangeCommitted
FormatManifest(CInt(cboManifest.SelectedValue))
End Sub
End Class
+280
View File
@@ -0,0 +1,280 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmSettings
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.chkMonitorOnStartup = New System.Windows.Forms.CheckBox()
Me.chkBackupConfirm = New System.Windows.Forms.CheckBox()
Me.grpGeneral = New System.Windows.Forms.GroupBox()
Me.chkStartWindows = New System.Windows.Forms.CheckBox()
Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkShowDetectionTips = New System.Windows.Forms.CheckBox()
Me.chkStartToTray = New System.Windows.Forms.CheckBox()
Me.grpPaths = New System.Windows.Forms.GroupBox()
Me.btnBackupFolder = New System.Windows.Forms.Button()
Me.lblBackupFolder = New System.Windows.Forms.Label()
Me.txtBackupFolder = New System.Windows.Forms.TextBox()
Me.fbBrowser = New System.Windows.Forms.FolderBrowserDialog()
Me.btnSave = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.grpBackup = New System.Windows.Forms.GroupBox()
Me.chkCheckSum = New System.Windows.Forms.CheckBox()
Me.chkRestoreOnLaunch = New System.Windows.Forms.CheckBox()
Me.chkOverwriteWarning = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.grpGeneral.SuspendLayout()
Me.grpPaths.SuspendLayout()
Me.grpBackup.SuspendLayout()
Me.SuspendLayout()
'
'chkMonitorOnStartup
'
Me.chkMonitorOnStartup.AutoSize = True
Me.chkMonitorOnStartup.Location = New System.Drawing.Point(6, 65)
Me.chkMonitorOnStartup.Name = "chkMonitorOnStartup"
Me.chkMonitorOnStartup.Size = New System.Drawing.Size(146, 17)
Me.chkMonitorOnStartup.TabIndex = 2
Me.chkMonitorOnStartup.Text = "Start monitoring at launch"
Me.chkMonitorOnStartup.UseVisualStyleBackColor = True
'
'chkBackupConfirm
'
Me.chkBackupConfirm.AutoSize = True
Me.chkBackupConfirm.Location = New System.Drawing.Point(6, 19)
Me.chkBackupConfirm.Name = "chkBackupConfirm"
Me.chkBackupConfirm.Size = New System.Drawing.Size(160, 17)
Me.chkBackupConfirm.TabIndex = 0
Me.chkBackupConfirm.Text = "Disable backup confirmation"
Me.chkBackupConfirm.UseVisualStyleBackColor = True
'
'grpGeneral
'
Me.grpGeneral.Controls.Add(Me.chkStartWindows)
Me.grpGeneral.Controls.Add(Me.chkSync)
Me.grpGeneral.Controls.Add(Me.chkShowDetectionTips)
Me.grpGeneral.Controls.Add(Me.chkStartToTray)
Me.grpGeneral.Controls.Add(Me.chkMonitorOnStartup)
Me.grpGeneral.Location = New System.Drawing.Point(12, 12)
Me.grpGeneral.Name = "grpGeneral"
Me.grpGeneral.Size = New System.Drawing.Size(360, 145)
Me.grpGeneral.TabIndex = 0
Me.grpGeneral.TabStop = False
Me.grpGeneral.Text = "General"
'
'chkStartWindows
'
Me.chkStartWindows.AutoSize = True
Me.chkStartWindows.Location = New System.Drawing.Point(6, 19)
Me.chkStartWindows.Name = "chkStartWindows"
Me.chkStartWindows.Size = New System.Drawing.Size(117, 17)
Me.chkStartWindows.TabIndex = 0
Me.chkStartWindows.Text = "Start with Windows"
Me.chkStartWindows.UseVisualStyleBackColor = True
'
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(6, 111)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(208, 17)
Me.chkSync.TabIndex = 4
Me.chkSync.Text = "Sync game list data with backup folder"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkShowDetectionTips
'
Me.chkShowDetectionTips.AutoSize = True
Me.chkShowDetectionTips.Location = New System.Drawing.Point(6, 88)
Me.chkShowDetectionTips.Name = "chkShowDetectionTips"
Me.chkShowDetectionTips.Size = New System.Drawing.Size(136, 17)
Me.chkShowDetectionTips.TabIndex = 3
Me.chkShowDetectionTips.Text = "Show detection tooltips"
Me.chkShowDetectionTips.UseVisualStyleBackColor = True
'
'chkStartToTray
'
Me.chkStartToTray.AutoSize = True
Me.chkStartToTray.Location = New System.Drawing.Point(6, 42)
Me.chkStartToTray.Name = "chkStartToTray"
Me.chkStartToTray.Size = New System.Drawing.Size(115, 17)
Me.chkStartToTray.TabIndex = 1
Me.chkStartToTray.Text = "Start to system tray"
Me.chkStartToTray.UseVisualStyleBackColor = True
'
'grpPaths
'
Me.grpPaths.Controls.Add(Me.btnBackupFolder)
Me.grpPaths.Controls.Add(Me.lblBackupFolder)
Me.grpPaths.Controls.Add(Me.txtBackupFolder)
Me.grpPaths.Location = New System.Drawing.Point(12, 311)
Me.grpPaths.Name = "grpPaths"
Me.grpPaths.Size = New System.Drawing.Size(360, 60)
Me.grpPaths.TabIndex = 2
Me.grpPaths.TabStop = False
Me.grpPaths.Text = "Paths"
'
'btnBackupFolder
'
Me.btnBackupFolder.Location = New System.Drawing.Point(318, 23)
Me.btnBackupFolder.Name = "btnBackupFolder"
Me.btnBackupFolder.Size = New System.Drawing.Size(27, 20)
Me.btnBackupFolder.TabIndex = 2
Me.btnBackupFolder.Text = "..."
Me.btnBackupFolder.UseVisualStyleBackColor = True
'
'lblBackupFolder
'
Me.lblBackupFolder.AutoSize = True
Me.lblBackupFolder.Location = New System.Drawing.Point(6, 27)
Me.lblBackupFolder.Name = "lblBackupFolder"
Me.lblBackupFolder.Size = New System.Drawing.Size(76, 13)
Me.lblBackupFolder.TabIndex = 0
Me.lblBackupFolder.Text = "Backup Folder"
'
'txtBackupFolder
'
Me.txtBackupFolder.Location = New System.Drawing.Point(88, 24)
Me.txtBackupFolder.Name = "txtBackupFolder"
Me.txtBackupFolder.Size = New System.Drawing.Size(224, 20)
Me.txtBackupFolder.TabIndex = 1
'
'btnSave
'
Me.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK
Me.btnSave.Location = New System.Drawing.Point(216, 377)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 3
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'btnCancel
'
Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.btnCancel.Location = New System.Drawing.Point(297, 377)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 4
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'grpBackup
'
Me.grpBackup.Controls.Add(Me.chkCheckSum)
Me.grpBackup.Controls.Add(Me.chkRestoreOnLaunch)
Me.grpBackup.Controls.Add(Me.chkOverwriteWarning)
Me.grpBackup.Controls.Add(Me.chkCreateFolder)
Me.grpBackup.Controls.Add(Me.chkBackupConfirm)
Me.grpBackup.Location = New System.Drawing.Point(12, 163)
Me.grpBackup.Name = "grpBackup"
Me.grpBackup.Size = New System.Drawing.Size(360, 142)
Me.grpBackup.TabIndex = 1
Me.grpBackup.TabStop = False
Me.grpBackup.Text = "Backup and Restore Options"
'
'chkCheckSum
'
Me.chkCheckSum.AutoSize = True
Me.chkCheckSum.Location = New System.Drawing.Point(6, 111)
Me.chkCheckSum.Name = "chkCheckSum"
Me.chkCheckSum.Size = New System.Drawing.Size(195, 17)
Me.chkCheckSum.TabIndex = 4
Me.chkCheckSum.Text = "Verify backup files with a checksum"
Me.chkCheckSum.UseVisualStyleBackColor = True
'
'chkRestoreOnLaunch
'
Me.chkRestoreOnLaunch.AutoSize = True
Me.chkRestoreOnLaunch.Location = New System.Drawing.Point(6, 88)
Me.chkRestoreOnLaunch.Name = "chkRestoreOnLaunch"
Me.chkRestoreOnLaunch.Size = New System.Drawing.Size(249, 17)
Me.chkRestoreOnLaunch.TabIndex = 3
Me.chkRestoreOnLaunch.Text = "Check for new backup files to restore at launch"
Me.chkRestoreOnLaunch.UseVisualStyleBackColor = True
'
'chkOverwriteWarning
'
Me.chkOverwriteWarning.AutoSize = True
Me.chkOverwriteWarning.Location = New System.Drawing.Point(6, 65)
Me.chkOverwriteWarning.Name = "chkOverwriteWarning"
Me.chkOverwriteWarning.Size = New System.Drawing.Size(139, 17)
Me.chkOverwriteWarning.TabIndex = 2
Me.chkOverwriteWarning.Text = "Show overwrite warning"
Me.chkOverwriteWarning.UseVisualStyleBackColor = True
'
'chkCreateFolder
'
Me.chkCreateFolder.AutoSize = True
Me.chkCreateFolder.Location = New System.Drawing.Point(6, 42)
Me.chkCreateFolder.Name = "chkCreateFolder"
Me.chkCreateFolder.Size = New System.Drawing.Size(211, 17)
Me.chkCreateFolder.TabIndex = 1
Me.chkCreateFolder.Text = "Create a sub-folder for each application"
Me.chkCreateFolder.UseVisualStyleBackColor = True
'
'frmSettings
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(384, 412)
Me.Controls.Add(Me.grpBackup)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpPaths)
Me.Controls.Add(Me.grpGeneral)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmSettings"
Me.ShowIcon = False
Me.ShowInTaskbar = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Settings"
Me.grpGeneral.ResumeLayout(False)
Me.grpGeneral.PerformLayout()
Me.grpPaths.ResumeLayout(False)
Me.grpPaths.PerformLayout()
Me.grpBackup.ResumeLayout(False)
Me.grpBackup.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents chkMonitorOnStartup As System.Windows.Forms.CheckBox
Friend WithEvents chkBackupConfirm As System.Windows.Forms.CheckBox
Friend WithEvents grpGeneral As System.Windows.Forms.GroupBox
Friend WithEvents grpPaths As System.Windows.Forms.GroupBox
Friend WithEvents txtBackupFolder As System.Windows.Forms.TextBox
Friend WithEvents fbBrowser As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents lblBackupFolder As System.Windows.Forms.Label
Friend WithEvents btnBackupFolder As System.Windows.Forms.Button
Friend WithEvents chkShowDetectionTips As System.Windows.Forms.CheckBox
Friend WithEvents chkStartToTray As System.Windows.Forms.CheckBox
Friend WithEvents grpBackup As System.Windows.Forms.GroupBox
Friend WithEvents chkOverwriteWarning As System.Windows.Forms.CheckBox
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents chkRestoreOnLaunch As System.Windows.Forms.CheckBox
Friend WithEvents chkSync As System.Windows.Forms.CheckBox
Friend WithEvents chkCheckSum As System.Windows.Forms.CheckBox
Friend WithEvents chkStartWindows As System.Windows.Forms.CheckBox
End Class
+126
View File
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="fbBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>32</value>
</metadata>
</root>
+136
View File
@@ -0,0 +1,136 @@
Public Class frmSettings
Dim bShutdown As Boolean = False
Dim bBackupLocationChanged As Boolean = False
Dim bCheckSumDisabled As Boolean = False
Private oSettings As mgrSettings
Property Settings As mgrSettings
Get
Return oSettings
End Get
Set(value As mgrSettings)
oSettings = value
End Set
End Property
Private Property BackupLocationChanged As Boolean
Get
Return bBackupLocationChanged
End Get
Set(value As Boolean)
bBackupLocationChanged = value
End Set
End Property
Private Sub HandleRegistryUpdate(ByVal bToggle As Boolean)
Dim oKey As Microsoft.Win32.RegistryKey
Dim sAppName As String = Application.ProductName
Dim sAppPath As String = Application.ExecutablePath
If bToggle Then
oKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
oKey.SetValue(sAppName, """" & sAppPath & """")
oKey.Close()
Else
oKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
oKey.DeleteValue(sAppName, False)
oKey.Close()
End If
End Sub
Private Function ValidateSettings() As Boolean
'Only modify registry key when the value changed
If chkStartWindows.Checked <> oSettings.StartWithWindows Then
HandleRegistryUpdate(chkStartWindows.Checked)
End If
oSettings.StartWithWindows = chkStartWindows.Checked
oSettings.MonitorOnStartup = chkMonitorOnStartup.Checked
oSettings.StartToTray = chkStartToTray.Checked
oSettings.ShowDetectionToolTips = chkShowDetectionTips.Checked
oSettings.DisableConfirmation = chkBackupConfirm.Checked
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.ShowOverwriteWarning = chkOverwriteWarning.Checked
oSettings.RestoreOnLaunch = chkRestoreOnLaunch.Checked
'We need to clear all checksums its turned off
If chkCheckSum.Checked = False And oSettings.CheckSum = True Then
bCheckSumDisabled = True
End If
oSettings.CheckSum = chkCheckSum.Checked
'Turning syncing from off to on is the same as changing the backup folder
If chkSync.Checked = True And oSettings.Sync = False Then
bBackupLocationChanged = True
End If
oSettings.Sync = chkSync.Checked
If IO.Directory.Exists(txtBackupFolder.Text) Then
If oSettings.BackupFolder <> txtBackupFolder.Text Then
If chkSync.Checked Then bBackupLocationChanged = True
End If
oSettings.BackupFolder = txtBackupFolder.Text
Else
MsgBox("The backup folder does not exist. Please choose a valid backup folder.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
Return False
End If
Return True
End Function
Private Function SaveSettings() As Boolean
If ValidateSettings() Then
oSettings.SaveSettings()
If BackupLocationChanged Then mgrMonitorList.HandleBackupLocationChange()
If bCheckSumDisabled Then mgrManifest.DoManifestHashWipe()
Return True
Else
Return False
End If
End Function
Private Sub LoadSettings()
chkStartWindows.Checked = oSettings.StartWithWindows
chkMonitorOnStartup.Checked = oSettings.MonitorOnStartup
chkStartToTray.Checked = oSettings.StartToTray
chkShowDetectionTips.Checked = oSettings.ShowDetectionToolTips
chkBackupConfirm.Checked = oSettings.DisableConfirmation
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkOverwriteWarning.Checked = oSettings.ShowOverwriteWarning
chkRestoreOnLaunch.Checked = oSettings.RestoreOnLaunch
txtBackupFolder.Text = oSettings.BackupFolder
chkSync.Checked = oSettings.Sync
chkCheckSum.Checked = oSettings.CheckSum
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
If SaveSettings() Then
bShutdown = True
Me.Close()
End If
End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
bShutdown = True
Me.Close()
End Sub
Private Sub frmSettings_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If bShutdown = False Then
e.Cancel = True
End If
End Sub
Private Sub frmSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadSettings()
End Sub
Private Sub btnBackupFolder_Click(sender As System.Object, e As System.EventArgs) Handles btnBackupFolder.Click
fbBrowser.SelectedPath = oSettings.BackupFolder
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
txtBackupFolder.Text = fbBrowser.SelectedPath
End If
End Sub
End Class
+397
View File
@@ -0,0 +1,397 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmStartUpWizard
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStartUpWizard))
Me.tabWizard = New System.Windows.Forms.TabControl()
Me.tbPage1 = New System.Windows.Forms.TabPage()
Me.lblStep1Instructions3 = New System.Windows.Forms.Label()
Me.lblStep1Instructions2 = New System.Windows.Forms.Label()
Me.lblStep1Title = New System.Windows.Forms.Label()
Me.lblStep1Instructions = New System.Windows.Forms.Label()
Me.lblStep1Intro = New System.Windows.Forms.Label()
Me.tbPage2 = New System.Windows.Forms.TabPage()
Me.chkSync = New System.Windows.Forms.CheckBox()
Me.chkCreateFolder = New System.Windows.Forms.CheckBox()
Me.lblStep2Title = New System.Windows.Forms.Label()
Me.lblStep2Instructions = New System.Windows.Forms.Label()
Me.btnFolderBrowse = New System.Windows.Forms.Button()
Me.txtBackupPath = New System.Windows.Forms.TextBox()
Me.lblStep2Intro = New System.Windows.Forms.Label()
Me.tbPage3 = New System.Windows.Forms.TabPage()
Me.btnOpenWizard = New System.Windows.Forms.Button()
Me.btnOpenMonitorList = New System.Windows.Forms.Button()
Me.btnDownloadList = New System.Windows.Forms.Button()
Me.lblStep3Title = New System.Windows.Forms.Label()
Me.lblStep3Intro = New System.Windows.Forms.Label()
Me.tbPage4 = New System.Windows.Forms.TabPage()
Me.lblStep4Instructions3 = New System.Windows.Forms.Label()
Me.lblStep4Instructions2 = New System.Windows.Forms.Label()
Me.lblStep4Title = New System.Windows.Forms.Label()
Me.lblStep4Instructions = New System.Windows.Forms.Label()
Me.btnNext = New System.Windows.Forms.Button()
Me.btnBack = New System.Windows.Forms.Button()
Me.tabWizard.SuspendLayout()
Me.tbPage1.SuspendLayout()
Me.tbPage2.SuspendLayout()
Me.tbPage3.SuspendLayout()
Me.tbPage4.SuspendLayout()
Me.SuspendLayout()
'
'tabWizard
'
Me.tabWizard.Controls.Add(Me.tbPage1)
Me.tabWizard.Controls.Add(Me.tbPage2)
Me.tabWizard.Controls.Add(Me.tbPage3)
Me.tabWizard.Controls.Add(Me.tbPage4)
Me.tabWizard.Location = New System.Drawing.Point(-6, -24)
Me.tabWizard.Name = "tabWizard"
Me.tabWizard.SelectedIndex = 0
Me.tabWizard.Size = New System.Drawing.Size(370, 220)
Me.tabWizard.TabIndex = 0
Me.tabWizard.TabStop = False
'
'tbPage1
'
Me.tbPage1.BackColor = System.Drawing.SystemColors.Control
Me.tbPage1.Controls.Add(Me.lblStep1Instructions3)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions2)
Me.tbPage1.Controls.Add(Me.lblStep1Title)
Me.tbPage1.Controls.Add(Me.lblStep1Instructions)
Me.tbPage1.Controls.Add(Me.lblStep1Intro)
Me.tbPage1.Location = New System.Drawing.Point(4, 22)
Me.tbPage1.Name = "tbPage1"
Me.tbPage1.Padding = New System.Windows.Forms.Padding(3)
Me.tbPage1.Size = New System.Drawing.Size(362, 194)
Me.tbPage1.TabIndex = 0
Me.tbPage1.Text = "TabPage1"
'
'lblStep1Instructions3
'
Me.lblStep1Instructions3.AutoSize = True
Me.lblStep1Instructions3.Location = New System.Drawing.Point(14, 160)
Me.lblStep1Instructions3.Name = "lblStep1Instructions3"
Me.lblStep1Instructions3.Size = New System.Drawing.Size(310, 13)
Me.lblStep1Instructions3.TabIndex = 10
Me.lblStep1Instructions3.Text = "GBM was designed and tested using the Dropbox cloud service."
'
'lblStep1Instructions2
'
Me.lblStep1Instructions2.Location = New System.Drawing.Point(14, 106)
Me.lblStep1Instructions2.Name = "lblStep1Instructions2"
Me.lblStep1Instructions2.Size = New System.Drawing.Size(303, 42)
Me.lblStep1Instructions2.TabIndex = 9
Me.lblStep1Instructions2.Text = "Before proceeding you may want to sign up for a cloud service and install their c" & _
"lient software. GBM works best when paired with a cloud service and client but " & _
"is not required!"
'
'lblStep1Title
'
Me.lblStep1Title.AutoSize = True
Me.lblStep1Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep1Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep1Title.Name = "lblStep1Title"
Me.lblStep1Title.Size = New System.Drawing.Size(148, 20)
Me.lblStep1Title.TabIndex = 8
Me.lblStep1Title.Text = "Welcome to GBM"
'
'lblStep1Instructions
'
Me.lblStep1Instructions.Location = New System.Drawing.Point(14, 64)
Me.lblStep1Instructions.Name = "lblStep1Instructions"
Me.lblStep1Instructions.Size = New System.Drawing.Size(303, 42)
Me.lblStep1Instructions.TabIndex = 6
Me.lblStep1Instructions.Text = "This wizard will guide you through some easy setup steps to get started."
'
'lblStep1Intro
'
Me.lblStep1Intro.AutoSize = True
Me.lblStep1Intro.Location = New System.Drawing.Point(14, 41)
Me.lblStep1Intro.Name = "lblStep1Intro"
Me.lblStep1Intro.Size = New System.Drawing.Size(213, 13)
Me.lblStep1Intro.TabIndex = 5
Me.lblStep1Intro.Text = "Thank you for trying Game Backup Monitor!"
'
'tbPage2
'
Me.tbPage2.BackColor = System.Drawing.SystemColors.Control
Me.tbPage2.Controls.Add(Me.chkSync)
Me.tbPage2.Controls.Add(Me.chkCreateFolder)
Me.tbPage2.Controls.Add(Me.lblStep2Title)
Me.tbPage2.Controls.Add(Me.lblStep2Instructions)
Me.tbPage2.Controls.Add(Me.btnFolderBrowse)
Me.tbPage2.Controls.Add(Me.txtBackupPath)
Me.tbPage2.Controls.Add(Me.lblStep2Intro)
Me.tbPage2.Location = New System.Drawing.Point(4, 22)
Me.tbPage2.Name = "tbPage2"
Me.tbPage2.Padding = New System.Windows.Forms.Padding(3)
Me.tbPage2.Size = New System.Drawing.Size(362, 194)
Me.tbPage2.TabIndex = 1
Me.tbPage2.Text = "TabPage2"
'
'chkSync
'
Me.chkSync.AutoSize = True
Me.chkSync.Location = New System.Drawing.Point(17, 105)
Me.chkSync.Name = "chkSync"
Me.chkSync.Size = New System.Drawing.Size(258, 17)
Me.chkSync.TabIndex = 13
Me.chkSync.Text = "Sync with existing GBM data in the backup folder"
Me.chkSync.UseVisualStyleBackColor = True
'
'chkCreateFolder
'
Me.chkCreateFolder.AutoSize = True
Me.chkCreateFolder.Location = New System.Drawing.Point(17, 83)
Me.chkCreateFolder.Name = "chkCreateFolder"
Me.chkCreateFolder.Size = New System.Drawing.Size(211, 17)
Me.chkCreateFolder.TabIndex = 12
Me.chkCreateFolder.Text = "Create a sub-folder for each application"
Me.chkCreateFolder.UseVisualStyleBackColor = True
'
'lblStep2Title
'
Me.lblStep2Title.AutoSize = True
Me.lblStep2Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep2Title.Location = New System.Drawing.Point(13, 11)
Me.lblStep2Title.Name = "lblStep2Title"
Me.lblStep2Title.Size = New System.Drawing.Size(143, 20)
Me.lblStep2Title.TabIndex = 11
Me.lblStep2Title.Text = "Backup Location"
'
'lblStep2Instructions
'
Me.lblStep2Instructions.Location = New System.Drawing.Point(14, 125)
Me.lblStep2Instructions.Name = "lblStep2Instructions"
Me.lblStep2Instructions.Size = New System.Drawing.Size(335, 57)
Me.lblStep2Instructions.TabIndex = 10
Me.lblStep2Instructions.Text = resources.GetString("lblStep2Instructions.Text")
'
'btnFolderBrowse
'
Me.btnFolderBrowse.Location = New System.Drawing.Point(322, 56)
Me.btnFolderBrowse.Name = "btnFolderBrowse"
Me.btnFolderBrowse.Size = New System.Drawing.Size(27, 20)
Me.btnFolderBrowse.TabIndex = 8
Me.btnFolderBrowse.Text = "..."
Me.btnFolderBrowse.UseVisualStyleBackColor = True
'
'txtBackupPath
'
Me.txtBackupPath.AllowDrop = True
Me.txtBackupPath.Location = New System.Drawing.Point(17, 57)
Me.txtBackupPath.Name = "txtBackupPath"
Me.txtBackupPath.Size = New System.Drawing.Size(300, 20)
Me.txtBackupPath.TabIndex = 6
'
'lblStep2Intro
'
Me.lblStep2Intro.AutoSize = True
Me.lblStep2Intro.Location = New System.Drawing.Point(14, 41)
Me.lblStep2Intro.Name = "lblStep2Intro"
Me.lblStep2Intro.Size = New System.Drawing.Size(219, 13)
Me.lblStep2Intro.TabIndex = 7
Me.lblStep2Intro.Text = "Choose where GBM saves your backup files:"
'
'tbPage3
'
Me.tbPage3.BackColor = System.Drawing.SystemColors.Control
Me.tbPage3.Controls.Add(Me.btnOpenWizard)
Me.tbPage3.Controls.Add(Me.btnOpenMonitorList)
Me.tbPage3.Controls.Add(Me.btnDownloadList)
Me.tbPage3.Controls.Add(Me.lblStep3Title)
Me.tbPage3.Controls.Add(Me.lblStep3Intro)
Me.tbPage3.Location = New System.Drawing.Point(4, 22)
Me.tbPage3.Name = "tbPage3"
Me.tbPage3.Size = New System.Drawing.Size(362, 194)
Me.tbPage3.TabIndex = 2
Me.tbPage3.Text = "TabPage3"
'
'btnOpenWizard
'
Me.btnOpenWizard.Location = New System.Drawing.Point(83, 131)
Me.btnOpenWizard.Name = "btnOpenWizard"
Me.btnOpenWizard.Size = New System.Drawing.Size(196, 23)
Me.btnOpenWizard.TabIndex = 1
Me.btnOpenWizard.Text = "Add Game Wizard"
Me.btnOpenWizard.UseVisualStyleBackColor = True
'
'btnOpenMonitorList
'
Me.btnOpenMonitorList.Location = New System.Drawing.Point(83, 160)
Me.btnOpenMonitorList.Name = "btnOpenMonitorList"
Me.btnOpenMonitorList.Size = New System.Drawing.Size(196, 23)
Me.btnOpenMonitorList.TabIndex = 2
Me.btnOpenMonitorList.Text = "Game Manager"
Me.btnOpenMonitorList.UseVisualStyleBackColor = True
'
'btnDownloadList
'
Me.btnDownloadList.Location = New System.Drawing.Point(83, 102)
Me.btnDownloadList.Name = "btnDownloadList"
Me.btnDownloadList.Size = New System.Drawing.Size(196, 23)
Me.btnDownloadList.TabIndex = 0
Me.btnDownloadList.Text = "Import from Official List"
Me.btnDownloadList.UseVisualStyleBackColor = True
'
'lblStep3Title
'
Me.lblStep3Title.AutoSize = True
Me.lblStep3Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep3Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep3Title.Name = "lblStep3Title"
Me.lblStep3Title.Size = New System.Drawing.Size(155, 20)
Me.lblStep3Title.TabIndex = 10
Me.lblStep3Title.Text = "Monitoring Games"
'
'lblStep3Intro
'
Me.lblStep3Intro.Location = New System.Drawing.Point(14, 41)
Me.lblStep3Intro.Name = "lblStep3Intro"
Me.lblStep3Intro.Size = New System.Drawing.Size(335, 57)
Me.lblStep3Intro.TabIndex = 5
Me.lblStep3Intro.Text = resources.GetString("lblStep3Intro.Text")
'
'tbPage4
'
Me.tbPage4.BackColor = System.Drawing.SystemColors.Control
Me.tbPage4.Controls.Add(Me.lblStep4Instructions3)
Me.tbPage4.Controls.Add(Me.lblStep4Instructions2)
Me.tbPage4.Controls.Add(Me.lblStep4Title)
Me.tbPage4.Controls.Add(Me.lblStep4Instructions)
Me.tbPage4.Location = New System.Drawing.Point(4, 22)
Me.tbPage4.Name = "tbPage4"
Me.tbPage4.Size = New System.Drawing.Size(362, 194)
Me.tbPage4.TabIndex = 4
Me.tbPage4.Text = "TabPage5"
'
'lblStep4Instructions3
'
Me.lblStep4Instructions3.Location = New System.Drawing.Point(14, 116)
Me.lblStep4Instructions3.Name = "lblStep4Instructions3"
Me.lblStep4Instructions3.Size = New System.Drawing.Size(303, 33)
Me.lblStep4Instructions3.TabIndex = 18
Me.lblStep4Instructions3.Text = "To change anything you've setup in this wizard and see more settings and features" & _
", explore the menus in the application,"
'
'lblStep4Instructions2
'
Me.lblStep4Instructions2.Location = New System.Drawing.Point(14, 78)
Me.lblStep4Instructions2.Name = "lblStep4Instructions2"
Me.lblStep4Instructions2.Size = New System.Drawing.Size(303, 32)
Me.lblStep4Instructions2.TabIndex = 17
Me.lblStep4Instructions2.Text = "Just remember GBM can only currently monitor one game at a time."
'
'lblStep4Title
'
Me.lblStep4Title.AutoSize = True
Me.lblStep4Title.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Underline), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStep4Title.Location = New System.Drawing.Point(14, 11)
Me.lblStep4Title.Name = "lblStep4Title"
Me.lblStep4Title.Size = New System.Drawing.Size(82, 20)
Me.lblStep4Title.TabIndex = 16
Me.lblStep4Title.Text = "Finished!"
'
'lblStep4Instructions
'
Me.lblStep4Instructions.Location = New System.Drawing.Point(14, 41)
Me.lblStep4Instructions.Name = "lblStep4Instructions"
Me.lblStep4Instructions.Size = New System.Drawing.Size(303, 31)
Me.lblStep4Instructions.TabIndex = 12
Me.lblStep4Instructions.Text = "That's all there is to it! GBM will automatically monitor and backup your applic" & _
"ations each time they are closed."
'
'btnNext
'
Me.btnNext.Location = New System.Drawing.Point(272, 202)
Me.btnNext.Name = "btnNext"
Me.btnNext.Size = New System.Drawing.Size(75, 23)
Me.btnNext.TabIndex = 11
Me.btnNext.Text = "&Next"
Me.btnNext.UseVisualStyleBackColor = True
'
'btnBack
'
Me.btnBack.Location = New System.Drawing.Point(191, 202)
Me.btnBack.Name = "btnBack"
Me.btnBack.Size = New System.Drawing.Size(75, 23)
Me.btnBack.TabIndex = 10
Me.btnBack.Text = "&Back"
Me.btnBack.UseVisualStyleBackColor = True
'
'frmStartUpWizard
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(359, 237)
Me.Controls.Add(Me.btnNext)
Me.Controls.Add(Me.btnBack)
Me.Controls.Add(Me.tabWizard)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmStartUpWizard"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "GBM Setup Wizard"
Me.tabWizard.ResumeLayout(False)
Me.tbPage1.ResumeLayout(False)
Me.tbPage1.PerformLayout()
Me.tbPage2.ResumeLayout(False)
Me.tbPage2.PerformLayout()
Me.tbPage3.ResumeLayout(False)
Me.tbPage3.PerformLayout()
Me.tbPage4.ResumeLayout(False)
Me.tbPage4.PerformLayout()
Me.ResumeLayout(False)
End Sub
Friend WithEvents tabWizard As System.Windows.Forms.TabControl
Friend WithEvents tbPage1 As System.Windows.Forms.TabPage
Friend WithEvents tbPage2 As System.Windows.Forms.TabPage
Friend WithEvents btnNext As System.Windows.Forms.Button
Friend WithEvents btnBack As System.Windows.Forms.Button
Friend WithEvents tbPage3 As System.Windows.Forms.TabPage
Friend WithEvents tbPage4 As System.Windows.Forms.TabPage
Friend WithEvents lblStep1Instructions As System.Windows.Forms.Label
Friend WithEvents lblStep1Intro As System.Windows.Forms.Label
Friend WithEvents lblStep2Instructions As System.Windows.Forms.Label
Friend WithEvents btnFolderBrowse As System.Windows.Forms.Button
Friend WithEvents txtBackupPath As System.Windows.Forms.TextBox
Friend WithEvents lblStep2Intro As System.Windows.Forms.Label
Friend WithEvents lblStep3Intro As System.Windows.Forms.Label
Friend WithEvents lblStep4Instructions As System.Windows.Forms.Label
Friend WithEvents lblStep1Title As System.Windows.Forms.Label
Friend WithEvents lblStep2Title As System.Windows.Forms.Label
Friend WithEvents lblStep3Title As System.Windows.Forms.Label
Friend WithEvents lblStep4Title As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions2 As System.Windows.Forms.Label
Friend WithEvents lblStep1Instructions3 As System.Windows.Forms.Label
Friend WithEvents chkCreateFolder As System.Windows.Forms.CheckBox
Friend WithEvents btnDownloadList As System.Windows.Forms.Button
Friend WithEvents btnOpenWizard As System.Windows.Forms.Button
Friend WithEvents btnOpenMonitorList As System.Windows.Forms.Button
Friend WithEvents lblStep4Instructions3 As System.Windows.Forms.Label
Friend WithEvents lblStep4Instructions2 As System.Windows.Forms.Label
Friend WithEvents chkSync As System.Windows.Forms.CheckBox
End Class
+126
View File
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="lblStep2Instructions.Text" xml:space="preserve">
<value>GBM will store all your backup files in this location. It's best to use a cloud folder so your backups are automatically uploaded as soon as they are completed. GBM also stores a file called gbm.s3db in this location, this is how your backups are tracked so don't delete it!</value>
</data>
<data name="lblStep3Intro.Text" xml:space="preserve">
<value>Before you can start monitoring for games, they need to be configured so GBM knows what to look for and how to handle them. You can download configurations from the official pre-configured list or add them all yourself.</value>
</data>
</root>
+220
View File
@@ -0,0 +1,220 @@
Imports System.IO
Public Class frmStartUpWizard
Private oGameData As Hashtable
Private oSettings As mgrSettings
Private bShutdown As Boolean = False
Property Settings As mgrSettings
Get
Return oSettings
End Get
Set(value As mgrSettings)
oSettings = value
End Set
End Property
Private Enum eSteps As Integer
Step1 = 1
Step2 = 2
Step3 = 3
Step3a = 4
Step4 = 5
Step5 = 6
End Enum
Private eCurrentStep As eSteps = eSteps.Step1
Private Sub FormInit()
LoadGameSettings()
StepHandler()
End Sub
Private Sub CheckSync()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
'Check if a remote database already exists in the new backup location
If oDatabase.CheckDB() Then
'Make sure database is the latest version
oDatabase.DatabaseUpgrade()
mgrMonitorList.SyncMonitorLists(False)
MsgBox("Existing data was detected in the backup folder and has been imported.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
End Sub
Private Sub StepHandler()
Select Case eCurrentStep
Case eSteps.Step1
btnBack.Enabled = False
btnNext.Enabled = True
tabWizard.SelectTab(0)
Case eSteps.Step2
txtBackupPath.Text = oSettings.BackupFolder
chkCreateFolder.Checked = oSettings.CreateSubFolder
chkSync.Checked = oSettings.Sync
btnBack.Enabled = True
btnNext.Enabled = True
tabWizard.SelectTab(1)
Case eSteps.Step3
btnBack.Enabled = False
btnNext.Enabled = True
btnNext.Text = "&Next"
tabWizard.SelectTab(2)
Case eSteps.Step4
btnBack.Enabled = True
btnNext.Enabled = True
btnNext.Text = "&Finish"
tabWizard.SelectTab(3)
End Select
End Sub
Private Sub DownloadSettings()
If MsgBox("Would you like to import from the latest pre-configured game list?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
If mgrMonitorList.DoImport(mgrPath.OfficialImportURL) Then
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList)
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
End If
End If
End Sub
Private Sub LoadGameSettings()
'Load Game XML
oGameData = mgrMonitorList.ReadList(mgrMonitorList.eListTypes.ScanList)
End Sub
Private Sub OpenGameWizard()
Dim frm As New frmAddWizard
frm.GameData = oGameData
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
End Sub
Private Sub OpenMonitorList()
Dim frm As New frmGameManager
frm.BackupFolder = oSettings.BackupFolder
frm.DisableExternalFunctions = True
frm.ShowDialog()
LoadGameSettings()
If oSettings.Sync Then mgrMonitorList.SyncMonitorLists()
End Sub
Private Function ValidateBackupPath(ByVal strPath As String, ByRef sErrorMessage As String) As Boolean
If strPath = String.Empty Then
sErrorMessage = "You must select a backup path to continue."
txtBackupPath.Focus()
Return False
End If
If Not Directory.Exists(strPath) Then
sErrorMessage = "The folder you selected does not exist or is not a valid folder."
txtBackupPath.Focus()
Return False
End If
If Not Path.IsPathRooted(strPath) Then
sErrorMessage = "The selected path must be a full path."
txtBackupPath.Focus()
Return False
End If
Return True
End Function
Private Sub ValidateBack()
Select Case eCurrentStep
Case eSteps.Step2
eCurrentStep = eSteps.Step1
Case eSteps.Step3
eCurrentStep = eSteps.Step2
Case eSteps.Step3a
eCurrentStep = eSteps.Step3
Case eSteps.Step4
eCurrentStep = eSteps.Step3
End Select
StepHandler()
End Sub
Private Sub ValidateNext()
Dim bError As Boolean = False
Dim sErrorMessage As String = String.Empty
Select Case eCurrentStep
Case eSteps.Step1
eCurrentStep = eSteps.Step2
Case eSteps.Step2
If ValidateBackupPath(txtBackupPath.Text, sErrorMessage) Then
oSettings.BackupFolder = txtBackupPath.Text
oSettings.CreateSubFolder = chkCreateFolder.Checked
oSettings.Sync = chkSync.Checked
oSettings.SaveSettings()
oSettings.LoadSettings()
If oSettings.Sync Then CheckSync()
eCurrentStep = eSteps.Step3
Else
bError = True
End If
Case eSteps.Step3
eCurrentStep = eSteps.Step4
Case eSteps.Step4
bShutdown = True
Me.Close()
End Select
If bError Then MsgBox(sErrorMessage, MsgBoxStyle.Exclamation, "Game Backup Monitor")
StepHandler()
End Sub
Private Sub BackupPathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtBackupPath.Text
Dim sNewPath As String
If txtBackupPath.Text <> String.Empty Then
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose GBM backup folder:", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtBackupPath.Text = sNewPath
End Sub
Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
ValidateBack()
End Sub
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
ValidateNext()
End Sub
Private Sub frmStartUpWizard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FormInit()
End Sub
Private Sub btnFolderBrowse_Click(sender As Object, e As EventArgs) Handles btnFolderBrowse.Click
BackupPathBrowse()
End Sub
Private Sub btnDownloadList_Click(sender As Object, e As EventArgs) Handles btnDownloadList.Click
DownloadSettings()
End Sub
Private Sub btnOpenWizard_Click(sender As Object, e As EventArgs) Handles btnOpenWizard.Click
OpenGameWizard()
End Sub
Private Sub btnOpenMonitorList_Click(sender As Object, e As EventArgs) Handles btnOpenMonitorList.Click
OpenMonitorList()
End Sub
Private Sub frmStartUpWizard_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Not bShutdown Then
e.Cancel = True
End If
End Sub
End Class
+206
View File
@@ -0,0 +1,206 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmVariableManager
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.lstVariables = New System.Windows.Forms.ListBox()
Me.btnDelete = New System.Windows.Forms.Button()
Me.btnAdd = New System.Windows.Forms.Button()
Me.btnClose = New System.Windows.Forms.Button()
Me.grpVariable = New System.Windows.Forms.GroupBox()
Me.btnPathBrowse = New System.Windows.Forms.Button()
Me.txtName = New System.Windows.Forms.TextBox()
Me.txtPath = New System.Windows.Forms.TextBox()
Me.lblPath = New System.Windows.Forms.Label()
Me.lblName = New System.Windows.Forms.Label()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnSave = New System.Windows.Forms.Button()
Me.txtID = New System.Windows.Forms.TextBox()
Me.grpVariable.SuspendLayout()
Me.SuspendLayout()
'
'lstVariables
'
Me.lstVariables.FormattingEnabled = True
Me.lstVariables.Location = New System.Drawing.Point(12, 12)
Me.lstVariables.Name = "lstVariables"
Me.lstVariables.Size = New System.Drawing.Size(220, 212)
Me.lstVariables.Sorted = True
Me.lstVariables.TabIndex = 0
'
'btnDelete
'
Me.btnDelete.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDelete.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnDelete.Location = New System.Drawing.Point(48, 227)
Me.btnDelete.Name = "btnDelete"
Me.btnDelete.Size = New System.Drawing.Size(30, 23)
Me.btnDelete.TabIndex = 2
Me.btnDelete.Text = "-"
Me.btnDelete.UseVisualStyleBackColor = True
'
'btnAdd
'
Me.btnAdd.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnAdd.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.btnAdd.Location = New System.Drawing.Point(12, 227)
Me.btnAdd.Name = "btnAdd"
Me.btnAdd.Size = New System.Drawing.Size(30, 23)
Me.btnAdd.TabIndex = 1
Me.btnAdd.Text = "+"
Me.btnAdd.UseVisualStyleBackColor = True
'
'btnClose
'
Me.btnClose.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnClose.Location = New System.Drawing.Point(497, 227)
Me.btnClose.Name = "btnClose"
Me.btnClose.Size = New System.Drawing.Size(75, 23)
Me.btnClose.TabIndex = 6
Me.btnClose.Text = "C&lose"
Me.btnClose.UseVisualStyleBackColor = True
'
'grpVariable
'
Me.grpVariable.Controls.Add(Me.btnPathBrowse)
Me.grpVariable.Controls.Add(Me.txtName)
Me.grpVariable.Controls.Add(Me.txtPath)
Me.grpVariable.Controls.Add(Me.lblPath)
Me.grpVariable.Controls.Add(Me.lblName)
Me.grpVariable.Location = New System.Drawing.Point(238, 12)
Me.grpVariable.Name = "grpVariable"
Me.grpVariable.Size = New System.Drawing.Size(334, 77)
Me.grpVariable.TabIndex = 3
Me.grpVariable.TabStop = False
Me.grpVariable.Text = "Configuration"
'
'btnPathBrowse
'
Me.btnPathBrowse.Location = New System.Drawing.Point(298, 45)
Me.btnPathBrowse.Name = "btnPathBrowse"
Me.btnPathBrowse.Size = New System.Drawing.Size(30, 20)
Me.btnPathBrowse.TabIndex = 3
Me.btnPathBrowse.Text = "..."
Me.btnPathBrowse.UseVisualStyleBackColor = True
'
'txtName
'
Me.txtName.Location = New System.Drawing.Point(50, 19)
Me.txtName.Name = "txtName"
Me.txtName.Size = New System.Drawing.Size(278, 20)
Me.txtName.TabIndex = 1
'
'txtPath
'
Me.txtPath.Location = New System.Drawing.Point(50, 45)
Me.txtPath.Name = "txtPath"
Me.txtPath.Size = New System.Drawing.Size(242, 20)
Me.txtPath.TabIndex = 2
'
'lblPath
'
Me.lblPath.AutoSize = True
Me.lblPath.Location = New System.Drawing.Point(6, 48)
Me.lblPath.Name = "lblPath"
Me.lblPath.Size = New System.Drawing.Size(32, 13)
Me.lblPath.TabIndex = 1
Me.lblPath.Text = "Path:"
'
'lblName
'
Me.lblName.AutoSize = True
Me.lblName.Location = New System.Drawing.Point(6, 22)
Me.lblName.Name = "lblName"
Me.lblName.Size = New System.Drawing.Size(38, 13)
Me.lblName.TabIndex = 0
Me.lblName.Text = "Name:"
'
'btnCancel
'
Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnCancel.Location = New System.Drawing.Point(497, 95)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 5
Me.btnCancel.Text = "&Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
'
'btnSave
'
Me.btnSave.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.btnSave.Location = New System.Drawing.Point(416, 95)
Me.btnSave.Name = "btnSave"
Me.btnSave.Size = New System.Drawing.Size(75, 23)
Me.btnSave.TabIndex = 4
Me.btnSave.Text = "&Save"
Me.btnSave.UseVisualStyleBackColor = True
'
'txtID
'
Me.txtID.Enabled = False
Me.txtID.Location = New System.Drawing.Point(377, 95)
Me.txtID.Name = "txtID"
Me.txtID.Size = New System.Drawing.Size(33, 20)
Me.txtID.TabIndex = 0
Me.txtID.TabStop = False
Me.txtID.Visible = False
'
'frmVariableManager
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(584, 262)
Me.Controls.Add(Me.txtID)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnSave)
Me.Controls.Add(Me.grpVariable)
Me.Controls.Add(Me.btnClose)
Me.Controls.Add(Me.btnDelete)
Me.Controls.Add(Me.btnAdd)
Me.Controls.Add(Me.lstVariables)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "frmVariableManager"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Custom Variable Manager"
Me.grpVariable.ResumeLayout(False)
Me.grpVariable.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents lstVariables As System.Windows.Forms.ListBox
Friend WithEvents btnDelete As System.Windows.Forms.Button
Friend WithEvents btnAdd As System.Windows.Forms.Button
Friend WithEvents btnClose As System.Windows.Forms.Button
Friend WithEvents grpVariable As System.Windows.Forms.GroupBox
Friend WithEvents btnCancel As System.Windows.Forms.Button
Friend WithEvents btnSave As System.Windows.Forms.Button
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents txtPath As System.Windows.Forms.TextBox
Friend WithEvents lblPath As System.Windows.Forms.Label
Friend WithEvents lblName As System.Windows.Forms.Label
Friend WithEvents btnPathBrowse As System.Windows.Forms.Button
Friend WithEvents txtID As System.Windows.Forms.TextBox
End Class
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+340
View File
@@ -0,0 +1,340 @@
Imports System.IO
Public Class frmVariableManager
Dim hshVariableData As Hashtable
Private bIsDirty As Boolean = False
Private bIsLoading As Boolean = False
Private oCurrentVariable As clsPathVariable
Private Property IsDirty As Boolean
Get
Return bIsDirty
End Get
Set(value As Boolean)
bIsDirty = value
End Set
End Property
Private Property IsLoading As Boolean
Get
Return bIsLoading
End Get
Set(value As Boolean)
bIsLoading = value
End Set
End Property
Private Enum eModes As Integer
View = 1
Edit = 2
Add = 3
Disabled = 4
End Enum
Private eCurrentMode As eModes = eModes.Disabled
Private Property VariableData As Hashtable
Get
Return hshVariableData
End Get
Set(value As Hashtable)
hshVariableData = value
End Set
End Property
Private Sub PathBrowse()
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sCurrentPath As String = txtPath.Text
Dim sNewPath As String
If txtPath.Text <> String.Empty Then
If Directory.Exists(sCurrentPath) Then
sDefaultFolder = sCurrentPath
End If
End If
sNewPath = mgrCommon.OpenFolderBrowser("Choose the path the variable represents:", sDefaultFolder, False)
If sNewPath <> String.Empty Then txtPath.Text = sNewPath
End Sub
Private Sub LoadData()
VariableData = mgrVariables.ReadVariables
lstVariables.Items.Clear()
FormatAndFillList()
End Sub
Private Function HandleDirty() As MsgBoxResult
Dim oResult As MsgBoxResult
oResult = MsgBox("There are unsaved changes on this form. Do you want to save?", MsgBoxStyle.YesNoCancel, "Game Backup Monitor")
Select Case oResult
Case MsgBoxResult.Yes
IsDirty = False
Case MsgBoxResult.No
IsDirty = False
Case MsgBoxResult.Cancel
'No Change
End Select
Return oResult
End Function
Private Sub FormatAndFillList()
IsLoading = True
For Each oCustomVariable As clsPathVariable In VariableData.Values
lstVariables.Items.Add(oCustomVariable.Name)
Next
IsLoading = False
End Sub
Private Sub FillData()
IsLoading = True
oCurrentVariable = DirectCast(VariableData(lstVariables.SelectedItems(0).ToString), clsPathVariable)
txtID.Text = oCurrentVariable.ID
txtName.Text = oCurrentVariable.Name
txtPath.Text = oCurrentVariable.Path
IsLoading = False
End Sub
Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
If Not IsLoading Then
IsDirty = True
If Not eCurrentMode = eModes.Add Then EditVariable()
End If
End Sub
Private Sub AssignDirtyHandlers(ByVal oCtls As GroupBox.ControlCollection)
For Each ctl As Control In oCtls
If TypeOf ctl Is TextBox Then
AddHandler DirectCast(ctl, TextBox).TextChanged, AddressOf DirtyCheck_ValueChanged
End If
Next
End Sub
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
For Each ctl As Control In oCtls
If TypeOf ctl Is TextBox Then
DirectCast(ctl, TextBox).Text = String.Empty
End If
Next
txtID.Text = String.Empty
End Sub
Private Sub ModeChange()
IsLoading = True
Select Case eCurrentMode
Case eModes.Add
grpVariable.Enabled = True
WipeControls(grpVariable.Controls)
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
lstVariables.Enabled = False
Case eModes.Edit
lstVariables.Enabled = False
grpVariable.Enabled = True
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
Case eModes.View
lstVariables.Enabled = True
grpVariable.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
Case eModes.Disabled
lstVariables.Enabled = True
WipeControls(grpVariable.Controls)
grpVariable.Enabled = False
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
End Select
IsLoading = False
End Sub
Private Sub EditVariable()
eCurrentMode = eModes.Edit
ModeChange()
End Sub
Private Sub AddVariable()
eCurrentMode = eModes.Add
ModeChange()
txtName.Focus()
End Sub
Private Sub CancelEdit()
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveVariable()
Case MsgBoxResult.No
If lstVariables.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstVariables.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
Case MsgBoxResult.Cancel
'Do Nothing
End Select
Else
If lstVariables.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
ModeChange()
FillData()
lstVariables.Focus()
Else
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SaveVariable()
Dim oCustomVariable As New clsPathVariable
Dim bSuccess As Boolean = False
If txtID.Text <> String.Empty Then
oCustomVariable.ID = txtID.Text
End If
oCustomVariable.Name = txtName.Text
oCustomVariable.Path = txtPath.Text
Select Case eCurrentMode
Case eModes.Add
If CoreValidatation(oCustomVariable) Then
bSuccess = True
mgrVariables.DoVariableAdd(oCustomVariable)
mgrVariables.DoPathUpdate(oCustomVariable.Path, oCustomVariable.FormattedName)
eCurrentMode = eModes.View
End If
Case eModes.Edit
If CoreValidatation(oCustomVariable) Then
bSuccess = True
mgrVariables.DoVariableUpdate(oCustomVariable)
mgrVariables.DoPathUpdate(oCurrentVariable.FormattedName, oCurrentVariable.Path)
mgrVariables.DoPathUpdate(oCustomVariable.Path, oCustomVariable.FormattedName)
eCurrentMode = eModes.View
End If
End Select
If bSuccess Then
IsDirty = False
LoadData()
ModeChange()
If eCurrentMode = eModes.View Then lstVariables.SelectedIndex = lstVariables.Items.IndexOf(oCustomVariable.Name)
End If
End Sub
Private Sub DeleteVariable()
Dim oCustomVariable As clsPathVariable
If lstVariables.SelectedItems.Count > 0 Then
oCustomVariable = DirectCast(VariableData(lstVariables.SelectedItems(0).ToString), clsPathVariable)
If MsgBox("Are you sure you want to delete " & oCustomVariable.Name & "? This cannot be undone.", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
mgrVariables.DoVariableDelete(oCustomVariable.ID)
mgrVariables.DoPathUpdate(oCurrentVariable.FormattedName, oCurrentVariable.Path)
LoadData()
eCurrentMode = eModes.Disabled
ModeChange()
End If
End If
End Sub
Private Sub SwitchVariable()
If lstVariables.SelectedItems.Count > 0 Then
eCurrentMode = eModes.View
FillData()
ModeChange()
End If
End Sub
Private Function CoreValidatation(ByVal oCustomVariable As clsPathVariable) As Boolean
If txtName.Text = String.Empty Then
MsgBox("You must enter a valid path name.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
txtName.Focus()
Return False
End If
If txtPath.Text = String.Empty Then
MsgBox("You must enter a valid path.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
txtPath.Focus()
Return False
End If
If mgrVariables.DoCheckDuplicate(oCustomVariable.Name, oCustomVariable.ID) Then
MsgBox("An custom variable with this name already exists.", MsgBoxStyle.Exclamation, "Game Backup Monitor")
txtName.Focus()
Return False
End If
Return True
End Function
Private Sub frmVariableManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData()
ModeChange()
AssignDirtyHandlers(grpVariable.Controls)
End Sub
Private Sub lstVariables_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstVariables.SelectedIndexChanged
SwitchVariable()
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
AddVariable()
End Sub
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
DeleteVariable()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
SaveVariable()
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
CancelEdit()
End Sub
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnPathBrowse_Click(sender As Object, e As EventArgs) Handles btnPathBrowse.Click
PathBrowse()
End Sub
Private Sub frmVariableManager_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If bIsDirty Then
Select Case HandleDirty()
Case MsgBoxResult.Yes
SaveVariable()
Case MsgBoxResult.No
'Do Nothing
Case MsgBoxResult.Cancel
e.Cancel = True
End Select
End If
End Sub
End Class
+349
View File
@@ -0,0 +1,349 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{729EC23B-F5F3-464A-B357-F235362CB8C5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>GBM.My.MyApplication</StartupObject>
<RootNamespace>GBM</RootNamespace>
<AssemblyName>GBM</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\x86\Debug\</OutputPath>
<DocumentationFile>GBM.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\x86\Release\</OutputPath>
<DocumentationFile>GBM.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>gbm.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\x64\Debug\</OutputPath>
<DocumentationFile>GBM.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DefineTrace>true</DefineTrace>
<OutputPath>bin\x64\Release\</OutputPath>
<DocumentationFile>GBM.xml</DocumentationFile>
<Optimize>true</Optimize>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>References\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="Classes\clsPathVariable.vb" />
<Compile Include="Classes\clsBackup.vb" />
<Compile Include="Classes\clsGame.vb" />
<Compile Include="Forms\frmAdvancedImport.Designer.vb">
<DependentUpon>frmAdvancedImport.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmAdvancedImport.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmGameManager.Designer.vb">
<DependentUpon>frmGameManager.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmGameManager.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmFileFolderSearch.Designer.vb">
<DependentUpon>frmFileFolderSearch.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmFileFolderSearch.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmStartUpWizard.Designer.vb">
<DependentUpon>frmStartUpWizard.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmStartUpWizard.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmAddWizard.Designer.vb">
<DependentUpon>frmAddWizard.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmAddWizard.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmChooseGame.Designer.vb">
<DependentUpon>frmChooseGame.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmChooseGame.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmSettings.Designer.vb">
<DependentUpon>frmSettings.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmSettings.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmMain.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmMain.Designer.vb">
<DependentUpon>frmMain.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\frmVariableManager.Designer.vb">
<DependentUpon>frmVariableManager.vb</DependentUpon>
</Compile>
<Compile Include="Forms\frmVariableManager.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Managers\mgrCommon.vb" />
<Compile Include="Managers\mgrHash.vb" />
<Compile Include="Managers\mgrManifest.vb" />
<Compile Include="Managers\mgrMonitorList.vb" />
<Compile Include="Managers\mgrPath.vb" />
<Compile Include="Managers\mgrRestore.vb" />
<Compile Include="Managers\mgrSettings.vb" />
<Compile Include="Managers\mgrBackup.vb" />
<Compile Include="Managers\mgrSQLite.vb" />
<Compile Include="Managers\mgrVariables.vb" />
<Compile Include="Managers\mgrXML.vb" />
<Compile Include="Managers\mgrProcesses.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Forms\frmAdvancedImport.resx">
<DependentUpon>frmAdvancedImport.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmGameManager.resx">
<DependentUpon>frmGameManager.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmFileFolderSearch.resx">
<DependentUpon>frmFileFolderSearch.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmStartUpWizard.resx">
<DependentUpon>frmStartUpWizard.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmAddWizard.resx">
<DependentUpon>frmAddWizard.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmChooseGame.resx">
<DependentUpon>frmChooseGame.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmSettings.resx">
<DependentUpon>frmSettings.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmMain.resx">
<DependentUpon>frmMain.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\frmVariableManager.resx">
<DependentUpon>frmVariableManager.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="Testing\Legacy Import Test Files.7z" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="gbm.ico" />
<Content Include="License\credits.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="References\System.Data.SQLite.dll" />
<None Include="Resources\gbm.ico" />
<Content Include="Resources\Admin.png" />
<Content Include="Resources\GBM_Tray_Detected.ico" />
<Content Include="Resources\GBM_Tray_Ready.ico" />
<Content Include="Resources\GBM_Tray_Stopped.ico" />
<Content Include="Resources\User.png" />
<Content Include="Utilities\x64\7za.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x64\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x64\7zxa.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x86\7za.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x86\7za.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\x86\7zxa.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="x64\SQLite.Interop.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="x86\SQLite.Interop.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="Resources\Stopped.png" />
<None Include="Resources\Detected.png" />
<None Include="Resources\Ready.png" />
<None Include="Resources\Working.png" />
<None Include="Resources\Searching.png" />
<None Include="Resources\Unknown.png" />
<Content Include="License\7z license.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="License\gpl-3.0.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="License\license.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="readme.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Utilities\Legacy\7za.exe" />
</ItemGroup>
<ItemGroup>
<COMReference Include="Shell32">
<Guid>{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+31
View File
@@ -0,0 +1,31 @@
7-Zip Extra
~~~~~~~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2015 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license.
Notes:
You can use 7-Zip Extra on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You can receive a copy of the GNU Lesser General Public License from
http://www.gnu.org/
+5
View File
@@ -0,0 +1,5 @@
Game Backup Monitor would like to credit the following people/organizations:
7-zip - Igor Pavlov
Sixpack Status Icons - JankoAtWarpSpeed.com
Primo Icon Set - webdesignerdepot.com
+694
View File
@@ -0,0 +1,694 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GNU General Public License v3.0 - GNU Project - Free Software Foundation (FSF)</title>
<link rel="alternate" type="application/rdf+xml"
href="http://www.gnu.org/licenses/gpl-3.0.rdf" />
</head>
<body>
<h3 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h3>
<p style="text-align: center;">Version 3, 29 June 2007</p>
<p>Copyright &copy; 2007 Free Software Foundation, Inc.
&lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;</p><p>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.</p>
<h3><a name="preamble"></a>Preamble</h3>
<p>The GNU General Public License is a free, copyleft license for
software and other kinds of works.</p>
<p>The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.</p>
<p>When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.</p>
<p>To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.</p>
<p>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.</p>
<p>Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.</p>
<p>For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.</p>
<p>Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.</p>
<p>Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.</p>
<p>The precise terms and conditions for copying, distribution and
modification follow.</p>
<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>
<h4><a name="section0"></a>0. Definitions.</h4>
<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>
<p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.</p>
<p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
License. Each licensee is addressed as &ldquo;you&rdquo;. &ldquo;Licensees&rdquo; and
&ldquo;recipients&rdquo; may be individuals or organizations.</p>
<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a &ldquo;modified version&rdquo; of the
earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>
<p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
on the Program.</p>
<p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.</p>
<p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.</p>
<p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.</p>
<h4><a name="section1"></a>1. Source Code.</h4>
<p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
for making modifications to it. &ldquo;Object code&rdquo; means any non-source
form of a work.</p>
<p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.</p>
<p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
&ldquo;Major Component&rdquo;, in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.</p>
<p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.</p>
<p>The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.</p>
<p>The Corresponding Source for a work in source code form is that
same work.</p>
<h4><a name="section2"></a>2. Basic Permissions.</h4>
<p>All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.</p>
<p>You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.</p>
<p>Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.</p>
<h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
<p>No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.</p>
<p>When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.</p>
<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>
<p>You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.</p>
<p>You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.</p>
<h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>
<p>You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:</p>
<ul>
<li>a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.</li>
<li>b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
&ldquo;keep intact all notices&rdquo;.</li>
<li>c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.</li>
<li>d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.</li>
</ul>
<p>A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
&ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.</p>
<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>
<p>You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:</p>
<ul>
<li>a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.</li>
<li>b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.</li>
<li>c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.</li>
<li>d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.</li>
<li>e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.</li>
</ul>
<p>A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.</p>
<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, &ldquo;normally used&rdquo; refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.</p>
<p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.</p>
<p>If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).</p>
<p>The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.</p>
<p>Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.</p>
<h4><a name="section7"></a>7. Additional Terms.</h4>
<p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.</p>
<p>When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.</p>
<p>Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:</p>
<ul>
<li>a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or</li>
<li>b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or</li>
<li>c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or</li>
<li>d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or</li>
<li>e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or</li>
<li>f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.</li>
</ul>
<p>All other non-permissive additional terms are considered &ldquo;further
restrictions&rdquo; within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.</p>
<p>If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.</p>
<p>Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.</p>
<h4><a name="section8"></a>8. Termination.</h4>
<p>You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).</p>
<p>However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.</p>
<p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.</p>
<p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.</p>
<h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>
<p>You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.</p>
<h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>
<p>Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.</p>
<p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.</p>
<p>You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.</p>
<h4><a name="section11"></a>11. Patents.</h4>
<p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>
<p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, &ldquo;control&rdquo; includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.</p>
<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.</p>
<p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To &ldquo;grant&rdquo; such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.</p>
<p>If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. &ldquo;Knowingly relying&rdquo; means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.</p>
<p>If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.</p>
<p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.</p>
<p>Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.</p>
<h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>
<p>If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.</p>
<h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>
<p>Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.</p>
<h4><a name="section14"></a>14. Revised Versions of this License.</h4>
<p>The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.</p>
<p>Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License &ldquo;or any later version&rdquo; applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.</p>
<p>If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.</p>
<p>Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.</p>
<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>
<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
<h4><a name="section16"></a>16. Limitation of Liability.</h4>
<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.</p>
<h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>
<p>If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.</p>
<p>END OF TERMS AND CONDITIONS</p>
<h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>
<p>If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.</p>
<p>To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>
<pre> &lt;one line to give the program's name and a brief idea of what it does.&gt;
Copyright (C) &lt;year&gt; &lt;name of author&gt;
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.
</pre>
<p>Also add information on how to contact you by electronic and paper mail.</p>
<p>If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:</p>
<pre> &lt;program&gt; Copyright (C) &lt;year&gt; &lt;name of author&gt;
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
</pre>
<p>The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>
<p>You should also get your employer (if you work as a programmer) or school,
if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
&lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>
<p>The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
&lt;<a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>&gt;.</p>
</body></html>
+19
View File
@@ -0,0 +1,19 @@
GBM - Game Backup Monitor
Copyright (C) 2015 Michael J. Seiferling
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact Information:
mseiferling@gmail.com
+230
View File
@@ -0,0 +1,230 @@
Imports System.IO
Public Class mgrBackup
Private oSettings As mgrSettings
Private bCancelOperation As Boolean
Property Settings As mgrSettings
Get
Return oSettings
End Get
Set(value As mgrSettings)
oSettings = value
End Set
End Property
Property CancelOperation As Boolean
Get
Return bCancelOperation
End Get
Set(value As Boolean)
bCancelOperation = value
End Set
End Property
Public Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
Public Event UpdateBackupInfo(oGame As clsGame)
Public Event SetLastAction(sMessage As String)
Public Function CheckForUtilities(ByVal strPath As String) As Boolean
If File.Exists(strPath) Then
Return True
Else
Return False
End If
End Function
Private Function DoManifestUpdate(ByVal oGameInfo As clsGame, ByVal sBackupFile As String, ByVal dTimeStamp As DateTime, ByVal sCheckSum As String) As Boolean
Dim oItem As New clsBackup
'Create manifest item
oItem.Name = oGameInfo.Name
'Keep the path relative to the manifest location
oItem.FileName = sBackupFile.Replace(Path.GetDirectoryName(mgrPath.RemoteDatabaseLocation) & "\", "")
oItem.RestorePath = oGameInfo.TruePath
oItem.AbsolutePath = oGameInfo.AbsolutePath
oItem.DateUpdated = dTimeStamp
oItem.UpdatedBy = My.Computer.Name
oItem.CheckSum = sCheckSum
'Save Remote Manifest
If mgrManifest.DoManifestCheck(oItem.Name, mgrSQLite.Database.Remote) Then
mgrManifest.DoManifestUpdate(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)
Else
mgrManifest.DoManifestAdd(oItem, mgrSQLite.Database.Local)
End If
Return True
End Function
Private Sub BuildFileList(ByVal sBackupPath As String, ByVal sList As String, ByVal sPath As String)
Dim oStream As StreamWriter
Try
If File.Exists(sPath) Then File.Delete(sPath)
oStream = New StreamWriter(sPath)
Using oStream
If sList <> String.Empty Then
For Each sTypeItem As String In sList.Split(":")
oStream.WriteLine("""" & sBackupPath & "\" & sTypeItem & """")
Next
End If
oStream.Flush()
End Using
Catch ex As Exception
RaiseEvent UpdateLog("An error occured creating a file list: " & ex.Message, False, ToolTipIcon.Error, True)
End Try
End Sub
Public Sub DoBackup(ByVal oBackupList As List(Of clsGame))
Dim oGame As clsGame
Dim bDoBackup As Boolean
Dim bBackupCompleted As Boolean
Dim prs7z As Process
Dim sBackupFile As String
Dim sSavePath As String
Dim dTimeStamp As DateTime
Dim sTimeStamp As String
Dim sHash As String
For Each oGame In oBackupList
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder
sSavePath = String.Empty
dTimeStamp = Date.Now
sTimeStamp = " " & dTimeStamp.Month & "-" & dTimeStamp.Day & "-" & dTimeStamp.Year & "-" & dTimeStamp.Hour & "-" & dTimeStamp.Minute & "-" & dTimeStamp.Second
sHash = String.Empty
bDoBackup = True
bBackupCompleted = False
CancelOperation = False
RaiseEvent UpdateBackupInfo(oGame)
If mgrRestore.CheckManifest(oGame.Name) Then
If MsgBox("The manifest shows the backup folder contains a backup for " & oGame.Name & " that has not been restored on this computer." & vbCrLf & vbCrLf & "Do you want to overwrite this file anyway?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog("Backup aborted by user due to manifest conflict.", False, ToolTipIcon.Error, True)
bDoBackup = False
End If
End If
If oSettings.CreateSubFolder Then
sBackupFile = sBackupFile & "\" & oGame.Name
Try
If Not Directory.Exists(sBackupFile) Then
Directory.CreateDirectory(sBackupFile)
End If
Catch ex As Exception
RaiseEvent UpdateLog("Backup Aborted. A failure occured while creating backup sub-folder for " & oGame.Name & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
bDoBackup = False
End Try
End If
If oGame.AppendTimeStamp Then
sBackupFile = sBackupFile & "\" & oGame.Name & sTimeStamp & ".7z"
Else
sBackupFile = sBackupFile & "\" & oGame.Name & ".7z"
End If
If oSettings.ShowOverwriteWarning And File.Exists(sBackupFile) Then
If MsgBox("A file with the same name already exists in the backup folder." & vbCrLf & vbCrLf & "Do you want to overwrite this file?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog(oGame.Name & " backup aborted by user due to overwrite.", False, ToolTipIcon.Error, True)
bDoBackup = False
End If
End If
If bDoBackup Then
If oGame.AbsolutePath = False Then
If oGame.Path <> String.Empty Then
sSavePath = oGame.ProcessPath & "\" & oGame.Path
Else
sSavePath = oGame.ProcessPath
End If
Else
sSavePath = oGame.Path
End If
If oGame.FolderSave = True Then
BuildFileList(sSavePath, "*.*", mgrPath.IncludeFileLocation)
Else
BuildFileList(sSavePath, oGame.FileType, mgrPath.IncludeFileLocation)
End If
BuildFileList(sSavePath, oGame.ExcludeList, mgrPath.ExcludeFileLocation)
Try
'Need to delete any prior archive if it exists, the 7za utility does not support overwriting or deleting existing archives.
'If we let 7za update existing archives it will lead to excessive bloat with games that routinely add and remove files with many different file names.
If File.Exists(sBackupFile) Then
File.Delete(sBackupFile)
End If
If Directory.Exists(sSavePath) Then
prs7z.StartInfo.Arguments = "a -t7z " & "-i@""" & mgrPath.IncludeFileLocation & """ -x@""" & mgrPath.ExcludeFileLocation & """ """ & sBackupFile & """ -r"
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog("Backup of " & sSavePath & " in progress...", True, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog("Backup Aborted by user. The backup file for " & oGame.Name & " will be unusable.", False, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(oGame.Name & " backup completed.", False, ToolTipIcon.Info, True)
bBackupCompleted = True
Else
RaiseEvent UpdateLog(oGame.Name & " backup operation finished with warnings or errors.", False, ToolTipIcon.Error, True)
bBackupCompleted = False
End If
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog("Backup Aborted. The path " & sSavePath & " for " & oGame.Name & " does not exist.", False, ToolTipIcon.Error, True)
bBackupCompleted = False
End If
'Write Main Manifest
If bBackupCompleted Then
If oSettings.CheckSum Then
RaiseEvent UpdateLog("Generating SHA-256 hash for " & oGame.Name & " backup file.", False, ToolTipIcon.Info, True)
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
End If
If Not DoManifestUpdate(oGame, sBackupFile, dTimeStamp, sHash) Then
RaiseEvent UpdateLog("The manifest update for " & oGame.Name & " failed.", False, ToolTipIcon.Error, True)
End If
'Write the process path if we have it
If oGame.AbsolutePath = False Then
mgrMonitorList.DoListUpdate(oGame)
End If
End If
Catch ex As Exception
RaiseEvent UpdateLog("An unexpected error occured during the backup process of " & oGame.Name & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
End Try
End If
If bBackupCompleted Then
RaiseEvent SetLastAction(oGame.CroppedName & " backup completed")
Else
RaiseEvent SetLastAction(oGame.CroppedName & " backup failed")
End If
Next
End Sub
End Class
+113
View File
@@ -0,0 +1,113 @@
Imports System.Net
Public Class mgrCommon
Public Shared ReadOnly Property BuildVersion As Integer
Get
Return My.Application.Info.Version.Build
End Get
End Property
Public Shared ReadOnly Property AppVersion As Integer
Get
Return (My.Application.Info.Version.Major * 100) + My.Application.Info.Version.Minor
End Get
End Property
Public Shared Function CheckAddress(ByVal URL As String) As Boolean
Try
Dim request As WebRequest = WebRequest.Create(URL)
Dim response As WebResponse = request.GetResponse()
Catch ex As Exception
Return False
End Try
Return True
End Function
Public Shared Function DateToUnix(ByVal dDate As DateTime) As Int64
Return DateDiff(DateInterval.Second, #1/1/1970#, dDate)
End Function
Public Shared Function UnixToDate(ByVal iDate As Int64) As DateTime
Return DateAdd(DateInterval.Second, iDate, #1/1/1970#)
End Function
Public Shared Function BooleanYesNo(ByVal bBool As Boolean) As String
If bBool Then
Return "Yes"
Else
Return "No"
End If
End Function
Public Shared Function SaveFileBrowser(ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String, ByVal sDefaultFile As String) As String
Dim fbBrowser As New SaveFileDialog
fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = sFileType & " files (*." & sExtension & ")|*." & sExtension
fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.FileName = sDefaultFile
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
Return fbBrowser.FileName
End If
Return String.Empty
End Function
Public Shared Function OpenFileBrowser(ByVal sTitle As String, ByVal sExtension As String, ByVal sFileType As String, ByVal sDefaultFolder As String, ByVal bMulti As Boolean) As String
Dim fbBrowser As New OpenFileDialog
fbBrowser.Title = sTitle
fbBrowser.DefaultExt = sExtension
fbBrowser.Filter = sFileType & " files (*." & sExtension & ")|*." & sExtension
fbBrowser.InitialDirectory = sDefaultFolder
fbBrowser.Multiselect = bMulti
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
If bMulti Then
Dim sFileNames As String = String.Empty
For Each sFileName As String In fbBrowser.FileNames
sFileNames &= sFileName & "|"
Next
sFileNames = sFileNames.TrimEnd("|")
Return sFileNames
Else
Return fbBrowser.FileName
End If
End If
Return String.Empty
End Function
Public Shared Function OpenFolderBrowser(ByVal sTitle As String, ByVal sDefaultFolder As String, ByVal bEnableNewFolder As Boolean) As String
Dim fbBrowser As New FolderBrowserDialog
fbBrowser.Description = sTitle
fbBrowser.SelectedPath = sDefaultFolder
fbBrowser.ShowNewFolderButton = bEnableNewFolder
If fbBrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
Return fbBrowser.SelectedPath
End If
Return String.Empty
End Function
Public Shared Function IsElevated() As Boolean
If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then
Return True
Else
Return False
End If
End Function
Public Shared Sub RestartAsAdmin()
Dim oProcess As New Process
oProcess.StartInfo.FileName = Application.ExecutablePath
oProcess.StartInfo.UseShellExecute = True
oProcess.StartInfo.CreateNoWindow = True
oProcess.StartInfo.Verb = "runas"
oProcess.Start()
End Sub
End Class
+4
View File
@@ -0,0 +1,4 @@
Public Class mgrGlobals
Public Shared LocalDatabaseHash As String = String.Empty
Public Shared RemoteDatabaseHash As String = String.Empty
End Class
+43
View File
@@ -0,0 +1,43 @@
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Public Class mgrHash
'Generate SHA256 Hash
Public Shared Function Generate_SHA256_Hash(ByVal sPath As String)
Dim bHashValue() As Byte
Dim oSHA As SHA256 = SHA256.Create()
Dim sHash As String
If File.Exists(sPath) Then
Dim fileStream As FileStream = File.OpenRead(sPath)
fileStream.Position = 0
bHashValue = oSHA.ComputeHash(fileStream)
sHash = PrintByteArray(bHashValue)
fileStream.Close()
Else
sHash = String.Empty
End If
Return sHash
End Function
' Print the byte array in a readable format.
Public Shared Function PrintByteArray(ByVal bArray() As Byte) As String
Dim sHex As String = String.Empty
Dim i As Integer
For i = 0 To bArray.Length - 1
sHex &= String.Format("{0:X2}", bArray(i))
Next i
Return sHex
End Function
End Class
+168
View File
@@ -0,0 +1,168 @@
Imports System.IO
Public Class mgrManifest
Public Shared Function ReadManifest(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 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(0))
oBackupItem.Name = CStr(dr(1))
oBackupItem.FileName = CStr(dr(2))
oBackupItem.RestorePath = CStr(dr(3))
oBackupItem.AbsolutePath = CBool(dr(4))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr(5))
oBackupItem.UpdatedBy = CStr(dr(6))
If Not IsDBNull(dr(7)) Then oBackupItem.CheckSum = CStr(dr(7))
slList.Add(oBackupItem.Name, oBackupItem)
Next
Return slList
End Function
Public Shared Function DoManifestCheck(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
Dim hshParams As New Hashtable
sSQL = "SELECT * from manifest "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sName)
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 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(0))
oBackupItem.Name = CStr(dr(1))
oBackupItem.FileName = CStr(dr(2))
oBackupItem.RestorePath = CStr(dr(3))
oBackupItem.AbsolutePath = CBool(dr(4))
oBackupItem.DateUpdated = mgrCommon.UnixToDate(dr(5))
oBackupItem.UpdatedBy = CStr(dr(6))
If Not IsDBNull(dr(7)) Then oBackupItem.CheckSum = CStr(dr(7))
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 INTO manifest VALUES (@ID, @Name, @FileName, @Path, @AbsolutePath, @DateUpdated, @UpdatedBy, @CheckSum)"
hshParams.Add("ID", oBackupItem.ID)
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)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoManifestUpdate(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 Name = @QueryName"
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("QueryName", oBackupItem.Name)
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
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 Name = @QueryName"
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("QueryName", sOriginalName)
oDatabase.RunParamQuery(sSQL, hshParams)
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)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE manifest SET CheckSum = @CheckSum"
hshParams.Add("CheckSum", String.Empty)
oLocalDatabase.RunParamQuery(sSQL, hshParams)
oRemoteDatabase.RunParamQuery(sSQL, hshParams)
End Sub
End Class
+539
View File
@@ -0,0 +1,539 @@
Imports System.IO
Public Class mgrMonitorList
Public Enum eListTypes As Integer
FullList = 1
ScanList = 2
ListByKey = 3
End Enum
Public Shared Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
Public Shared Sub HandleBackupLocationChange()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Remote)
Dim iGameCount As Integer
'Check if a remote database already exists in the new backup location
If oDatabase.CheckDB() Then
'Make sure database is the latest version
oDatabase.DatabaseUpgrade()
'See if the remote database is empty
iGameCount = mgrMonitorList.ReadList(eListTypes.FullList, mgrSQLite.Database.Remote).Count
'If the remote database actually contains a list, then ask what to do
If iGameCount > 0 Then
If MsgBox("GBM data already exists in the backup folder." & vbCrLf & vbCrLf & _
"Do you want to make your local game list the new master game list in this folder? (Recommended)" & vbCrLf & vbCrLf & _
"Choosing No will sync your local game list to the current master game list in this folder.", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
mgrMonitorList.SyncMonitorLists()
Else
mgrMonitorList.SyncMonitorLists(False)
End If
Else
mgrMonitorList.SyncMonitorLists()
End If
Else
mgrMonitorList.SyncMonitorLists()
End If
End Sub
Private Shared Sub ImportMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Dim iItems As Integer = 0
Cursor.Current = Cursors.WaitCursor
'Add / Update Sync
hshCompareFrom = mgrXML.ReadMonitorList(sLocation, bWebRead)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.ProcessName) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ProcessName), clsGame)
If oFromItem.CoreEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.ProcessName)
End If
End If
Next
Cursor.Current = Cursors.Default
If hshSyncItems.Count > 0 Then
Dim frm As New frmAdvancedImport
frm.ImportData = hshSyncItems
If frm.ShowDialog() = DialogResult.OK Then
Cursor.Current = Cursors.WaitCursor
For Each oGame As clsGame In frm.ImportData.Values
If Not DoDuplicateListCheck(oGame.Name, oGame.TrueProcess) Then
DoListAdd(oGame, mgrSQLite.Database.Local)
iItems += 1
End If
Next
Cursor.Current = Cursors.Default
MsgBox("Import Complete. " & iItems & " entries have been imported.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
Else
MsgBox("This list does not contain any new games to import.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
Application.DoEvents()
End Sub
Public Shared Sub ExportMonitorList(ByVal sLocation As String)
Dim hshList As Hashtable = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
Dim bSuccess As Boolean
bSuccess = mgrXML.ExportMonitorList(hshList, sLocation)
If bSuccess Then
MsgBox("Export Complete. " & hshList.Count & " entries have been exported.", MsgBoxStyle.Information, "Game Backup Monitor")
End If
End Sub
Public Shared Sub SyncMonitorLists(Optional ByVal bToRemote As Boolean = True)
Dim hshCompareFrom As Hashtable
Dim hshCompareTo As Hashtable
Dim hshSyncItems As Hashtable
Dim hshDeleteItems As Hashtable
Dim oFromItem As clsGame
Dim oToItem As clsGame
Cursor.Current = Cursors.WaitCursor
If bToRemote Then
RaiseEvent UpdateLog("A sync to the master game list has been triggered.", False, ToolTipIcon.Info, True)
Else
RaiseEvent UpdateLog("A sync from the master game list has been triggered.", False, ToolTipIcon.Info, True)
End If
'Delete Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshDeleteItems = hshCompareTo.Clone
For Each oToItem In hshCompareTo.Values
If hshCompareFrom.Contains(oToItem.ProcessName) Then
oFromItem = DirectCast(hshCompareFrom(oToItem.ProcessName), clsGame)
If oToItem.CoreEquals(oFromItem) Then
hshDeleteItems.Remove(oToItem.ProcessName)
End If
End If
Next
For Each oGame As clsGame In hshDeleteItems.Values
If bToRemote Then
DoListDeleteSync(oGame, mgrSQLite.Database.Remote)
Else
DoListDeleteSync(oGame, mgrSQLite.Database.Local)
End If
Next
'Add / Update Sync
If bToRemote Then
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
Else
hshCompareFrom = ReadList(eListTypes.FullList, mgrSQLite.Database.Remote)
hshCompareTo = ReadList(eListTypes.FullList, mgrSQLite.Database.Local)
End If
hshSyncItems = hshCompareFrom.Clone
For Each oFromItem In hshCompareFrom.Values
If hshCompareTo.Contains(oFromItem.ProcessName) Then
oToItem = DirectCast(hshCompareTo(oFromItem.ProcessName), clsGame)
If oFromItem.SyncEquals(oToItem) Then
hshSyncItems.Remove(oFromItem.ProcessName)
End If
End If
Next
For Each oGame As clsGame In hshSyncItems.Values
'Clear Extra Data
oGame.Version = String.Empty
oGame.Company = String.Empty
oGame.ProcessPath = String.Empty
oGame.Icon = String.Empty
If bToRemote Then
If DoDuplicateListCheck(oGame.Name, oGame.TrueProcess, mgrSQLite.Database.Remote) Then
DoListUpdateSync(oGame, mgrSQLite.Database.Remote)
Else
DoListAdd(oGame, mgrSQLite.Database.Remote)
End If
Else
If DoDuplicateListCheck(oGame.Name, oGame.TrueProcess, mgrSQLite.Database.Local) Then
DoListUpdateSync(oGame, mgrSQLite.Database.Local)
Else
DoListAdd(oGame, mgrSQLite.Database.Local)
End If
End If
Next
RaiseEvent UpdateLog(hshDeleteItems.Count + hshSyncItems.Count & " change(s) synced.", False, ToolTipIcon.Info, True)
Cursor.Current = Cursors.Default
Application.DoEvents()
End Sub
Public Shared Function DoImport(ByVal sPath As String) As Boolean
If (sPath.IndexOf("http://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Or _
(sPath.IndexOf("https://", 0, StringComparison.CurrentCultureIgnoreCase) > -1) Then
If mgrCommon.CheckAddress(sPath) Then
ImportMonitorList(sPath, True)
Return True
Else
MsgBox("There's no response from:" & vbCrLf & vbCrLf & sPath & vbCrLf & vbCrLf & "Either the server is not responding or the URL is invalid.")
Return False
End If
Else
If File.Exists(sPath) Then
ImportMonitorList(sPath)
Return True
Else
MsgBox("The file:" & vbCrLf & sPath & vbCrLf & "cannot be found.")
Return False
End If
End If
End Function
Public Shared Function ReadList(ByVal eListType As eListTypes, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable
Dim oGame As clsGame
Dim oDupeGame As clsGame
sSQL = "SELECT * from monitorlist ORDER BY Name Asc"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
Select Case eListType
Case eListTypes.FullList
If hshList.Contains(oGame.ProcessName) Or hshDupeList.Contains(oGame.ProcessName) Then
oDupeGame = DirectCast(hshList.Item(oGame.ProcessName), clsGame)
If Not hshDupeList.Contains(oGame.ProcessName) Then
hshDupeList.Add(oGame.ProcessName, oDupeGame)
hshList.Remove(oDupeGame.ProcessName)
oDupeGame.Duplicate = True
oDupeGame.ProcessName = oDupeGame.ProcessName & ":" & oDupeGame.Name
hshList.Add(oDupeGame.ProcessName, oDupeGame)
End If
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True
End If
hshList.Add(oGame.ProcessName, oGame)
Case eListTypes.ScanList
If hshList.Contains(oGame.ProcessName) Then
DirectCast(hshList.Item(oGame.ProcessName), clsGame).Duplicate = True
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True
End If
If oGame.Enabled Then hshList.Add(oGame.ProcessName, oGame)
Case eListTypes.ListByKey
hshList.Add(oGame.ID, oGame)
End Select
Next
Return hshList
End Function
Public Shared Sub DoListAdd(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "INSERT INTO monitorlist VALUES (@ID, @Name, @Process, @Path, @AbsolutePath, @FolderSave, @FileType, @TimeStamp, "
sSQL &= "@ExcludeList, @ProcessPath, @Icon, @Hours, @Version, @Company, @Enabled, @MonitorOnly)"
'Parameters
hshParams.Add("ID", oGame.ID)
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("ProcessPath", oGame.ProcessPath)
hshParams.Add("Icon", oGame.Icon)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("Version", oGame.Version)
hshParams.Add("Company", oGame.Company)
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListUpdate(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, ProcessPath=@ProcessPath, Icon=@Icon, "
sSQL &= "Hours=@Hours, Version=@Version, Company=@Company, Enabled=@Enabled, MonitorOnly=@MonitorOnly WHERE MonitorID=@ID"
'Parameters
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("ProcessPath", oGame.ProcessPath)
hshParams.Add("Icon", oGame.Icon)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("Version", oGame.Version)
hshParams.Add("Company", oGame.Company)
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
hshParams.Add("ID", oGame.ID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListUpdateMulti(ByVal sMonitorIDs As List(Of String), ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim iCounter As Integer
sSQL = "UPDATE monitorlist SET Enabled=@Enabled, MonitorOnly=@MonitorOnly WHERE MonitorID IN ("
'Parameters
hshParams.Add("Enabled", oGame.Enabled)
hshParams.Add("MonitorOnly", oGame.MonitorOnly)
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ")"
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListUpdateSync(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE monitorlist SET Name=@Name, Process=@Process, Path=@Path, AbsolutePath=@AbsolutePath, FolderSave=@FolderSave, "
sSQL &= "FileType=@FileType, TimeStamp=@TimeStamp, ExcludeList=@ExcludeList, Hours=@Hours "
sSQL &= "WHERE Name=@QueryName AND Process=@QueryProcess"
'Parameters
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
hshParams.Add("Path", oGame.TruePath)
hshParams.Add("AbsolutePath", oGame.AbsolutePath)
hshParams.Add("FolderSave", oGame.FolderSave)
hshParams.Add("FileType", oGame.FileType)
hshParams.Add("TimeStamp", oGame.AppendTimeStamp)
hshParams.Add("ExcludeList", oGame.ExcludeList)
hshParams.Add("Hours", oGame.Hours)
hshParams.Add("QueryName", oGame.Name)
hshParams.Add("QueryProcess", oGame.TrueProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListDeleteSync(ByVal oGame As clsGame, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM monitorlist "
sSQL &= "WHERE Name = @Name AND Process= @Process"
hshParams.Add("Name", oGame.Name)
hshParams.Add("Process", oGame.TrueProcess)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListDelete(ByVal sMonitorID As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("MonitorID", sMonitorID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoListDeleteMulti(ByVal sMonitorIDs As List(Of String), Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local)
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim hshParams As New Hashtable
Dim iCounter As Integer
sSQL = "DELETE FROM monitorlist "
sSQL &= "WHERE MonitorID IN ("
For Each s As String In sMonitorIDs
sSQL &= "@MonitorID" & iCounter & ","
hshParams.Add("MonitorID" & iCounter, s)
iCounter += 1
Next
sSQL = sSQL.TrimEnd(",")
sSQL &= ")"
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function DoListGetbyID(ByVal iMonitorID As Integer, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As clsGame
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim oGame As New clsGame
Dim hshParams As New Hashtable
sSQL = "SELECT * from monitorlist "
sSQL &= "WHERE MonitorID = @MonitorID"
hshParams.Add("MonitorID", iMonitorID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
Next
Return oGame
End Function
Public Shared Function DoListGetbyName(ByVal sName As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local) As Hashtable
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim oGame As New clsGame
Dim hshGames As New Hashtable
Dim hshParams As New Hashtable
Dim iCounter As Integer = 0
sSQL = "SELECT * from monitorlist "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oGame = New clsGame
oGame.ID = CStr(dr(0))
oGame.Name = CStr(dr(1))
oGame.ProcessName = CStr(dr(2))
If Not IsDBNull(dr(3)) Then oGame.Path = CStr(dr(3))
oGame.AbsolutePath = CBool(dr(4))
oGame.FolderSave = CBool(dr(5))
If Not IsDBNull(dr(6)) Then oGame.FileType = CStr(dr(6))
oGame.AppendTimeStamp = CBool(dr(7))
If Not IsDBNull(dr(8)) Then oGame.ExcludeList = CStr(dr(8))
If Not IsDBNull(dr(9)) Then oGame.ProcessPath = CStr(dr(9))
If Not IsDBNull(dr(10)) Then oGame.Icon = CStr(dr(10))
oGame.Hours = CDbl(dr(11))
If Not IsDBNull(dr(12)) Then oGame.Version = CStr(dr(12))
If Not IsDBNull(dr(13)) Then oGame.Company = CStr(dr(13))
oGame.Enabled = CBool(dr(14))
oGame.MonitorOnly = CBool(dr(15))
hshGames.Add(iCounter, oGame)
iCounter += 1
Next
Return hshGames
End Function
Public Shared Function DoDuplicateListCheck(ByVal sName As String, ByVal sProcess As String, Optional ByVal iSelectDB As mgrSQLite.Database = mgrSQLite.Database.Local, Optional ByVal sExcludeID As String = "") As Boolean
Dim oDatabase As New mgrSQLite(iSelectDB)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM monitorlist WHERE Name = @Name AND Process= @Process"
hshParams.Add("Name", sName)
hshParams.Add("Process", sProcess)
If sExcludeID <> String.Empty Then
sSQL &= " AND MonitorID <> @MonitorID"
hshParams.Add("MonitorID", sExcludeID)
End If
oData = oDatabase.ReadParamData(sSQL, hshParams)
If oData.Tables(0).Rows.Count > 0 Then
Return True
Else
Return False
End If
End Function
End Class
+406
View File
@@ -0,0 +1,406 @@
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Reflection
Public Class mgrPath
'Important Note: Any changes to sSettingsRoot & sDBLocation need to be mirrored in frmMain.vb -> VerifyGameDataPath
Private Shared sSettingsRoot As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\gbm"
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 sOfficialImportURL As String = "http://backupmonitor.sourceforge.net/GBM_Official.xml"
Private Shared sOfficialManualURL As String = "http://backupmonitor.sourceforge.net/manual.php"
Private Shared sOfficialUpdatesURL As String = "http://backupmonitor.sourceforge.net/"
Private Shared sRemoteDatabaseLocation As String
Private Shared hshCustomVariables As Hashtable
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
Shared Sub New()
hshCustomVariables = mgrVariables.ReadVariables
End Sub
Shared ReadOnly Property ReleaseType As Integer
Get
Select Case oReleaseType
Case ProcessorArchitecture.Amd64
Return 64
Case ProcessorArchitecture.IA64
Return 64
Case ProcessorArchitecture.MSIL
Return 32
Case ProcessorArchitecture.X86
Return 32
Case ProcessorArchitecture.None
Return 32
End Select
Return 32
End Get
End Property
Shared ReadOnly Property Utility7zLocation As String
Get
Select Case oReleaseType
Case ProcessorArchitecture.Amd64
Return Application.StartupPath & "\Utilities\x64\7za.exe"
Case ProcessorArchitecture.IA64
Return Application.StartupPath & "\Utilities\x64\7za.exe"
Case ProcessorArchitecture.MSIL
Return Application.StartupPath & "\Utilities\x86\7za.exe"
Case ProcessorArchitecture.X86
Return Application.StartupPath & "\Utilities\x86\7za.exe"
Case ProcessorArchitecture.None
Return Application.StartupPath & "\Utilities\x86\7za.exe"
End Select
Return Application.StartupPath & "\Utilities\x86\7za.exe"
End Get
End Property
Shared ReadOnly Property DatabaseLocation As String
Get
Return sDBLocation
End Get
End Property
Shared ReadOnly Property IncludeFileLocation As String
Get
Return sIncludeFile
End Get
End Property
Shared ReadOnly Property ExcludeFileLocation As String
Get
Return sExcludeFile
End Get
End Property
Shared ReadOnly Property OfficialManualURL As String
Get
Return sOfficialManualURL
End Get
End Property
Shared ReadOnly Property OfficialUpdatesURL As String
Get
Return sOfficialUpdatesURL
End Get
End Property
Shared ReadOnly Property OfficialImportURL As String
Get
Return sOfficialImportURL
End Get
End Property
Shared ReadOnly Property SettingsRoot As String
Get
Return sSettingsRoot
End Get
End Property
Shared Property RemoteDatabaseLocation As String
Get
Return sRemoteDatabaseLocation
End Get
Set(value As String)
sRemoteDatabaseLocation = value & "\gbm.s3db"
End Set
End Property
Public Shared Function ValidateForFileSystem(ByVal sCheckString As String) As String
Dim cInvalidCharacters As Char() = {"\", "/", ":", "*", "?", """", "<", ">", "|"}
For Each c As Char In cInvalidCharacters
sCheckString = sCheckString.Replace(c, "")
Next
If sCheckString.Length > 257 Then
sCheckString = sCheckString.Substring(0, 257)
End If
Return sCheckString
End Function
Public Shared Function DetermineRelativePath(ByVal sProcessPath As String, ByVal sSavePath As String) As String
Dim sPath1Array As String()
Dim sPath2Array As String()
Dim sPath1 As String
Dim sPath2 As String
Dim sResult As String = String.Empty
Dim i As Integer = 0
Dim iRemove As Integer = 0
Dim iBackFolders As Integer = 0
Dim bDeep As Boolean
'We are working with a case insenstive file system, ensure a uniform case
sProcessPath = sProcessPath.ToLower
sSavePath = sSavePath.ToLower
'We need to ensure we have a single trailing slash on the parameters
sProcessPath = sProcessPath.TrimEnd("\")
sSavePath = sSavePath.TrimEnd("\")
sProcessPath &= "\"
sSavePath &= "\"
'Determines the direction we need to go, we always want to be relative to the process location
If sSavePath.Split("\").Length > sProcessPath.Split("\").Length Then
sPath1 = sProcessPath
sPath2 = sSavePath
bDeep = True
Else
sPath1 = sSavePath
sPath2 = sProcessPath
bDeep = False
End If
'Build an array of folders to work with from each path
sPath1Array = sPath1.Split("\")
sPath2Array = sPath2.Split("\")
'Take the shortest path and remove the common folders from both
For Each s As String In sPath1Array
If s = sPath2Array(i) And s <> String.Empty Then
sPath1 = sPath1.Remove(sPath1.IndexOf(s), s.Length + 1)
sPath2 = sPath2.Remove(sPath2.IndexOf(s), s.Length + 1)
End If
i = i + 1
Next
'Remove the trailing slashes
sPath1 = sPath1.TrimEnd("\")
sPath2 = sPath2.TrimEnd("\")
'Determine which way we go
If bDeep Then
If sPath1.Length > 0 Then
iBackFolders = sPath1.Split("\").Length
End If
sResult = sPath2
Else
If sPath2.Length > 0 Then
iBackFolders = sPath2.Split("\").Length
End If
sResult = sPath1
End If
'Insert direction modifiers based on how many folders are left
For i = 1 To iBackFolders
sResult = "..\" & sResult
Next i
'Done
Return sResult
End Function
Public Shared Function ReplaceSpecialPaths(sValue As String) As String
Dim sMyDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim sPublicDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
Dim sAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim sAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable
If sValue.Contains("*mydocs*") Then
Return sValue.Replace("*mydocs*", sMyDocs)
End If
If sValue.Contains("*publicdocs*") Then
Return sValue.Replace("*publicdocs*", sPublicDocs)
End If
If sValue.Contains("*appdatalocal*") Then
Return sValue.Replace("*appdatalocal*", sAppDataLocal)
End If
If sValue.Contains("*appdataroaming*") Then
Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
End If
If sValue.Contains("*currentuser*") Then
Return sValue.Replace("*currentuser*", sCurrentUser)
End If
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.FormattedName) Then
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
End If
Next
Return sValue
End Function
Public Shared Function ReverseSpecialPaths(sValue As String) As String
Dim sMyDocs As String = "*mydocs*"
Dim sPublicDocs As String = "*publicdocs*"
Dim sAppDataRoaming As String = "*appdatalocal*"
Dim sAppDataLocal As String = "*appdataroaming*"
Dim sCurrentUser As String = "*currentuser*"
Dim oCustomVariable As clsPathVariable
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), sMyDocs)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), sPublicDocs)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), sAppDataLocal)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), sAppDataRoaming)
End If
If sValue.Contains(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) Then
Return sValue.Replace(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), sCurrentUser)
End If
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.Path) Then
Return sValue.Replace(oCustomVariable.Path, oCustomVariable.FormattedName)
End If
Next
Return sValue
End Function
Public Shared Function IsAbsolute(sValue As String) As Boolean
Dim hshFolders As New Hashtable
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
Dim oCustomVariable As clsPathVariable
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
hshFolders.Add(Guid.NewGuid.ToString, Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))
'Load Custom Variables
For Each oCustomVariable In hshCustomVariables.Values
hshFolders.Add(Guid.NewGuid.ToString, oCustomVariable.Path)
Next
For Each de As DictionaryEntry In hshFolders
If sValue.Contains(de.Value) Then
Return True
End If
Next
Return False
End Function
Public Shared Function VerifyCustomVariables(ByVal hshScanlist As Hashtable, ByRef sGames As String) As Boolean
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
Dim sVariableCheck As String
Dim sPattern As String = "\*(.*)\*"
Dim oGame As clsGame
Dim oMatch As Match
Dim bClean As Boolean = True
For Each oGame In hshScanlist.Values
oMatch = Regex.Match(oGame.Path, sPattern)
If oMatch.Success Then
sVariableCheck = oMatch.Value.Replace("*", String.Empty)
If Not hshCustomVariables.ContainsKey(sVariableCheck) Then
sGames &= vbCrLf & oGame.Name & " (" & sVariableCheck & ")"
bClean = False
End If
End If
Next
Return bClean
End Function
Public Shared Sub CustomVariablesReload()
hshCustomVariables = mgrVariables.ReadVariables
End Sub
Public Shared Function SetManualgamePath() As String
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim sNewPath As String
sNewPath = mgrCommon.OpenFolderBrowser("Choose the game folder containing the executable.", sDefaultFolder, False)
Return sNewPath
End Function
Public Shared Function ProcessPathSearch(ByVal sGameName As String, ByVal sProcess As String, ByVal sSearchReason As String, Optional ByVal bNoAuto As Boolean = False) As String
Dim frmFind As New frmFileFolderSearch
Dim sMessage As String
Dim sFolder As String = String.Empty
Dim bSearchFailed As Boolean = False
frmFind.SearchItem = sProcess & ".*"
frmFind.FolderSearch = False
'We can't automatically search for certain game types
If bNoAuto Then
sMessage = sSearchReason & vbCrLf & vbCrLf & "Do you wish to manually set the game path? (Path will be saved)"
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
sFolder = SetManualgamePath()
End If
Return sFolder
End If
sMessage = sSearchReason & vbCrLf & vbCrLf & "Do you wish to automatically search for the game path? (Path will be saved)"
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
frmFind.ShowDialog()
If frmFind.FoundItem <> String.Empty Then
sFolder = IO.Path.GetDirectoryName(frmFind.FoundItem)
sMessage = sGameName & " was located in the following folder:" & vbCrLf & vbCrLf & _
sFolder & vbCrLf & vbCrLf & "Is this correct?"
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
Return sFolder
Else
sFolder = String.Empty
End If
Else
bSearchFailed = True
End If
If bSearchFailed Then
sMessage = "The search failed to locate the path for " & sGameName & "." & vbCrLf & vbCrLf & _
"Do you wish to manually set the game path? (Path will be saved)"
Else
sMessage = "Do you wish to manually set the game path? (Path will be saved)"
End If
If MsgBox(sMessage, MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
sFolder = SetManualgamePath()
End If
End If
Return sFolder
End Function
Public Shared Function VerifyBackupPath(ByRef sBackupPath As String) As Boolean
Dim dBrowser As FolderBrowserDialog
If Not Directory.Exists(sBackupPath) Then
If MsgBox("The backup location " & sBackupPath & " is not available." & vbCrLf & _
"It may be on an external or network drive that isn't connected." & vbCrLf & vbCrLf & _
"Do you want to select another backup location and continue?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
dBrowser = New FolderBrowserDialog
dBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
If dBrowser.ShowDialog = DialogResult.OK Then
sBackupPath = dBrowser.SelectedPath
Return True
Else
Return False
End If
Else
Return False
End If
End If
Return True
End Function
End Class
+164
View File
@@ -0,0 +1,164 @@
Imports System.Diagnostics
Imports System.IO
Imports System.Threading
Public Class mgrProcesses
Private prsFoundProcess As Process
Private dStartTime As DateTime = Now, dEndTime As DateTime = Now
Private lTimeSpent As Long = 0
Private oGame As clsGame
Private oDuplicateGames As New ArrayList
Private bDuplicates As Boolean
Private bVerified As Boolean = False
Property FoundProcess As Process
Get
Return prsFoundProcess
End Get
Set(value As Process)
prsFoundProcess = value
End Set
End Property
Property StartTime As DateTime
Get
Return dStartTime
End Get
Set(value As DateTime)
dStartTime = value
End Set
End Property
Property EndTime As DateTime
Get
Return dEndTime
End Get
Set(value As DateTime)
dEndTime = value
End Set
End Property
ReadOnly Property TimeSpent As TimeSpan
Get
Return dEndTime.Subtract(dStartTime)
End Get
End Property
Property GameInfo As clsGame
Get
Return oGame
End Get
Set(value As clsGame)
oGame = value
End Set
End Property
Property Duplicate As Boolean
Get
Return bDuplicates
End Get
Set(value As Boolean)
bDuplicates = value
End Set
End Property
Property DuplicateList As ArrayList
Get
Return oDuplicateGames
End Get
Set(value As ArrayList)
oDuplicateGames = value
End Set
End Property
Private Sub VerifyDuplicate(oGame As clsGame, hshScanList As Hashtable)
Dim sProcess As String
bDuplicates = True
oDuplicateGames.Clear()
For Each o As clsGame In hshScanList.Values
If o.ProcessName.Contains("dosbox") Then
If o.ProcessName.Split(":").Length = 3 Then
sProcess = o.ProcessName.Remove(o.ProcessName.LastIndexOf(":"))
Else
sProcess = o.ProcessName
End If
Else
sProcess = o.ProcessName.Split(":")(0)
End If
If o.Duplicate = True And sProcess = oGame.TrueProcess Then
oDuplicateGames.Add(o.ShallowCopy)
End If
Next
End Sub
Public Function SearchRunningProcesses(ByVal hshScanList As Hashtable, ByRef bNeedsPath As Boolean, ByRef iErrorCode As Integer) As Boolean
Dim prsList() As Process = Process.GetProcesses
Dim sDBoxProcess As String()
Dim sProcessCheck As String = String.Empty
For Each prsCurrent As Process In prsList
'Handle DOSBox Processes
If prsCurrent.ProcessName.ToLower = "dosbox" Then
sDBoxProcess = prsCurrent.MainWindowTitle.Split(":")
'If the dosbox process title doesn't have 3 elements it's not ready yet.
If sDBoxProcess.Length = 3 Then
sProcessCheck = "dosbox:" & sDBoxProcess(2).Trim
Else
'Drop out for now
Return False
End If
Else
sProcessCheck = prsCurrent.ProcessName
End If
If hshScanList.ContainsKey(sProcessCheck) Then
prsFoundProcess = prsCurrent
oGame = DirectCast(hshScanList.Item(sProcessCheck), clsGame).ShallowCopy
If oGame.Duplicate = True Then
VerifyDuplicate(oGame, hshScanList)
Else
bDuplicates = False
oDuplicateGames.Clear()
End If
If Not oGame.AbsolutePath Or oGame.Duplicate Then
Try
oGame.ProcessPath = Path.GetDirectoryName(prsCurrent.MainModule.FileName)
Catch exWin32 As System.ComponentModel.Win32Exception
'If an exception occurs the process is:
'Running as administrator and the app isn't.
'The process is 64-bit and the process folder is required, shouldn't happen often.
If exWin32.NativeErrorCode = 5 Then
bNeedsPath = True
iErrorCode = 5
ElseIf exWin32.NativeErrorCode = 299 Then
bNeedsPath = True
iErrorCode = 299
Else
'A different failure occured, drop out and continue to scan.
Return False
End If
Catch exAll As Exception
'A different failure occured, drop out and continue to scan.
Return False
End Try
End If
'This will force two cycles for detection to try and prevent issues with UAC prompt
If Not bVerified Then
bVerified = True
Return False
Else
bVerified = False
Return True
End If
End If
Next
Return False
End Function
End Class
+256
View File
@@ -0,0 +1,256 @@
Imports System.IO
Public Class mgrRestore
Private oSettings As mgrSettings
Private bCancelOperation As Boolean
Property Settings As mgrSettings
Get
Return oSettings
End Get
Set(value As mgrSettings)
oSettings = value
End Set
End Property
Property CancelOperation As Boolean
Get
Return bCancelOperation
End Get
Set(value As Boolean)
bCancelOperation = value
End Set
End Property
Public Event UpdateLog(sLogUpdate As String, bTrayUpdate As Boolean, objIcon As System.Windows.Forms.ToolTipIcon, bTimeStamp As Boolean)
Public Event UpdateRestoreInfo(oRestoreInfo As clsBackup)
Public Event SetLastAction(sMessage As String)
Public Shared Function CheckPath(ByRef oRestoreInfo As clsBackup, ByVal oGame As clsGame) As Boolean
Dim sProcess As String
Dim sRestorePath As String
Dim bNoAuto As Boolean
If Not oRestoreInfo.AbsolutePath Then
If oGame.ProcessPath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = oGame.ProcessPath & "\" & oRestoreInfo.RestorePath
Else
sProcess = oGame.TrueProcess
If oGame.Duplicate = True Or oGame.ProcessName.Contains("dosbox") Then bNoAuto = True
sRestorePath = mgrPath.ProcessPathSearch(oRestoreInfo.Name, sProcess, oRestoreInfo.Name & " uses a relative path and has never been detected on this computer.", bNoAuto)
If sRestorePath <> String.Empty Then
oRestoreInfo.RelativeRestorePath = sRestorePath & "\" & oRestoreInfo.RestorePath
Else
Return False
End If
End If
End If
Return True
End Function
Public Shared Function CheckManifest(ByVal sAppName As String) As Boolean
Dim slLocalManifest As SortedList
Dim slRemoteManifest As SortedList
Dim oLocalItem As New clsBackup
Dim oRemoteItem As New clsBackup
Dim bLocal As Boolean = False
Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
If slLocalManifest.Contains(sAppName) Then
oLocalItem = DirectCast(slLocalManifest(sAppName), clsBackup)
bLocal = True
End If
If slRemoteManifest.Contains(sAppName) Then
oRemoteItem = DirectCast(slRemoteManifest(sAppName), clsBackup)
bRemote = True
End If
If bLocal And bRemote Then
'Compare
If oRemoteItem.DateUpdated > oLocalItem.DateUpdated Then
oRemoteItem.LastDateUpdated = oLocalItem.DateUpdated
oRemoteItem.LastUpdatedBy = oLocalItem.UpdatedBy
Return True
End If
End If
If bRemote And Not bLocal Then
Return True
End If
Return False
End Function
Public Shared Function CompareManifests() As SortedList
Dim slLocalManifest As SortedList
Dim slRemoteManifest As SortedList
Dim oLocalItem As clsBackup
Dim slRestoreItems As New SortedList
Dim bLocal As Boolean = False
Dim bRemote As Boolean = False
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Remote)
For Each oItem As clsBackup In slRemoteManifest.Values
If slLocalManifest.Contains(oItem.Name) Then
oLocalItem = DirectCast(slLocalManifest(oItem.Name), clsBackup)
If oItem.DateUpdated > oLocalItem.DateUpdated Then
oLocalItem.FileName = oItem.FileName
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If
Else
oLocalItem = oItem
oLocalItem.LastDateUpdated = oItem.DateUpdated
oLocalItem.LastUpdatedBy = oItem.UpdatedBy
oLocalItem.DateUpdated = Nothing
oLocalItem.UpdatedBy = Nothing
slRestoreItems.Add(oLocalItem.Name, oLocalItem)
End If
Next
Return slRestoreItems
End Function
Public Shared Function SyncLocalManifest() As SortedList
Dim slLocalManifest As SortedList
Dim slRemoteManifest As SortedList
Dim slRemovedItems As New SortedList
slLocalManifest = mgrManifest.ReadManifest(mgrSQLite.Database.Local)
slRemoteManifest = mgrManifest.ReadManifest(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)
End If
Next
Return slRemovedItems
End Function
Public Sub DoRestore(ByVal oRestoreList As List(Of clsBackup))
Dim prs7z As Process
Dim sBackupFile As String
Dim sExtractPath As String
Dim bDoRestore As Boolean
Dim bRestoreCompleted As Boolean
Dim sHash As String
For Each oBackupInfo In oRestoreList
'Init
prs7z = New Process
sBackupFile = oSettings.BackupFolder & "\" & oBackupInfo.FileName
sExtractPath = String.Empty
bDoRestore = True
bRestoreCompleted = False
CancelOperation = False
RaiseEvent UpdateRestoreInfo(oBackupInfo)
If oBackupInfo.AbsolutePath Then
sExtractPath = oBackupInfo.RestorePath
Else
sExtractPath = oBackupInfo.RelativeRestorePath
End If
'Check if restore location exists, prompt to create if it doesn't.
If Not Directory.Exists(sExtractPath) Then
If MsgBox("The restore path " & sExtractPath & " does not exist." & vbCrLf & vbCrLf & _
"Do you want to create the folder and continue?", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.Yes Then
Try
Directory.CreateDirectory(sExtractPath)
Catch ex As Exception
RaiseEvent UpdateLog("The restore path could not be created due to an unexpected error." & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
bDoRestore = False
End Try
Else
RaiseEvent UpdateLog("Restored Aborted. The path " & sExtractPath & " does not exist.", False, ToolTipIcon.Error, True)
bDoRestore = False
End If
End If
'Check file integrity
If oSettings.CheckSum Then
If oBackupInfo.CheckSum <> String.Empty Then
sHash = mgrHash.Generate_SHA256_Hash(sBackupFile)
If sHash <> oBackupInfo.CheckSum Then
RaiseEvent UpdateLog("The backup file for " & oBackupInfo.Name & " has failed the file integrity check.", False, ToolTipIcon.Info, True)
If MsgBox("The backup file for " & oBackupInfo.Name & " has failed the file intergity check. It may be corrupted, not exist or been modified by another application." & vbCrLf & vbCrLf & _
"Do you still want to restore this backup? (Not Recommended)", MsgBoxStyle.YesNo, "Game Backup Monitor") = MsgBoxResult.No Then
RaiseEvent UpdateLog("Restored Aborted by user due to a failed file integrity check.", False, ToolTipIcon.Info, True)
bDoRestore = False
End If
Else
RaiseEvent UpdateLog(oBackupInfo.Name & " backup has been verified.", False, ToolTipIcon.Info, True)
End If
Else
RaiseEvent UpdateLog(oBackupInfo.Name & " has no stored checksum, verification has been skipped.", False, ToolTipIcon.Info, True)
End If
End If
If bDoRestore Then
Try
If File.Exists(sBackupFile) Then
prs7z.StartInfo.Arguments = "x """ & sBackupFile & """ -o""" & sExtractPath & "\"" -aoa -r"
prs7z.StartInfo.FileName = mgrPath.Utility7zLocation
prs7z.StartInfo.UseShellExecute = False
prs7z.StartInfo.RedirectStandardOutput = True
prs7z.StartInfo.CreateNoWindow = True
prs7z.Start()
RaiseEvent UpdateLog("Restore to " & sExtractPath & " in progress...", True, ToolTipIcon.Info, True)
While Not prs7z.StandardOutput.EndOfStream
If CancelOperation Then
prs7z.Kill()
RaiseEvent UpdateLog("Restored Aborted by user. The save games for " & oBackupInfo.Name & " will be damaged or invalid.", False, ToolTipIcon.Error, True)
Exit While
End If
RaiseEvent UpdateLog(prs7z.StandardOutput.ReadLine, False, ToolTipIcon.Info, False)
End While
prs7z.WaitForExit()
If Not CancelOperation Then
If prs7z.ExitCode = 0 Then
RaiseEvent UpdateLog(oBackupInfo.Name & " backup restored.", True, ToolTipIcon.Info, True)
bRestoreCompleted = True
Else
RaiseEvent UpdateLog(oBackupInfo.Name & " restore operation finished with warnings or errors.", False, ToolTipIcon.Info, True)
bRestoreCompleted = False
End If
End If
prs7z.Dispose()
Else
RaiseEvent UpdateLog("Restore Aborted. The backup file could not be found. Ensure the backup location is available.", False, ToolTipIcon.Error, True)
End If
If bRestoreCompleted Then
'Save Local Manifest
If mgrManifest.DoManifestCheck(oBackupInfo.Name, mgrSQLite.Database.Local) Then
mgrManifest.DoManifestUpdate(oBackupInfo, mgrSQLite.Database.Local)
Else
mgrManifest.DoManifestAdd(oBackupInfo, mgrSQLite.Database.Local)
End If
End If
Catch ex As Exception
RaiseEvent UpdateLog("An unexpected error occured during the restore process." & vbCrLf & ex.Message, False, ToolTipIcon.Error, True)
End Try
If bRestoreCompleted Then
RaiseEvent SetLastAction(oBackupInfo.CroppedName & " backup restored")
Else
RaiseEvent SetLastAction(oBackupInfo.CroppedName & " restore failed")
End If
End If
Next
End Sub
End Class
+440
View File
@@ -0,0 +1,440 @@
Imports System.IO
Imports System.Data.SQLite
Public Class mgrSQLite
Public Enum Database As Integer
Local = 1
Remote = 2
End Enum
Private sDatabaseLocation As String
Private sConnectString As String
Private eDatabase As Database
Private db As SQLiteConnection
Public Sub New(ByVal eSelectDB As Database)
Select Case eSelectDB
Case Database.Local
eDatabase = Database.Local
sDatabaseLocation = mgrPath.DatabaseLocation
sConnectString = "Data Source=" & mgrPath.DatabaseLocation & ";Version=3;"
Case Database.Remote
eDatabase = Database.Remote
sDatabaseLocation = mgrPath.RemoteDatabaseLocation
sConnectString = "Data Source=" & mgrPath.RemoteDatabaseLocation & ";Version=3;"
End Select
End Sub
Private Sub BackupDB(ByVal sLastVer As String)
Dim sNewFile As String = String.Empty
Try
Select Case eDatabase
Case Database.Local
sNewFile = mgrPath.DatabaseLocation & "." & sLastVer & ".bak"
File.Copy(mgrPath.DatabaseLocation, sNewFile, False)
Case Database.Remote
sNewFile = mgrPath.RemoteDatabaseLocation & "." & sLastVer & ".bak"
File.Copy(mgrPath.RemoteDatabaseLocation, sNewFile, False)
End Select
Catch ex As Exception
MsgBox("An error occured creating a backup of the database file at " & sNewFile & vbCrLf & vbCrLf & ex.Message)
End Try
End Sub
Public Function CheckDBVer(Optional ByRef iDBVer As Integer = 0) As Boolean
iDBVer = GetDatabaseVersion()
If iDBVer > mgrCommon.AppVersion Then
Return False
End If
Return True
End Function
Public Function CheckDB() As Boolean
If File.Exists(sDatabaseLocation) Then
Return True
End If
Return False
End Function
Private Function CreateLocalDatabase() As Boolean
Dim sSql As String
Try
'Create the DB
SQLiteConnection.CreateFile(sDatabaseLocation)
'Add Tables (Settings)
sSql = "CREATE TABLE settings (SettingsID INTEGER NOT NULL PRIMARY KEY, MonitorOnStartup BOOLEAN NOT NULL, StartToTray BOOLEAN NOT NULL, ShowDetectionToolTips BOOLEAN NOT NULL, " & _
"DisableConfirmation BOOLEAN NOT NULL, CreateSubFolder BOOLEAN NOT NULL, ShowOverwriteWarning BOOLEAN NOT NULL, RestoreOnLaunch BOOLEAN NOT NULL, " & _
"BackupFolder TEXT NOT NULL, Sync BOOLEAN NOT NULL, CheckSum BOOLEAN NOT NULL, StartWithWindows BOOLEAN NOT NULL);"
'Add Tables (Monitor List)
sSql &= "CREATE TABLE monitorlist (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, " & _
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & _
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & _
"PRIMARY KEY(Name, Process));"
'Add Tables (Variables)
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, " & _
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
RunParamQuery(sSql, New Hashtable)
Return True
Catch e As Exception
MsgBox("An error has occured attempting to create the local application database: " & vbCrLf & vbCrLf & e.Message)
Return False
End Try
End Function
Private Function CreateRemoteDatabase() As Boolean
Dim sSql As String
Try
'Create the DB
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, " & _
"AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, " & _
"ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, " & _
"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, " & _
"AbsolutePath BOOLEAN NOT NULL, DateUpdated TEXT NOT NULL, UpdatedBy TEXT NOT NULL, CheckSum TEXT);"
'Set Version
sSql &= "PRAGMA user_version=" & mgrCommon.AppVersion
RunParamQuery(sSql, New Hashtable)
Return True
Catch e As Exception
MsgBox("An error has occured attempting to create the remote application database: " & vbCrLf & vbCrLf & e.Message)
Return False
End Try
End Function
Private Function CreateDB() As Boolean
Dim bSuccess As Boolean
Select Case eDatabase
Case Database.Local
bSuccess = CreateLocalDatabase()
Case Database.Remote
bSuccess = CreateRemoteDatabase()
End Select
Return bSuccess
End Function
Public Sub Connect()
If CheckDB() Then
db = New SQLiteConnection(sConnectString)
db.Open()
Else
CreateDB()
db.Open()
End If
End Sub
Public Sub Disconnect()
db.Close()
End Sub
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
Connect()
command = New SQLiteCommand(sSQL, db)
BuildParams(command, hshParams)
trans = db.BeginTransaction()
Try
command.ExecuteNonQuery()
trans.Commit()
Catch e As Exception
trans.Rollback()
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message)
Return False
Finally
command.Dispose()
Disconnect()
End Try
Return True
End Function
Public Function ReadParamData(ByVal sSQL As String, ByVal hshParams As Hashtable) As DataSet
Dim adapter As SQLiteDataAdapter
Dim command As SQLiteCommand
Dim oData As New DataSet
Connect()
command = New SQLiteCommand(sSQL, db)
BuildParams(command, hshParams)
Try
adapter = New SQLiteDataAdapter(command)
adapter.Fill(oData)
Catch e As Exception
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message)
Finally
command.Dispose()
Disconnect()
End Try
Return oData
End Function
Private Function GetDatabaseVersion() As Integer
Dim sSQL As String
Dim iVer As Integer
Dim oData As DataSet
sSQL = "PRAGMA user_version"
oData = ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
iVer = CInt(dr(0))
Next
Return iVer
End Function
Private Function FieldExists(ByVal sField As String, ByVal sTable As String) As Boolean
Dim sSQL As String
Dim sCurrentField As String
Dim oData As DataSet
sSQL = "PRAGMA table_info(" & sTable & ")"
oData = ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
sCurrentField = CStr(dr(1))
If sCurrentField = sField Then
Return True
End If
Next
Return False
End Function
Public Sub UpgradeToUnixTime(ByVal sTable As String, ByVal sField As String, ByVal sKeyField As String)
Dim sSQL As String
Dim oData As DataSet
Dim sID As String
Dim dDate As DateTime
Dim iDate As Int64
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM " & sTable
oData = ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
hshParams.Clear()
sID = CStr(dr(sKeyField))
Try
'We need to fallback if the date string cannot be converted
dDate = CDate(dr(sField))
Catch
'Use the current date as a fallback
dDate = Now
End Try
iDate = mgrCommon.DateToUnix(dDate)
sSQL = "UPDATE " & sTable & " SET " & sField & "= @NewDate WHERE " & sKeyField & "= @OldID;"
hshParams.Add("OldID", sID)
hshParams.Add("NewDate", iDate)
RunParamQuery(sSQL, hshParams)
Next
End Sub
Public Sub UpgradeToGUID(ByVal sTable As String, ByVal sField As String)
Dim sSQL As String
Dim iCurrentID As Integer
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM " & sTable
oData = ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
hshParams.Clear()
iCurrentID = CInt(dr(sField))
sSQL = "UPDATE " & sTable & " SET " & sField & "= @NewID WHERE " & sField & "= @OldID;"
hshParams.Add("OldID", iCurrentID)
hshParams.Add("NewID", Guid.NewGuid.ToString)
RunParamQuery(sSQL, hshParams)
Next
End Sub
Public Sub DatabaseUpgrade()
Dim sSQL As String
'0.9 Upgrade
If GetDatabaseVersion() < 90 Then
BackupDB("v8")
sSQL = "ALTER TABLE monitorlist ADD COLUMN MonitorOnly BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=90"
RunParamQuery(sSQL, New Hashtable)
End If
'0.91 Upgrade
If GetDatabaseVersion() < 91 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v84")
'Overhaul Monitor List Table
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly) "
sSQL &= "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist;"
sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Variables Table
sSQL &= "CREATE TABLE variables_new (VariableID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, Path TEXT NOT NULL);"
sSQL &= "INSERT INTO variables_new (VariableID, Name, Path) SELECT VariableID, Name, Path FROM variables;"
sSQL &= "DROP TABLE variables; ALTER TABLE variables_new RENAME TO variables;"
'Overhaul Manifest Table
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, 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;"
'Add new settings
sSQL &= "ALTER TABLE settings ADD COLUMN Sync BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "ALTER TABLE settings ADD COLUMN CheckSum BOOLEAN NOT NULL DEFAULT 1;"
sSQL &= "PRAGMA user_version=91"
RunParamQuery(sSQL, New Hashtable)
'Upgrade IDs to GUIDs
UpgradeToGUID("monitorlist", "MonitorID")
UpgradeToGUID("variables", "VariableID")
UpgradeToGUID("manifest", "ManifestID")
'Run a compact due to the large operations
CompactDatabase()
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v84")
'Overhaul Monitor List Table
sSQL = "CREATE TABLE monitorlist_new (MonitorID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL, Process TEXT NOT NULL, Path TEXT, AbsolutePath BOOLEAN NOT NULL, FolderSave BOOLEAN NOT NULL, FileType TEXT, TimeStamp BOOLEAN NOT NULL, ExcludeList TEXT NOT NULL, ProcessPath TEXT, Icon TEXT, Hours REAL, Version TEXT, Company TEXT, Enabled BOOLEAN NOT NULL, MonitorOnly BOOLEAN NOT NULL, PRIMARY KEY(Name, Process));"
sSQL &= "INSERT INTO monitorlist_new (MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly) "
sSQL &= "SELECT MonitorID, Name, Process, Path, AbsolutePath, FolderSave, FileType, TimeStamp, ExcludeList, ProcessPath, Icon, Hours, Version, Company, Enabled, MonitorOnly FROM monitorlist;"
sSQL &= "DROP TABLE monitorlist; ALTER TABLE monitorlist_new RENAME TO monitorlist;"
'Overhaul Manifest Table
sSQL &= "CREATE TABLE manifest_new (ManifestID TEXT NOT NULL UNIQUE, Name TEXT NOT NULL PRIMARY KEY, 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=91"
RunParamQuery(sSQL, New Hashtable)
'Upgrade IDs to GUIDs
UpgradeToGUID("monitorlist", "MonitorID")
UpgradeToGUID("manifest", "ManifestID")
'Run a compact due to the large operations
CompactDatabase()
End If
End If
'0.92 Upgrade
If GetDatabaseVersion() < 92 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v91")
'Add new setting
sSQL = "ALTER TABLE settings ADD COLUMN StartWithWindows BOOLEAN NOT NULL DEFAULT 0;"
sSQL &= "PRAGMA user_version=92"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v91")
sSQL = "PRAGMA user_version=92"
RunParamQuery(sSQL, New Hashtable)
End If
End If
'0.93 Upgrade
If GetDatabaseVersion() < 93 Then
If eDatabase = Database.Local Then
'Backup DB before starting
BackupDB("v92")
UpgradeToUnixTime("manifest", "DateUpdated", "ManifestID")
sSQL = "PRAGMA user_version=93"
RunParamQuery(sSQL, New Hashtable)
End If
If eDatabase = Database.Remote Then
'Backup DB before starting
BackupDB("v92")
UpgradeToUnixTime("manifest", "DateUpdated", "ManifestID")
sSQL = "PRAGMA user_version=93"
RunParamQuery(sSQL, New Hashtable)
End If
End If
End Sub
Public Function GetDBSize() As Long
Dim oFileInfo As New FileInfo(sDatabaseLocation)
Return Math.Round(oFileInfo.Length / 1024, 2)
End Function
Public Sub CompactDatabase()
Dim sSQL As String
Dim command As SQLiteCommand
sSQL = "VACUUM"
Connect()
command = New SQLiteCommand(sSQL, db)
Try
command.ExecuteNonQuery()
Catch e As Exception
MsgBox("An error has occured attempting run the query." & vbCrLf & vbCrLf & sSQL & vbCrLf & vbCrLf & e.Message)
Finally
command.Dispose()
Disconnect()
End Try
End Sub
End Class
+181
View File
@@ -0,0 +1,181 @@
Imports System.IO
Public Class mgrSettings
Private bStartWithWindows As Boolean = False
Private bMonitoronStartup As Boolean = True
Private bStartToTray As Boolean = False
Private bShowDetectionToolTips As Boolean = True
Private bDisableConfirmation As Boolean = False
Private bCreateSubFolder As Boolean = False
Private bShowOverwriteWarning As Boolean = True
Private bRestoreOnLaunch As Boolean = False
Private bSync As Boolean = True
Private bCheckSum As Boolean = True
Private sBackupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).TrimEnd(New Char() {"\", "/"})
Property StartWithWindows As Boolean
Get
Return bStartWithWindows
End Get
Set(value As Boolean)
bStartWithWindows = value
End Set
End Property
Property MonitorOnStartup As Boolean
Get
Return bMonitoronStartup
End Get
Set(value As Boolean)
bMonitoronStartup = value
End Set
End Property
Property StartToTray As Boolean
Get
Return bStartToTray
End Get
Set(value As Boolean)
bStartToTray = value
End Set
End Property
Property ShowDetectionToolTips As Boolean
Get
Return bShowDetectionToolTips
End Get
Set(value As Boolean)
bShowDetectionToolTips = value
End Set
End Property
Property DisableConfirmation As Boolean
Get
Return bDisableConfirmation
End Get
Set(value As Boolean)
bDisableConfirmation = value
End Set
End Property
Property CreateSubFolder As Boolean
Get
Return bCreateSubFolder
End Get
Set(value As Boolean)
bCreateSubFolder = value
End Set
End Property
Property ShowOverwriteWarning As Boolean
Get
Return bShowOverwriteWarning
End Get
Set(value As Boolean)
bShowOverwriteWarning = value
End Set
End Property
Property RestoreOnLaunch As Boolean
Get
Return bRestoreOnLaunch
End Get
Set(value As Boolean)
bRestoreOnLaunch = value
End Set
End Property
Property Sync As Boolean
Get
Return bSync
End Get
Set(value As Boolean)
bSync = value
End Set
End Property
Property CheckSum As Boolean
Get
Return bCheckSum
End Get
Set(value As Boolean)
bCheckSum = value
End Set
End Property
Property BackupFolder As String
Get
Return sBackupFolder
End Get
Set(value As String)
sBackupFolder = value.TrimEnd(New Char() {"\", "/"})
End Set
End Property
Private Sub SaveFromClass()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM settings WHERE SettingsID = 1"
oDatabase.RunParamQuery(sSQL, New Hashtable)
sSQL = "INSERT INTO settings VALUES (1, @MonitorOnStartup, @StartToTray, @ShowDetectionToolTips, @DisableConfirmation, "
sSQL &= "@CreateSubFolder, @ShowOverwriteWarning, @RestoreOnLaunch, @BackupFolder, @Sync, @CheckSum, @StartWithWindows)"
hshParams.Add("MonitorOnStartup", MonitorOnStartup)
hshParams.Add("StartToTray", StartToTray)
hshParams.Add("ShowDetectionToolTips", ShowDetectionToolTips)
hshParams.Add("DisableConfirmation", DisableConfirmation)
hshParams.Add("CreateSubFolder", CreateSubFolder)
hshParams.Add("ShowOverwriteWarning", ShowOverwriteWarning)
hshParams.Add("RestoreOnLaunch", RestoreOnLaunch)
hshParams.Add("BackupFolder", BackupFolder)
hshParams.Add("Sync", Sync)
hshParams.Add("CheckSum", CheckSum)
hshParams.Add("StartWithWindows", StartWithWindows)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Private Sub MapToClass()
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
oDatabase.Connect()
sSQL = "SELECT * FROM settings WHERE SettingsID = 1"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
MonitorOnStartup = CBool(dr(1))
StartToTray = CBool(dr(2))
ShowDetectionToolTips = CBool(dr(3))
DisableConfirmation = CBool(dr(4))
CreateSubFolder = CBool(dr(5))
ShowOverwriteWarning = CBool(dr(6))
RestoreOnLaunch = CBool(dr(7))
BackupFolder = CStr(dr(8))
Sync = CBool(dr(9))
CheckSum = CBool(dr(10))
StartWithWindows = CBool(dr(11))
Next
oDatabase.Disconnect()
End Sub
Public Sub LoadSettings()
MapToClass()
'Set Remote Manifest Location
mgrPath.RemoteDatabaseLocation = Me.BackupFolder
End Sub
Public Sub SaveSettings()
SaveFromClass()
'Set Remote Manifest Location
mgrPath.RemoteDatabaseLocation = Me.BackupFolder
End Sub
End Class
+152
View File
@@ -0,0 +1,152 @@
Imports System.IO
Public Class mgrVariables
Public Shared Sub DoPathUpdate(ByVal sOld As String, ByVal sNew As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE monitorlist SET Path = replace(Path, @Old, @New) WHERE Path LIKE @Match"
hshParams.Add("Old", sOld)
hshParams.Add("New", sNew)
hshParams.Add("Match", sOld & "%")
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoVariableAdd(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "INSERT INTO variables VALUES (@ID, @Name, @Path)"
hshParams.Add("ID", oCustomVariable.ID)
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoVariableUpdate(ByVal oCustomVariable As clsPathVariable)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "UPDATE variables SET Name=@Name, Path = @Path "
sSQL &= "WHERE VariableID = @ID"
hshParams.Add("Name", oCustomVariable.Name)
hshParams.Add("Path", oCustomVariable.Path)
hshParams.Add("ID", oCustomVariable.ID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Sub DoVariableDelete(ByVal sVariableID As String)
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim hshParams As New Hashtable
sSQL = "DELETE FROM variables "
sSQL &= "WHERE VariableID = @ID"
hshParams.Add("ID", sVariableID)
oDatabase.RunParamQuery(sSQL, hshParams)
End Sub
Public Shared Function DoVariableGetbyID(ByVal sVariableID As String) As clsPathVariable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oCustomVariable As New clsPathVariable
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM variables "
sSQL &= "WHERE VariableID = @ID"
hshParams.Add("ID", sVariableID)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
Next
Return oCustomVariable
End Function
Public Shared Function DoVariableGetbyName(ByVal sVariableName As String) As clsPathVariable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim oCustomVariable As New clsPathVariable
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM variables "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sVariableName)
oData = oDatabase.ReadParamData(sSQL, hshParams)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
Next
Return oCustomVariable
End Function
Public Shared Function DoCheckDuplicate(ByVal sName As String, Optional ByVal sExcludeID As String = "") As Boolean
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim sSQL As String
Dim oData As DataSet
Dim hshParams As New Hashtable
sSQL = "SELECT * FROM variables "
sSQL &= "WHERE Name = @Name"
hshParams.Add("Name", sName)
If sExcludeID <> String.Empty Then
sSQL &= " AND VariableID <> @VariableID"
hshParams.Add("VariableID", sExcludeID)
End If
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 ReadVariables() As Hashtable
Dim oDatabase As New mgrSQLite(mgrSQLite.Database.Local)
Dim oData As DataSet
Dim sSQL As String
Dim hshList As New Hashtable
Dim oCustomVariable As clsPathVariable
sSQL = "SELECT * from variables"
oData = oDatabase.ReadParamData(sSQL, New Hashtable)
For Each dr As DataRow In oData.Tables(0).Rows
oCustomVariable = New clsPathVariable
oCustomVariable.ID = CStr(dr(0))
oCustomVariable.Name = CStr(dr(1))
oCustomVariable.Path = CStr(dr(2))
hshList.Add(oCustomVariable.Name, oCustomVariable)
Next
Return hshList
End Function
End Class
+99
View File
@@ -0,0 +1,99 @@
Imports System.Xml
Imports System.IO
Imports System.Text
Public Class mgrXML
Public Shared Function ReadMonitorList(ByVal sLocation As String, Optional ByVal bWebRead As Boolean = False) As Hashtable
Dim xFileReader As XmlTextReader
Dim hshList As New Hashtable
Dim hshDupeList As New Hashtable
Dim oGame As clsGame
Dim oDupeGame As clsGame
'If the file doesn't exist return an empty list
If Not File.Exists(sLocation) And Not bWebRead Then
Return hshList
End If
Try
xFileReader = New XmlTextReader(sLocation)
xFileReader.WhitespaceHandling = WhitespaceHandling.None
While (xFileReader.Read())
If xFileReader.Name = "app" Then
oGame = New clsGame
oGame.Name = xFileReader.GetAttribute("name")
xFileReader.Read()
oGame.ProcessName = xFileReader.ReadElementString("process")
oGame.AbsolutePath = xFileReader.ReadElementString("absolutepath")
oGame.Path = xFileReader.ReadElementString("savelocation")
oGame.FolderSave = xFileReader.ReadElementString("foldersave")
oGame.FileType = xFileReader.ReadElementString("filetype")
oGame.AppendTimeStamp = xFileReader.ReadElementString("appendtimestamp")
oGame.ExcludeList = xFileReader.ReadElementString("excludelist")
If hshList.Contains(oGame.ProcessName) Or hshDupeList.Contains(oGame.ProcessName) Then
oDupeGame = DirectCast(hshList.Item(oGame.ProcessName), clsGame)
If Not hshDupeList.Contains(oGame.ProcessName) Then
hshDupeList.Add(oGame.ProcessName, oDupeGame)
hshList.Remove(oDupeGame.ProcessName)
oDupeGame.Duplicate = True
oDupeGame.ProcessName = oDupeGame.ProcessName & ":" & oDupeGame.Name
hshList.Add(oDupeGame.ProcessName, oDupeGame)
End If
oGame.ProcessName = oGame.ProcessName & ":" & oGame.Name
oGame.Duplicate = True
End If
hshList.Add(oGame.ProcessName, oGame)
End If
End While
xFileReader.Close()
'We need to trigger a manual garbage collection here to prevent issues with the reader freezing up with multiple uses.
'There's no way to properly dispose a xml text reader in .NET 4, that's only fixed in 4.5+.
GC.Collect()
Catch ex As Exception
MsgBox("An error occured reading the monitor list import file." & vbCrLf & ex.Message, MsgBoxStyle.Exclamation, "Game Backup Monitor")
End Try
Return hshList
End Function
Public Shared Function ExportMonitorList(ByVal hshList As Hashtable, ByVal sLocation As String) As Boolean
Dim xFileWriter As XmlTextWriter
Try
xFileWriter = New XmlTextWriter(sLocation, System.Text.Encoding.Unicode)
xFileWriter.Formatting = Formatting.Indented
xFileWriter.WriteStartDocument()
xFileWriter.WriteComment("GBM Export: " & Date.Now)
xFileWriter.WriteComment("Entries: " & hshList.Count)
xFileWriter.WriteStartElement("aMon")
For Each o As clsGame In hshList.Values
xFileWriter.WriteStartElement("app")
xFileWriter.WriteAttributeString("name", o.Name)
xFileWriter.WriteElementString("process", o.TrueProcess)
xFileWriter.WriteElementString("absolutepath", o.AbsolutePath)
xFileWriter.WriteElementString("savelocation", o.TruePath)
xFileWriter.WriteElementString("foldersave", o.FolderSave)
xFileWriter.WriteElementString("filetype", o.FileType)
xFileWriter.WriteElementString("appendtimestamp", o.AppendTimeStamp)
xFileWriter.WriteElementString("excludelist", o.ExcludeList)
xFileWriter.WriteEndElement()
Next
xFileWriter.WriteEndElement()
xFileWriter.WriteEndDocument()
xFileWriter.Flush()
xFileWriter.Close()
Return True
Catch ex As Exception
MsgBox("An error occured exporting the monitor list. " & ex.Message, MsgBoxStyle.Exclamation, "Game Backup Monitor")
Return False
End Try
End Function
End Class
+38
View File
@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = false
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.GBM.frmMain
End Sub
End Class
End Namespace
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>frmMain</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>false</SaveMySettingsOnExit>
</MyApplicationData>
+35
View File
@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("Game Backup Monitor")>
<Assembly: AssemblyDescription("Game Backup Monitor")>
<Assembly: AssemblyCompany("Michael J. Seiferling")>
<Assembly: AssemblyProduct("Game Backup Monitor")>
<Assembly: AssemblyCopyright("Copyright © 2015 Michael J. Seiferling")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("bc5c563d-71b2-47f4-a318-3313baf26540")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("0.94.*")>
<Assembly: AssemblyFileVersion("0.94.0.0")>
+173
View File
@@ -0,0 +1,173 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GBM.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Admin() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Admin", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Detected() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Detected", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
'''</summary>
Friend ReadOnly Property GBM_Tray_Detected() As System.Drawing.Icon
Get
Dim obj As Object = ResourceManager.GetObject("GBM_Tray_Detected", resourceCulture)
Return CType(obj,System.Drawing.Icon)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
'''</summary>
Friend ReadOnly Property GBM_Tray_Ready() As System.Drawing.Icon
Get
Dim obj As Object = ResourceManager.GetObject("GBM_Tray_Ready", resourceCulture)
Return CType(obj,System.Drawing.Icon)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
'''</summary>
Friend ReadOnly Property GBM_Tray_Stopped() As System.Drawing.Icon
Get
Dim obj As Object = ResourceManager.GetObject("GBM_Tray_Stopped", resourceCulture)
Return CType(obj,System.Drawing.Icon)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Ready() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Ready", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Searching() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Searching", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Stopped() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Stopped", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Unknown() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Unknown", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property User() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("User", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
'''<summary>
''' Looks up a localized resource of type System.Drawing.Bitmap.
'''</summary>
Friend ReadOnly Property Working() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Working", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
End Module
End Namespace
+154
View File
@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Admin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Admin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Detected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Detected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GBM_Tray_Detected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GBM_Tray_Detected.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GBM_Tray_Ready" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GBM_Tray_Ready.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="GBM_Tray_Stopped" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GBM_Tray_Stopped.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Ready" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ready.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Searching" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Searching.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Stopped" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Stopped.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Unknown" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Unknown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="User" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\User.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Working" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Working.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
+73
View File
@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.34209
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.GBM.My.MySettings
Get
Return Global.GBM.My.MySettings.Default
End Get
End Property
End Module
End Namespace
+7
View File
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
+48
View File
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

+121
View File
@@ -0,0 +1,121 @@
Game Backup Monitor v0.93 Readme
http://backupmonitor.sourceforge.net/
October 13, 2015
Disclaimer:
This is beta release software. You may still encounter some bugs.
Introduction:
This application is designed to run in the system tray and monitor for games you play. When you exit a game your save files will be automatically compressed (7z compression), saved to a folder you specify. This may be a cloud folder or external backup drive that other computers will be accessing. GBM can also take care of restoring the save data to other computers that have access to the main backup folder.
GBM has been designed with mostly classic gaming in mind, but it can be used for any application!
Important Upgrade Information:
1. You may notice one or more backup dates are incorrect after upgrading to v0.93. This is due to fallback behavior during the upgrade process when a date cannot be converted correctly.
2. Due to core changes to how GBM handles backups, some game configurations that exclude sub-folders may break in v0.93, including official configurations.
If you have any issues with the following game backups after upgrading to v0.93, delete them from the Game Manager and re-import them from the official list.
Call of Cthulhu - Dark Corners of The Earth
Dead State
Democracy 3
Grand Theft Auto - San Andreas
Kerbal Space Program
POD Gold
Simcity 4 Deluxe
The Settlers: Rise of an Empire
Tropico 4
Victor Vran
Please check the Game Manager section of the manual if you're having problems with your custom game entries.
New in 0.93
- GBM now handles date/time fields in an efficient manner, this will solve all issues with regional date formats.
- GBM will now gracefully exit with an error message if it detects a database version is newer than the program version itself.
- "Access Denied" errors should no longer occur when dragging shortcuts into the Add Game Wizard.
- Redesigned how the backup includes and excludes files. The changes allow for more complex backup configurations.
- Added an "Open Restore Path" button to the Game Manager, this will automatically open the current backup's restore location in Windows Explorer.
- Game names are now cropped in many places to prevent errors when messages and/or notifications exceed control limits.
New in 0.92
- GBM now properly handles detecting games in DOSBox that share the same DOS executable name.
- "Start with Windows" toggle is now available in settings. Defaults to off and applies to Current User only.
- Added "Backups Only" filter option to the Game Manager, this lets you view only games that have backups.
- "Backups Only" and "Pending Restore" filters will now list existing backup data for games have been deleted from the game list.
- The game list sync is now more verbose in the log.
- GBM now triggers a master to local sync when the master data is changed by another application, such as your cloud client downloading an updated version of the master data after GBM is already running.
- When importing game configurations, you can now choose exactly which game configurations to import. This applies to the official list or importing an xml file.
- Added a Sync toggle to Settings. Disabling sync will speed up the application for users that use GBM on a single computer.
- GBM should now properly display a wait cursor in instances that the UI is unavailable.
- Added a "Compact Databases" tool, this is used to rebuild GBM's databases to use an optimal amount of disk space. It shouldn't be needed often.
- Game detection has been changed. It will take slightly longer for GBM detect a game but this should fix a few long outstanding issues.
- Backup & Restore has been optimized to handle everything more efficiently.
- GBM will now use the 2015 build of 7-Zip for compression, as well use the 64-bit version of 7z when using the 64-bit version of GBM. 64-bit users will see a huge speed improvement when backing up games with large complex saves, such as Divinity: Original Sin.
- GBM now allows you to cancel monitoring via the File menu, system tray menu and monitor status button. You can also now exit the application while a game is being monitored.
- The GBM system tray icon tooltip will now display it's current task.
- Replaced the icons in GBM with some better looking ones, the system tray icon will now visually represent GBM's current action.
- You can now cancel a backup or restore operation in progress. Intended for emergency situations only, cancelling will not undo any actions completed before the operation terminated.
- GBM now uses SHA-256 to verify your backup files before restoring them. This is optional, but will be enabled by default.
- Overhauled the backend, GBM will use more space to store records, but the improved database design will prevent future bugs.
- GBM will now back up your configuration data automatically on a version upgrade.
- Another ton of minor fixes and tweaks too various to list.
New in 0.84
- Tons of bug fixes and tweaks. GBM is stable enough to move to Beta!
- Removed Backup Manager and Restore Manager. All backup & restore functionality is now integrated into the Game Manager.
- You can now backup and restore mutliple games at the same time.
- You can now edit multiple games at the same time, only on toggle fields for now.
- Added a "Monitor Only" option. GBM can only monitor the time you've played a game and not trigger a backup when it's closed.
- Deleting a backup will now delete the sub-folder for the game, if it's not empty a confirmation will be displayed first.
- Since it can't reliably find them, GBM will no longer attempt to automatically search for dosbox games or games that share a process name.
- You can now multi-select on the Game Manager screen to delete multiple games.
- When changing your backup folder, if the newly selected backup folder already contains GBM data you now have a choice on how you want to handle the initial game list sync.
New in 0.81
- Fixed a critical bug with the Game Manager which allowed you to add duplicate entries. This resulted in a crash and the inability start the app again. 0.81 fixes this bug and will repair any database broken by this issue so the app will function again. (Thanks Nirth from GOG.com)
- Fixed an annoying bug where extra game data was being lost when syncing hours spent between computers.
- Fixed a potential issue with changing the backup folder.
- The Add Game Wizard will now properly handle entries with spaces while working with the Exclude and File Type helper.
New in 0.8
- Since it's all about the games anyway, re-branded ABM to GBM - Game Backup Manager.
- Removed confusing utilities and screens and replaced them with a user friendly Game Manager.
- Rebuilt the Custom Path Variable screen with the new Game Manager look.
- 64-bit build available, this will allow GBM to fully detect 64 bit and 32 bit applications. (32-bit will be default download)
- Switched back-end from XML to SQLite 3. Old configurations will be imported and upgraded.
- Automatic syncing of game list and applicable extra data (such as Hours played) between computers sharing the same backup folder. See "Notes on Automatic Syncing" in this readme for details.
- All import features redesigned to work more consistently. Added export feature.
- In the rare instance the user is asked to manually find a path, GBM will now search for the location automatically.
New in 0.7.1.2:
- Better Monitoring: You no longer need to run ABM as Administrator to monitor certain applications in 99% of situations. See "Current Limitations" for details.
- Time Tracking: ABM now tracks the amount of time spent in each application, similar to Steam.
- Search: You can now search for a specific application using the new search feature on all applicable forms.
- Application Data: You can now add or override application details by using the new "Edit Application Cache" feature.
New in 0.7.0.7:
- Fixed some monitor list saving and validation issues.
- Fixed the manual backup feature, required application data wasn't being cached.
- Fixed possible issue with official import.
- Minor Tweaks.
New in 0.7.0.5:
- Start-up Wizard: A simple guide to setup the basics when first starting the program.
- Add Application Wizard: A more user friendly way to add applications to monitor and backup. The classic monitor list is still available for more advanced configurations and management.
- Custom Path Variables: An advanced feature to allow the configuration for more applications to be shared between computers.
- Manual Backups: Execute a backup for any monitored application on demand (some applications will be need to be detected by ABM at least once to use this feature)
- Various tweaks to make things look and run a little better.
- Many bug fixes
Binary file not shown.
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 14 for Windows Desktop
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Game Backup Monitor", "GBM\Game Backup Monitor.vbproj", "{729EC23B-F5F3-464A-B357-F235362CB8C5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Debug|x64.ActiveCfg = Debug|x64
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Debug|x64.Build.0 = Debug|x64
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Debug|x86.ActiveCfg = Debug|x86
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Debug|x86.Build.0 = Debug|x86
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Release|x64.ActiveCfg = Release|x64
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Release|x64.Build.0 = Release|x64
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Release|x86.ActiveCfg = Release|x86
{729EC23B-F5F3-464A-B357-F235362CB8C5}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal