Files
ChocolateyPackages/CouchPotato/tools/chocolateyUninstall.ps1
Iristyle 44f5b0d162 CouchPotato
Installs CouchPotato from source
- Registers as Windows Service
- Configures SABNzbd+
- Configures alternative post-processing script
2012-11-04 12:35:18 -05:00

135 lines
4.5 KiB
PowerShell

$package = 'CouchPotato'
try
{
function Get-CurrentDirectory
{
$thisName = $MyInvocation.MyCommand.Name
[IO.Path]::GetDirectoryName((Get-Content function:$thisName).File)
}
# load INI parser
. (Join-Path (Get-CurrentDirectory) 'Get-IniContent.ps1')
. (Join-Path (Get-CurrentDirectory) 'Out-IniFile.ps1')
#simulate the unix command for finding things in path
#http://stackoverflow.com/questions/63805/equivalent-of-nix-which-command-in-powershell
function Which([string]$cmd)
{
Get-Command -ErrorAction "SilentlyContinue" $cmd |
Select -ExpandProperty Definition
}
Write-Host 'Deleting CouchPotato Windows Firewall config'
netsh advfirewall firewall delete rule name="CouchPotato"
# check registry for path to CouchPotato
$servicePath = 'HKLM:\SYSTEM\CurrentControlSet\Services\CouchPotato\Parameters'
$installDir = Get-ItemProperty $servicePath -ErrorAction SilentlyContinue |
Select -ExpandProperty AppParameters
if ($installDir)
{
$couchPotatoDir = Split-Path $installDir
$sitePackages = Split-Path $couchPotatoDir
Write-Host "Found CouchPotato service configuration directory of $couchPotatoDir"
}
# not found - do some guesswork
else
{
# Use PYTHONHOME if it exists, or fallback to 'Where' to search PATH
if ($Env:PYTHONHOME) { $localPython = Join-Path $Env:PYTHONHOME 'python.exe' }
if (!$Env:PYTHONHOME -or !(Test-Path $localPython))
{ $localPython = Which python.exe }
if (!(Test-Path $localPython))
{
Write-Warning 'Could not find CouchPotato or Python!'
}
else
{
$pythonRoot = Split-Path $localPython
$sitePackages = (Join-Path (Join-Path $pythonRoot 'Lib') 'site-packages')
$couchPotatoDir = Join-Path $sitePackages 'CouchPotatoServer'
Write-Host "CouchPotato service configuration not found - assuming $couchPotatoDir"
}
}
# delete the service and reg keys
if (Get-Service CouchPotato -ErrorAction SilentlyContinue)
{
Write-Host 'Deleting CouchPotato service'
Stop-Service CouchPotato
sc.exe delete CouchPotato
}
# we found CouchPotato on disk, so delete all the files
if (Test-Path $couchPotatoDir)
{
Write-Host "Removing all files in $couchPotatoDir"
Remove-Item $couchPotatoDir -Recurse -Force -ErrorAction SilentlyContinue
if (Test-Path $couchPotatoDir)
{
Write-Warning "$couchPotatoDir must be deleted manually"
}
}
$sysProfile = Join-Path 'config' 'systemprofile'
$couchPotatoData = Join-Path (Join-Path 'AppData' 'Roaming') 'CouchPotato'
$couchPotatoData = Join-Path $sysProfile $couchPotatoData
# config files are created on first start-up
$configPath = (Join-Path ([Environment]::GetFolderPath('System')) $couchPotatoData),
# must handle SYSWOW64 on x64 (works inside both 32-bit and 64-bit host procs)
(Join-Path ([Environment]::GetFolderPath('SystemX86')) $couchPotatoData) |
Select -Unique |
% {
if (Test-Path $_)
{
Write-Warning "$_ data directory must be deleted manually"
}
}
# Read SABNzbd+ config file to delete CouchPotato scripts if configured
$sabDataPath = Join-Path $Env:LOCALAPPDATA 'sabnzbd'
$sabIniPath = Join-Path $sabDataPath 'sabnzbd.ini'
if (Test-Path $sabIniPath)
{
Write-Host "Reading SABnzbd+ config file at $sabIniPath"
$sabConfig = Get-IniContent $sabIniPath
$scriptsDir = $sabConfig.misc.script_dir
# found a legit scripts dir, so delete CouchPotato files
if ($scriptsDir -and ($scriptsDir -ne "`"`"") -and (Test-Path $scriptsDir))
{
Write-Warning "SABnzbd+ post-processing scripts at $scriptsDir must be deleted manually"
}
$movies = $sabconfig.categories.movies
if ($movies -and ($movies.script -eq 'sabToCouchPotato.py'))
{
Write-Host 'Removed sabToCouchPotato.py script from movies category inside SABnzbd+'
$movies.script = 'None'
$sabConfig | Out-IniFile -FilePath $sabIniPath -Force -Encoding UTF8
}
Write-Host 'Restarting SABnzbd+ to accept configuration changes'
$url = ("http://localhost:$($sabConfig.misc.port)/api?mode=restart" +
"&apikey=$($sabConfig.misc.api_key)")
try
{
(New-Object Net.WebClient).DownloadString($url)
}
catch
{
Write-Host "SABNzbd+ not responding to restart request"
}
}
Write-ChocolateySuccess $package
} catch {
Write-ChocolateyFailure $package "$($_.Exception.Message)"
throw
}