Changes for issue #152 - Pass 1
This commit is contained in:
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
Property RestorePath As String
|
Property RestorePath As String
|
||||||
Get
|
Get
|
||||||
Return mgrPath.ReplaceSpecialPaths(sRestorePath)
|
Return Environment.ExpandEnvironmentVariables(sRestorePath)
|
||||||
End Get
|
End Get
|
||||||
Set(value As String)
|
Set(value As String)
|
||||||
sRestorePath = mgrPath.ReverseSpecialPaths(value)
|
sRestorePath = mgrPath.ReverseSpecialPaths(value)
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ Public Class clsGame
|
|||||||
sPath = mgrPath.ReverseSpecialPaths(value)
|
sPath = mgrPath.ReverseSpecialPaths(value)
|
||||||
End Set
|
End Set
|
||||||
Get
|
Get
|
||||||
Return mgrPath.ReplaceSpecialPaths(sPath)
|
Return Environment.ExpandEnvironmentVariables(sPath)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
ReadOnly Property FormattedName As String
|
ReadOnly Property FormattedName As String
|
||||||
Get
|
Get
|
||||||
Return "*" & sVariableName & "*"
|
Return "%" & sVariableName & "%"
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
|||||||
@@ -935,7 +935,7 @@ Public Class frmMain
|
|||||||
Dim frm As New frmVariableManager
|
Dim frm As New frmVariableManager
|
||||||
PauseScan()
|
PauseScan()
|
||||||
frm.ShowDialog()
|
frm.ShowDialog()
|
||||||
mgrPath.CustomVariablesReload()
|
mgrPath.LoadCustomVariables()
|
||||||
mgrMonitorList.SyncMonitorLists(oSettings)
|
mgrMonitorList.SyncMonitorLists(oSettings)
|
||||||
ResumeScan()
|
ResumeScan()
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
+83
-54
@@ -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 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 sRemoteDatabaseLocation As String
|
||||||
Private Shared hshCustomVariables As Hashtable
|
Private Shared hshCustomVariables As Hashtable
|
||||||
|
Private Shared hshUnixEnv As Hashtable
|
||||||
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
|
Private Shared oReleaseType As ProcessorArchitecture = AssemblyName.GetAssemblyName(Application.ExecutablePath()).ProcessorArchitecture
|
||||||
|
|
||||||
Shared Sub New()
|
Shared Sub New()
|
||||||
hshCustomVariables = mgrVariables.ReadVariables
|
SetEnv()
|
||||||
|
LoadCustomVariables()
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Shared ReadOnly Property ReleaseType As Integer
|
Shared ReadOnly Property ReleaseType As Integer
|
||||||
@@ -238,24 +240,24 @@ Public Class mgrPath
|
|||||||
Dim oMatch As Match
|
Dim oMatch As Match
|
||||||
|
|
||||||
Try
|
Try
|
||||||
If sPath.Contains("*appdatalocal*") Then
|
If sPath.Contains("%LOCALAPPDATA%") Then
|
||||||
sReplace = "*appdatalocal*"
|
sReplace = "%LOCALAPPDATA%"
|
||||||
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
||||||
oParse = New Regex("""Local AppData""="".+?(?=\n)")
|
oParse = New Regex("""Local AppData""="".+?(?=\n)")
|
||||||
ElseIf sPath.Contains("*appdataroaming*") Then
|
ElseIf sPath.Contains("%APPDATA%") Then
|
||||||
sReplace = "*appdataroaming*"
|
sReplace = "%APPDATA%"
|
||||||
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
||||||
oParse = New Regex("""AppData""="".+?(?=\n)")
|
oParse = New Regex("""AppData""="".+?(?=\n)")
|
||||||
ElseIf sPath.Contains("*mydocs*") Then
|
ElseIf sPath.Contains("%USERDOCUMENTS%") Then
|
||||||
sReplace = "*mydocs*"
|
sReplace = "%USERDOCUMENTS%"
|
||||||
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
||||||
oParse = New Regex("""Personal""="".+?(?=\n)")
|
oParse = New Regex("""Personal""="".+?(?=\n)")
|
||||||
ElseIf sPath.Contains("*publicdocs*") Then
|
ElseIf sPath.Contains("%COMMONDOCUMENTS%") Then
|
||||||
sReplace = "*publicdocs*"
|
sReplace = "%COMMONDOCUMENTS%"
|
||||||
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "system.reg")
|
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "system.reg")
|
||||||
oParse = New Regex("""Common Documents""="".+?(?=\n)")
|
oParse = New Regex("""Common Documents""="".+?(?=\n)")
|
||||||
ElseIf sPath.Contains("*currentuser*") Then
|
ElseIf sPath.Contains("%USERPROFILE%") Then
|
||||||
sReplace = "*currentuser*"
|
sReplace = "%USERPROFILE%"
|
||||||
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
sRegistry = File.ReadAllText(sPrefix & Path.DirectorySeparatorChar & "user.reg")
|
||||||
oParse = New Regex("""Personal""="".+?(?=\\\\My Documents)")
|
oParse = New Regex("""Personal""="".+?(?=\\\\My Documents)")
|
||||||
Else
|
Else
|
||||||
@@ -325,61 +327,84 @@ Public Class mgrPath
|
|||||||
Return bNoError
|
Return bNoError
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Shared Function ReplaceSpecialPaths(sValue As String) As String
|
Private Shared Sub SetEnv()
|
||||||
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
|
|
||||||
If Not mgrCommon.IsUnix Then
|
If Not mgrCommon.IsUnix Then
|
||||||
If sValue.Contains("*publicdocs*") Then
|
Environment.SetEnvironmentVariable("USERDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
|
||||||
Return sValue.Replace("*publicdocs*", sPublicDocs)
|
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
|
End If
|
||||||
|
|
||||||
If sValue.Contains("*currentuser*") Then
|
'Replace any other environemnt variable
|
||||||
Return sValue.Replace("*currentuser*", sCurrentUser)
|
For Each de As DictionaryEntry In hshUnixEnv
|
||||||
End If
|
sCurrentUnixVar = "$" & de.Key
|
||||||
|
If sValue.Contains(sCurrentUnixVar) Then
|
||||||
|
sValue = sValue.Replace(sCurrentUnixVar, de.Value)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Else
|
||||||
|
sValue = Environment.ExpandEnvironmentVariables(sValue)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return sValue
|
Return sValue
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Shared Function ReverseSpecialPaths(sValue As String) As String
|
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 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 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 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 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 sEnvCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
|
||||||
Dim oCustomVariable As clsPathVariable
|
Dim oCustomVariable As clsPathVariable
|
||||||
|
|
||||||
|
sValue = ProcessEnvironmentVariables(sValue)
|
||||||
|
|
||||||
For Each oCustomVariable In hshCustomVariables.Values
|
For Each oCustomVariable In hshCustomVariables.Values
|
||||||
If sValue.Contains(oCustomVariable.Path) Then
|
If sValue.Contains(oCustomVariable.Path) Then
|
||||||
@@ -400,7 +425,7 @@ Public Class mgrPath
|
|||||||
Return sValue.Replace(sEnvMyDocs, sMyDocs)
|
Return sValue.Replace(sEnvMyDocs, sMyDocs)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'Don't use these in Unix
|
'Mono doesn't set a path for these folders
|
||||||
If Not mgrCommon.IsUnix Then
|
If Not mgrCommon.IsUnix Then
|
||||||
If sValue.Contains(sEnvPublicDocs) Then
|
If sValue.Contains(sEnvPublicDocs) Then
|
||||||
Return sValue.Replace(sEnvPublicDocs, sPublicDocs)
|
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
|
Public Shared Function VerifyCustomVariables(ByVal hshScanlist As Hashtable, ByRef sGames As String) As Boolean
|
||||||
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
|
Dim hshCustomVariables As Hashtable = mgrVariables.ReadVariables
|
||||||
Dim sVariableCheck As String
|
Dim sVariableCheck As String
|
||||||
Dim sPattern As String = "\*(.*)\*"
|
Dim sPattern As String = "\%(.*)\%"
|
||||||
Dim oGame As clsGame
|
Dim oGame As clsGame
|
||||||
Dim oMatch As Match
|
Dim oMatch As Match
|
||||||
Dim bClean As Boolean = True
|
Dim bClean As Boolean = True
|
||||||
@@ -455,7 +480,7 @@ Public Class mgrPath
|
|||||||
For Each oGame In hshScanlist.Values
|
For Each oGame In hshScanlist.Values
|
||||||
oMatch = Regex.Match(oGame.Path, sPattern)
|
oMatch = Regex.Match(oGame.Path, sPattern)
|
||||||
If oMatch.Success Then
|
If oMatch.Success Then
|
||||||
sVariableCheck = oMatch.Value.Replace("*", String.Empty)
|
sVariableCheck = oMatch.Value.Replace("%", String.Empty)
|
||||||
If Not hshCustomVariables.ContainsKey(sVariableCheck) Then
|
If Not hshCustomVariables.ContainsKey(sVariableCheck) Then
|
||||||
sGames &= vbCrLf & oGame.Name & " (" & sVariableCheck & ")"
|
sGames &= vbCrLf & oGame.Name & " (" & sVariableCheck & ")"
|
||||||
bClean = False
|
bClean = False
|
||||||
@@ -466,8 +491,12 @@ Public Class mgrPath
|
|||||||
Return bClean
|
Return bClean
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Shared Sub CustomVariablesReload()
|
Public Shared Sub LoadCustomVariables()
|
||||||
hshCustomVariables = mgrVariables.ReadVariables
|
hshCustomVariables = mgrVariables.ReadVariables
|
||||||
|
|
||||||
|
For Each oVariable As clsPathVariable In hshCustomVariables.Values
|
||||||
|
Environment.SetEnvironmentVariable(oVariable.Name, oVariable.Path)
|
||||||
|
Next
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Shared Function SetManualGamePath() As String
|
Public Shared Function SetManualGamePath() As String
|
||||||
|
|||||||
@@ -848,6 +848,41 @@ Public Class mgrSQLite
|
|||||||
CompactDatabase()
|
CompactDatabase()
|
||||||
End If
|
End If
|
||||||
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
|
End Sub
|
||||||
|
|
||||||
Public Function GetDBSize() As Long
|
Public Function GetDBSize() As Long
|
||||||
|
|||||||
Generated
+9
@@ -6123,6 +6123,15 @@ Namespace My.Resources
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized string similar to An error occured while building a list of environment variables.[BR][BR][PARAM].
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property mgrPath_ErrorUnixEnv() As String
|
||||||
|
Get
|
||||||
|
Return ResourceManager.GetString("mgrPath_ErrorUnixEnv", resourceCulture)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
'''<summary>
|
'''<summary>
|
||||||
''' Looks up a localized string similar to An error occured when determining a Wine prefix.[BR][BR][PARAM].
|
''' Looks up a localized string similar to An error occured when determining a Wine prefix.[BR][BR][PARAM].
|
||||||
'''</summary>
|
'''</summary>
|
||||||
|
|||||||
@@ -2218,4 +2218,7 @@
|
|||||||
<data name="mgrPath_ErrorWinePrefix" xml:space="preserve">
|
<data name="mgrPath_ErrorWinePrefix" xml:space="preserve">
|
||||||
<value>An error occured when determining a Wine prefix.[BR][BR][PARAM]</value>
|
<value>An error occured when determining a Wine prefix.[BR][BR][PARAM]</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="mgrPath_ErrorUnixEnv" xml:space="preserve">
|
||||||
|
<value>An error occured while building a list of environment variables.[BR][BR][PARAM]</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Reference in New Issue
Block a user