This commit is contained in:
Jurgen S 2012-12-12 15:34:59 -08:00
commit b710e93e83
12 changed files with 500 additions and 53 deletions

View file

@ -15,6 +15,9 @@ thorli's Synology DS211j was too weak to provide decent downloads rates with SAB
The renamer of CouchPotatoServer caused broken downloads by interfering with NZBGet while it was still unpacking the files. Hence the solution was thorli's version of sabToCouchPotato which has now been named "nzbToCouchPotato". The renamer of CouchPotatoServer caused broken downloads by interfering with NZBGet while it was still unpacking the files. Hence the solution was thorli's version of sabToCouchPotato which has now been named "nzbToCouchPotato".
Failed download handling for SickBeard is available by using the development branch from fork [SickBeard-failed](https://github.com/Tolstyak/Sick-Beard.git "SickBeard-failed")
To use this feature, in autoProcessTV.cfg set the parameter "failed_fork=1". Default is 0 and will work with standard version of SickBeard and just ignores failed downloads.
Installation Installation
------------ ------------
### General ### General

View file

@ -30,7 +30,7 @@ def process(dirName, nzbName=None, status=0):
status = int(status) status = int(status)
config = ConfigParser.ConfigParser() config = ConfigParser.ConfigParser()
configFilename = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMovie.cfg") configFilename = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMovie.cfg")
print "autoProcessMovie v 3.1" print "autoProcessMovie v 3.2"
print "Loading config from", configFilename print "Loading config from", configFilename
if not os.path.isfile(configFilename): if not os.path.isfile(configFilename):

View file

@ -5,3 +5,4 @@ username=
password= password=
web_root= web_root=
ssl=0 ssl=0
failed_fork=0

View file

@ -44,10 +44,6 @@ class AuthURLOpener(urllib.FancyURLopener):
def processEpisode(dirName, nzbName=None, status=0): def processEpisode(dirName, nzbName=None, status=0):
status = int(status) status = int(status)
if status > 0:
print "the download failed. nothing to process"
sys.exit()
config = ConfigParser.ConfigParser() config = ConfigParser.ConfigParser()
configFilename = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessTV.cfg") configFilename = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessTV.cfg")
print "Loading config from", configFilename print "Loading config from", configFilename
@ -78,13 +74,33 @@ def processEpisode(dirName, nzbName=None, status=0):
except ConfigParser.NoOptionError: except ConfigParser.NoOptionError:
web_root = "" web_root = ""
try:
failed_fork = int(config.get("SickBeard", "failed_fork"))
except (ConfigParser.NoOptionError, ValueError):
failed_fork = 0
params = {} params = {}
params['quiet'] = 1 params['quiet'] = 1
params['dir'] = dirName # this is our default behaviour to work with the standard Master branch of SickBeard
if nzbName != None: if failed_fork == 0:
params['nzbName'] = nzbName params['dir'] = dirName
if nzbName != None:
params['nzbName'] = nzbName
# the standard Master bamch of SickBeard cannot process failed downloads. So Exit here.
if status != 0:
print "the download failed. nothing to process"
sys.exit()
# if you have specified you are using development branch from fork https://github.com/Tolstyak/Sick-Beard.git
else:
params['dirName'] = dirName
if nzbName != None:
params['nzbName'] = nzbName
if status == 0:
params['failed'] = False
else:
params['failed'] = True
myOpener = AuthURLOpener(username, password) myOpener = AuthURLOpener(username, password)

View file

@ -1,5 +1,10 @@
Change_LOG / History Change_LOG / History
V3.2 11/12/2012
Added failed handling from NZBGet. Thanks to schumi2004.
Also added support for the "failed download" development branch of SickBeard from https://github.com/Tolstyak/Sick-Beard.git
V3.1 02/12/2012 V3.1 02/12/2012
added conversion to ensure the status passed to the autoProcessTV and autoProcessMovie is always handled as an integer. added conversion to ensure the status passed to the autoProcessTV and autoProcessMovie is always handled as an integer.

View file

@ -17,14 +17,14 @@ if len(sys.argv) == 8:
autoProcessMovie.process(sys.argv[1], sys.argv[2], sys.argv[7]) autoProcessMovie.process(sys.argv[1], sys.argv[2], sys.argv[7])
# NZBGet # NZBGet
elif len(sys.argv) == 3: elif len(sys.argv) == 4:
# NZBGet argv: # NZBGet argv:
# 1 The final directory of the job (full path) # 1 The final directory of the job (full path)
# 2 The original name of the NZB file # 2 The original name of the NZB file
# From NZBGet only successful downloads are triggered so status is set to "0" # 3 The status of the download: 0 == successful
print "Script triggered from NZBGet, starting autoProcessMovie..." print "Script triggered from NZBGet, starting autoProcessMovie..."
autoProcessMovie.process(sys.argv[1], sys.argv[2], 0) autoProcessMovie.process(sys.argv[1], sys.argv[2], sys.argv[3])
else: else:
print "Invalid number of arguments received from client." print "Invalid number of arguments received from client."

View file

@ -39,14 +39,14 @@ if len(sys.argv) == 8:
autoProcessTV.processEpisode(sys.argv[1], sys.argv[2], sys.argv[7]) autoProcessTV.processEpisode(sys.argv[1], sys.argv[2], sys.argv[7])
# NZBGet # NZBGet
elif len(sys.argv) == 3: elif len(sys.argv) == 4:
# NZBGet argv: # NZBGet argv:
# 1 The final directory of the job (full path) # 1 The final directory of the job (full path)
# 2 The original name of the NZB file # 2 The original name of the NZB file
# From NZBGet only successful downloads are triggered so status is set to "0" # 3 The status of the download: 0 == successful
print "Script triggered from NZBGet, starting autoProcessTV..." print "Script triggered from NZBGet, starting autoProcessTV..."
autoProcessTV.processEpisode(sys.argv[1], sys.argv[2], 0) autoProcessTV.processEpisode(sys.argv[1], sys.argv[2], sys.argv[3])
else: else:
print "Invalid number of arguments received from client." print "Invalid number of arguments received from client."

View file

@ -0,0 +1,372 @@
#!/bin/sh
#
# Example postprocessing script for NZBGet
#
# Copyright (C) 2008 Peter Roubos <peterroubos@hotmail.com>
# Copyright (C) 2008 Otmar Werner
# Copyright (C) 2008-2009 Andrei Prygounkov <hugbug@users.sourceforge.net>
# Copyright (C) 2012 Antoine Bertin <diaoulael@gmail.com>
# Copyright (C) 2012 Jürgen Seif <thor78@gmx.at>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
####################### Usage instructions #######################
# o Script will unrar downloaded rar files, join ts-files and rename img-files
# to iso.
#
# o To use this script with nzbget set the option "PostProcess" in
# nzbget configuration file to point to this script file. E.g.:
# PostProcess=/home/user/nzbget/nzbget-postprocess.sh
#
# o The script needs a configuration file. An example configuration file
# is provided in file "postprocess-example.conf". Put the configuration file
# into the directory where nzbget's configuration file (nzbget.conf) or where
# this script itself is located. Then edit the configuration file in any
# text editor to adjust the settings.
#
# o You can also edit the script's configuration via web-interface (requires
# NZBGetWeb 1.4 or later). Set the options "PostProcessConfigFile" and
# "PostProcessConfigTemplate" to point to "postprocess-example.conf"
# (including full path). The both options are under the section
# "CONFIGURATION OF POSTPROCESSING-SCRIPT" in NZBGetWeb.
#
# o There are few options, which can be ajdusted for each nzb-file
# individually. To view/edit them in web-interface click on a spanner icon
# near the name of nzb-file.
#
# o The script supports the feature called "delayed par-check".
# That means it can try to unpack downloaded files without par-checking
# them fisrt. Only if unpack fails, the script schedules par-check,
# then unpacks again.
# To use delayed par-check set following options in nzbget configuration file:
# ParCheck=no
# ParRepair=yes
# LoadPars=one (or) LoadPars=all
#
# o If you want to par-check/repair all files before trying to unpack them,
# set option "ParCheck=yes".
#
####################### End of Usage instructions #######################
# NZBGet passes following arguments to postprocess-programm as environment
# variables:
# NZBPP_DIRECTORY - path to destination dir for downloaded files;
# NZBPP_NZBFILENAME - name of processed nzb-file;
# NZBPP_PARFILENAME - name of par-file or empty string (if no collections were
# found);
# NZBPP_PARSTATUS - result of par-check:
# 0 = not checked: par-check disabled or nzb-file does
# not contain any par-files;
# 1 = checked and failed to repair;
# 2 = checked and successfully repaired;
# 3 = checked and can be repaired but repair is disabled;
# NZBPP_NZBCOMPLETED - state of nzb-job:
# 0 = there are more collections in this nzb-file queued;
# 1 = this was the last collection in nzb-file;
# NZBPP_PARFAILED - indication of failed par-jobs for current nzb-file:
# 0 = no failed par-jobs;
# 1 = current par-job or any of the previous par-jobs for
# the same nzb-files failed;
# NZBPP_CATEGORY - category assigned to nzb-file (can be empty string).
# Toggle detailed output (0/1)
DEBUG=1
# Name of script's configuration file
SCRIPT_CONFIG_FILE="postprocess.conf"
# Exit codes
POSTPROCESS_PARCHECK_CURRENT=91
POSTPROCESS_PARCHECK_ALL=92
POSTPROCESS_SUCCESS=93
POSTPROCESS_ERROR=94
POSTPROCESS_NONE=95
# Postprocessing function for nzbToCouchPotato for handling failed downloads
nzbToCouchPotato() {
if [ "$DEBUG" ]; then echo "[DETAIL] Post-Process: Executing function 'nzbToCouchPotato' with argument $1" ; fi
PostProcessStatus=0
if [ -n "$1" ]; then PostProcessStatus=$1 ; fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call Couchpotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script"
if [ "$DEBUG" ]; then
echo "[DETAIL] Post-Process: CouchPotato-Script-Path=$NzbToCouchPotato"
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV1=$NZBPP_DIRECTORY"
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV2=$NZBPP_NZBFILENAME"
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV3=$PostProcessStatus"
fi
#$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" >/dev/null 2>&1
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus"
else
if [ "$CouchPotato" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run CouchPotato's postprocessing script as it is disabled by user ('$CouchPotato')"; fi
if [ "$NZBPP_CATEGORY" != "CouchPotatoCategory" ]; then echo "[DETAIL] Post-Process: Ignored to run CouchPotato's postprocessing script as category does not match ('$NZBPP_CATEGORY')"; fi
fi
}
# Pass on postprocess exit codes to external scripts for handling failed downloads
do_exit() {
if [ "$DEBUG" ]; then echo "[DETAIL] Post-Process: Executing function 'do_exit' with argument $1" ; fi
nzbStatus=0
if [ "$1" -ne "$POSTPROCESS_SUCCESS" ]; then nzbStatus=1 ; fi
nzbToCouchPotato $nzbStatus
exit $1
}
# Check if the script is called from nzbget
if [ "$NZBPP_DIRECTORY" = "" -o "$NZBOP_CONFIGFILE" = "" ]; then
echo "*** NZBGet post-process script ***"
echo "This script is supposed to be called from nzbget (0.7.0 or later)."
exit $POSTPROCESS_ERROR
fi
# Check if postprocessing was disabled in postprocessing parameters
# (for current nzb-file) via web-interface or via command line with
# "nzbget -E G O PostProcess=no <ID>"
if [ "$NZBPR_PostProcess" = "no" ]; then
echo "[WARNING] Post-Process: Postprocessing disabled for this nzb-file, exiting"
exit $POSTPROCESS_NONE
fi
echo "[INFO] Post-Process: Post-process script successfully started"
# Determine the location of configuration file (it must be stored in
# the directory with nzbget.conf or in this script's directory).
ConfigDir="${NZBOP_CONFIGFILE%/*}"
ScriptConfigFile="$ConfigDir/$SCRIPT_CONFIG_FILE"
if [ ! -f "$ScriptConfigFile" ]; then
ConfigDir="${0%/*}"
ScriptConfigFile="$ConfigDir/$SCRIPT_CONFIG_FILE"
fi
if [ ! -f "$ScriptConfigFile" ]; then
echo "[ERROR] Post-Process: Configuration file $ScriptConfigFile not found, exiting"
do_exit $POSTPROCESS_ERROR
fi
# Readg configuration file
while read line; do eval "$line"; done < $ScriptConfigFile
# Check nzbget.conf options
BadConfig=0
if [ "$NZBOP_ALLOWREPROCESS" = "yes" ]; then
echo "[ERROR] Post-Process: Please disable option \"AllowReProcess\" in nzbget configuration file"
BadConfig=1
fi
if [ "$NZBOP_LOADPARS" = "none" ]; then
echo "[ERROR] Post-Process: Please set option \"LoadPars\" to \"One\" or \"All\" in nzbget configuration file"
BadConfig=1
fi
if [ "$NZBOP_PARREPAIR" = "no" ]; then
echo "[ERROR] Post-Process: Please set option \"ParRepair\" to \"Yes\" in nzbget configuration file"
BadConfig=1
fi
if [ "$BadConfig" -eq 1 ]; then
echo "[ERROR] Post-Process: Existing because of not compatible nzbget configuration"
do_exit $POSTPROCESS_ERROR
fi
# Check if all collections in nzb-file were downloaded
if [ ! "$NZBPP_NZBCOMPLETED" -eq 1 ]; then
echo "[INFO] Post-Process: Not the last collection in nzb-file, exiting"
do_exit $POSTPROCESS_SUCCESS
fi
# Check par status
if [ "$NZBPP_PARSTATUS" -eq 1 -o "$NZBPP_PARSTATUS" -eq 3 -o "$NZBPP_PARFAILED" -eq 1 ]; then
if [ "$NZBPP_PARSTATUS" -eq 3 ]; then
echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting"
else
echo "[WARNING] Post-Process: Par-check failed, exiting"
fi
#nzbToCouchPotato
do_exit $POSTPROCESS_ERROR
fi
# Check if destination directory exists (important for reprocessing of history items)
if [ ! -d "$NZBPP_DIRECTORY" ]; then
echo "[ERROR] Post-Process: Nothing to post-process: destination directory $NZBPP_DIRECTORY doesn't exist"
do_exit $POSTPROCESS_ERROR
fi
cd "$NZBPP_DIRECTORY"
# If not just repaired and file "_brokenlog.txt" exists, the collection is damaged
# exiting with returning code $POSTPROCESS_PARCHECK_ALL to request par-repair
if [ ! "$NZBPP_PARSTATUS" -eq 2 ]; then
if [ -f "_brokenlog.txt" ]; then
if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then
echo "[INFO] Post-Process: Brokenlog found, requesting par-repair"
do_exit $POSTPROCESS_PARCHECK_ALL
fi
fi
fi
# All checks done, now processing the files
# Flag indicates that something was unrared
Unrared=0
# Unrar the files (if any) to the temporary directory, if there are no rar files this will do nothing
if (ls *.rar >/dev/null 2>&1); then
# Check if unrar exists
$UnrarCmd >/dev/null 2>&1
if [ "$?" -eq 127 ]; then
echo "[ERROR] Post-Process: Unrar not found. Set the path to unrar in script's configuration"
do_exit $POSTPROCESS_ERROR
fi
# Make a temporary directory to store the unrarred files
ExtractedDirExists=0
if [ -d $ExtractedDir ]; then
ExtractedDirExists=1
else
mkdir $ExtractedDir
fi
echo "[INFO] Post-Process: Unraring"
rarpasswordparam=""
if [ "$NZBPR_Password" != "" ]; then
rarpasswordparam="-p$NZBPR_Password"
fi
$UnrarCmd x -y -p- "$rarpasswordparam" -o+ "*.rar" ./$ExtractedDir/
if [ "$?" -eq 3 ]; then
echo "[ERROR] Post-Process: Unrar failed"
if [ "$ExtractedDirExists" -eq 0 ]; then
rm -R $ExtractedDir
fi
# for delayed par-check/-repair at least one par-file must be already downloaded
if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then
echo "[INFO] Post-Process: Requesting par-repair"
do_exit $POSTPROCESS_PARCHECK_ALL
fi
do_exit $POSTPROCESS_ERROR
fi
Unrared=1
# Remove the rar files
if [ "$DeleteRarFiles" = "yes" ]; then
echo "[INFO] Post-Process: Deleting rar-files"
rm *.r[0-9][0-9] >/dev/null 2>&1
rm *.rar >/dev/null 2>&1
rm *.s[0-9][0-9] >/dev/null 2>&1
fi
# Go to the temp directory and try to unrar again.
# If there are any rars inside the extracted rars then these will no also be unrarred
cd $ExtractedDir
if (ls *.rar >/dev/null 2>&1); then
echo "[INFO] Post-Process: Unraring (second pass)"
$UnrarCmd x -y -p- -o+ "*.rar"
if [ "$?" -eq 3 ]; then
echo "[INFO] Post-Process: Unrar (second pass) failed"
do_exit $POSTPROCESS_ERROR
fi
# Delete the Rar files
if [ "$DeleteRarFiles" = "yes" ]; then
echo "[INFO] Post-Process: Deleting rar-files (second pass)"
rm *.r[0-9][0-9] >/dev/null 2>&1
rm *.rar >/dev/null 2>&1
rm *.s[0-9][0-9] >/dev/null 2>&1
fi
fi
# Move everything back to the Download folder
mv * ..
cd ..
rmdir $ExtractedDir
fi
# If download contains only nzb-files move them into nzb-directory
# for further download
# Check if command "wc" exists
wc -l . >/dev/null 2>&1
if [ "$?" -ne 127 ]; then
AllFilesCount=`ls -1 2>/dev/null | wc -l`
NZBFilesCount=`ls -1 *.nzb 2>/dev/null | wc -l`
if [ "$AllFilesCount" -eq "$NZBFilesCount" ]; then
echo "[INFO] Moving downloaded nzb-files into incoming nzb-directory for further download"
mv *.nzb $NZBOP_NZBDIR
fi
fi
# Clean up
echo "[INFO] Post-Process: Cleaning up"
chmod -R a+rw .
rm *.nzb >/dev/null 2>&1
rm *.sfv >/dev/null 2>&1
rm *.1 >/dev/null 2>&1
rm _brokenlog.txt >/dev/null 2>&1
if [ "$Unrared" -eq 1 ]; then
# Delete par2-file only if there were files for unpacking.
rm *.[pP][aA][rR]2 >/dev/null 2>&1
fi
if [ "$JoinTS" = "yes" ]; then
# Join any split .ts files if they are named xxxx.0000.ts xxxx.0001.ts
# They will be joined together to a file called xxxx.0001.ts
if (ls *.ts >/dev/null 2>&1); then
echo "[INFO] Post-Process: Joining ts-files"
tsname=`find . -name "*0001.ts" |awk -F/ '{print $NF}'`
cat *0???.ts > ./$tsname
fi
# Remove all the split .ts files
echo "[INFO] Post-Process: Deleting source ts-files"
rm *0???.ts >/dev/null 2>&1
fi
if [ "$RenameIMG" = "yes" ]; then
# Rename img file to iso
# It will be renamed to .img.iso so you can see that it has been renamed
if (ls *.img >/dev/null 2>&1); then
echo "[INFO] Post-Process: Renaming img-files to iso"
imgname=`find . -name "*.img" |awk -F/ '{print $NF}'`
mv $imgname $imgname.iso
fi
fi
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$SabToSickBeard" ]; then
# Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script"
#$PythonCmd $SabToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1
$PythonCmd $SabToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME"
fi
# Check if destination directory was set in postprocessing parameters
# (for current nzb-file) via web-interface or via command line with
# "nzbget -E G O DestDir=/new/path <ID>"
if [ "$NZBPR_DestDir" != "" ]; then
mkdir $NZBPR_DestDir
mv * $NZBPR_DestDir >/dev/null 2>&1
cd ..
rmdir $NZBPP_DIRECTORY
fi
# All OK, requesting cleaning up of download queue
do_exit $POSTPROCESS_SUCCESS

View file

@ -11,15 +11,15 @@ PythonCmd=/usr/local/python/bin/python
NzbToSickBeard=/usr/local/nzbget/var/nzbToSickBeard.py NzbToSickBeard=/usr/local/nzbget/var/nzbToSickBeard.py
# Set the full path where completed movies should be placed # Set the full path where completed movies should be placed
# before CouchPotato's Renamer is called # before SickBeard's Renamer is called
TV_DL_DIR=/usr/local/nzbget/complete/tv TvDownloadDir=/usr/local/nzbget/complete/tv
# Set the full path to nzbToCouchpotato.py for Couchpotato's postprocessing # Set the full path to nzbToCouchpotato.py for Couchpotato's postprocessing
NzbToCouchPotato=/usr/local/nzbget/var/nzbToCouchPotato.py NzbToCouchPotato=/usr/local/nzbget/var/nzbToCouchPotato.py
# Set the full path where completed movies should be placed # Set the full path where completed movies should be placed
# before CouchPotato's Renamer is called # before CouchPotato's Renamer is called
MOVIES_DL_DIR=/usr/local/nzbget/complete/movies MoviesDownloadDir=/usr/local/nzbget/complete/movies
############################################################################## ##############################################################################
@ -49,6 +49,8 @@ CouchPotato=yes
# Category for Couchpotato's postprocessing (eg. movies) # Category for Couchpotato's postprocessing (eg. movies)
CouchPotatoCategory=movies CouchPotatoCategory=movies
# Clean up list. (space seperated, default *.nzb *.sfv *.1)
FileCleanUp=*.nzb *.sfv *.1
############################################################################## ##############################################################################
### POSTPROCESSING-PARAMETERS ### ### POSTPROCESSING-PARAMETERS ###

View file

@ -164,6 +164,17 @@ if [ "$NZBPP_PARSTATUS" -eq 1 -o "$NZBPP_PARSTATUS" -eq 3 -o "$NZBPP_PARFAILED"
echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting" echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting"
else else
echo "[WARNING] Post-Process: Par-check failed, exiting" echo "[WARNING] Post-Process: Par-check failed, exiting"
# Send notifications to SickBeard or CouchPotato that Par-check failed
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script to notify Par-check failed"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1" >/dev/null 2>&1
fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script to notify Par-check failed"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1" >/dev/null 2>&1
fi
fi fi
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
fi fi
@ -226,6 +237,17 @@ if (ls *.rar >/dev/null 2>&1); then
if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then
echo "[INFO] Post-Process: Requesting par-repair" echo "[INFO] Post-Process: Requesting par-repair"
exit $POSTPROCESS_PARCHECK_ALL exit $POSTPROCESS_PARCHECK_ALL
# Send notifications to SickBeard or CouchPotato that unrar (second pass) failed
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script to notify unrar (second pass) failed"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1">/dev/null 2>&1
fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script to notify unrar (second pass) failed"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1">/dev/null 2>&1
fi
fi fi
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
fi fi
@ -282,9 +304,9 @@ fi
# Clean up # Clean up
echo "[INFO] Post-Process: Cleaning up" echo "[INFO] Post-Process: Cleaning up"
chmod -R a+rw . chmod -R a+rw .
rm *.nzb >/dev/null 2>&1 # Clean up list, space seperated from GUI
rm *.sfv >/dev/null 2>&1 rm $FileCleanUp >/dev/null 2>&1
rm *.1 >/dev/null 2>&1 # Removed by default
rm _brokenlog.txt >/dev/null 2>&1 rm _brokenlog.txt >/dev/null 2>&1
if [ "$Unrared" -eq 1 ]; then if [ "$Unrared" -eq 1 ]; then
# Delete par2-file only if there were files for unpacking. # Delete par2-file only if there were files for unpacking.
@ -320,31 +342,32 @@ fi
############################ ############################
# Move categories to /share/yourdirectory and remove download destination directory # Move categories to /share/yourdirectory and remove download destination directory
if [ "$NZBPP_CATEGORY" = "$SickBeardCategory" ]; then # Test for category and ensure the passed directory exists as a directory.
echo "[INFO] Post-Process: Moving TV shows to $TV_DL_DIR" if [ "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -d "$TvDownloadDir" ]; then
cp -R "$NZBPP_DIRECTORY" "$TV_DL_DIR" >/dev/null 2>&1 echo "[INFO] Post-Process: Moving TV shows to $TvDownloadDir"
cp -R "$NZBPP_DIRECTORY" "$TvDownloadDir" >/dev/null 2>&1
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
echo "[ERROR] Post-Process: Moving to $TV_DL_DIR" echo "[ERROR] Post-Process: Moving to $TvDownloadDir"
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
else else
rm -fr * rm -fr *
cd .. cd ..
rmdir "$NZBPP_DIRECTORY" rmdir "$NZBPP_DIRECTORY"
NZBPP_DIRECTORY="$TV_DL_DIR" NZBPP_DIRECTORY="$TvDownloadDir"
fi fi
fi fi
# Test for category and ensure the passed directory exists as a directory.
if [ "$NZBPP_CATEGORY" = "$CouchPotatoCategory" ]; then if [ "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -d "$MoviesDownloadDir" ]; then
echo "[INFO] Post-Process: Moving Movies to $MOVIES_DL_DIR" echo "[INFO] Post-Process: Moving Movies to $MoviesDownloadDir"
cp -R "$NZBPP_DIRECTORY" "$MOVIES_DL_DIR" >/dev/null 2>&1 cp -R "$NZBPP_DIRECTORY" "$MoviesDownloadDir" >/dev/null 2>&1
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
echo "[ERROR] Post-Process: Moving to $MOVIES_DL_DIR" echo "[ERROR] Post-Process: Moving to $MoviesDownloadDir"
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
else else
rm -fr * rm -fr *
cd .. cd ..
rmdir "$NZBPP_DIRECTORY" rmdir "$NZBPP_DIRECTORY"
NZBPP_DIRECTORY="$MOVIES_DL_DIR" NZBPP_DIRECTORY="$MoviesDownloadDir"
fi fi
fi fi
@ -355,13 +378,13 @@ fi
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script # Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script" echo "[INFO] Post-Process: Running SickBeard's postprocessing script"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 $PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "0" >/dev/null 2>&1
fi fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script # Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script" echo "[INFO] Post-Process: Running CouchPotato's postprocessing script"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 $PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "0" >/dev/null 2>&1
fi fi
# Check if destination directory was set in postprocessing parameters # Check if destination directory was set in postprocessing parameters

View file

@ -164,6 +164,17 @@ if [ "$NZBPP_PARSTATUS" -eq 1 -o "$NZBPP_PARSTATUS" -eq 3 -o "$NZBPP_PARFAILED"
echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting" echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting"
else else
echo "[WARNING] Post-Process: Par-check failed, exiting" echo "[WARNING] Post-Process: Par-check failed, exiting"
# Send notifications to SickBeard or CouchPotato that Par-check failed
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script to notify Par-check failed"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1" >/dev/null 2>&1
fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script to notify Par-check failed"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1" >/dev/null 2>&1
fi
fi fi
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
fi fi
@ -226,6 +237,17 @@ if (ls *.rar >/dev/null 2>&1); then
if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then
echo "[INFO] Post-Process: Requesting par-repair" echo "[INFO] Post-Process: Requesting par-repair"
exit $POSTPROCESS_PARCHECK_ALL exit $POSTPROCESS_PARCHECK_ALL
# Send notifications to SickBeard or CouchPotato that unrar (second pass) failed
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script to notify unrar (second pass) failed"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1">/dev/null 2>&1
fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script to notify unrar (second pass) failed"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "1">/dev/null 2>&1
fi
fi fi
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
fi fi
@ -282,9 +304,9 @@ fi
# Clean up # Clean up
echo "[INFO] Post-Process: Cleaning up" echo "[INFO] Post-Process: Cleaning up"
chmod -R a+rw . chmod -R a+rw .
rm *.nzb >/dev/null 2>&1 # Clean up list, space seperated from GUI
rm *.sfv >/dev/null 2>&1 rm $FileCleanUp >/dev/null 2>&1
rm *.1 >/dev/null 2>&1 # Removed by default
rm _brokenlog.txt >/dev/null 2>&1 rm _brokenlog.txt >/dev/null 2>&1
if [ "$Unrared" -eq 1 ]; then if [ "$Unrared" -eq 1 ]; then
# Delete par2-file only if there were files for unpacking. # Delete par2-file only if there were files for unpacking.
@ -320,31 +342,32 @@ fi
############################ ############################
# Move categories to /share/yourdirectory and remove download destination directory # Move categories to /share/yourdirectory and remove download destination directory
if [ "$NZBPP_CATEGORY" = "$SickBeardCategory" ]; then # Test for category and ensure the passed directory exists as a directory.
echo "[INFO] Post-Process: Moving TV shows to $TV_DL_DIR" if [ "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -d "$TvDownloadDir" ]; then
cp -R "$NZBPP_DIRECTORY" "$TV_DL_DIR" >/dev/null 2>&1 echo "[INFO] Post-Process: Moving TV shows to $TvDownloadDir"
cp -R "$NZBPP_DIRECTORY" "$TvDownloadDir" >/dev/null 2>&1
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
echo "[ERROR] Post-Process: Moving to $TV_DL_DIR" echo "[ERROR] Post-Process: Moving to $TvDownloadDir"
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
else else
rm -fr * rm -fr *
cd .. cd ..
rmdir "$NZBPP_DIRECTORY" rmdir "$NZBPP_DIRECTORY"
NZBPP_DIRECTORY="$TV_DL_DIR" NZBPP_DIRECTORY="$TvDownloadDir"
fi fi
fi fi
# Test for category and ensure the passed directory exists as a directory.
if [ "$NZBPP_CATEGORY" = "$CouchPotatoCategory" ]; then if [ "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -d "$MoviesDownloadDir" ]; then
echo "[INFO] Post-Process: Moving Movies to $MOVIES_DL_DIR" echo "[INFO] Post-Process: Moving Movies to $MoviesDownloadDir"
cp -R "$NZBPP_DIRECTORY" "$MOVIES_DL_DIR" >/dev/null 2>&1 cp -R "$NZBPP_DIRECTORY" "$MoviesDownloadDir" >/dev/null 2>&1
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
echo "[ERROR] Post-Process: Moving to $MOVIES_DL_DIR" echo "[ERROR] Post-Process: Moving to $MoviesDownloadDir"
exit $POSTPROCESS_ERROR exit $POSTPROCESS_ERROR
else else
rm -fr * rm -fr *
cd .. cd ..
rmdir "$NZBPP_DIRECTORY" rmdir "$NZBPP_DIRECTORY"
NZBPP_DIRECTORY="$MOVIES_DL_DIR" NZBPP_DIRECTORY="$MoviesDownloadDir"
fi fi
fi fi
@ -355,13 +378,13 @@ fi
if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$NzbToSickBeard" ]; then
# Call SickBeard's postprocessing script # Call SickBeard's postprocessing script
echo "[INFO] Post-Process: Running SickBeard's postprocessing script" echo "[INFO] Post-Process: Running SickBeard's postprocessing script"
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 $PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "0" >/dev/null 2>&1
fi fi
if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$NzbToCouchPotato" ]; then
# Call CouchPotato's postprocessing script # Call CouchPotato's postprocessing script
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script" echo "[INFO] Post-Process: Running CouchPotato's postprocessing script"
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 $PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "0" >/dev/null 2>&1
fi fi
# Check if destination directory was set in postprocessing parameters # Check if destination directory was set in postprocessing parameters

View file

@ -36,15 +36,15 @@ PythonCmd=/usr/local/python/bin/python
NzbToSickBeard=/usr/local/nzbget/var/nzbToSickBeard.py NzbToSickBeard=/usr/local/nzbget/var/nzbToSickBeard.py
# Set the full path where completed movies should be placed # Set the full path where completed movies should be placed
# before CouchPotato's Renamer is called # before SickBeard's Renamer is called
TV_DL_DIR=/usr/local/nzbget/complete/tv TvDownloadDir=/usr/local/nzbget/complete/tv
# Set the full path to nzbToCouchpotato.py for Couchpotato's postprocessing # Set the full path to nzbToCouchpotato.py for Couchpotato's postprocessing
NzbToCouchPotato=/usr/local/nzbget/var/nzbToCouchPotato.py NzbToCouchPotato=/usr/local/nzbget/var/nzbToCouchPotato.py
# Set the full path where completed movies should be placed # Set the full path where completed movies should be placed
# before CouchPotato's Renamer is called # before CouchPotato's Renamer is called
MOVIES_DL_DIR=/usr/local/nzbget/complete/movies MoviesDownloadDir=/usr/local/nzbget/complete/movies
############################################################################## ##############################################################################
### OPTIONS ### ### OPTIONS ###
@ -70,6 +70,8 @@ CouchPotato=yes
# Category for Couchpotato's postprocessing. # Category for Couchpotato's postprocessing.
CouchPotatoCategory=movies CouchPotatoCategory=movies
# Clean up list. (space seperated, default *.nzb *.sfv *.1)
FileCleanUp=*.nzb *.sfv *.1
############################################################################## ##############################################################################
### POSTPROCESSING-PARAMETERS ### ### POSTPROCESSING-PARAMETERS ###