Merge pull request #1 from fativi/nightly

Nightly
This commit is contained in:
fativi 2015-10-13 14:17:17 -04:00
commit 3377cb338e
15 changed files with 100 additions and 44 deletions

View file

@ -1,7 +1,7 @@
nzbToMedia nzbToMedia
================ ================
Provides an efficient way to handle postprocessing for [CouchPotatoServer](https://couchpota.to/ "CouchPotatoServer") and [SickBeard](http://sickbeard.com/ "SickBeard") Provides an [efficient](https://github.com/clinton-hall/nzbToMedia/wiki/Efficient-on-demand-post-processing) way to handle postprocessing for [CouchPotatoServer](https://couchpota.to/ "CouchPotatoServer") and [SickBeard](http://sickbeard.com/ "SickBeard") (and its [forks](https://github.com/clinton-hall/nzbToMedia/wiki/Failed-Download-Handling-%28FDH%29#sick-beard-and-its-forks))
when using one of the popular NZB download clients like [SABnzbd](http://sabnzbd.org/ "SABnzbd") and [NZBGet](http://nzbget.sourceforge.net/ "NZBGet") on low performance systems like a NAS. when using one of the popular NZB download clients like [SABnzbd](http://sabnzbd.org/ "SABnzbd") and [NZBGet](http://nzbget.sourceforge.net/ "NZBGet") on low performance systems like a NAS.
This script is based on sabToSickBeard (written by Nic Wolfe and supplied with SickBeard), with the support for NZBGet being added by [thorli](https://github.com/thorli "thorli") and further contributions by [schumi2004](https://github.com/schumi2004 "schumi2004") and [hugbug](https://sourceforge.net/apps/phpbb/nzbget/memberlist.php?mode=viewprofile&u=67 "hugbug"). This script is based on sabToSickBeard (written by Nic Wolfe and supplied with SickBeard), with the support for NZBGet being added by [thorli](https://github.com/thorli "thorli") and further contributions by [schumi2004](https://github.com/schumi2004 "schumi2004") and [hugbug](https://sourceforge.net/apps/phpbb/nzbget/memberlist.php?mode=viewprofile&u=67 "hugbug").
Torrent suport added by [jkaberg](https://github.com/jkaberg "jkaberg") and [berkona](https://github.com/berkona "berkona") Torrent suport added by [jkaberg](https://github.com/jkaberg "jkaberg") and [berkona](https://github.com/berkona "berkona")
@ -9,17 +9,17 @@ Corrupt video checking, auto SickBeard fork determination and a whole lot of cod
Introduction Introduction
------------ ------------
Originally this was modified from the SickBeard version to allow for "on-demand" renaming and not have My QNAP TS-412 NAS constantly scanning the download directory. Originally this was modified from the SickBeard version to allow for ["on-demand" renaming](https://github.com/clinton-hall/nzbToMedia/wiki/Efficient-on-demand-post-processing) and not have My QNAP TS-412 NAS constantly scanning the download directory.
Later, a few failed downloads prompted me to incorporate "failed download" handling. Later, a few failed downloads prompted me to incorporate ["failed download" handling](https://github.com/clinton-hall/nzbToMedia/wiki/Failed-Download-Handling-%28FDH%29).
Failed download handling is now provided for SABnzbd, by CouchPotatoServer; however on arm processors (e.g. small NAS systems) this can be un-reliable. Failed download handling is now provided for SABnzbd, by CouchPotatoServer; however on arm processors (e.g. small NAS systems) this can be un-reliable.
Failed download handling for SickBeard is available by using the development branch from fork [SickBeard-failed](https://github.com/Tolstyak/Sick-Beard.git "SickBeard-failed") Failed download handling for SickBeard is available by using Tolstyak's fork [SickBeard-failed](https://github.com/hugepants/Sick-Beard)).
To use this feature, in autoProcessTV.cfg set the parameter "fork=failed". Default is "fork=default" and will work with standard version of SickBeard and just ignores failed downloads. To use this feature, in autoProcessTV.cfg set the parameter "fork=failed". Default is "fork=default" and will work with the standard version of SickBeard and just ignores failed downloads.
Additional forks exist for ThePirateBay (does its own extraction and linking). See [SickBeard Forks](https://github.com/clinton-hall/nzbToMedia/wiki/sickbeard-branches "SickBeard Forks") for a list of known forks. Development of Tolstyak's fork ended in 2013, but newer forks exist with significant feature updates such as [Mr-Orange TPB](https://github.com/coach0742/Sick-Beard) (discontinued) and [SickRage](https://github.com/SiCKRAGETV/SickRage) (active). See [SickBeard Forks](https://github.com/clinton-hall/nzbToMedia/wiki/Failed-Download-Handling-%28FDH%29#sick-beard-and-its-forks "SickBeard Forks") for a list of known forks.
Full support is provided for [SickRage](https://github.com/echel0n/SickRage "SickRage"). Full support is provided for [SickRage](https://github.com/SiCKRAGETV/SickRage).
Torrent support has been added with the assistance of jkaberg and berkona. Currently supports uTorrent, Transmissions, Deluge and possibly more. Torrent support has been added with the assistance of jkaberg and berkona. Currently supports uTorrent, Transmission, Deluge and possibly more.
To enable Torrent extraction, on Windows, you need to install [7-zip](http://www.7-zip.org/ "7-zip") or on *nix you need to install the following packages/commands. To enable Torrent extraction, on Windows, you need to install [7-zip](http://www.7-zip.org/ "7-zip") or on *nix you need to install the following packages/commands.
"unrar", "unzip", "tar", "7zr" "unrar", "unzip", "tar", "7zr"

View file

@ -102,7 +102,12 @@ def processTorrent(inputDirectory, inputName, inputCategory, inputHash, inputID,
if clientAgent != 'manual': if clientAgent != 'manual':
core.pause_torrent(clientAgent, inputHash, inputID, inputName) core.pause_torrent(clientAgent, inputHash, inputID, inputName)
if uniquePath: # Incase input is not directory, make sure to create one.
# This way Processing is isolated.
if not os.path.isdir(os.path.join(inputDirectory, inputName)):
basename = os.path.splitext(core.sanitizeName(inputName))[0]
outputDestination = os.path.join(core.OUTPUTDIRECTORY, inputCategory, basename)
elif uniquePath:
outputDestination = os.path.normpath( outputDestination = os.path.normpath(
core.os.path.join(core.OUTPUTDIRECTORY, inputCategory, core.sanitizeName(inputName))) core.os.path.join(core.OUTPUTDIRECTORY, inputCategory, core.sanitizeName(inputName)))
else: else:
@ -202,6 +207,9 @@ def processTorrent(inputDirectory, inputName, inputCategory, inputHash, inputID,
logger.info("Calling %s:%s to post-process:%s" % (sectionName, usercat, inputName)) logger.info("Calling %s:%s to post-process:%s" % (sectionName, usercat, inputName))
if core.TORRENT_CHMOD_DIRECTORY:
core.rchmod(outputDestination, core.TORRENT_CHMOD_DIRECTORY)
result = [ 0, "" ] result = [ 0, "" ]
if sectionName == 'UserScript': if sectionName == 'UserScript':
result = external_script(outputDestination, inputName, inputCategory, section[usercat]) result = external_script(outputDestination, inputName, inputCategory, section[usercat])
@ -225,7 +233,9 @@ def processTorrent(inputDirectory, inputName, inputCategory, inputHash, inputID,
plex_update(inputCategory) plex_update(inputCategory)
if result[0] != 0: if result[0] != 0:
if clientAgent != 'manual': if not core.TORRENT_RESUME_ON_FAILURE:
logger.error("A problem was reported in the autoProcess* script. torrent won't resume seeding (settings)")
elif clientAgent != 'manual':
logger.error( logger.error(
"A problem was reported in the autoProcess* script. If torrent was paused we will resume seeding") "A problem was reported in the autoProcess* script. If torrent was paused we will resume seeding")
core.resume_torrent(clientAgent, inputHash, inputID, inputName) core.resume_torrent(clientAgent, inputHash, inputID, inputName)

View file

@ -58,7 +58,7 @@
extract = 1 extract = 1
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if Couchpotato is on a remote server for this category ##### Enable if Couchpotato is on a remote server for this category
remote_path = 0 remote_path = 0
@ -85,11 +85,13 @@
process_method = process_method =
# force processing of already processed content when running a manual scan. # force processing of already processed content when running a manual scan.
force = 0 force = 0
# tell SickRage to delete all source files after processing.
delete_on = 0
extract = 1 extract = 1
nzbExtractionBy = Downloader nzbExtractionBy = Downloader
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if SickBeard is on a remote server for this category ##### Enable if SickBeard is on a remote server for this category
remote_path = 0 remote_path = 0
@ -118,7 +120,7 @@
wait_for = 2 wait_for = 2
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if NzbDrone is on a remote server for this category ##### Enable if NzbDrone is on a remote server for this category
remote_path = 0 remote_path = 0
@ -143,7 +145,7 @@
extract = 1 extract = 1
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if HeadPhones is on a remote server for this category ##### Enable if HeadPhones is on a remote server for this category
remote_path = 0 remote_path = 0
@ -168,7 +170,7 @@
extract = 1 extract = 1
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if Mylar is on a remote server for this category ##### Enable if Mylar is on a remote server for this category
remote_path = 0 remote_path = 0
@ -194,7 +196,7 @@
extract = 1 extract = 1
# Set this to minimum required size to consider a media file valid (in MB) # Set this to minimum required size to consider a media file valid (in MB)
minSize = 0 minSize = 0
# Enable/Disable deleteing ignored files (samples and invalid media files) # Enable/Disable deleting ignored files (samples and invalid media files)
delete_ignored = 0 delete_ignored = 0
##### Enable if Gamez is on a remote server for this category ##### Enable if Gamez is on a remote server for this category
remote_path = 0 remote_path = 0
@ -210,7 +212,7 @@
###### clientAgent - Supported clients: sabnzbd, nzbget ###### clientAgent - Supported clients: sabnzbd, nzbget
clientAgent = sabnzbd clientAgent = sabnzbd
###### SabNZBD (You must edit this if your using nzbToMedia.py with SabNZBD) ###### SabNZBD (You must edit this if your using nzbToMedia.py with SabNZBD)
sabnzbd_host = localhost sabnzbd_host = http://localhost
sabnzbd_port = 8080 sabnzbd_port = 8080
sabnzbd_apikey = sabnzbd_apikey =
###### Enter the default path to your default download directory (non-category downloads). this directory is protected by safe_mode. ###### Enter the default path to your default download directory (non-category downloads). this directory is protected by safe_mode.
@ -245,10 +247,12 @@
DelugePWD = your password DelugePWD = your password
###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ###### ###### ADVANCED USE - ONLY EDIT IF YOU KNOW WHAT YOU'RE DOING ######
deleteOriginal = 0 deleteOriginal = 0
chmodDirecotry = 0
resumeOnFailure = 1
[Extensions] [Extensions]
compressedExtensions = .zip,.rar,.7z,.gz,.bz,.tar,.arj,.1,.01,.001 compressedExtensions = .zip,.rar,.7z,.gz,.bz,.tar,.arj,.1,.01,.001
mediaExtensions = .mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.m4v mediaExtensions = .mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.m4v,.ts
audioExtensions = .mp3, .aac, .ogg, .ape, .m4a, .asf, .wma, .flac audioExtensions = .mp3, .aac, .ogg, .ape, .m4a, .asf, .wma, .flac
metaExtensions = .nfo,.sub,.srt,.jpg,.gif metaExtensions = .nfo,.sub,.srt,.jpg,.gif
@ -268,10 +272,11 @@
subLanguages = eng,spa,fra subLanguages = eng,spa,fra
# transcode. enable to use transcoder # transcode. enable to use transcoder
transcode = 0 transcode = 0
###### duplicate =1 will cretae a new file. =0 will replace the original ###### duplicate =1 will create a new file. =0 will replace the original
duplicate = 1 duplicate = 1
# concat. joins cd1 cd2 etc into a single video. # concat. joins cd1 cd2 etc into a single video.
concat = 1 concat = 1
# IgnoreExtensions is a comma-separated list of extensions that will not be transcoded.
ignoreExtensions = .avi,.mkv,.mp4 ignoreExtensions = .avi,.mkv,.mp4
# outputFastStart. 1 will use -movflags + faststart. 0 will disable this from being used. # outputFastStart. 1 will use -movflags + faststart. 0 will disable this from being used.
outputFastStart = 0 outputFastStart = 0
@ -285,9 +290,9 @@
audioLanguage = eng audioLanguage = eng
# allAudioLanguages. 1 will keep all audio tracks (uses AudioCodec3) where available. # allAudioLanguages. 1 will keep all audio tracks (uses AudioCodec3) where available.
allAudioLanguages = 0 allAudioLanguages = 0
# allSubLanguages. 1 will keep all exisiting sub languages. 0 will discare those not in your list above. # allSubLanguages. 1 will keep all existing sub languages. 0 will discard those not in your list above.
allSubLanguages = 0 allSubLanguages = 0
# embedSubs. 1 will embded external sub/srt subs into your video if this is supported. # embedSubs. 1 will embed external sub/srt subs into your video if this is supported.
embedSubs = 1 embedSubs = 1
# burnInSubtitle. burns the default sub language into your video (needed for players that don't support subs) # burnInSubtitle. burns the default sub language into your video (needed for players that don't support subs)
burnInSubtitle = 0 burnInSubtitle = 0
@ -354,7 +359,7 @@
#for example FP,FN,DN, TN, TL for file path (absolute file name with path), file name, absolute directory name (with path), Torrent Name, Torrent Label/Category. #for example FP,FN,DN, TN, TL for file path (absolute file name with path), file name, absolute directory name (with path), Torrent Name, Torrent Label/Category.
#So the result is /media/test/script/script.sh FP FN DN TN TL. Add other arguments as needed eg -f, -r #So the result is /media/test/script/script.sh FP FN DN TN TL. Add other arguments as needed eg -f, -r
user_script_param = FN user_script_param = FN
#Set user_script_runOnce = 0 to run for each file, or 1 to only run once (presumably on teh entire directory). #Set user_script_runOnce = 0 to run for each file, or 1 to only run once (presumably on the entire directory).
user_script_runOnce = 0 user_script_runOnce = 0
#Specify the successcodes returned by the user script as a comma separated list. Linux default is 0 #Specify the successcodes returned by the user script as a comma separated list. Linux default is 0
user_script_successCodes = 0 user_script_successCodes = 0
@ -378,5 +383,5 @@
[Custom] [Custom]
# enter a list (comma separated) of Group Tags you want removed from filenames to help with subtitle matching. # enter a list (comma separated) of Group Tags you want removed from filenames to help with subtitle matching.
# e.g remove_group = [rarbag],-NZBgeek # e.g remove_group = [rarbag],-NZBgeek
# be careful if your "group" is a common "real" word. Please report if you have any group replacments that would fall in this category. # be careful if your "group" is a common "real" word. Please report if you have any group replacements that would fall in this category.
remove_group = remove_group =

View file

@ -56,8 +56,8 @@ FORK_SICKRAGE = "sickrage"
FORKS[FORK_DEFAULT] = {"dir": None} FORKS[FORK_DEFAULT] = {"dir": None}
FORKS[FORK_FAILED] = {"dirName": None, "failed": None} FORKS[FORK_FAILED] = {"dirName": None, "failed": None}
FORKS[FORK_FAILED_TORRENT] = {"dir": None, "failed": None, "process_method": None} FORKS[FORK_FAILED_TORRENT] = {"dir": None, "failed": None, "process_method": None}
FORKS[FORK_SICKRAGE] = {"dir": None, "failed": None, "process_method": None, "force": None} FORKS[FORK_SICKRAGE] = {"dir": None, "failed": None, "process_method": None, "force": None, "delete_on": None}
ALL_FORKS = {"dir": None, "dirName": None, "failed": None, "process_method": None, "force": None} ALL_FORKS = {"dir": None, "dirName": None, "failed": None, "process_method": None, "force": None, "delete_on": None}
SICKBEARD_FAILED = [FORK_FAILED, FORK_FAILED_TORRENT, FORK_SICKRAGE] SICKBEARD_FAILED = [FORK_FAILED, FORK_FAILED_TORRENT, FORK_SICKRAGE]
SICKBEARD_TORRENT = [FORK_FAILED_TORRENT, FORK_SICKRAGE] SICKBEARD_TORRENT = [FORK_FAILED_TORRENT, FORK_SICKRAGE]
@ -98,7 +98,9 @@ USELINK = None
OUTPUTDIRECTORY = None OUTPUTDIRECTORY = None
NOFLATTEN = [] NOFLATTEN = []
DELETE_ORIGINAL = None DELETE_ORIGINAL = None
TORRENT_CHMOD_DIRECTORY = None
TORRENT_DEFAULTDIR = None TORRENT_DEFAULTDIR = None
TORRENT_RESUME_ON_FAILURE = None
REMOTEPATHS = [] REMOTEPATHS = []
@ -210,9 +212,9 @@ def initialize(section=None):
ACODEC2, ACODEC2_ALLOW, ABITRATE2, ACODEC3, ACODEC3_ALLOW, ABITRATE3, ALLOWSUBS, SEXTRACT, SEMBED, SLANGUAGES, \ ACODEC2, ACODEC2_ALLOW, ABITRATE2, ACODEC3, ACODEC3_ALLOW, ABITRATE3, ALLOWSUBS, SEXTRACT, SEMBED, SLANGUAGES, \
SINCLUDE, SUBSDIR, SCODEC, OUTPUTFASTSTART, OUTPUTQUALITYPERCENT, BURN, GETSUBS, HWACCEL, LOG_DIR, LOG_FILE, \ SINCLUDE, SUBSDIR, SCODEC, OUTPUTFASTSTART, OUTPUTQUALITYPERCENT, BURN, GETSUBS, HWACCEL, LOG_DIR, LOG_FILE, \
NICENESS, LOG_DEBUG, FORCE_CLEAN, FFMPEG_PATH, FFMPEG, FFPROBE, AUDIOCONTAINER, EXTCONTAINER, TORRENT_CLASS, \ NICENESS, LOG_DEBUG, FORCE_CLEAN, FFMPEG_PATH, FFMPEG, FFPROBE, AUDIOCONTAINER, EXTCONTAINER, TORRENT_CLASS, \
DELETE_ORIGINAL, PASSWORDSFILE, USER_DELAY, USER_SCRIPT, USER_SCRIPT_CLEAN, USER_SCRIPT_MEDIAEXTENSIONS, \ DELETE_ORIGINAL, TORRENT_CHMOD_DIRECTORY, PASSWORDSFILE, USER_DELAY, USER_SCRIPT, USER_SCRIPT_CLEAN, USER_SCRIPT_MEDIAEXTENSIONS, \
USER_SCRIPT_PARAM, USER_SCRIPT_RUNONCE, USER_SCRIPT_SUCCESSCODES, DOWNLOADINFO, CHECK_MEDIA, SAFE_MODE, \ USER_SCRIPT_PARAM, USER_SCRIPT_RUNONCE, USER_SCRIPT_SUCCESSCODES, DOWNLOADINFO, CHECK_MEDIA, SAFE_MODE, \
TORRENT_DEFAULTDIR, NZB_DEFAULTDIR, REMOTEPATHS, LOG_ENV, PID_FILE, MYAPP, ACHANNELS, ACHANNELS2, ACHANNELS3, \ TORRENT_DEFAULTDIR, TORRENT_RESUME_ON_FAILURE, NZB_DEFAULTDIR, REMOTEPATHS, LOG_ENV, PID_FILE, MYAPP, ACHANNELS, ACHANNELS2, ACHANNELS3, \
PLEXSSL, PLEXHOST, PLEXPORT, PLEXTOKEN, PLEXSEC PLEXSSL, PLEXHOST, PLEXPORT, PLEXTOKEN, PLEXSEC
if __INITIALIZED__: if __INITIALIZED__:
@ -339,6 +341,8 @@ def initialize(section=None):
if isinstance(NOFLATTEN, str): NOFLATTEN = NOFLATTEN.split(',') if isinstance(NOFLATTEN, str): NOFLATTEN = NOFLATTEN.split(',')
if isinstance(CATEGORIES, str): CATEGORIES = CATEGORIES.split(',') if isinstance(CATEGORIES, str): CATEGORIES = CATEGORIES.split(',')
DELETE_ORIGINAL = int(CFG["Torrent"]["deleteOriginal"]) DELETE_ORIGINAL = int(CFG["Torrent"]["deleteOriginal"])
TORRENT_CHMOD_DIRECTORY = int(CFG["Torrent"]["chmodDirecotry"], 8)
TORRENT_RESUME_ON_FAILURE = int(CFG["Torrent"]["resumeOnFailure"])
UTORRENTWEBUI = CFG["Torrent"]["uTorrentWEBui"] # http://localhost:8090/gui/ UTORRENTWEBUI = CFG["Torrent"]["uTorrentWEBui"] # http://localhost:8090/gui/
UTORRENTUSR = CFG["Torrent"]["uTorrentUSR"] # mysecretusr UTORRENTUSR = CFG["Torrent"]["uTorrentUSR"] # mysecretusr
UTORRENTPWD = CFG["Torrent"]["uTorrentPWD"] # mysecretpwr UTORRENTPWD = CFG["Torrent"]["uTorrentPWD"] # mysecretpwr
@ -740,3 +744,15 @@ def restart():
status = p.returncode status = p.returncode
os._exit(status) os._exit(status)
def rchmod(path, mod):
logger.log("Changing file mode of %s to %s" % (path, oct(mod)))
os.chmod(path, mod)
if not os.path.isdir(path):
return # Skip files
for root, dirs, files in os.walk(path):
for d in dirs:
os.chmod(os.path.join(root, d), mod)
for f in files:
os.chmod(os.path.join(root, f), mod)

View file

@ -3,10 +3,13 @@ import time
import core import core
import requests import requests
import time import time
from core.nzbToMediaUtil import convert_to_ascii, remoteDir, server_responding from core.nzbToMediaUtil import convert_to_ascii, remoteDir, server_responding
from core.nzbToMediaSceneExceptions import process_all_exceptions from core.nzbToMediaSceneExceptions import process_all_exceptions
from core import logger from core import logger
requests.packages.urllib3.disable_warnings()
class autoProcessComics: class autoProcessComics:
def processEpisode(self, section, dirName, inputName=None, status=0, clientAgent='manual', inputCategory=None): def processEpisode(self, section, dirName, inputName=None, status=0, clientAgent='manual', inputCategory=None):
if int(status) != 0: if int(status) != 0:

View file

@ -1,10 +1,13 @@
import core import core
import requests import requests
import shutil import shutil
from core.nzbToMediaUtil import convert_to_ascii, server_responding from core.nzbToMediaUtil import convert_to_ascii, server_responding
from core.nzbToMediaSceneExceptions import process_all_exceptions from core.nzbToMediaSceneExceptions import process_all_exceptions
from core import logger from core import logger
requests.packages.urllib3.disable_warnings()
class autoProcessGames: class autoProcessGames:
def process(self, section, dirName, inputName=None, status=0, clientAgent='manual', inputCategory=None): def process(self, section, dirName, inputName=None, status=0, clientAgent='manual', inputCategory=None):
status = int(status) status = int(status)

View file

@ -8,6 +8,7 @@ from core.nzbToMediaUtil import convert_to_ascii, rmDir, find_imdbid, find_downl
from core import logger from core import logger
from core.transcoder import transcoder from core.transcoder import transcoder
requests.packages.urllib3.disable_warnings()
class autoProcessMovie: class autoProcessMovie:
def get_release(self, baseURL, imdbid=None, download_id=None, release_id=None): def get_release(self, baseURL, imdbid=None, download_id=None, release_id=None):

View file

@ -7,6 +7,8 @@ from core.nzbToMediaUtil import convert_to_ascii, remoteDir, listMediaFiles, ser
from core.nzbToMediaSceneExceptions import process_all_exceptions from core.nzbToMediaSceneExceptions import process_all_exceptions
from core import logger from core import logger
requests.packages.urllib3.disable_warnings()
class autoProcessMusic: class autoProcessMusic:
def get_status(self, url, apikey, dirName): def get_status(self, url, apikey, dirName):
logger.debug("Attempting to get current status for release:%s" % (os.path.basename(dirName))) logger.debug("Attempting to get current status for release:%s" % (os.path.basename(dirName)))

View file

@ -12,6 +12,8 @@ from core.nzbToMediaUtil import convert_to_ascii, flatten, rmDir, listMediaFiles
from core import logger from core import logger
from core.transcoder import transcoder from core.transcoder import transcoder
requests.packages.urllib3.disable_warnings()
class autoProcessTV: class autoProcessTV:
def command_complete(self, url, params, headers, section): def command_complete(self, url, params, headers, section):
r = None r = None
@ -104,6 +106,10 @@ class autoProcessTV:
force = int(core.CFG[section][inputCategory]["force"]) force = int(core.CFG[section][inputCategory]["force"])
except: except:
force = 0 force = 0
try:
delete_on = int(core.CFG[section][inputCategory]["delete_on"])
except:
delete_on = 0
try: try:
extract = int(section[inputCategory]["extract"]) extract = int(section[inputCategory]["extract"])
except: except:
@ -211,6 +217,12 @@ class autoProcessTV:
else: else:
del fork_params[param] del fork_params[param]
if param == "delete_on":
if delete_on:
fork_params[param] = delete_on
else:
del fork_params[param]
# delete any unused params so we don't pass them to SB by mistake # delete any unused params so we don't pass them to SB by mistake
[fork_params.pop(k) for k,v in fork_params.items() if v is None] [fork_params.pop(k) for k,v in fork_params.items() if v is None]
@ -276,6 +288,8 @@ class autoProcessTV:
for line in r.iter_lines(): for line in r.iter_lines():
if line: if line:
logger.postprocess("%s" % (line), section) logger.postprocess("%s" % (line), section)
if "Moving file from" in line:
inputName = os.path.split(line)[1]
if "Processing succeeded" in line or "Successfully processed" in line: if "Processing succeeded" in line or "Successfully processed" in line:
Success = True Success = True
elif section == "NzbDrone": elif section == "NzbDrone":

View file

@ -798,6 +798,9 @@ def find_download(clientAgent, download_id):
if clientAgent == 'deluge': if clientAgent == 'deluge':
return False return False
if clientAgent == 'sabnzbd': if clientAgent == 'sabnzbd':
if "http" in core.SABNZBDHOST:
baseURL = "%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT)
else:
baseURL = "http://%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT) baseURL = "http://%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT)
url = baseURL url = baseURL
params = {} params = {}
@ -819,6 +822,9 @@ def find_download(clientAgent, download_id):
def get_nzoid(inputName): def get_nzoid(inputName):
nzoid = None nzoid = None
logger.debug("Searching for nzoid from SAbnzbd ...") logger.debug("Searching for nzoid from SAbnzbd ...")
if "http" in core.SABNZBDHOST:
baseURL = "%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT)
else:
baseURL = "http://%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT) baseURL = "http://%s:%s/api" % (core.SABNZBDHOST, core.SABNZBDPORT)
url = baseURL url = baseURL
params = {} params = {}
@ -1057,7 +1063,7 @@ def server_responding(baseURL):
def plex_update(category): def plex_update(category):
if core.PLEXSSL: if core.PLEXSSL:
ulr = 'https://' url = 'https://'
else: else:
url = 'http://' url = 'http://'
url = url + core.PLEXHOST + ':' + core.PLEXPORT + '/library/sections/' url = url + core.PLEXHOST + ':' + core.PLEXPORT + '/library/sections/'

View file

@ -277,8 +277,6 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd.extend(['-c:a:' + str(used_audio), core.ACODEC]) audio_cmd.extend(['-c:a:' + str(used_audio), core.ACODEC])
else: else:
audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) audio_cmd.extend(['-c:a:' + str(used_audio), 'copy'])
if core.ACODEC == 'aac':
audio_cmd.extend(['-strict', '-2'])
elif audio3: # just pick the default audio track elif audio3: # just pick the default audio track
map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])]) map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])])
a_mapped.extend([audio3[0]["index"]]) a_mapped.extend([audio3[0]["index"]])
@ -292,8 +290,6 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd.extend(['-c:a:' + str(used_audio), core.ACODEC]) audio_cmd.extend(['-c:a:' + str(used_audio), core.ACODEC])
else: else:
audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) audio_cmd.extend(['-c:a:' + str(used_audio), 'copy'])
if core.ACODEC == 'aac':
audio_cmd.extend(['-strict', '-2'])
if core.ACHANNELS and channels and channels > core.ACHANNELS: if core.ACHANNELS and channels and channels > core.ACHANNELS:
audio_cmd.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS)]) audio_cmd.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS)])
@ -307,6 +303,8 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)]) audio_cmd.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)])
if audio_cmd[1] == 'copy': if audio_cmd[1] == 'copy':
audio_cmd[1] = core.ACODEC audio_cmd[1] = core.ACODEC
if audio_cmd[1] == 'aac':
audio_cmd[2:2] = ['-strict', '-2']
if core.ACODEC2_ALLOW: if core.ACODEC2_ALLOW:
used_audio += 1 used_audio += 1
@ -334,8 +332,6 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd2.extend(['-c:a:' + str(used_audio), core.ACODEC2]) audio_cmd2.extend(['-c:a:' + str(used_audio), core.ACODEC2])
else: else:
audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy']) audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy'])
if core.ACODEC2 == 'aac':
audio_cmd2.extend(['-strict', '-2'])
elif audio3: # just pick the default audio track elif audio3: # just pick the default audio track
map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])]) map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])])
a_mapped.extend([audio3[0]["index"]]) a_mapped.extend([audio3[0]["index"]])
@ -349,8 +345,6 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd2.extend(['-c:a:' + str(used_audio), core.ACODEC2]) audio_cmd2.extend(['-c:a:' + str(used_audio), core.ACODEC2])
else: else:
audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy']) audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy'])
if core.ACODEC2 == 'aac':
audio_cmd2.extend(['-strict', '-2'])
if core.ACHANNELS2 and channels and channels > core.ACHANNELS2: if core.ACHANNELS2 and channels and channels > core.ACHANNELS2:
audio_cmd2.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS2)]) audio_cmd2.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS2)])
@ -364,6 +358,8 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd2.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)]) audio_cmd2.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)])
if audio_cmd2[1] == 'copy': if audio_cmd2[1] == 'copy':
audio_cmd2[1] = core.ACODEC2 audio_cmd2[1] = core.ACODEC2
if audio_cmd2[1] == 'aac':
audio_cmd2[2:2] = ['-strict', '-2']
audio_cmd.extend(audio_cmd2) audio_cmd.extend(audio_cmd2)
if core.AINCLUDE and audio3 and core.ACODEC3: if core.AINCLUDE and audio3 and core.ACODEC3:
@ -386,8 +382,6 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd3.extend(['-c:a:' + str(used_audio), core.ACODEC3]) audio_cmd3.extend(['-c:a:' + str(used_audio), core.ACODEC3])
else: else:
audio_cmd3.extend(['-c:a:' + str(used_audio), 'copy']) audio_cmd3.extend(['-c:a:' + str(used_audio), 'copy'])
if core.ACODEC3 == 'aac':
audio_cmd3.extend(['-strict', '-2'])
if core.ACHANNELS3 and channels and channels > core.ACHANNELS3: if core.ACHANNELS3 and channels and channels > core.ACHANNELS3:
audio_cmd3.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS3)]) audio_cmd3.extend(['-ac:a:' + str(used_audio), str(core.ACHANNELS3)])
@ -401,6 +395,8 @@ def buildCommands(file, newDir, movieName, bitbucket):
audio_cmd3.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)]) audio_cmd3.extend(['-q:a:' + str(used_audio), str(core.OUTPUTQUALITYPERCENT)])
if audio_cmd3[1] == 'copy': if audio_cmd3[1] == 'copy':
audio_cmd3[1] = core.ACODEC3 audio_cmd3[1] = core.ACODEC3
if audio_cmd3[1] == 'aac':
audio_cmd3[2:2] = ['-strict', '-2']
audio_cmd.extend(audio_cmd3) audio_cmd.extend(audio_cmd3)
s_mapped = [] s_mapped = []

View file

@ -95,7 +95,7 @@
# Media Extensions # Media Extensions
# #
# This is a list of media extensions that are used to verify that the download does contain valid media. # This is a list of media extensions that are used to verify that the download does contain valid media.
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso #mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.ts
## Posix ## Posix

View file

@ -301,7 +301,7 @@
# Media Extensions # Media Extensions
# #
# This is a list of media extensions that are used to verify that the download does contain valid media. # This is a list of media extensions that are used to verify that the download does contain valid media.
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso #mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.ts
## Posix ## Posix

View file

@ -85,7 +85,7 @@
# Media Extensions # Media Extensions
# #
# This is a list of media extensions that are used to verify that the download does contain valid media. # This is a list of media extensions that are used to verify that the download does contain valid media.
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso #mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.ts
## Posix ## Posix

View file

@ -98,7 +98,7 @@
# Media Extensions # Media Extensions
# #
# This is a list of media extensions that are used to verify that the download does contain valid media. # This is a list of media extensions that are used to verify that the download does contain valid media.
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso #mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso,.ts
## Posix ## Posix