Changes for issue #152 - Pass 1

This commit is contained in:
MikeMaximus
2018-09-06 12:35:14 -06:00
parent d74a6d50b1
commit 748a921d1c
8 changed files with 134 additions and 58 deletions
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+82 -53
View File
@@ -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) If Not mgrCommon.IsUnix Then
Dim sPublicDocs As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments) Environment.SetEnvironmentVariable("USERDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
Dim sAppDataRoaming As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) Environment.SetEnvironmentVariable("COMMONDOCUMENTS", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments))
Dim sAppDataLocal As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) Else
Dim sCurrentUser As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) GetUnixEnv()
Dim oCustomVariable As clsPathVariable 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
For Each oCustomVariable In hshCustomVariables.Values Private Shared Sub GetUnixEnv()
If sValue.Contains(oCustomVariable.FormattedName) Then Dim prEnv As Process
Return sValue.Replace(oCustomVariable.FormattedName, oCustomVariable.Path) 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
'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 End If
Next Next
Else
If sValue.Contains("*appdatalocal*") Then sValue = Environment.ExpandEnvironmentVariables(sValue)
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 sValue.Contains("*publicdocs*") Then
Return sValue.Replace("*publicdocs*", sPublicDocs)
End If
If sValue.Contains("*currentuser*") Then
Return sValue.Replace("*currentuser*", sCurrentUser)
End If
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
+35
View File
@@ -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
+9
View File
@@ -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>
+3
View File
@@ -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>