diff --git a/GBM/Classes/clsBackup.vb b/GBM/Classes/clsBackup.vb
index f790844..d353ce4 100644
--- a/GBM/Classes/clsBackup.vb
+++ b/GBM/Classes/clsBackup.vb
@@ -74,7 +74,7 @@
Property RestorePath As String
Get
- Return mgrPath.ReplaceSpecialPaths(sRestorePath)
+ Return Environment.ExpandEnvironmentVariables(sRestorePath)
End Get
Set(value As String)
sRestorePath = mgrPath.ReverseSpecialPaths(value)
diff --git a/GBM/Classes/clsGame.vb b/GBM/Classes/clsGame.vb
index 0ea8ec7..3aecc69 100644
--- a/GBM/Classes/clsGame.vb
+++ b/GBM/Classes/clsGame.vb
@@ -93,7 +93,7 @@ Public Class clsGame
sPath = mgrPath.ReverseSpecialPaths(value)
End Set
Get
- Return mgrPath.ReplaceSpecialPaths(sPath)
+ Return Environment.ExpandEnvironmentVariables(sPath)
End Get
End Property
diff --git a/GBM/Classes/clsPathVariable.vb b/GBM/Classes/clsPathVariable.vb
index 014bcef..70319d4 100644
--- a/GBM/Classes/clsPathVariable.vb
+++ b/GBM/Classes/clsPathVariable.vb
@@ -24,7 +24,7 @@
ReadOnly Property FormattedName As String
Get
- Return "*" & sVariableName & "*"
+ Return "%" & sVariableName & "%"
End Get
End Property
diff --git a/GBM/Forms/frmMain.vb b/GBM/Forms/frmMain.vb
index e284f5c..05a056c 100644
--- a/GBM/Forms/frmMain.vb
+++ b/GBM/Forms/frmMain.vb
@@ -935,7 +935,7 @@ Public Class frmMain
Dim frm As New frmVariableManager
PauseScan()
frm.ShowDialog()
- mgrPath.CustomVariablesReload()
+ mgrPath.LoadCustomVariables()
mgrMonitorList.SyncMonitorLists(oSettings)
ResumeScan()
End Sub
diff --git a/GBM/Managers/mgrPath.vb b/GBM/Managers/mgrPath.vb
index 9cfe373..262769a 100644
--- a/GBM/Managers/mgrPath.vb
+++ b/GBM/Managers/mgrPath.vb
@@ -12,10 +12,12 @@ Public Class mgrPath
Private Shared sLogFile As String = sSettingsRoot & Path.DirectorySeparatorChar & "gbm_log_" & Date.Now.ToString("dd-MM-yyyy-HH-mm-ss") & ".txt"
Private Shared sRemoteDatabaseLocation As String
Private Shared hshCustomVariables As Hashtable
+ Private Shared hshUnixEnv As Hashtable
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
Shared Sub New()
- hshCustomVariables = mgrVariables.ReadVariables
+ SetEnv()
+ LoadCustomVariables()
End Sub
Shared ReadOnly Property ReleaseType As Integer
@@ -238,24 +240,24 @@ Public Class mgrPath
Dim oMatch As Match
Try
- If sPath.Contains("*appdatalocal*") Then
- sReplace = "*appdatalocal*"
+ If sPath.Contains("%LOCALAPPDATA%") Then
+ sReplace = "%LOCALAPPDATA%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Local AppData""="".+?(?=\n)")
- ElseIf sPath.Contains("*appdataroaming*") Then
- sReplace = "*appdataroaming*"
+ ElseIf sPath.Contains("%APPDATA%") Then
+ sReplace = "%APPDATA%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""AppData""="".+?(?=\n)")
- ElseIf sPath.Contains("*mydocs*") Then
- sReplace = "*mydocs*"
+ ElseIf sPath.Contains("%USERDOCUMENTS%") Then
+ sReplace = "%USERDOCUMENTS%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Personal""="".+?(?=\n)")
- ElseIf sPath.Contains("*publicdocs*") Then
- sReplace = "*publicdocs*"
+ ElseIf sPath.Contains("%COMMONDOCUMENTS%") Then
+ sReplace = "%COMMONDOCUMENTS%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "system.reg")
oParse = New Regex("""Common Documents""="".+?(?=\n)")
- ElseIf sPath.Contains("*currentuser*") Then
- sReplace = "*currentuser*"
+ ElseIf sPath.Contains("%USERPROFILE%") Then
+ sReplace = "%USERPROFILE%"
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
oParse = New Regex("""Personal""="".+?(?=\\\\My Documents)")
Else
@@ -325,61 +327,84 @@ Public Class mgrPath
Return bNoError
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
-
-
- For Each oCustomVariable In hshCustomVariables.Values
- If sValue.Contains(oCustomVariable.FormattedName) Then
- Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path)
- End If
- Next
-
- If sValue.Contains("*appdatalocal*") Then
- Return sValue.Replace("*appdatalocal*", sAppDataLocal)
- End If
-
- If sValue.Contains("*appdataroaming*") Then
- Return sValue.Replace("*appdataroaming*", sAppDataRoaming)
- End If
-
- 'This needs to be tested last for Unix compatability
- If sValue.Contains("*mydocs*") Then
- Return sValue.Replace("*mydocs*", sMyDocs)
- End If
-
- 'Don't use these in Unix
+ Private Shared Sub SetEnv()
If Not mgrCommon.IsUnix Then
- If sValue.Contains("*publicdocs*") Then
- Return sValue.Replace("*publicdocs*", sPublicDocs)
+ Environment.SetEnvironmentVariable("USERDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
+ Environment.SetEnvironmentVariable("COMMONDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
+ Else
+ GetUnixEnv()
+ Environment.SetEnvironmentVariable("USERDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
+ Environment.SetEnvironmentVariable("APPDATA", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
+ Environment.SetEnvironmentVariable("LOCALAPPDATA", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
+ End If
+
+ End Sub
+
+ Private Shared Sub GetUnixEnv()
+ Dim prEnv As Process
+ Dim sEnv As String()
+
+ Try
+ hshUnixEnv = New Hashtable
+ prEnv = New Process
+ prEnv.StartInfo.FileName = "/usr/bin/env"
+ prEnv.StartInfo.UseShellExecute = False
+ prEnv.StartInfo.RedirectStandardOutput = True
+ prEnv.StartInfo.CreateNoWindow = True
+ prEnv.Start()
+
+ Using swEnv As StreamReader = prEnv.StandardOutput
+ While Not swEnv.EndOfStream
+ sEnv = swEnv.ReadLine().Split("=")
+ If Not hshUnixEnv.Contains(sEnv(0)) Then
+ hshUnixEnv.Add(sEnv(0), sEnv(1))
+ End If
+ End While
+ End Using
+ Catch ex As Exception
+ mgrCommon.ShowMessage(mgrPath_ErrorUnixEnv, ex.Message, MsgBoxStyle.Exclamation)
+ End Try
+ End Sub
+
+ Private Shared Function ProcessEnvironmentVariables(ByVal sValue As String) As String
+ Dim sUnixShortHome As String = "~"
+ Dim sEnvUnixHome As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
+ Dim sCurrentUnixVar As String
+
+ If mgrCommon.IsUnix Then
+ 'Replace ~ for HOME
+ If sValue.Contains(sUnixShortHome) Then
+ Return sValue.Replace(sUnixShortHome, sEnvUnixHome)
End If
- If sValue.Contains("*currentuser*") Then
- Return sValue.Replace("*currentuser*", sCurrentUser)
- End If
+ 'Replace any other environemnt variable
+ For Each de As DictionaryEntry In hshUnixEnv
+ sCurrentUnixVar = "$" & de.Key
+ If sValue.Contains(sCurrentUnixVar) Then
+ sValue = sValue.Replace(sCurrentUnixVar, de.Value)
+ End If
+ Next
+ Else
+ sValue = Environment.ExpandEnvironmentVariables(sValue)
End If
Return sValue
End Function
Public Shared Function ReverseSpecialPaths(sValue As String) As String
- Dim sMyDocs As String = "*mydocs*"
+ Dim sMyDocs As String = "%USERDOCUMENTS%"
Dim sEnvMyDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
- Dim sPublicDocs As String = "*publicdocs*"
+ Dim sPublicDocs As String = "%COMMONDOCUMENTS%"
Dim sEnvPublicDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
- Dim sAppDataLocal As String = "*appdatalocal*"
+ Dim sAppDataLocal As String = "%LOCALAPPDATA%"
Dim sEnvAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
- Dim sAppDataRoaming As String = "*appdataroaming*"
+ Dim sAppDataRoaming As String = "%APPDATA%"
Dim sEnvAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
- Dim sCurrentUser As String = "*currentuser*"
+ Dim sCurrentUser As String = "%USERPROFILE%"
Dim sEnvCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
Dim oCustomVariable As clsPathVariable
+ sValue = ProcessEnvironmentVariables(sValue)
For Each oCustomVariable In hshCustomVariables.Values
If sValue.Contains(oCustomVariable.Path) Then
@@ -400,7 +425,7 @@ Public Class mgrPath
Return sValue.Replace(sEnvMyDocs, sMyDocs)
End If
- 'Don't use these in Unix
+ 'Mono doesn't set a path for these folders
If Not mgrCommon.IsUnix Then
If sValue.Contains(sEnvPublicDocs) Then
Return sValue.Replace(sEnvPublicDocs, sPublicDocs)
@@ -447,7 +472,7 @@ Public Class mgrPath
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 sPattern As String = "\%(.*)\%"
Dim oGame As clsGame
Dim oMatch As Match
Dim bClean As Boolean = True
@@ -455,7 +480,7 @@ Public Class mgrPath
For Each oGame In hshScanlist.Values
oMatch = Regex.Match(oGame.Path, sPattern)
If oMatch.Success Then
- sVariableCheck = oMatch.Value.Replace("*", String.Empty)
+ sVariableCheck = oMatch.Value.Replace("%", String.Empty)
If Not hshCustomVariables.ContainsKey(sVariableCheck) Then
sGames &= vbCrLf & oGame.Name & " (" & sVariableCheck & ")"
bClean = False
@@ -466,8 +491,12 @@ Public Class mgrPath
Return bClean
End Function
- Public Shared Sub CustomVariablesReload()
+ Public Shared Sub LoadCustomVariables()
hshCustomVariables = mgrVariables.ReadVariables
+
+ For Each oVariable As clsPathVariable In hshCustomVariables.Values
+ Environment.SetEnvironmentVariable(oVariable.Name, oVariable.Path)
+ Next
End Sub
Public Shared Function SetManualGamePath() As String
diff --git a/GBM/Managers/mgrSQLite.vb b/GBM/Managers/mgrSQLite.vb
index 17d9b66..0431200 100644
--- a/GBM/Managers/mgrSQLite.vb
+++ b/GBM/Managers/mgrSQLite.vb
@@ -848,6 +848,41 @@ Public Class mgrSQLite
CompactDatabase()
End If
End If
+
+ '1.15 Upgrade
+ If GetDatabaseVersion() < 115 Then
+ If eDatabase = Database.Local Then
+ 'Backup DB before starting
+ BackupDB("v110")
+
+ sSQL = "PRAGMA user_version=115"
+
+ RunParamQuery(sSQL, New Hashtable)
+ End If
+ If eDatabase = Database.Remote Then
+ 'Backup DB before starting
+ BackupDB("v110")
+
+ 'Convert core path variables to new standard
+ sSQL = "UPDATE monitorlist SET Path = Replace(Path,'*appdatalocal*','%LOCALAPPDATA%');"
+ sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*appdataroaming*','%APPDATA%');"
+ sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*mydocs*','%USERDOCUMENTS%');"
+ sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*currentuser*','%USERPROFILE%');"
+ sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'*publicdocs*','%COMMONDOCUMENTS%');"
+
+ 'Convert custom variables to new standard
+ Dim hshVariables As Hashtable = mgrVariables.ReadVariables()
+ Dim sOldVariable As String
+ For Each oVariable As clsPathVariable In hshVariables.Values
+ sOldVariable = "*" & oVariable.Name & "*"
+ sSQL &= "UPDATE monitorlist SET Path = Replace(Path,'" & sOldVariable & "','" & oVariable.FormattedName & "');"
+ Next
+
+ sSQL &= "PRAGMA user_version=115"
+
+ RunParamQuery(sSQL, New Hashtable)
+ End If
+ End If
End Sub
Public Function GetDBSize() As Long
diff --git a/GBM/My Project/Resources.Designer.vb b/GBM/My Project/Resources.Designer.vb
index 504fcd7..4ce4134 100644
--- a/GBM/My Project/Resources.Designer.vb
+++ b/GBM/My Project/Resources.Designer.vb
@@ -6123,6 +6123,15 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Looks up a localized string similar to An error occured while building a list of environment variables.[BR][BR][PARAM].
+ '''
+ Friend ReadOnly Property mgrPath_ErrorUnixEnv() As String
+ Get
+ Return ResourceManager.GetString("mgrPath_ErrorUnixEnv", resourceCulture)
+ End Get
+ End Property
+
'''
''' Looks up a localized string similar to An error occured when determining a Wine prefix.[BR][BR][PARAM].
'''
diff --git a/GBM/My Project/Resources.resx b/GBM/My Project/Resources.resx
index 056b5e8..65d3277 100644
--- a/GBM/My Project/Resources.resx
+++ b/GBM/My Project/Resources.resx
@@ -2218,4 +2218,7 @@
An error occured when determining a Wine prefix.[BR][BR][PARAM]
+
+ An error occured while building a list of environment variables.[BR][BR][PARAM]
+
\ No newline at end of file