mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-08-14 02:26:53 -07:00
NZBGet V11 support added.
Multiple changes made to allow configuration to be entered via NZBGet webui. Multiple scripts can be defined and called for each category.
This commit is contained in:
parent
892c0837a6
commit
a33609d2d6
11 changed files with 1229 additions and 643 deletions
|
@ -104,6 +104,16 @@ def migrate():
|
|||
confignew.set(section, option, value)
|
||||
section = "Torrent" # reset in case extensions out of order.
|
||||
|
||||
section = "Extensions"
|
||||
original = []
|
||||
try:
|
||||
original = configold.items(section)
|
||||
except:
|
||||
pass
|
||||
for item in original:
|
||||
option, value = item
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "Transcoder"
|
||||
original = []
|
||||
try:
|
||||
|
@ -198,3 +208,97 @@ def migrate():
|
|||
# rename our newly edited autoProcessMedia.cfg.sample to autoProcessMedia.cfg
|
||||
os.rename(configFilenamenew, configFilenameold)
|
||||
return
|
||||
|
||||
def addnzbget():
|
||||
confignew = ConfigParser.ConfigParser()
|
||||
confignew.optionxform = str
|
||||
configFilenamenew = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg")
|
||||
confignew.read(configFilenamenew)
|
||||
|
||||
section = "CouchPotato"
|
||||
envKeys = ['CATEGORY', 'APIKEY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT', 'DELAY', 'METHOD', 'DELETE_FAILED']
|
||||
cfgKeys = ['cpsCategory', 'apikey', 'host', 'port', 'username', 'password', 'ssl', 'web_root', 'delay', 'method', 'delete_failed']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_CPS' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
|
||||
section = "SickBeard"
|
||||
envKeys = ['CATEGORY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT', 'WATCH_DIR', 'FAILED_FORK']
|
||||
cfgKeys = ['sbCategory', 'host', 'port', 'username', 'password', 'ssl', 'web_root', 'watch_dir', 'failed_fork']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_SB' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "HeadPhones"
|
||||
envKeys = ['CATEGORY', 'APIKEY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT', 'DELAY']
|
||||
cfgKeys = ['hpCategory', 'apikey', 'host', 'port', 'username', 'password', 'ssl', 'web_root', 'delay']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_HP' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "Mylar"
|
||||
envKeys = ['CATEGORY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT']
|
||||
cfgKeys = ['mlCategory', 'host', 'port', 'username', 'password', 'ssl', 'web_root']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_ML' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "Gamez"
|
||||
envKeys = ['CATEGORY', 'APIKEY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT']
|
||||
cfgKeys = ['gzCategory', 'apikey', 'host', 'port', 'username', 'password', 'ssl', 'web_root']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_GZ' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "Extensions"
|
||||
envKeys = ['COMPRESSEDEXTENSIONS', 'MEDIAEXTENSIONS', 'METAEXTENSIONS']
|
||||
cfgKeys = ['compressedExtensions', 'mediaExtensions', 'metaExtensions']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "Transcoder"
|
||||
envKeys = ['TRANSCODE', 'DUPLICATE', 'IGNOREEXTENSIONS', 'OUTPUTVIDEOEXTENSION', 'OUTPUTVIDEOCODEC', 'OUTPUTVIDEOPRESET', 'OUTPUTVIDEOFRAMERATE', 'OUTPUTVIDEOBITRATE', 'OUTPUTAUDIOCODEC', 'OUTPUTAUDIOBITRATE', 'OUTPUTSUBTITLECODEC']
|
||||
cfgKeys = ['transcode', 'duplicate', 'ignoreExtensions', 'outputVideoExtension', 'outputVideoCodec', 'outputVideoPreset', 'outputVideoFramerate', 'outputVideoBitrate', 'outputAudioCodec', 'outputAudioBitrate', 'outputSubtitleCodec']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
section = "WakeOnLan"
|
||||
envKeys = ['WAKE', 'HOST', 'PORT', 'MAC']
|
||||
cfgKeys = ['wake', 'host', 'port', 'mac']
|
||||
for index in range(len(envKeys)):
|
||||
key = 'NZBPO_WOL' + envKeys[index]
|
||||
if os.environ.has_key(key):
|
||||
option = cfgKeys[index]
|
||||
value = os.environ[key]
|
||||
confignew.set(section, option, value)
|
||||
|
||||
|
||||
# writing our configuration file to 'autoProcessMedia.cfg'
|
||||
with open(configFilenamenew, 'wb') as configFile:
|
||||
confignew.write(configFile)
|
||||
|
||||
return
|
||||
|
|
|
@ -8,7 +8,10 @@ Uses single directory scanning for CouchPotato renamer
|
|||
Matches imdb_id, download_id, clientAgent with CPS database
|
||||
|
||||
Impacts NZB
|
||||
Fixed TLS support for NZBGet email notifications
|
||||
Addeed direct configuration support via nzbget webUI (nzbget v11+)
|
||||
All nzb scripts are now directly callabale in nzbget v11
|
||||
Settings made in nzbget webUI will be applied to the auotPorcessMedia.cfg when the scripts are run from nzbget.
|
||||
Fixed TLS support for NZBGet email notifications (for V10 support)
|
||||
|
||||
V7.1 28/03/2013
|
||||
|
||||
|
|
|
@ -1,4 +1,116 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Post-Process to CouchPotato.
|
||||
#
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## CouchPotato
|
||||
|
||||
# CouchPotato script category.
|
||||
#
|
||||
# category that gets called for post-processing with CouchPotatoServer.
|
||||
#cpsCategory=movie
|
||||
|
||||
# CouchPotato api key.
|
||||
#cpsapikey=
|
||||
|
||||
# CouchPotato host.
|
||||
#cpshost=localhost
|
||||
|
||||
# CouchPotato port.
|
||||
#cpsport=5050
|
||||
|
||||
# CouchPotato username.
|
||||
#cpsusername=
|
||||
|
||||
# CouchPotato password.
|
||||
#cpspassword=
|
||||
|
||||
# CouchPotato uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#cpsssl=0
|
||||
|
||||
# CouchPotato URL_Base
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#cpsweb_root=
|
||||
|
||||
# CouchPotato Postprocess Delay.
|
||||
#
|
||||
# must be at least 60 seconds.
|
||||
#cpsdelay=65
|
||||
|
||||
# CouchPotato Postprocess Method.
|
||||
#
|
||||
# use "renamer" for CPS renamer (default) or "manage" to call a manage update.
|
||||
#cpsmethod=renamer
|
||||
|
||||
# CouchPotato Delete Failed Downloads
|
||||
#
|
||||
# set to 1 to delete failed, or 0 to leave files in place.
|
||||
#cpsdelete_failed=0
|
||||
|
||||
## Extensions
|
||||
|
||||
# Media Extensions
|
||||
#
|
||||
# This is a list of media extensions that may be transcoded if transcoder is enabled below.
|
||||
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso
|
||||
|
||||
## Transcoder
|
||||
|
||||
# Transcode
|
||||
#
|
||||
# set to 1 to transcode, otherwise set to 0.
|
||||
#transcode=0
|
||||
|
||||
# create a duplicate, or replace the original.
|
||||
#
|
||||
# set to 1 to cretae a new file or 0 to replace the original
|
||||
#duplicate=1
|
||||
|
||||
# ignore extensions
|
||||
#
|
||||
# list of extensions that won't be transcoded.
|
||||
#ignoreExtensions=.avi,.mkv
|
||||
|
||||
# ffmpeg output settings.
|
||||
#outputVideoExtension=.mp4
|
||||
#outputVideoCodec=libx264
|
||||
#outputVideoPreset=medium
|
||||
#outputVideoFramerate=24
|
||||
#outputVideoBitrate=800k
|
||||
#outputAudioCodec=libmp3lame
|
||||
#outputAudioBitrate=128k
|
||||
#outputSubtitleCodec=
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -12,6 +124,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
#check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -21,8 +136,75 @@ Logger.info("nzbToCouchPotato %s", VERSION)
|
|||
|
||||
WakeUp()
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
clientAgent = "nzbget"
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script.
|
||||
download_id = ""
|
||||
if os.environ.has_key('NZBPR_COUCHPOTATO'):
|
||||
download_id = os.environ['NZBPR_COUCHPOTATO']
|
||||
Logger.info("Script triggered from NZBGet, starting autoProcessMovie...")
|
||||
clientAgent = "nzbget"
|
||||
result = autoProcessMovie.process(os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], status, clientAgent, download_id)
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -34,7 +216,7 @@ if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
|||
Logger.info("Script triggered from SABnzbd, starting autoProcessMovie...")
|
||||
clientAgent = "sabnzbd"
|
||||
result = autoProcessMovie.process(sys.argv[1], sys.argv[2], sys.argv[7], clientAgent)
|
||||
# NZBGet
|
||||
# NZBGet V10 or earlier
|
||||
elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS:
|
||||
# NZBGet argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
|
@ -50,3 +232,12 @@ else:
|
|||
Logger.info("Running autoProcessMovie as a manual run...")
|
||||
clientAgent = "manual"
|
||||
result = autoProcessMovie.process('Manual Run', 'Manual Run', 0, clientAgent)
|
||||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcessMovie script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcessMovie script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
|
139
nzbToGamez.py
139
nzbToGamez.py
|
@ -1,4 +1,67 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Post-Process to Gamez.
|
||||
#
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## Gamez
|
||||
|
||||
# Gamez script category.
|
||||
#
|
||||
# category that gets called for post-processing with Gamez.
|
||||
#gzCategory=games
|
||||
|
||||
# Gamez api key.
|
||||
#gzapikey=
|
||||
|
||||
# Gamez host.
|
||||
#gzhost=localhost
|
||||
|
||||
# Gamez port.
|
||||
#gzport=8085
|
||||
|
||||
# Gamez username.
|
||||
#gzusername=
|
||||
|
||||
# Gamez password.
|
||||
#gzpassword=
|
||||
|
||||
# Gamez uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#gzssl=0
|
||||
|
||||
# Gamez web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#gzweb_root=
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -12,6 +75,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
#check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -21,8 +87,70 @@ Logger.info("nzbToGamez %s", VERSION)
|
|||
|
||||
WakeUp()
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script.
|
||||
Logger.info("Script triggered from NZBGet, starting autoProcessGames...")
|
||||
result = autoProcessGames.process(os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], status)
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -46,3 +174,12 @@ elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS:
|
|||
else:
|
||||
Logger.warn("Invalid number of arguments received from client. Exiting")
|
||||
sys.exit(1)
|
||||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcessGames script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcessGames script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
|
|
@ -1,4 +1,72 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Post-Process to HeadPhones.
|
||||
#
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## HeadPhones
|
||||
|
||||
# HeadPhones script category.
|
||||
#
|
||||
# category that gets called for post-processing with HeadHones.
|
||||
#hpCategory=music
|
||||
|
||||
# HeadPhones api key.
|
||||
#hpapikey=
|
||||
|
||||
# HeadPhones host.
|
||||
#hphost=localhost
|
||||
|
||||
# HeadPhones port.
|
||||
#hpport=8181
|
||||
|
||||
# HeadPhones username.
|
||||
#hpusername=
|
||||
|
||||
# HeadPhones password.
|
||||
#hppassword=
|
||||
|
||||
# HeadPhones uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#hpssl=0
|
||||
|
||||
# HeadPhones web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#hpweb_root=
|
||||
|
||||
# HeadPhones Postprocess Delay.
|
||||
#
|
||||
# set as required to ensure correct processing.
|
||||
#hpdelay=65
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -12,6 +80,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
#check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -21,8 +92,70 @@ Logger.info("nzbToHeadPhones %s", VERSION)
|
|||
|
||||
WakeUp()
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script
|
||||
Logger.info("Script triggered from NZBGet, starting autoProcessMusic...")
|
||||
result = autoProcessMusic.process(os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], status)
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -47,3 +180,12 @@ else:
|
|||
Logger.warn("Invalid number of arguments received from client.")
|
||||
Logger.info("Running autoProcessMusic as a manual run...")
|
||||
result = autoProcessMusic.process('Manual Run', 'Manual Run', 0)
|
||||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcessMusic script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcessMusic script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
|
331
nzbToMedia.py
331
nzbToMedia.py
|
@ -1,4 +1,258 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Post-Process to CouchPotato, SickBeard, Mylar, Gamez, HeadPhones.
|
||||
#
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## CouchPotato
|
||||
|
||||
# CouchPotato script category.
|
||||
#
|
||||
# category that gets called for post-processing with CouchPotatoServer.
|
||||
#cpsCategory=movie
|
||||
|
||||
# CouchPotato api key.
|
||||
#cpsapikey=
|
||||
|
||||
# CouchPotato host.
|
||||
#cpshost=localhost
|
||||
|
||||
# CouchPotato port.
|
||||
#cpsport=5050
|
||||
|
||||
# CouchPotato username.
|
||||
#cpsusername=
|
||||
|
||||
# CouchPotato password.
|
||||
#cpspassword=
|
||||
|
||||
# CouchPotato uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#cpsssl=0
|
||||
|
||||
# CouchPotato URL_Base
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#cpsweb_root=
|
||||
|
||||
# CouchPotato Postprocess Delay.
|
||||
#
|
||||
# must be at least 60 seconds.
|
||||
#cpsdelay=65
|
||||
|
||||
# CouchPotato Postprocess Method.
|
||||
#
|
||||
# use "renamer" for CPS renamer (default) or "manage" to call a manage update.
|
||||
#cpsmethod=renamer
|
||||
|
||||
# CouchPotato Delete Failed Downloads
|
||||
#
|
||||
# set to 1 to delete failed, or 0 to leave files in place.
|
||||
#cpsdelete_failed=0
|
||||
|
||||
## SickBeard
|
||||
|
||||
# SickBeard script category.
|
||||
#
|
||||
# category that gets called for post-processing with SickBeard.
|
||||
#sbCategory=tv
|
||||
|
||||
# SickBeard host.
|
||||
#sbhost=localhost
|
||||
|
||||
# SickBeard port.
|
||||
#sbport=8081
|
||||
|
||||
# SickBeard username.
|
||||
#sbusername=
|
||||
|
||||
# SickBeard password.
|
||||
#sbpassword=
|
||||
|
||||
# SickBeard uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#sbssl=0
|
||||
|
||||
# SickBeard web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#sbweb_root=
|
||||
|
||||
# SickBeard watch directory.
|
||||
#
|
||||
# set this if SickBeard and nzbGet are on different systems.
|
||||
#sbwatch_dir=
|
||||
|
||||
# SickBeard uses failed fork.
|
||||
#
|
||||
# set to 1 if using the custom "failed fork". Default sickBeard uses 0.
|
||||
#sbfailed_fork=0
|
||||
|
||||
# SickBeard Delete Failed Downloads
|
||||
#
|
||||
# set to 1 to delete failed, or 0 to leave files in place.
|
||||
#sbdelete_failed=0
|
||||
|
||||
## HeadPhones
|
||||
|
||||
# HeadPhones script category.
|
||||
#
|
||||
# category that gets called for post-processing with HeadHones.
|
||||
#hpCategory=music
|
||||
|
||||
# HeadPhones api key.
|
||||
#hpapikey=
|
||||
|
||||
# HeadPhones host.
|
||||
#hphost=localhost
|
||||
|
||||
# HeadPhones port.
|
||||
#hpport=8181
|
||||
|
||||
# HeadPhones username.
|
||||
#hpusername=
|
||||
|
||||
# HeadPhones password.
|
||||
#hppassword=
|
||||
|
||||
# HeadPhones uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#hpssl=0
|
||||
|
||||
# HeadPhones web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#hpweb_root=
|
||||
|
||||
# HeadPhones Postprocess Delay.
|
||||
#
|
||||
# set as required to ensure correct processing.
|
||||
#hpdelay=65
|
||||
|
||||
## Mylar
|
||||
|
||||
# Mylar script category.
|
||||
#
|
||||
# category that gets called for post-processing with Mylar.
|
||||
#myCategory=comics
|
||||
|
||||
# Mylar host.
|
||||
#myhost=localhost
|
||||
|
||||
# Mylar port.
|
||||
#myport=8090
|
||||
|
||||
# Mylar username.
|
||||
#myusername=
|
||||
|
||||
# Mylar password.
|
||||
#mypassword=
|
||||
|
||||
# Mylar uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#myssl=0
|
||||
|
||||
# Mylar web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#myweb_root=
|
||||
|
||||
## Gamez
|
||||
|
||||
# Gamez script category.
|
||||
#
|
||||
# category that gets called for post-processing with Gamez.
|
||||
#gzCategory=games
|
||||
|
||||
# Gamez api key.
|
||||
#gzapikey=
|
||||
|
||||
# Gamez host.
|
||||
#gzhost=localhost
|
||||
|
||||
# Gamez port.
|
||||
#gzport=8085
|
||||
|
||||
# Gamez username.
|
||||
#gzusername=
|
||||
|
||||
# Gamez password.
|
||||
#gzpassword=
|
||||
|
||||
# Gamez uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#gzssl=0
|
||||
|
||||
# Gamez web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#gzweb_root=
|
||||
|
||||
## Extensions
|
||||
|
||||
# Media Extensions
|
||||
#
|
||||
# This is a list of media extensions that may be transcoded if transcoder is enabled below.
|
||||
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso
|
||||
|
||||
## Transcoder
|
||||
|
||||
# Transcode
|
||||
#
|
||||
# set to 1 to transcode, otherwise set to 0.
|
||||
#transcode=0
|
||||
|
||||
# create a duplicate, or replace the original.
|
||||
#
|
||||
# set to 1 to cretae a new file or 0 to replace the original
|
||||
#duplicate=1
|
||||
|
||||
# ignore extensions
|
||||
#
|
||||
# list of extensions that won't be transcoded.
|
||||
#ignoreExtensions=.avi,.mkv
|
||||
|
||||
# ffmpeg output settings.
|
||||
#outputVideoExtension=.mp4
|
||||
#outputVideoCodec=libx264
|
||||
#outputVideoPreset=medium
|
||||
#outputVideoFramerate=24
|
||||
#outputVideoBitrate=800k
|
||||
#outputAudioCodec=libmp3lame
|
||||
#outputAudioBitrate=128k
|
||||
#outputSubtitleCodec=
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -17,6 +271,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
# check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -41,8 +298,73 @@ hpCategory = config.get("HeadPhones", "hpCategory")
|
|||
mlCategory = config.get("Mylar", "mlCategory") # comics
|
||||
gzCategory = config.get("Gamez", "gzCategory") # games
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
clientAgent = "nzbget"
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script.
|
||||
download_id = ""
|
||||
if os.environ.has_key('NZBPR_COUCHPOTATO'):
|
||||
download_id = os.environ['NZBPR_COUCHPOTATO']
|
||||
nzbDir, inputName, inputCategory = (os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], os.environ['NZBPP_CATEGORY'])
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -55,7 +377,7 @@ if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
|||
clientAgent = "sabnzbd"
|
||||
nzbDir, inputName, status, inputCategory, download_id = (sys.argv[1], sys.argv[2], sys.argv[7], sys.argv[5], '')
|
||||
# NZBGet
|
||||
elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS: # nzbget v10 or earlier.
|
||||
# NZBGet argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -65,6 +387,7 @@ elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS:
|
|||
Logger.info("MAIN: Script triggered from NZBGet")
|
||||
clientAgent = "nzbget"
|
||||
nzbDir, inputName, status, inputCategory, download_id = (sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
|
||||
|
||||
else: # only CPS supports this manual run for now.
|
||||
Logger.warn("MAIN: Invalid number of arguments received from client.")
|
||||
Logger.info("MAIN: Running autoProcessMovie as a manual run...")
|
||||
|
@ -89,5 +412,9 @@ elif inputCategory == gzCategory:
|
|||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcess* script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcess* script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
136
nzbToMylar.py
136
nzbToMylar.py
|
@ -1,4 +1,64 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Post-Process to Mylar.
|
||||
#
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## Mylar
|
||||
|
||||
# Mylar script category.
|
||||
#
|
||||
# category that gets called for post-processing with Mylar.
|
||||
#myCategory=comics
|
||||
|
||||
# Mylar host.
|
||||
#myhost=localhost
|
||||
|
||||
# Mylar port.
|
||||
#myport=8090
|
||||
|
||||
# Mylar username.
|
||||
#myusername=
|
||||
|
||||
# Mylar password.
|
||||
#mypassword=
|
||||
|
||||
# Mylar uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#myssl=0
|
||||
|
||||
# Mylar web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#myweb_root=
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -12,6 +72,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
#check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -21,8 +84,70 @@ Logger.info("nzbToMylar %s", VERSION)
|
|||
|
||||
WakeUp()
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script.
|
||||
Logger.info("Script triggered from NZBGet, starting autoProcessComics...")
|
||||
result = autoProcessComics.processEpisode(os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], status)
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -46,3 +171,12 @@ elif len(sys.argv) == NZBGET_NO_OF_ARGUMENTS:
|
|||
else:
|
||||
Logger.warn("Invalid number of arguments received from client. Exiting")
|
||||
sys.exit(-1)
|
||||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcessComics script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcessComics script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
|
|
@ -1,26 +1,113 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
##############################################################################
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
|
||||
# Author: Nic Wolfe <nic@wolfeden.ca>
|
||||
# URL: http://code.google.com/p/sickbeard/
|
||||
# Post-Process to SickBeard.
|
||||
#
|
||||
# This file is part of Sick Beard.
|
||||
# This script sends the download to your automated media management servers.
|
||||
#
|
||||
# Sick Beard 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Sick Beard 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 Sick Beard. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Edited by Clinton Hall to prevent processing of failed downloads.
|
||||
# Also added suppot for NZBGet. With help from thorli
|
||||
# NOTE: This script requires Python to be installed on your system.
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
## SickBeard
|
||||
|
||||
# SickBeard script category.
|
||||
#
|
||||
# category that gets called for post-processing with SickBeard.
|
||||
#sbCategory=tv
|
||||
|
||||
# SickBeard host.
|
||||
#sbhost=localhost
|
||||
|
||||
# SickBeard port.
|
||||
#sbport=8081
|
||||
|
||||
# SickBeard username.
|
||||
#sbusername=
|
||||
|
||||
# SickBeard password.
|
||||
#sbpassword=
|
||||
|
||||
# SickBeard uses ssl.
|
||||
#
|
||||
# Set to 1 if using ssl, else set to 0.
|
||||
#sbssl=0
|
||||
|
||||
# SickBeard web_root
|
||||
#
|
||||
# set this if using a reverse proxy.
|
||||
#sbweb_root=
|
||||
|
||||
# SickBeard watch directory.
|
||||
#
|
||||
# set this if SickBeard and nzbGet are on different systems.
|
||||
#sbwatch_dir=
|
||||
|
||||
# SickBeard uses failed fork.
|
||||
#
|
||||
# set to 1 if using the custom "failed fork". Default sickBeard uses 0.
|
||||
#sbfailed_fork=0
|
||||
|
||||
# SickBeard Delete Failed Downloads
|
||||
#
|
||||
# set to 1 to delete failed, or 0 to leave files in place.
|
||||
#sbdelete_failed=0
|
||||
|
||||
## Extensions
|
||||
|
||||
# Media Extensions
|
||||
#
|
||||
# This is a list of media extensions that may be transcoded if transcoder is enabled below.
|
||||
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso
|
||||
|
||||
## Transcoder]
|
||||
|
||||
# Transcode
|
||||
#
|
||||
# set to 1 to transcode, otherwise set to 0.
|
||||
#transcode=0
|
||||
|
||||
# create a duplicate, or replace the original.
|
||||
#
|
||||
# set to 1 to cretae a new file or 0 to replace the original
|
||||
#duplicate=1
|
||||
|
||||
# ignore extensions
|
||||
#
|
||||
# list of extensions that won't be transcoded.
|
||||
#ignoreExtensions=.avi,.mkv
|
||||
|
||||
# ffmpeg output settings.
|
||||
#outputVideoExtension=.mp4
|
||||
#outputVideoCodec=libx264
|
||||
#outputVideoPreset=medium
|
||||
#outputVideoFramerate=24
|
||||
#outputVideoBitrate=800k
|
||||
#outputAudioCodec=libmp3lame
|
||||
#outputAudioBitrate=128k
|
||||
#outputSubtitleCodec=
|
||||
|
||||
## WakeOnLan
|
||||
|
||||
# use WOL
|
||||
#
|
||||
# set to 1 to send WOL broadcast to the mac and test the server (e.g. xbmc) on the host and port specified.
|
||||
#wolwake=0
|
||||
|
||||
# WOL MAC
|
||||
#
|
||||
# enter the mac address of the system to be woken.
|
||||
#wolmac=00:01:2e:2D:64:e1
|
||||
|
||||
# Set the Host and Port of a server to verify system has woken.
|
||||
#wolhost=192.168.1.37
|
||||
#wolport=80
|
||||
|
||||
### NZBGET POST-PROCESSING SCRIPT ###
|
||||
##############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
@ -34,6 +121,9 @@ from autoProcess.nzbToMediaUtil import *
|
|||
#check to migrate old cfg before trying to load.
|
||||
if os.path.isfile(os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg.sample")):
|
||||
migratecfg.migrate()
|
||||
# check to write settings from nzbGet UI to autoProcessMedia.cfg.
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'):
|
||||
migratecfg.addnzbget()
|
||||
|
||||
nzbtomedia_configure_logging(os.path.dirname(sys.argv[0]))
|
||||
Logger = logging.getLogger(__name__)
|
||||
|
@ -43,8 +133,70 @@ Logger.info("nzbToSickBeard %s", VERSION)
|
|||
|
||||
WakeUp
|
||||
|
||||
# NZBGet V11+
|
||||
# Check if the script is called from nzbget 11.0 or later
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
|
||||
Logger.info("MAIN: Script triggered from NZBGet (11.0 or later).")
|
||||
|
||||
# NZBGet argv: all passed as environment variables.
|
||||
# Exit codes used by NZBGet
|
||||
POSTPROCESS_PARCHECK=92
|
||||
POSTPROCESS_SUCCESS=93
|
||||
POSTPROCESS_ERROR=94
|
||||
POSTPROCESS_NONE=95
|
||||
|
||||
# Check nzbget.conf options
|
||||
status = 0
|
||||
|
||||
if os.environ['NZBOP_UNPACK'] != "yes":
|
||||
Logger.error("Please enable option \"Unpack\" in nzbget configuration file, exiting")
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
||||
# Check par status
|
||||
if os.environ['NZBPP_PARSTATUS'] == 3:
|
||||
Logger.warning("Par-check successful, but Par-repair disabled, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.environ['NZBPP_PARSTATUS'] == 1:
|
||||
Logger.warning("Par-check failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
# Check unpack status
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 1:
|
||||
Logger.warning("Unpack failed, setting status \"failed\"")
|
||||
status = 1
|
||||
|
||||
if os.environ['NZBPP_UNPACKSTATUS'] == 0 and os.environ['NZBPP_PARSTATUS'] != 2:
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
|
||||
for file in filenames:
|
||||
fileExtension = os.path.splitext(file)[1]
|
||||
|
||||
if fileExtension in ['.rar', '.7z'] or os.path.splitext(fileExtension)[1] in ['.rar', '.7z']:
|
||||
Logger.warning("Post-Process: Archive files exist but unpack skipped, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if fileExtension in ['.par2']:
|
||||
Logger.warning("Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")):
|
||||
Logger.warning("Post-Process: _brokenlog.txt exists, download is probably damaged, exiting")
|
||||
sys.exit(POSTPROCESS_NONE)
|
||||
|
||||
Logger.info("Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful")
|
||||
|
||||
# Check if destination directory exists (important for reprocessing of history items)
|
||||
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
|
||||
Logger.error("Post-Process: Nothing to post-process: destination directory %s doesn't exist", os.environ['NZBPP_DIRECTORY'])
|
||||
status = 1
|
||||
|
||||
# All checks done, now launching the script.
|
||||
Logger.info("Script triggered from NZBGet, starting autoProcessTV...")
|
||||
result = autoProcessTV.processEpisode(os.environ['NZBPP_DIRECTORY'], os.environ['NZBPP_NZBNAME'], status)
|
||||
# SABnzbd
|
||||
if len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
elif len(sys.argv) == SABNZB_NO_OF_ARGUMENTS:
|
||||
# SABnzbd argv:
|
||||
# 1 The final directory of the job (full path)
|
||||
# 2 The original name of the NZB file
|
||||
|
@ -69,3 +221,12 @@ else:
|
|||
Logger.debug("Invalid number of arguments received from client.")
|
||||
Logger.info("Running autoProcessTV as a manual run...")
|
||||
result = autoProcessTV.processEpisode('Manual Run', 'Manual Run', 0)
|
||||
|
||||
if result == 0:
|
||||
Logger.info("MAIN: The autoProcessTV script completed successfully.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_SUCCESS)
|
||||
else:
|
||||
Logger.info("MAIN: A problem was reported in the autoProcessTV script.")
|
||||
if os.environ.has_key('NZBOP_SCRIPTDIR'): # return code for nzbget v11
|
||||
sys.exit(POSTPROCESS_ERROR)
|
||||
|
|
|
@ -1 +1,4 @@
|
|||
Currently testing NZBGet V11
|
||||
NZBGet V11+ calls multiple scripts directly. This current configuration is no-longer used and the entire nzbget-postprocessing-files folder will be deleted once NZBGet V11 is stable.
|
||||
|
||||
Please see http://nzbget.sourceforge.net/forum/viewtopic.php?f=3&t=740 for details of the new scripts concept.
|
||||
|
|
|
@ -1,175 +0,0 @@
|
|||
#
|
||||
# This file if part of nzbget
|
||||
#
|
||||
# Template configuration file for post-processing script "nzbget-postprocess.sh".
|
||||
# Please refer to "nzbget-postprocess.sh" for usage instructions.
|
||||
#
|
||||
# Copyright (C) 2008-2013 Andrey Prygunkov <hugbug@users.sourceforge.net>
|
||||
#
|
||||
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
### PATHS ###
|
||||
|
||||
# Set the full path to python if it is not in your PATH.
|
||||
PythonCmd=/usr/local/python/bin/python
|
||||
|
||||
# Set the full path to nzbToSickBeard.py for SickBeard's postprocessing.
|
||||
NzbToSickBeard=/usr/local/nzbget/var/nzbToSickBeard.py
|
||||
|
||||
# Set the full path to nzbToCouchpotato.py for Couchpotato's postprocessing
|
||||
NzbToCouchPotato=/usr/local/nzbget/var/nzbToCouchPotato.py
|
||||
|
||||
# Set the full path to nzbToHeadPhones.py for HeadPhones's postprocessing.
|
||||
NzbToHeadPhones=/usr/local/nzbget/var/nzbToHeadPhones.py
|
||||
|
||||
# Set the full path to nzbToMylar.py for Mylar's postprocessing.
|
||||
NzbToMylar=/usr/local/nzbget/var/nzbToMylar.py
|
||||
|
||||
# Set the full path to nzbToGamez.py for Gamez's postprocessing.
|
||||
NzbToGamez=/usr/local/nzbget/var/nzbToGamez.py
|
||||
|
||||
# Set the full path to any dependency required for your Custom
|
||||
# Postprocess script if it is not in your PATH.
|
||||
CustomCmd=/usr/local/python/bin/python
|
||||
|
||||
# Set the full path to the Custom Postprocess script.
|
||||
CustomScript=
|
||||
|
||||
# Set the full path to location to move failed downloads to.
|
||||
Failed_Directory=/usr/local/downloads/failed
|
||||
|
||||
##############################################################################
|
||||
### OPTIONS ###
|
||||
|
||||
# Rename img-files to iso (yes, no).
|
||||
RenameIMG=yes
|
||||
|
||||
# Joint TS-files (yes, no).
|
||||
JoinTS=yes
|
||||
|
||||
# Perform SickBeard's postprocessing (yes, no).
|
||||
SickBeard=yes
|
||||
|
||||
# Category for SickBeard's postprocessing.
|
||||
SickBeardCategory=tv
|
||||
|
||||
# Perform Couchpotato's postprocessing (yes, no).
|
||||
CouchPotato=yes
|
||||
|
||||
# Category for Couchpotato's postprocessing.
|
||||
CouchPotatoCategory=movies
|
||||
|
||||
# Perform HeadPhones' postprocessing (yes, no).
|
||||
HeadPhones=yes
|
||||
|
||||
# Category for HeadPhones' postprocessing.
|
||||
HeadPhonesCategory=music
|
||||
|
||||
# Perform Mylar's postprocessing (yes, no).
|
||||
Mylar=yes
|
||||
|
||||
# Category for Mylar's postprocessing.
|
||||
MylarCategory=comics
|
||||
|
||||
# Perform Gamez's postprocessing (yes, no).
|
||||
Gamez=yes
|
||||
|
||||
# Category for Gamez's postprocessing.
|
||||
GamezCategory=games
|
||||
|
||||
# Perform Custom postprocessing (yes, no).
|
||||
Custom=yes
|
||||
|
||||
# Category for Custom postprocessing (eg. pictures)
|
||||
CustomCategory=pictures
|
||||
|
||||
# Clean up list. space seperated, in single quotes, default '*.nzb *.sfv *.1'
|
||||
FileCleanUp='*.nzb *.sfv *.1'
|
||||
|
||||
# Remove all files when download fails (yes, no).
|
||||
Delete_Failed=no
|
||||
|
||||
# Toggle detailed output (yes, no).
|
||||
Debug=no
|
||||
|
||||
##############################################################################
|
||||
### POSTPROCESSING-PARAMETERS ###
|
||||
|
||||
# This section defines parameters, which can be set for each nzb-file
|
||||
# individually using either web-interface or command line.
|
||||
# Example command line for setting parameter "PostProcess" to value "no" for
|
||||
# nzb-file with id=2:
|
||||
# nzbget -E G O PostProcess=no 2
|
||||
|
||||
# Perform postprocessing (yes, no).
|
||||
#
|
||||
# Set to "no" to skip postprocessing for this nzb-file.
|
||||
PostProcess=yes
|
||||
|
||||
# Destination directory.
|
||||
DestDir=
|
||||
|
||||
##############################################################################
|
||||
### EMAIL-PARAMETERS ###
|
||||
|
||||
# This section defines parameters, which can be set to allow notifications to
|
||||
# be sent via email.
|
||||
# This uses sendEmail as authored by Brandon Zehm <caspian@dotconf.net>
|
||||
|
||||
# List Categories for successful download email, default 'tv movies'
|
||||
Email_successful='tv movies music comics games pictures'
|
||||
|
||||
# List Categories for failed download email, default 'tv movies'
|
||||
Email_failed='tv movies music comics games pictures'
|
||||
|
||||
# Set the full path and file name for sendEmail application.
|
||||
sendEmail=/usr/local/nzbget/var/sendEmail/sendEmail
|
||||
|
||||
# Enter the email address you want this email to be sent from.
|
||||
Email_From=
|
||||
|
||||
# Enter the email address you want this email to be sent to.
|
||||
Email_To=
|
||||
|
||||
# Enter smtp server and port. eg smtp.live.com:25
|
||||
Email_Server=
|
||||
|
||||
# Server uses tsl (auto, yes, no).
|
||||
Tls=auto
|
||||
|
||||
# Enter your smtp server user name (if required)
|
||||
Email_User=
|
||||
|
||||
# Enter your smtp server password (if required)
|
||||
Email_Pass=
|
||||
|
||||
# Enter your email subject, in single quotes.
|
||||
# Use the following tags between the less than and greater than symbols.
|
||||
# Use status to add 'completed'/'failed'.
|
||||
# Use name to add the nzb name.
|
||||
# Use cat to add the download categoty.
|
||||
# Use script to name the external script used.
|
||||
Email_Subject='The download of <name> has <status>.'
|
||||
|
||||
# Enter your email message, in single quotes.
|
||||
# Use the same substitutes as described above.
|
||||
# Use <br> for new line.
|
||||
Email_Message='The download of <name> has <status>. <br>This has been processed by the script <script> for category <cat>.'
|
||||
|
||||
# Append the potprocessing log to the email (yes, no).
|
||||
Add_Log=no
|
|
@ -1,441 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# This file if part of nzbget
|
||||
#
|
||||
# Example postprocessing script for NZBGet
|
||||
#
|
||||
# Copyright (C) 2008 Peter Roubos <peterroubos@hotmail.com>
|
||||
# Copyright (C) 2008 Otmar Werner
|
||||
# Copyright (C) 2008-2013 Andrey Prygunkov <hugbug@users.sourceforge.net>
|
||||
#
|
||||
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
#
|
||||
|
||||
####################### Usage instructions #######################
|
||||
# o Script will cleanup, 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 "nzbget-postprocess.conf". Put the configuration file
|
||||
# into the directory where nzbget's configuration file (nzbget.conf) 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.
|
||||
#
|
||||
# o There are few options, which can be ajdusted for each nzb-file individually.
|
||||
#
|
||||
####################### End of Usage instructions #######################
|
||||
|
||||
|
||||
# NZBGet passes following arguments to postprocess-programm as environment
|
||||
# variables:
|
||||
# NZBPP_DIRECTORY - path to destination dir for downloaded files;
|
||||
# NZBPP_NZBNAME - user-friendly name of processed nzb-file as it is displayed
|
||||
# by the program. The file path and extension are removed.
|
||||
# If download was renamed, this parameter reflects the new name;
|
||||
# NZBPP_NZBFILENAME - name of processed nzb-file. It includes file extension and also
|
||||
# may include full path;
|
||||
# NZBPP_CATEGORY - category assigned to nzb-file (can be empty string);
|
||||
# NZBPP_PARSTATUS - result of par-check:
|
||||
# 0 = not checked: par-check is 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_UNPACKSTATUS - result of unpack:
|
||||
# 0 = unpack is disabled or was skipped due to nzb-file
|
||||
# properties or due to errors during par-check;
|
||||
# 1 = unpack failed;
|
||||
# 2 = unpack successful.
|
||||
|
||||
|
||||
# Name of script's configuration file
|
||||
SCRIPT_CONFIG_FILE="nzbget-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 and nzbToSickBeard
|
||||
nzbToMedia() {
|
||||
if [ "$Debug" = "yes" ]; then echo "[DETAIL] Post-Process: Executing external postprocessing with argument $1" | tee -a $tmplog; fi
|
||||
PostProcessStatus=0
|
||||
if [ -n "$1" ]; then PostProcessStatus=$1 ; fi
|
||||
if [ "$Debug" = "yes" ]; then echo "[DETAIL] Post-Process: comparing '$NZBPP_CATEGORY' to '$CouchPotatoCategory' and '$SickBeardCategory'" | tee -a $tmplog; fi
|
||||
find "$NZBPP_DIRECTORY" -type f -size -200000k -iname \*sample\* -exec rm {} \; >/dev/null 2>&1
|
||||
download_id=""
|
||||
if [ "$NZBPP_CATEGORY" = "$CouchPotatoCategory" ]; then
|
||||
if [ "$CouchPotato" = "yes" -a -e "$NzbToCouchPotato" ]; then
|
||||
script=$NzbToCouchPotato
|
||||
if [ $NZBPR_couchpotato ]; then
|
||||
download_id=$NZBPR_couchpotato
|
||||
fi
|
||||
# Call Couchpotato's postprocessing script
|
||||
echo "[INFO] Post-Process: Running CouchPotato's postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: CouchPotato-Script-Path=$NzbToCouchPotato" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: CouchPotato-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$PythonCmd $NzbToCouchPotato "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$CouchPotato" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run CouchPotato's postprocessing script as it is disabled by user ('$CouchPotato')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$NzbToCouchPotato" ]; then echo "[DETAIL] Post-Process: Ignored to run CouchPotato's postprocessing script as the specified script ('$NzbToCouchPotato') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
if [ "$NZBPP_CATEGORY" = "$SickBeardCategory" ]; then
|
||||
if [ "$SickBeard" = "yes" -a -e "$NzbToSickBeard" ]; then
|
||||
script=$NzbToSickBeard
|
||||
# Call SickBeard's postprocessing script
|
||||
echo "[INFO] Post-Process: Running SickBeard's postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: SickBeard-Script-Path=$NzbToSickBeard" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: SickBeard-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: SickBeard-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: SickBeard-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$PythonCmd $NzbToSickBeard "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$SickBeard" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run SickBeard's postprocessing script as it is disabled by user ('$SickBeard')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$NzbToSickBeard" ]; then echo "[DETAIL] Post-Process: Ignored to run SickBeard's postprocessing script as the specified script ('$NzbToSickBeard') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
if [ "$NZBPP_CATEGORY" = "$HeadPhonesCategory" ]; then
|
||||
if [ "$HeadPhones" = "yes" -a -e "$NzbToHeadPhones" ]; then
|
||||
script=$NzbToHeadPhones
|
||||
# Call HeadPhones' postprocessing script
|
||||
echo "[INFO] Post-Process: Running HeadPhones' postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: HeadPhones-Script-Path=$NzbToHeadPhones" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: HeadPhones-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: HeadPhones-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: HeadPhones-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$PythonCmd $NzbToHeadPhones "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$HeadPhones" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run HeadPhones' postprocessing script as it is disabled by user ('$HeadPhones')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$NzbToHeadPhones" ]; then echo "[DETAIL] Post-Process: Ignored to run HeadPhones' postprocessing script as the specified script ('$NzbToHeadPhones') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
if [ "$NZBPP_CATEGORY" = "$MylarCategory" ]; then
|
||||
if [ "$Mylar" = "yes" -a -e "$NzbToMylar" ]; then
|
||||
script=$NzbToMylar
|
||||
# Call Mylar's postprocessing script
|
||||
echo "[INFO] Post-Process: Running Mylar's postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: Mylar-Script-Path=$NzbToMylar" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Mylar-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Mylar-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Mylar-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$PythonCmd $NzbToMylar "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$Mylar" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run Mylar's postprocessing script as it is disabled by user ('$Mylar')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$NzbToMylar" ]; then echo "[DETAIL] Post-Process: Ignored to run Mylar's postprocessing script as the specified script ('$NzbToMylar') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
if [ "$NZBPP_CATEGORY" = "$GamezCategory" ]; then
|
||||
if [ "$Gamez" = "yes" -a -e "$NzbToGamez" ]; then
|
||||
script=$NzbToGamez
|
||||
# Call Gamez's postprocessing script
|
||||
echo "[INFO] Post-Process: Running Gamez's postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: Gamez-Script-Path=$NzbToGamez" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Gamez-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Gamez-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Gamez-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$PythonCmd $NzbToGamez "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$Gamez" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run Gamez's postprocessing script as it is disabled by user ('$Gamez')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$NzbToGamez" ]; then echo "[DETAIL] Post-Process: Ignored to run Gamez's postprocessing script as the specified script ('$NzbToGamez') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
if [ "$NZBPP_CATEGORY" = "$CustomCategory" ]; then
|
||||
if [ "$Custom" = "yes" -a -e "$CustomScript" ]; then
|
||||
script=$CustomScript
|
||||
# Call Custom postprocessing script
|
||||
echo "[INFO] Post-Process: Running the Custom postprocessing script" | tee -a $tmplog
|
||||
if [ "$Debug" = "yes" ]; then
|
||||
echo "[DETAIL] Post-Process: Custom-Script-Path=$CustomScript" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Custom-Script-ARGV1=$NZBPP_DIRECTORY" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Custom-Script-ARGV2=$NZBPP_NZBFILENAME" | tee -a $tmplog
|
||||
echo "[DETAIL] Post-Process: Custom-Script-ARGV3=$PostProcessStatus" | tee -a $tmplog
|
||||
fi
|
||||
$CustomCmd $CustomScript "$NZBPP_DIRECTORY" "$NZBPP_NZBFILENAME" "$PostProcessStatus" "$NZBPP_CATEGORY" "$download_id" | while read line ; do if [ "$line" != "" ] ; then replaceLogLine "${line}" ; fi ; done
|
||||
else
|
||||
if [ "$Custom" != "yes" ]; then echo "[DETAIL] Post-Process: Ignored to run the Custom postprocessing script as it is disabled by user ('$Custom')" | tee -a $tmplog; fi
|
||||
if [ ! -e "$CustomScript" ]; then echo "[DETAIL] Post-Process: Ignored to run the Custom postprocessing script as the specified script ('$CustomScript') does not exist" | tee -a $tmplog; fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
replaceVarBy() {
|
||||
if [ "$Debug" = "yes" ]; then echo "[DETAIL] Post-Process: Executing function 'replaceVarBy'. Going to replace '${2}' in '${1}' by '${3}'" | tee -a $tmplog; fi
|
||||
|
||||
# If we're not using Bash use sed, as we need to support as much as systems possible, also those running sh/dash etc
|
||||
if [ -n "${BASH_VERSION}" ]; then
|
||||
REPLACEDRESULT="${1/${2}/${3}}"
|
||||
else
|
||||
REPLACEDRESULT=$(echo "${1}" | sed "s^${2}^${3}^g")
|
||||
fi
|
||||
|
||||
if [ "$Debug" = "yes" ]; then echo "[DETAIL] Post-Process: replace result: ${REPLACEDRESULT}" | tee -a $tmplog; fi
|
||||
}
|
||||
|
||||
replaceLogLine() {
|
||||
# This converts the output logigng from nzbTo* script to a compatible format with NZBGet
|
||||
# If we're not using Bash use sed, as we need to support as much as systems possible, also those running sh/dash etc
|
||||
if [ -n "${BASH_VERSION}" ]; then
|
||||
newline="${1/*DEBUG/[DETAIL]}"
|
||||
newline="${newline/*INFO/[INFO]}"
|
||||
newline="${newline/*WARNING/[WARNING]}"
|
||||
newline="${newline/*ERROR/[ERROR]}"
|
||||
else
|
||||
newline=$(echo "${1}" | sed "s^.*DEBUG^[DETAIL]^")
|
||||
newline=$(echo $newline | sed "s^.*INFO^[INFO]^")
|
||||
newline=$(echo $newline | sed "s^.*WARNING^[WARNING]^")
|
||||
newline=$(echo $newline | sed "s^.*ERROR^[ERROR]^")
|
||||
fi
|
||||
echo "$newline" | tee -a $tmplog
|
||||
}
|
||||
|
||||
# Pass on postprocess exit codes to external scripts for handling failed downloads
|
||||
do_exit() {
|
||||
if [ "$Debug" = "yes" ]; then echo "[DETAIL] Post-Process: Executing function 'do_exit' with argument $1" | tee -a $tmplog; fi
|
||||
nzbStatus=0
|
||||
if [ "$1" -ne "$POSTPROCESS_SUCCESS" ]; then
|
||||
if [ "$Delete_Failed" = "yes" -a "$NZBPP_DIRECTORY" != "$ConfigDir" -a -d "$NZBPP_DIRECTORY" -a ! -d "$NZBPP_DIRECTORY/.git" ]; then
|
||||
cd ..
|
||||
rm -rf $NZBPP_DIRECTORY >/dev/null 2>&1
|
||||
elif [ "$NZBPP_DIRECTORY" != "$ConfigDir" -a "$Failed_Directory" != "" -a -d "$NZBPP_DIRECTORY" -a ! -d "$NZBPP_DIRECTORY/.git" ]; then
|
||||
cd ..
|
||||
mkdir $Failed_Directory
|
||||
mkdir $Failed_Directory/$NZBPP_CATEGORY
|
||||
mkdir $Failed_Directory/$NZBPP_CATEGORY/$NZBPP_NZBNAME
|
||||
mv $NZBPP_DIRECTORY $Failed_Directory/$NZBPP_CATEGORY/$NZBPP_NZBNAME >/dev/null 2>&1
|
||||
NZBPP_DIRECTORY=$Failed_Directory/$NZBPP_CATEGORY/$NZBPP_NZBNAME
|
||||
cd $NZBPP_DIRECTORY
|
||||
fi
|
||||
nzbStatus=1
|
||||
fi
|
||||
script=none
|
||||
nzbToMedia $nzbStatus
|
||||
echo "[DETAIL] after calling nzbToMedia" | tee -a $tmplog
|
||||
replaceVarBy "${Email_Subject}" "<name>" "${NZBPP_NZBFILENAME}"
|
||||
replaceVarBy "${REPLACEDRESULT}" "<cat>" "${NZBPP_CATEGORY}"
|
||||
replaceVarBy "${REPLACEDRESULT}" "<script>" "${script}"
|
||||
Email_Subject="${REPLACEDRESULT}"
|
||||
replaceVarBy "${Email_Message}" "<name>" "${NZBPP_NZBFILENAME}"
|
||||
replaceVarBy "${REPLACEDRESULT}" "<cat>" "${NZBPP_CATEGORY}"
|
||||
replaceVarBy "${REPLACEDRESULT}" "<script>" "${script}"
|
||||
Email_Message="${REPLACEDRESULT}"
|
||||
for item in $Email_successful; do
|
||||
if [ "${NZBPP_CATEGORY}" = "$item" -o "$item" = "all" ] && [ "$nzbStatus" = 0 ]; then
|
||||
User=""
|
||||
if [ -n "$Email_User" -a -n "$Email_Pass" ]; then User="-xu $Email_User -xp $Email_Pass" ; fi
|
||||
replaceVarBy "${Email_Subject}" "<status>" "completed"
|
||||
Email_Subject="${REPLACEDRESULT}"
|
||||
replaceVarBy "${Email_Message}" "<status>" "completed"
|
||||
Email_Message="${REPLACEDRESULT}"
|
||||
if [ "${Add_Log}" = "yes" ]; then
|
||||
Email_Message="$Email_Message <br>Log Result"
|
||||
while read line; do Email_Message="$Email_Message <br>$line"; done < $tmplog
|
||||
fi
|
||||
$sendEmail -f "$Email_From" -t "$Email_To" -s "$Email_Server" -o "tls=$Tls" -o "message-content-type=html" $User -u "$Email_Subject" -m "$Email_Message"
|
||||
fi; done
|
||||
for item in $Email_failed; do
|
||||
if [ "${NZBPP_CATEGORY}" = "$item" -o "$item" = "all" ] && [ "$nzbStatus" != 0 ]; then
|
||||
User=""
|
||||
if [ -n "$Email_User" -a -n "$Email_Pass" ]; then User="-xu $Email_User -xp $Email_Pass" ; fi
|
||||
replaceVarBy "${Email_Subject}" "<status>" "failed"
|
||||
Email_Subject="${REPLACEDRESULT}"
|
||||
replaceVarBy "${Email_Message}" "<status>" "failed"
|
||||
Email_Message="${REPLACEDRESULT}"
|
||||
if [ "${Add_Log}" = "yes" ]; then
|
||||
Email_Message="$Email_Message <br>nLog Result"
|
||||
while read line; do Email_Message="$Email_Message <br>$line"; done < $tmplog
|
||||
fi
|
||||
$sendEmail -f "$Email_From" -t "$Email_To" -s "$Email_Server" -o "tls=$Tls" -o "message-content-type=html" $User -u "$Email_Subject" -m "$Email_Message"
|
||||
fi; done
|
||||
exit $1
|
||||
}
|
||||
|
||||
# Check if the script is called from nzbget 10.0 or later
|
||||
if [ "$NZBPP_DIRECTORY" = "" -o "$NZBOP_CONFIGFILE" = "" ]; then
|
||||
echo "*** NZBGet post-processing script ***"
|
||||
echo "This script is supposed to be called from nzbget (10.0 or later)."
|
||||
exit $POSTPROCESS_ERROR
|
||||
fi
|
||||
if [ "$NZBOP_UNPACK" = "" ]; then
|
||||
echo "[ERROR] This script requires nzbget version at least 10.0-testing-r555 or 10.0-stable."
|
||||
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: Post-processing disabled for this nzb-file, exiting"
|
||||
exit $POSTPROCESS_NONE
|
||||
fi
|
||||
|
||||
ConfigDir="${NZBOP_CONFIGFILE%/*}"
|
||||
tmplog="$ConfigDir/tmp.log"
|
||||
|
||||
echo "[INFO] Post-Process: Post-processing script successfully started" | tee $tmplog
|
||||
cd "$NZBPP_DIRECTORY" || (echo "[ERROR] Post-Process: Nothing to post-process: destination directory $NZBPP_DIRECTORY isn't accessible" | tee $tmplog && do_exit $POSTPROCESS_ERROR)
|
||||
|
||||
# Determine the location of configuration file (it must be stored in
|
||||
# the directory with nzbget.conf).
|
||||
ScriptConfigFile="$ConfigDir/$SCRIPT_CONFIG_FILE"
|
||||
if [ ! -f "$ScriptConfigFile" ]; then
|
||||
echo "[ERROR] Post-Process: Configuration file $ScriptConfigFile not found, exiting" | tee -a $tmplog
|
||||
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" | tee -a $tmplog
|
||||
BadConfig=1
|
||||
fi
|
||||
|
||||
if [ "$NZBOP_UNPACK" != "yes" ]; then
|
||||
echo "[ERROR] Post-Process: Please enable option \"Unpack\" in nzbget configuration file" | tee -a $tmplog
|
||||
BadConfig=1
|
||||
fi
|
||||
|
||||
if [ "$BadConfig" -eq 1 ]; then
|
||||
echo "[ERROR] Post-Process: Exiting due to incompatible nzbget configuration" | tee -a $tmplog
|
||||
exit $POSTPROCESS_ERROR
|
||||
fi
|
||||
|
||||
# Check par status
|
||||
if [ "$NZBPP_PARSTATUS" -eq 3 ]; then
|
||||
echo "[WARNING] Post-Process: Par-check successful, but Par-repair disabled, exiting" | tee -a $tmplog
|
||||
do_exit $POSTPROCESS_NONE
|
||||
fi
|
||||
if [ "$NZBPP_PARSTATUS" -eq 1 ]; then
|
||||
echo "[WARNING] Post-Process: Par-check failed, exiting" | tee -a $tmplog
|
||||
do_exit $POSTPROCESS_NONE
|
||||
fi
|
||||
|
||||
# Check unpack status
|
||||
if [ "$NZBPP_UNPACKSTATUS" -eq 1 ]; then
|
||||
echo "[WARNING] Post-Process: Unpack failed, exiting" | tee -a $tmplog
|
||||
do_exit $POSTPROCESS_NONE
|
||||
fi
|
||||
if [ "$NZBPP_UNPACKSTATUS" -eq 0 -a "$NZBPP_PARSTATUS" -ne 2 ]; then
|
||||
# Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check
|
||||
|
||||
if (ls *.rar *.7z *.7z.??? >/dev/null 2>&1); then
|
||||
echo "[WARNING] Post-Process: Archive files exist but unpack skipped, exiting" | tee -a $tmplog
|
||||
exit $POSTPROCESS_NONE
|
||||
fi
|
||||
|
||||
if (ls *.par2 >/dev/null 2>&1); then
|
||||
echo "[WARNING] Post-Process: Unpack skipped and par-check skipped (although par2-files exist), exiting" | tee -a $tmplog
|
||||
exit $POSTPROCESS_NONE
|
||||
fi
|
||||
|
||||
if [ -f "_brokenlog.txt" ]; then
|
||||
echo "[WARNING] Post-Process: _brokenlog.txt exists, download is probably damaged, exiting" | tee -a $tmplog
|
||||
exit $POSTPROCESS_NONE
|
||||
fi
|
||||
|
||||
echo "[INFO] Post-Process: Neither archive- nor par2-files found, _brokenlog.txt doesn't exist, considering download successful" | tee -a $tmplog
|
||||
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" | tee -a $tmplog
|
||||
do_exit $POSTPROCESS_ERROR
|
||||
fi
|
||||
|
||||
# All checks done, now processing the files
|
||||
|
||||
# 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" | tee -a $tmplog
|
||||
mv *.nzb $NZBOP_NZBDIR
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean up
|
||||
echo "[INFO] Post-Process: Cleaning up" | tee -a $tmplog
|
||||
chmod -R a+rw .
|
||||
# Clean up list, space seperated array from GUI
|
||||
for word in $FileCleanUp ; do rm $word >/dev/null 2>&1 ; done
|
||||
# Removed by default
|
||||
rm _brokenlog.txt >/dev/null 2>&1
|
||||
rm *.[pP][aA][rR]2 >/dev/null 2>&1
|
||||
|
||||
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" | tee -a $tmplog
|
||||
tsname=`find . -name "*0001.ts" |awk -F/ '{print $NF}'`
|
||||
cat *0???.ts > ./$tsname
|
||||
|
||||
# Remove all the split .ts files
|
||||
echo "[INFO] Post-Process: Deleting source ts-files" | tee -a $tmplog
|
||||
rm *0???.ts >/dev/null 2>&1
|
||||
fi
|
||||
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" | tee -a $tmplog
|
||||
imgname=`find . -name "*.img" |awk -F/ '{print $NF}'`
|
||||
mv $imgname $imgname.iso
|
||||
fi
|
||||
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
|
||||
NZBPP_DIRECTORY=$NZBPR_DestDir
|
||||
cd $NZBPP_DIRECTORY
|
||||
fi
|
||||
|
||||
# All OK, requesting cleaning up of download queue
|
||||
do_exit $POSTPROCESS_SUCCESS
|
Loading…
Add table
Add a link
Reference in a new issue