Guest User

Untitled

a guest
Nov 28th, 2012
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.03 KB | None | 0 0
  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. if [ "$SickBeard" = "yes" -a "$NZBPP_CATEGORY" = "$SickBeardCategory" -a -e "$SabToSickBeard" ]; then
  319. # Call SickBeard's postprocessing script
  320. echo "[INFO] Post-Process: Running SickBeard's postprocessing script"
  321. $PythonCmd $SabToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1
  322. fi
  323.  
  324. if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$SabToCouchPotato" ]; then
  325. # Call CouchPotato's postprocessing script
  326. echo "[INFO] Post-Process: Running CouchPotato's postprocessing script"
  327. $PythonCmd $SabToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1
  328. fi
  329.  
  330. # Check if destination directory was set in postprocessing parameters
  331. # (for current nzb-file) via web-interface or via command line with
  332. # "nzbget -E G O DestDir=/new/path <ID>"
  333. if [ "$NZBPR_DestDir" != "" ]; then
  334. mkdir $NZBPR_DestDir
  335. mv * $NZBPR_DestDir >/dev/null 2>&1
  336. cd ..
  337. rmdir $NZBPP_DIRECTORY
  338. fi
  339.  
  340. ############################
  341. ### BEGIN CUSTOMIZATIONS ###
  342. ############################
  343.  
  344. # Move categories to /share/yourdirectory and remove download destination directory
  345. if [ "$NZBPP_CATEGORY" = "Series" ]; then # Change here.
  346. echo "[INFO] Post-Process: Moving TV shows to /volume1/series" # Change here.
  347. cp -R "$NZBPP_DIRECTORY" "/volume1/series" >/dev/null 2>&1 # Change here.
  348. if [ "$?" -ne 0 ]; then
  349. echo "[ERROR] Post-Process: Moving to /volume1/series failed" # Change here.
  350. exit $POSTPROCESS_ERROR
  351. else
  352. rm -fr *
  353. cd ..
  354. rmdir "$NZBPP_DIRECTORY"
  355. fi
  356. fi
  357.  
  358. if [ "$NZBPP_CATEGORY" = "Movies" ]; then # Change here.
  359. echo "[INFO] Post-Process: Moving Movies to /volume2/downloaded" # Change here.
  360. cp -R "$NZBPP_DIRECTORY" "/volume2/downloaded" >/dev/null 2>&1 # Change here.
  361. if [ "$?" -ne 0 ]; then
  362. echo "[ERROR] Post-Process: Moving to /volume2/downloaded" # Change here.
  363. exit $POSTPROCESS_ERROR
  364. else
  365. rm -fr *
  366. cd ..
  367. rmdir "$NZBPP_DIRECTORY"
  368. fi
  369. fi
  370.  
  371. ##########################
  372. ### END CUSTOMIZATIONS ###
  373. ##########################
  374.  
  375. #if [ "$CouchPotato" = "yes" -a "$NZBPP_CATEGORY" = "$CouchPotatoCategory" -a -e "$SabToCouchPotato" ]; then
  376. # # Call CouchPotato's postprocessing script
  377. # echo "[INFO] Post-Process: Running CouchPotato's postprocessing script"
  378. # $PythonCmd $SabToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" >/dev/null 2>&1
  379. #fi
  380.  
  381. # All OK, requesting cleaning up of download queue
  382. exit $POSTPROCESS_SUCCESS
Advertisement
Add Comment
Please, Sign In to add comment