diff --git a/apps-manager.ps1 b/apps-manager.ps1 index 78ff0ed..20deb5d 100644 --- a/apps-manager.ps1 +++ b/apps-manager.ps1 @@ -8,9 +8,9 @@ Write-Host "Apps Manager запущен с действием: $action" $config = $appsAll # Импорт CSV -$apps = Import-Csv -Path $config +$csv = Import-Csv -Path $config -foreach ($app in $apps) { +foreach ($app in $csv) { # Пропускаем отключённые if ($app.Enabled -ne "1") { continue } @@ -36,9 +36,33 @@ foreach ($app in $apps) { Write-Host " Expanded From: $from" Write-Host " Expanded To : $to" - if ($app.Type -ieq "isolate") { - Write-Host " [isolate] — пропускаем действия" - continue + # Обработка isolate: выполняем подскрипт вместо симлинков + if ($app.Type -eq "isolate") { + if ($app.Script) { + # Шагово: сначала подставляем $AppName + $scriptRaw = $app.Script -replace '\$AppName', $AppName + # Потом заменяем $Apps на путь $apps (если опечатка в CSV) + $scriptRaw = $scriptRaw -replace '\$apps', $apps + # Теперь расширяем оставшиеся vars (env и т.д.) + $scriptPath = $ExecutionContext.InvokeCommand.ExpandString($scriptRaw) + } else { + # Fallback без Script + $safeName = $AppName -replace ' ', '_' + $scriptPath = Join-Path $apps "$safeName.ps1" + } + + Write-Host " Isolate mode: Executing script $scriptPath" + if (Test-Path $scriptPath) { + try { + # Передаём action и app-контекст в подскрипт + & $scriptPath -Action $action -AppName $AppName -From $from -To $to + } catch { + Write-Error "Script failed for $AppName`: $($_.Exception.Message)" + } + } else { + Write-Warning "Isolate script not found: $scriptPath" + } + continue # Пропускаем симлинки } switch ($action.ToLower()) { diff --git a/archive/data/[all]/EqualizerAPO.bat b/archive/data/[completed]/EqualizerAPO.bat similarity index 100% rename from archive/data/[all]/EqualizerAPO.bat rename to archive/data/[completed]/EqualizerAPO.bat diff --git a/data/all.csv b/data/all.csv index b86dc8a..5a6aa7f 100644 --- a/data/all.csv +++ b/data/all.csv @@ -1,14 +1,14 @@ -App,From,To,Type,Enabled,Extra-Variables,Extra-Connect,Extra-Disconnect -AIMP,$storage\$AppName,$env:APPDATA\$AppName,default,0,,, -gramps,$storage\$AppName,$env:APPDATA\$AppName,default,0,,, -KeePassXC,$storage\$AppName,$env:APPDATA\$AppName,default,0,,, -ludusavi,$storage\$AppName,$env:APPDATA\$AppName,default,0 -Playnite,$storage\$AppName,$env:APPDATA\$AppName,default,0 -Powertoys,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\Microsoft\PowerToys,default,0 -Sublime Text,$storage\$AppName\Config,$env:APPDATA\$AppName,default,0,,, -SumatraPDF,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0 -Syncthing,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0,,, -transmission,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0,,, -v2rayN,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0,,, -VSCodium,$storage\$AppName,$env:APPDATA\$AppName,default,0,,, -EqualizerAPO,$storage\$AppName,$ProgramFiles\$AppName,isolate,0,$from_1 = Join-Path $storage $AppName; $to_1 = Join-Path $ProgramFiles $AppName; $FabQ3 = Join-Path $ProgramFiles 'VSTPlugins\FabFilter\FabFilter Pro-Q 3.dll',reg add 'HKLM:\SOFTWARE\EqualizerAPO' -Name 'ConfigPath' -Value '$storage\$AppName' -Type String -Force; New-Item -ItemType SymbolicLink -Path $to_1\VSTPlugins\FabFilter Pro-Q 3.dll -Target $FabQ3,Remove-Item -Recurse -Force $to_1\config\*; Remove-Item -Force $to_1\VSTPlugins\FabFilter Pro-Q 3.dll \ No newline at end of file +App,From,To,Type,Enabled,Script +AIMP,$storage\$AppName,$env:APPDATA\$AppName,default,0, +gramps,$storage\$AppName,$env:APPDATA\$AppName,default,0, +KeePassXC,$storage\$AppName,$env:APPDATA\$AppName,default,0, +ludusavi,$storage\$AppName,$env:APPDATA\$AppName,default,0, +Playnite,$storage\$AppName,$env:APPDATA\$AppName,default,0, +Powertoys,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\Microsoft\PowerToys,default,0, +Sublime Text,$storage\$AppName\Config,$env:APPDATA\$AppName,default,0, +SumatraPDF,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0, +Syncthing,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0, +transmission,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0, +v2rayN,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0, +VSCodium,$storage\$AppName,$env:APPDATA\$AppName,default,0, +EqualizerAPO,$storage\$AppName,$env:ProgramFiles\$AppName,isolate,1,$apps\$AppName.ps1 \ No newline at end of file diff --git a/data/apps/EqualizerAPO.ps1 b/data/apps/EqualizerAPO.ps1 new file mode 100644 index 0000000..d938ea4 --- /dev/null +++ b/data/apps/EqualizerAPO.ps1 @@ -0,0 +1,93 @@ +param( + [string]$Action = "reconnect", + [string]$AppName = "EqualizerAPO", + [string]$From, + [string]$To +) + +Write-Host "Isolate script for $AppName : $Action | From: $From | To: $To" # Дебаг входа + +$FabFilterTarget = "$env:ProgramFiles\VSTPlugins\FabFilter\FabFilter Pro-Q 3.dll" +$FabFilterLink = Join-Path $To "VSTPlugins\FabFilter Pro-Q 3.dll" +$configDir = Join-Path $To "config" +$regPath = "HKLM:\SOFTWARE\EqualizerAPO" +$regKey = "ConfigPath" + +if (-not $From) { + Write-Warning "Missing From path: $From – skipping, idiot" + return +} +if (-not $To -or -not [System.IO.Path]::IsPathRooted($To)) { + Write-Warning "Invalid To path: $To – fixing to default ProgramFiles" + $To = Join-Path $env:ProgramFiles $AppName # Fallback, если apps-manager всё равно сломан +} + +switch ($Action.ToLower()) { + "disconnect" { + Write-Host " Disconnecting $AppName – cleaning up" + + # Чисти config (как в BAT) + $configDir = Join-Path $To "config" + if (Test-Path $configDir) { + Write-Host " Wiping config: $configDir" + Remove-Item $configDir\* -Recurse -Force -ErrorAction SilentlyContinue + } + + # Удаляй только линк в APO, не системный DLL + $FabFilterLink = Join-Path $To "VSTPlugins\FabFilter Pro-Q 3.dll" + if (Test-Path $FabFilterLink) { + Write-Host " Removing link: $FabFilterLink" + Remove-Item $FabFilterLink -Force -ErrorAction SilentlyContinue + } + + # Чисти реестр (BAT этого не делает, но логично для disconnect) + $regPath = "HKLM:\SOFTWARE\EqualizerAPO" + $regKey = "ConfigPath" + if (Test-Path $regPath) { + Remove-ItemProperty -Path $regPath -Name $regKey -ErrorAction SilentlyContinue + Write-Host " Registry cleaned" + } + } + + "connect" { + Write-Host " Connecting $AppName – linking system VST to APO" + + # Реестр: ConfigPath на storage (как в BAT) + $regPath = "HKLM:\SOFTWARE\EqualizerAPO" + if (-not (Test-Path $regPath)) { + New-Item -Path $regPath -Force | Out-Null + } + Set-ItemProperty -Path $regPath -Name "ConfigPath" -Value $From -Type String -Force + Write-Host " Registry set: ConfigPath -> $From" + + # Линк: в APO на системный VST (как в BAT) + $globalDLL = $FabFilterTarget + $FabFilterLink = Join-Path $To "VSTPlugins\FabFilter Pro-Q 3.dll" + $vstDir = Split-Path $FabFilterLink -Parent + if (-not (Test-Path $vstDir)) { + New-Item -ItemType Directory -Path $vstDir -Force | Out-Null + Write-Host " Created VST dir in APO: $vstDir" + } + if (Test-Path $FabFilterLink) { + Remove-Item $FabFilterLink -Force + } + if (Test-Path $globalDLL) { + New-Item -ItemType SymbolicLink -Path $FabFilterLink -Value $globalDLL -Force | Out-Null + Write-Host " Link created: $FabFilterLink -> $globalDLL (system VST)" + } else { + Write-Warning " System DLL missing: $globalDLL – no link (install FabFilter?)" + } + } + + "reconnect" { + Write-Host " Reconnecting: disconnect then connect" + & $MyInvocation.MyCommand.Path -Action "disconnect" -AppName $AppName -From $From -To $To + & $MyInvocation.MyCommand.Path -Action "connect" -AppName $AppName -From $From -To $To + } + + default { + Write-Warning "Unknown: $Action – nothing happens" + } +} + +Write-Host "Isolate script for $AppName finished" # Дебаг выхода \ No newline at end of file diff --git a/run.ps1 b/run.ps1 index 02b5147..7b81736 100644 --- a/run.ps1 +++ b/run.ps1 @@ -14,7 +14,7 @@ if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdent Write-Host "Запуск от имени администратора подтвержден." # Аргумент действия -$action = if ($args.Count -ge 1) { $args[0] } else { "reconnect" } +$action = if ($args.Count -ge 1) { $args[0] } else { "connect" } # Вызов apps-manager.ps1 с передачей аргумента $appsManager = Join-Path $PSScriptRoot "apps-manager.ps1"