SHOW:
|
|
- or go back to the newest paste.
| 1 | #!/bin/sh | |
| 2 | # | |
| 3 | # This file if part of nzbget | |
| 4 | # | |
| 5 | # Example postprocessing script for NZBGet | |
| 6 | # | |
| 7 | # Copyright (C) 2008 Peter Roubos <[email protected]> | |
| 8 | # Copyright (C) 2008 Otmar Werner | |
| 9 | # Copyright (C) 2008-2012 Andrey Prygunkov <[email protected]> | |
| 10 | # Copyright (C) 2012 Antoine Bertin <[email protected]> | |
| 11 | # | |
| 12 | # This program is free software; you can redistribute it and/or modify | |
| 13 | # it under the terms of the GNU General Public License as published by | |
| 14 | # the Free Software Foundation; either version 2 of the License, or | |
| 15 | # (at your option) any later version. | |
| 16 | # | |
| 17 | # This program is distributed in the hope that it will be useful, | |
| 18 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 20 | # GNU General Public License for more details. | |
| 21 | # | |
| 22 | # You should have received a copy of the GNU General Public License | |
| 23 | # along with this program; if not, write to the Free Software | |
| 24 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
| 25 | # | |
| 26 | # | |
| 27 | ||
| 28 | ####################### Usage instructions ####################### | |
| 29 | # o Script will unrar downloaded rar files, join ts-files and rename img-files | |
| 30 | # to iso. | |
| 31 | # | |
| 32 | # o To use this script with nzbget set the option "PostProcess" in | |
| 33 | # nzbget configuration file to point to this script file. E.g.: | |
| 34 | # PostProcess=/home/user/nzbget/nzbget-postprocess.sh | |
| 35 | # | |
| 36 | # o The script needs a configuration file. An example configuration file | |
| 37 | # is provided in file "postprocess-example.conf". Put the configuration file | |
| 38 | # into the directory where nzbget's configuration file (nzbget.conf) or where | |
| 39 | # this script itself is located. Then edit the configuration file in any | |
| 40 | # text editor to adjust the settings. | |
| 41 | # | |
| 42 | # o You can also edit the script's configuration via web-interface (requires | |
| 43 | # NZBGetWeb 1.4 or later). Set the options "PostProcessConfigFile" and | |
| 44 | # "PostProcessConfigTemplate" to point to "postprocess-example.conf" | |
| 45 | # (including full path). The both options are under the section | |
| 46 | # "CONFIGURATION OF POSTPROCESSING-SCRIPT" in NZBGetWeb. | |
| 47 | # | |
| 48 | # o There are few options, which can be ajdusted for each nzb-file | |
| 49 | # individually. To view/edit them in web-interface click on a spanner icon | |
| 50 | # near the name of nzb-file. | |
| 51 | # | |
| 52 | # o The script supports the feature called "delayed par-check". | |
| 53 | # That means it can try to unpack downloaded files without par-checking | |
| 54 | # them fisrt. Only if unpack fails, the script schedules par-check, | |
| 55 | # then unpacks again. | |
| 56 | # To use delayed par-check set following options in nzbget configuration file: | |
| 57 | # ParCheck=no | |
| 58 | # ParRepair=yes | |
| 59 | # LoadPars=one (or) LoadPars=all | |
| 60 | # | |
| 61 | # o If you want to par-check/repair all files before trying to unpack them, | |
| 62 | # set option "ParCheck=yes". | |
| 63 | # | |
| 64 | ####################### End of Usage instructions ####################### | |
| 65 | ||
| 66 | ||
| 67 | # NZBGet passes following arguments to postprocess-programm as environment | |
| 68 | # variables: | |
| 69 | # NZBPP_DIRECTORY - path to destination dir for downloaded files; | |
| 70 | # NZBPP_NZBFILENAME - name of processed nzb-file; | |
| 71 | # NZBPP_PARFILENAME - name of par-file or empty string (if no collections were | |
| 72 | # found); | |
| 73 | # NZBPP_PARSTATUS - result of par-check: | |
| 74 | # 0 = not checked: par-check disabled or nzb-file does | |
| 75 | # not contain any par-files; | |
| 76 | # 1 = checked and failed to repair; | |
| 77 | # 2 = checked and successfully repaired; | |
| 78 | # 3 = checked and can be repaired but repair is disabled; | |
| 79 | # NZBPP_NZBCOMPLETED - state of nzb-job: | |
| 80 | # 0 = there are more collections in this nzb-file queued; | |
| 81 | # 1 = this was the last collection in nzb-file; | |
| 82 | # NZBPP_PARFAILED - indication of failed par-jobs for current nzb-file: | |
| 83 | # 0 = no failed par-jobs; | |
| 84 | # 1 = current par-job or any of the previous par-jobs for | |
| 85 | # the same nzb-files failed; | |
| 86 | # NZBPP_CATEGORY - category assigned to nzb-file (can be empty string). | |
| 87 | ||
| 88 | ||
| 89 | # Name of script's configuration file | |
| 90 | SCRIPT_CONFIG_FILE="nzbget-postprocess.conf" | |
| 91 | ||
| 92 | # Exit codes | |
| 93 | POSTPROCESS_PARCHECK_CURRENT=91 | |
| 94 | POSTPROCESS_PARCHECK_ALL=92 | |
| 95 | POSTPROCESS_SUCCESS=93 | |
| 96 | POSTPROCESS_ERROR=94 | |
| 97 | POSTPROCESS_NONE=95 | |
| 98 | ||
| 99 | # Check if the script is called from nzbget | |
| 100 | if [ "$NZBPP_DIRECTORY" = "" -o "$NZBOP_CONFIGFILE" = "" ]; then | |
| 101 | echo "*** NZBGet post-process script ***" | |
| 102 | echo "This script is supposed to be called from nzbget (0.7.0 or later)." | |
| 103 | exit $POSTPROCESS_ERROR | |
| 104 | fi | |
| 105 | ||
| 106 | # Check if postprocessing was disabled in postprocessing parameters | |
| 107 | # (for current nzb-file) via web-interface or via command line with | |
| 108 | # "nzbget -E G O PostProcess=no <ID>" | |
| 109 | if [ "$NZBPR_PostProcess" = "no" ]; then | |
| 110 | echo "[WARNING] Post-Process: Postprocessing disabled for this nzb-file, exiting" | |
| 111 | exit $POSTPROCESS_NONE | |
| 112 | fi | |
| 113 | ||
| 114 | echo "[INFO] Post-Process: Post-process script successfully started" | |
| 115 | ||
| 116 | # Determine the location of configuration file (it must be stored in | |
| 117 | # the directory with nzbget.conf or in this script's directory). | |
| 118 | ConfigDir="${NZBOP_CONFIGFILE%/*}"
| |
| 119 | ScriptConfigFile="$ConfigDir/$SCRIPT_CONFIG_FILE" | |
| 120 | if [ ! -f "$ScriptConfigFile" ]; then | |
| 121 | ConfigDir="${0%/*}"
| |
| 122 | ScriptConfigFile="$ConfigDir/$SCRIPT_CONFIG_FILE" | |
| 123 | fi | |
| 124 | if [ ! -f "$ScriptConfigFile" ]; then | |
| 125 | echo "[ERROR] Post-Process: Configuration file $ScriptConfigFile not found, exiting" | |
| 126 | exit $POSTPROCESS_ERROR | |
| 127 | fi | |
| 128 | ||
| 129 | # Readg configuration file | |
| 130 | while read line; do eval "$line"; done < $ScriptConfigFile | |
| 131 | ||
| 132 | # Check nzbget.conf options | |
| 133 | BadConfig=0 | |
| 134 | ||
| 135 | if [ "$NZBOP_ALLOWREPROCESS" = "yes" ]; then | |
| 136 | echo "[ERROR] Post-Process: Please disable option \"AllowReProcess\" in nzbget configuration file" | |
| 137 | BadConfig=1 | |
| 138 | fi | |
| 139 | ||
| 140 | if [ "$NZBOP_LOADPARS" = "none" ]; then | |
| 141 | echo "[ERROR] Post-Process: Please set option \"LoadPars\" to \"One\" or \"All\" in nzbget configuration file" | |
| 142 | BadConfig=1 | |
| 143 | fi | |
| 144 | ||
| 145 | if [ "$NZBOP_PARREPAIR" = "no" ]; then | |
| 146 | echo "[ERROR] Post-Process: Please set option \"ParRepair\" to \"Yes\" in nzbget configuration file" | |
| 147 | BadConfig=1 | |
| 148 | fi | |
| 149 | ||
| 150 | if [ "$BadConfig" -eq 1 ]; then | |
| 151 | echo "[ERROR] Post-Process: Existing because of not compatible nzbget configuration" | |
| 152 | exit $POSTPROCESS_ERROR | |
| 153 | fi | |
| 154 | ||
| 155 | # Check if all collections in nzb-file were downloaded | |
| 156 | if [ ! "$NZBPP_NZBCOMPLETED" -eq 1 ]; then | |
| 157 | echo "[INFO] Post-Process: Not the last collection in nzb-file, exiting" | |
| 158 | exit $POSTPROCESS_SUCCESS | |
| 159 | fi | |
| 160 | ||
| 161 | # Check par status | |
| 162 | if [ "$NZBPP_PARSTATUS" -eq 1 -o "$NZBPP_PARSTATUS" -eq 3 -o "$NZBPP_PARFAILED" -eq 1 ]; then | |
| 163 | if [ "$NZBPP_PARSTATUS" -eq 3 ]; then | |
| 164 | echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting" | |
| 165 | else | |
| 166 | echo "[WARNING] Post-Process: Par-check failed, exiting" | |
| 167 | fi | |
| 168 | exit $POSTPROCESS_ERROR | |
| 169 | fi | |
| 170 | ||
| 171 | # Check if destination directory exists (important for reprocessing of history items) | |
| 172 | if [ ! -d "$NZBPP_DIRECTORY" ]; then | |
| 173 | echo "[ERROR] Post-Process: Nothing to post-process: destination directory $NZBPP_DIRECTORY doesn't exist" | |
| 174 | exit $POSTPROCESS_ERROR | |
| 175 | fi | |
| 176 | ||
| 177 | cd "$NZBPP_DIRECTORY" | |
| 178 | ||
| 179 | # If not just repaired and file "_brokenlog.txt" exists, the collection is damaged | |
| 180 | # exiting with returning code $POSTPROCESS_PARCHECK_ALL to request par-repair | |
| 181 | if [ ! "$NZBPP_PARSTATUS" -eq 2 ]; then | |
| 182 | if [ -f "_brokenlog.txt" ]; then | |
| 183 | if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then | |
| 184 | echo "[INFO] Post-Process: Brokenlog found, requesting par-repair" | |
| 185 | exit $POSTPROCESS_PARCHECK_ALL | |
| 186 | fi | |
| 187 | fi | |
| 188 | fi | |
| 189 | ||
| 190 | # All checks done, now processing the files | |
| 191 | ||
| 192 | # Flag indicates that something was unrared | |
| 193 | Unrared=0 | |
| 194 | ||
| 195 | # Unrar the files (if any) to the temporary directory, if there are no rar files this will do nothing | |
| 196 | if (ls *.rar >/dev/null 2>&1); then | |
| 197 | ||
| 198 | # Check if unrar exists | |
| 199 | $UnrarCmd >/dev/null 2>&1 | |
| 200 | if [ "$?" -eq 127 ]; then | |
| 201 | echo "[ERROR] Post-Process: Unrar not found. Set the path to unrar in script's configuration" | |
| 202 | exit $POSTPROCESS_ERROR | |
| 203 | fi | |
| 204 | ||
| 205 | # Make a temporary directory to store the unrarred files | |
| 206 | ExtractedDirExists=0 | |
| 207 | if [ -d $ExtractedDir ]; then | |
| 208 | ExtractedDirExists=1 | |
| 209 | else | |
| 210 | mkdir $ExtractedDir | |
| 211 | fi | |
| 212 | ||
| 213 | echo "[INFO] Post-Process: Unraring" | |
| 214 | rarpasswordparam="" | |
| 215 | if [ "$NZBPR_Password" != "" ]; then | |
| 216 | rarpasswordparam="-p$NZBPR_Password" | |
| 217 | fi | |
| 218 | ||
| 219 | $UnrarCmd x -y -p- "$rarpasswordparam" -o+ "*.rar" ./$ExtractedDir/ | |
| 220 | if [ "$?" -eq 3 ]; then | |
| 221 | echo "[ERROR] Post-Process: Unrar failed" | |
| 222 | if [ "$ExtractedDirExists" -eq 0 ]; then | |
| 223 | rm -R $ExtractedDir | |
| 224 | fi | |
| 225 | # for delayed par-check/-repair at least one par-file must be already downloaded | |
| 226 | if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then | |
| 227 | echo "[INFO] Post-Process: Requesting par-repair" | |
| 228 | exit $POSTPROCESS_PARCHECK_ALL | |
| 229 | fi | |
| 230 | exit $POSTPROCESS_ERROR | |
| 231 | fi | |
| 232 | Unrared=1 | |
| 233 | ||
| 234 | # Remove the rar files | |
| 235 | if [ "$DeleteRarFiles" = "yes" ]; then | |
| 236 | echo "[INFO] Post-Process: Deleting rar-files" | |
| 237 | rm *.r[0-9][0-9] >/dev/null 2>&1 | |
| 238 | rm *.rar >/dev/null 2>&1 | |
| 239 | rm *.s[0-9][0-9] >/dev/null 2>&1 | |
| 240 | fi | |
| 241 | ||
| 242 | # Go to the temp directory and try to unrar again. | |
| 243 | # If there are any rars inside the extracted rars then these will no also be unrarred | |
| 244 | cd $ExtractedDir | |
| 245 | if (ls *.rar >/dev/null 2>&1); then | |
| 246 | echo "[INFO] Post-Process: Unraring (second pass)" | |
| 247 | $UnrarCmd x -y -p- -o+ "*.rar" | |
| 248 | ||
| 249 | if [ "$?" -eq 3 ]; then | |
| 250 | echo "[INFO] Post-Process: Unrar (second pass) failed" | |
| 251 | exit $POSTPROCESS_ERROR | |
| 252 | fi | |
| 253 | ||
| 254 | # Delete the Rar files | |
| 255 | if [ "$DeleteRarFiles" = "yes" ]; then | |
| 256 | echo "[INFO] Post-Process: Deleting rar-files (second pass)" | |
| 257 | rm *.r[0-9][0-9] >/dev/null 2>&1 | |
| 258 | rm *.rar >/dev/null 2>&1 | |
| 259 | rm *.s[0-9][0-9] >/dev/null 2>&1 | |
| 260 | fi | |
| 261 | fi | |
| 262 | ||
| 263 | # Move everything back to the Download folder | |
| 264 | mv * .. | |
| 265 | cd .. | |
| 266 | rmdir $ExtractedDir | |
| 267 | fi | |
| 268 | ||
| 269 | # If download contains only nzb-files move them into nzb-directory | |
| 270 | # for further download | |
| 271 | # Check if command "wc" exists | |
| 272 | wc -l . >/dev/null 2>&1 | |
| 273 | if [ "$?" -ne 127 ]; then | |
| 274 | AllFilesCount=`ls -1 2>/dev/null | wc -l` | |
| 275 | NZBFilesCount=`ls -1 *.nzb 2>/dev/null | wc -l` | |
| 276 | if [ "$AllFilesCount" -eq "$NZBFilesCount" ]; then | |
| 277 | echo "[INFO] Moving downloaded nzb-files into incoming nzb-directory for further download" | |
| 278 | mv *.nzb $NZBOP_NZBDIR | |
| 279 | fi | |
| 280 | fi | |
| 281 | ||
| 282 | # Clean up | |
| 283 | echo "[INFO] Post-Process: Cleaning up" | |
| 284 | chmod -R a+rw . | |
| 285 | rm *.nzb >/dev/null 2>&1 | |
| 286 | rm *.sfv >/dev/null 2>&1 | |
| 287 | rm *.1 >/dev/null 2>&1 | |
| 288 | rm _brokenlog.txt >/dev/null 2>&1 | |
| 289 | if [ "$Unrared" -eq 1 ]; then | |
| 290 | # Delete par2-file only if there were files for unpacking. | |
| 291 | rm *.[pP][aA][rR]2 >/dev/null 2>&1 | |
| 292 | fi | |
| 293 | ||
| 294 | if [ "$JoinTS" = "yes" ]; then | |
| 295 | # Join any split .ts files if they are named xxxx.0000.ts xxxx.0001.ts | |
| 296 | # They will be joined together to a file called xxxx.0001.ts | |
| 297 | if (ls *.ts >/dev/null 2>&1); then | |
| 298 | echo "[INFO] Post-Process: Joining ts-files" | |
| 299 | tsname=`find . -name "*0001.ts" |awk -F/ '{print $NF}'`
| |
| 300 | cat *0???.ts > ./$tsname | |
| 301 | fi | |
| 302 | ||
| 303 | # Remove all the split .ts files | |
| 304 | echo "[INFO] Post-Process: Deleting source ts-files" | |
| 305 | rm *0???.ts >/dev/null 2>&1 | |
| 306 | fi | |
| 307 | ||
| 308 | if [ "$RenameIMG" = "yes" ]; then | |
| 309 | # Rename img file to iso | |
| 310 | # It will be renamed to .img.iso so you can see that it has been renamed | |
| 311 | if (ls *.img >/dev/null 2>&1); then | |
| 312 | echo "[INFO] Post-Process: Renaming img-files to iso" | |
| 313 | imgname=`find . -name "*.img" |awk -F/ '{print $NF}'`
| |
| 314 | mv $imgname $imgname.iso | |
| 315 | fi | |
| 316 | fi | |
| 317 | ||
| 318 | ############################ | |
| 319 | ### BEGIN CUSTOMIZATIONS ### | |
| 320 | ############################ | |
| 321 | ||
| 322 | # Move categories to /share/yourdirectory and remove download destination directory | |
| 323 | if [ "$NZBPP_CATEGORY" = "Series" ]; then # Change here. | |
| 324 | echo "[INFO] Post-Process: Moving TV shows to /volume1/series" # Change here. | |
| 325 | cp -R "$NZBPP_DIRECTORY" "/volume1/series" >/dev/null 2>&1 # Change here. | |
| 326 | if [ "$?" -ne 0 ]; then | |
| 327 | echo "[ERROR] Post-Process: Moving to /volume1/series failed" # Change here. | |
| 328 | exit $POSTPROCESS_ERROR | |
| 329 | else | |
| 330 | rm -fr * | |
| 331 | cd .. | |
| 332 | rmdir "$NZBPP_DIRECTORY" | |
| 333 | NZBPP_DIRECTORY="/volume1/series" | |
| 334 | fi | |
| 335 | fi | |
| 336 | ||
| 337 | if [ "$NZBPP_CATEGORY" = "Movies" ]; then # Change here. | |
| 338 | echo "[INFO] Post-Process: Moving Movies to /volume2/downloaded" # Change here. | |
| 339 | cp -R "$NZBPP_DIRECTORY" "/volume2/downloaded" >/dev/null 2>&1 # Change here. | |
| 340 | if [ "$?" -ne 0 ]; then | |
| 341 | echo "[ERROR] Post-Process: Moving to /volume2/downloaded" # Change here. | |
| 342 | exit $POSTPROCESS_ERROR | |
| 343 | else | |
| 344 | rm -fr * | |
| 345 | cd .. | |
| 346 | rmdir "$NZBPP_DIRECTORY" | |
| 347 | NZBPP_DIRECTORY="/volume2/downloaded" | |
| 348 | fi | |
| 349 | fi | |
| 350 | ||
| 351 | ########################## | |
| 352 | ### END CUSTOMIZATIONS ### | |
| 353 | ########################## | |
| 354 | ||
| 355 | if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$SabToSickBeard" ]; then | |
| 356 | # Call SickBeard's postprocessing script | |
| 357 | echo "[INFO] Post-Process: Running SickBeard's postprocessing script" | |
| 358 | $PythonCmd $SabToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 | |
| 359 | fi | |
| 360 | ||
| 361 | if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$SabToCouchPotato" ]; then | |
| 362 | # Call CouchPotato's postprocessing script | |
| 363 | echo "[INFO] Post-Process: Running CouchPotato's postprocessing script" | |
| 364 | $PythonCmd $SabToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 | |
| 365 | fi | |
| 366 | ||
| 367 | # Check if destination directory was set in postprocessing parameters | |
| 368 | # (for current nzb-file) via web-interface or via command line with | |
| 369 | # "nzbget -E G O DestDir=/new/path <ID>" | |
| 370 | if [ "$NZBPR_DestDir" != "" ]; then | |
| 371 | mkdir $NZBPR_DestDir | |
| 372 | mv * $NZBPR_DestDir >/dev/null 2>&1 | |
| 373 | cd .. | |
| 374 | rmdir $NZBPP_DIRECTORY | |
| 375 | - | #if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$SabToCouchPotato" ]; then |
| 375 | + | |
| 376 | - | # # Call CouchPotato's postprocessing script |
| 376 | + | |
| 377 | - | # echo "[INFO] Post-Process: Running CouchPotato's postprocessing script" |
| 377 | + | |
| 378 | - | # $PythonCmd $SabToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1 |
| 378 | + |