mirror of
https://github.com/PR0M3TH3AN/VoxVera.git
synced 2025-09-07 06:28:43 +00:00
117 lines
3.6 KiB
PowerShell
Executable File
117 lines
3.6 KiB
PowerShell
Executable File
$ErrorActionPreference = 'Stop'
|
|
|
|
$packages = @('tor', 'onionshare', 'jq', 'qrencode', 'imagemagick')
|
|
|
|
function Install-Choco {
|
|
param([string]$Name)
|
|
if (-not (Get-Package -Name $Name -ErrorAction SilentlyContinue)) {
|
|
choco install $Name -y
|
|
}
|
|
}
|
|
|
|
function Install-Pkg {
|
|
param([string]$Name)
|
|
if (-not (Get-Package -Name $Name -ErrorAction SilentlyContinue)) {
|
|
Install-Package -Name $Name -Force -ErrorAction Stop
|
|
}
|
|
}
|
|
|
|
$choco = Get-Command choco -ErrorAction SilentlyContinue
|
|
if ($choco) {
|
|
foreach ($p in $packages) { Install-Choco $p }
|
|
} else {
|
|
foreach ($p in $packages) { Install-Pkg $p }
|
|
}
|
|
|
|
function Install-PipFallback {
|
|
if (Get-Command pip -ErrorAction SilentlyContinue) {
|
|
try {
|
|
pip install --user voxvera
|
|
Write-Host 'VoxVera installed successfully via pip.'
|
|
exit 0
|
|
} catch {
|
|
Write-Error 'pip installation failed.'
|
|
exit 1
|
|
}
|
|
} else {
|
|
Write-Error 'pip not found for fallback installation.'
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
function Install-PipRepoFallback {
|
|
if (Get-Command pip -ErrorAction SilentlyContinue) {
|
|
try {
|
|
pip install --user git+https://github.com/PR0M3TH3AN/VoxVera
|
|
Write-Host 'VoxVera installed successfully from repository.'
|
|
exit 0
|
|
} catch {
|
|
Write-Error 'pip installation from repository failed.'
|
|
exit 1
|
|
}
|
|
} else {
|
|
Write-Error 'pip not found for fallback installation.'
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
function Download-Binary {
|
|
param([string]$Url, [string]$Dest)
|
|
try {
|
|
$response = Invoke-WebRequest -Uri $Url -OutFile $Dest -ErrorAction Stop
|
|
return $response.StatusCode
|
|
} catch {
|
|
if ($_.Exception.Response) {
|
|
return $_.Exception.Response.StatusCode.value__
|
|
}
|
|
return 0
|
|
}
|
|
}
|
|
|
|
function Check-LocalBin {
|
|
$home = [Environment]::GetFolderPath('UserProfile')
|
|
$binPath = Join-Path $home '.local\bin'
|
|
if (-not ($Env:PATH.Split(';') -contains $binPath)) {
|
|
Write-Host "Add $binPath to your PATH to run VoxVera."
|
|
}
|
|
}
|
|
|
|
if (Get-Command pipx -ErrorAction SilentlyContinue) {
|
|
try {
|
|
pipx install voxvera --force
|
|
} catch {
|
|
Write-Host 'pipx install failed, downloading binary'
|
|
$home = [Environment]::GetFolderPath('UserProfile')
|
|
$dest = Join-Path $home '.local\bin'
|
|
New-Item -ItemType Directory -Path $dest -Force | Out-Null
|
|
$url = 'https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera.exe'
|
|
$status = Download-Binary $url "$dest/voxvera.exe"
|
|
if ($status -eq 200) {
|
|
Check-LocalBin
|
|
} elseif ($status -eq 404) {
|
|
Write-Host 'Release asset not found, installing from repository'
|
|
Install-PipRepoFallback
|
|
} else {
|
|
Write-Host 'Binary download failed, falling back to pip'
|
|
Install-PipFallback
|
|
}
|
|
}
|
|
} else {
|
|
$home = [Environment]::GetFolderPath('UserProfile')
|
|
$dest = Join-Path $home '.local\bin'
|
|
New-Item -ItemType Directory -Path $dest -Force | Out-Null
|
|
$url = 'https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera.exe'
|
|
$status = Download-Binary $url "$dest/voxvera.exe"
|
|
if ($status -eq 200) {
|
|
Check-LocalBin
|
|
} elseif ($status -eq 404) {
|
|
Write-Host 'Release asset not found, installing from repository'
|
|
Install-PipRepoFallback
|
|
} else {
|
|
Write-Host 'Binary download failed, falling back to pip'
|
|
Install-PipFallback
|
|
}
|
|
}
|
|
|
|
Write-Host 'VoxVera installed successfully.'
|