odl 0.3.4

flexible download library and CLI intended to be fast, reliable, and easy to use.
Documentation
# odl uninstaller for Windows (PowerShell 5+).
# Usage:
#   irm https://raw.githubusercontent.com/jd1378/odl/main/tools/uninstall.ps1 | iex
# Env:
#   $env:ODL_INSTALL_DIR  directory where odl was installed (default: %LOCALAPPDATA%\Programs\odl)
#   $env:ODL_PURGE        if "1", also remove user config dir

$ErrorActionPreference = 'Stop'

$InstallDir = if ($env:ODL_INSTALL_DIR) { $env:ODL_INSTALL_DIR } else { Join-Path $env:LOCALAPPDATA 'Programs\odl' }
$Purge = ($env:ODL_PURGE -eq '1')

$exe = Join-Path $InstallDir 'odl.exe'
if (Test-Path $exe) {
  Remove-Item -Force $exe
  Write-Host "removed: $exe"
} else {
  $cmd = Get-Command odl.exe -ErrorAction SilentlyContinue
  if ($cmd) {
    Remove-Item -Force $cmd.Source
    Write-Host "removed: $($cmd.Source)"
  } else {
    Write-Warning "odl.exe not found in $InstallDir or PATH"
  }
}

# Drop empty install dir + remove from user PATH.
if ((Test-Path $InstallDir) -and -not (Get-ChildItem -Force $InstallDir)) {
  Remove-Item -Force $InstallDir
  Write-Host "removed empty dir: $InstallDir"
}

$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
if ($userPath) {
  $parts = $userPath -split ';' | Where-Object { $_ -and ($_ -ine $InstallDir) }
  $newPath = ($parts -join ';')
  if ($newPath -ne $userPath) {
    [Environment]::SetEnvironmentVariable('Path', $newPath, 'User')
    Write-Host "removed $InstallDir from user PATH"
  }
}

if ($Purge) {
  $cfg = Join-Path $env:APPDATA 'odl'
  if (Test-Path $cfg) {
    Remove-Item -Recurse -Force $cfg
    Write-Host "removed config: $cfg"
  }
}