Files

130 lines
3.9 KiB
PowerShell

param(
[switch]$NoDesktopShortcut,
[switch]$NoStartMenuShortcut
)
$ErrorActionPreference = "Stop"
Write-Host "Journey FM Playlist Creator - Windows Installer" -ForegroundColor Cyan
Write-Host "================================================" -ForegroundColor Cyan
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $scriptDir
function Get-PythonCommand {
if (Get-Command py -ErrorAction SilentlyContinue) {
return @("py", "-3")
}
if (Get-Command python -ErrorAction SilentlyContinue) {
return @("python")
}
throw "Python 3 is not installed or not available on PATH. Install Python 3.10+ and try again."
}
function Invoke-Python {
param(
[string[]]$BaseCommand,
[string[]]$Arguments
)
$command = $BaseCommand[0]
$prefixArgs = @()
if ($BaseCommand.Count -gt 1) {
$prefixArgs = $BaseCommand[1..($BaseCommand.Count - 1)]
}
& $command @prefixArgs @Arguments
if ($LASTEXITCODE -ne 0) {
throw "Command failed: $command $($prefixArgs -join ' ') $($Arguments -join ' ')"
}
}
$pythonCmd = Get-PythonCommand
Write-Host "Using Python command: $($pythonCmd -join ' ')" -ForegroundColor Yellow
$venvDir = Join-Path $scriptDir ".venv"
$venvPython = Join-Path $venvDir "Scripts\python.exe"
if (-not (Test-Path $venvPython)) {
Write-Host "Creating virtual environment..." -ForegroundColor Yellow
Invoke-Python -BaseCommand $pythonCmd -Arguments @("-m", "venv", ".venv")
} else {
Write-Host "Virtual environment already exists." -ForegroundColor Yellow
}
Write-Host "Upgrading pip..." -ForegroundColor Yellow
& $venvPython -m pip install --upgrade pip
if ($LASTEXITCODE -ne 0) {
throw "Failed to upgrade pip."
}
Write-Host "Installing dependencies from requirements.txt..." -ForegroundColor Yellow
& $venvPython -m pip install -r requirements.txt
if ($LASTEXITCODE -ne 0) {
throw "Failed to install dependencies from requirements.txt."
}
# Create icon assets for shortcuts
try {
Write-Host "Ensuring icon assets are available..." -ForegroundColor Yellow
& $venvPython create_icon.py
}
catch {
Write-Warning "Icon generation failed: $($_.Exception.Message)"
}
$shell = New-Object -ComObject WScript.Shell
$targetPath = Join-Path $scriptDir "run_app.bat"
$iconIco = Join-Path $scriptDir "icon.ico"
$iconPng = Join-Path $scriptDir "icon.png"
$iconLocation = "$env:SystemRoot\System32\shell32.dll,220"
if (Test-Path $iconIco) {
$iconLocation = $iconIco
} elseif (Test-Path $iconPng) {
$iconLocation = $iconPng
}
function New-AppShortcut {
param(
[string]$ShortcutPath
)
$shortcut = $shell.CreateShortcut($ShortcutPath)
$shortcut.TargetPath = $targetPath
$shortcut.WorkingDirectory = $scriptDir
$shortcut.IconLocation = $iconLocation
$shortcut.Description = "Launch Journey FM Playlist Creator"
$shortcut.Save()
}
if (-not $NoDesktopShortcut) {
try {
Write-Host "Creating desktop shortcut..." -ForegroundColor Yellow
$desktop = [Environment]::GetFolderPath("Desktop")
$shortcutPath = Join-Path $desktop "Journey FM Playlist Creator.lnk"
New-AppShortcut -ShortcutPath $shortcutPath
}
catch {
Write-Warning "Desktop shortcut creation failed: $($_.Exception.Message)"
}
}
if (-not $NoStartMenuShortcut) {
try {
Write-Host "Creating Start Menu shortcut..." -ForegroundColor Yellow
$programs = [Environment]::GetFolderPath("Programs")
$shortcutPath = Join-Path $programs "Journey FM Playlist Creator.lnk"
New-AppShortcut -ShortcutPath $shortcutPath
}
catch {
Write-Warning "Start Menu shortcut creation failed: $($_.Exception.Message)"
}
}
Write-Host ""
Write-Host "Installation complete." -ForegroundColor Green
Write-Host "Launch the app with: run_app.bat" -ForegroundColor Green
Write-Host "Or run the GUI directly with: .venv\Scripts\pythonw.exe journey_fm_app.py" -ForegroundColor Green