diff --git a/lib/Voicemeeter.psm1 b/lib/Voicemeeter.psm1 index 4d5519f..d132c4e 100644 --- a/lib/Voicemeeter.psm1 +++ b/lib/Voicemeeter.psm1 @@ -20,15 +20,11 @@ class Remote { [String]$vmpath [Hashtable]$kind [Object]$profiles - [String]$userpath - [String]$workingconfig Remote ([String]$kindId) { $this.vmpath = Setup_DLL $this.kind = GetKind($kindId) $this.profiles = Get_Profiles($this.kind.name) - $this.userpath = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'Voicemeeter' - $this.workingconfig = Join-Path $this.userpath ('vm' + $this.kind.name + '_working.xml') } [string] ToString() { diff --git a/lib/io.ps1 b/lib/io.ps1 index 23dfc4a..912f73e 100644 --- a/lib/io.ps1 +++ b/lib/io.ps1 @@ -170,31 +170,33 @@ class IODevice : IRemote { hidden $_driver = $($this | Add-Member ScriptProperty 'driver' ` { if ([string]::IsNullOrEmpty($this.name)) { return '' } + + $type = $null + try { + $tmp = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), "vmrtmp-$(New-Guid).xml") + $this.remote.Setter('Command.Save', $tmp) - $path = $this.remote.workingconfig - $oldTime = if (Test-Path $path) { (Get-Item $path).LastWriteTime } else { [DateTime]::MinValue } - $this.remote.Setter('Command.Save', $path) - - $timeout = New-TimeSpan -Seconds 2 - $sw = [Diagnostics.Stopwatch]::StartNew() - $line = $null - do { - if (Test-Path $path) { - $newTime = (Get-Item $path).LastWriteTime - if ($newTime -gt $oldTime) { + $timeout = New-TimeSpan -Seconds 2 + $sw = [Diagnostics.Stopwatch]::StartNew() + $line = $null + do { + if (Test-Path $tmp) { try { - $line = Get-Content $path | Select-String -Pattern "<$($this.kindOfDevice)Dev index='$($this.index + 1)'" -List + $line = Get-Content $tmp | Select-String -Pattern "<$($this.kindOfDevice)Dev index='$($this.index + 1)'" -List if ($line) { break } } catch {} } + Start-Sleep -Milliseconds 20 + } while ($sw.elapsed -lt $timeout) + if ($line -and $line.ToString() -match "type='(?\d+)'") { + $type = $matches['type'] + } + } + finally { + if (Test-Path $tmp) { + Remove-Item $tmp -Force } - Start-Sleep -Milliseconds 20 - } while ($sw.elapsed -lt $timeout) - - $type = $null - if ($line -and $line.ToString() -match "type='(?\d+)'") { - $type = $matches['type'] } if ($type -notin $this.drivers.Keys) { return 'unknown' }