diff --git a/data/interfaces/default/config.html b/data/interfaces/default/config.html index 81a584da..37c6a4ef 100644 --- a/data/interfaces/default/config.html +++ b/data/interfaces/default/config.html @@ -168,6 +168,68 @@ + <% + if config['nzbget_priority'] == -100: + prio_verylow = 'selected="selected"' + prio_low = '' + prio_normal = '' + prio_high = '' + prio_veryhigh = '' + prio_force = '' + elif config['nzbget_priority'] == -50: + prio_verylow = '' + prio_low = 'selected="selected"' + prio_normal = '' + prio_high = '' + prio_veryhigh = '' + prio_force = '' + elif config['nzbget_priority'] == 0: + prio_verylow = '' + prio_low = '' + prio_normal = 'selected="selected"' + prio_high = '' + prio_veryhigh = '' + prio_force = '' + elif config['nzbget_priority'] == 50: + prio_verylow = '' + prio_low = '' + prio_normal = '' + prio_high = 'selected="selected"' + prio_veryhigh = '' + prio_force = '' + elif config['nzbget_priority'] == 100: + prio_verylow = '' + prio_low = '' + prio_normal = '' + prio_high = '' + prio_veryhigh = 'selected="selected"' + prio_force = '' + elif config['nzbget_priority'] == 900: + prio_verylow = '' + prio_low = '' + prio_normal = '' + prio_high = '' + prio_veryhigh = '' + prio_force = 'selected="selected"' + else: + prio_verylow = '' + prio_low = '' + prio_normal = 'selected="selected"' + prio_high = '' + prio_veryhigh = '' + prio_force = '' + %> +
+ + +
diff --git a/headphones/__init__.py b/headphones/__init__.py index 0560a9fa..8248799e 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -148,6 +148,7 @@ NZBGET_USERNAME = None NZBGET_PASSWORD = None NZBGET_CATEGORY = None NZBGET_HOST = None +NZBGET_PRIORITY = 0 HEADPHONES_INDEXER = False @@ -355,7 +356,7 @@ def initialize(): TORRENTBLACKHOLE_DIR, NUMBEROFSEEDERS, KAT, KAT_PROXY_URL, KAT_RATIO, PIRATEBAY, PIRATEBAY_PROXY_URL, PIRATEBAY_RATIO, MININOVA, MININOVA_RATIO, WAFFLES, WAFFLES_UID, WAFFLES_PASSKEY, WAFFLES_RATIO, \ RUTRACKER, RUTRACKER_USER, RUTRACKER_PASSWORD, RUTRACKER_RATIO, WHATCD, WHATCD_USERNAME, WHATCD_PASSWORD, WHATCD_RATIO, DOWNLOAD_TORRENT_DIR, \ LIBRARYSCAN, LIBRARYSCAN_INTERVAL, DOWNLOAD_SCAN_INTERVAL, UPDATE_DB_INTERVAL, MB_IGNORE_AGE, SAB_HOST, SAB_USERNAME, SAB_PASSWORD, SAB_APIKEY, SAB_CATEGORY, \ - NZBGET_USERNAME, NZBGET_PASSWORD, NZBGET_CATEGORY, NZBGET_HOST, HEADPHONES_INDEXER, NZBMATRIX, TRANSMISSION_HOST, TRANSMISSION_USERNAME, TRANSMISSION_PASSWORD, \ + NZBGET_USERNAME, NZBGET_PASSWORD, NZBGET_CATEGORY, NZBGET_PRIORITY, NZBGET_HOST, HEADPHONES_INDEXER, NZBMATRIX, TRANSMISSION_HOST, TRANSMISSION_USERNAME, TRANSMISSION_PASSWORD, \ UTORRENT_HOST, UTORRENT_USERNAME, UTORRENT_PASSWORD, UTORRENT_LABEL, NEWZNAB, NEWZNAB_HOST, NEWZNAB_APIKEY, NEWZNAB_ENABLED, EXTRA_NEWZNABS, \ NZBSORG, NZBSORG_UID, NZBSORG_HASH, OMGWTFNZBS, OMGWTFNZBS_UID, OMGWTFNZBS_APIKEY, \ NZB_DOWNLOADER, TORRENT_DOWNLOADER, PREFERRED_WORDS, REQUIRED_WORDS, IGNORED_WORDS, LASTFM_USERNAME, \ @@ -525,6 +526,7 @@ def initialize(): NZBGET_PASSWORD = check_setting_str(CFG, 'NZBget', 'nzbget_password', '') NZBGET_CATEGORY = check_setting_str(CFG, 'NZBget', 'nzbget_category', '') NZBGET_HOST = check_setting_str(CFG, 'NZBget', 'nzbget_host', '') + NZBGET_PRIORITY = check_setting_int(CFG, 'NZBget', 'nzbget_priority', 0) HEADPHONES_INDEXER = bool(check_setting_int(CFG, 'Headphones', 'headphones_indexer', 0)) @@ -966,6 +968,7 @@ def config_write(): new_config['NZBget']['nzbget_password'] = NZBGET_PASSWORD new_config['NZBget']['nzbget_category'] = NZBGET_CATEGORY new_config['NZBget']['nzbget_host'] = NZBGET_HOST + new_config['NZBget']['nzbget_priority'] = NZBGET_PRIORITY new_config['Headphones'] = {} new_config['Headphones']['headphones_indexer'] = int(HEADPHONES_INDEXER) diff --git a/headphones/nzbget.py b/headphones/nzbget.py index 8c977c57..0d9eca19 100644 --- a/headphones/nzbget.py +++ b/headphones/nzbget.py @@ -69,25 +69,60 @@ def sendNZB(nzb): logger.error(u"Protocol Error: " + e.errmsg) return False - # if it's a normal result need to download the NZB content - if nzb.resultType == "nzb": - genProvider = GenericProvider("") - data = genProvider.getURL(nzb.url) - if (data == None): - return False - - # if we get a raw data result thats even better - elif nzb.resultType == "nzbdata": + nzbcontent64 = None + if nzb.resultType == "nzbdata": data = nzb.extraInfo[0] - - nzbcontent64 = standard_b64encode(data) + nzbcontent64 = standard_b64encode(data) logger.info(u"Sending NZB to NZBget") logger.debug(u"URL: " + url) - if nzbGetRPC.append(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, addToTop, nzbcontent64): - logger.debug(u"NZB sent to NZBget successfully") - return True - else: - logger.error(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb")) + dupekey = "" + dupescore = 0 + + try: + # Find out if nzbget supports priority (Version 9.0+), old versions beginning with a 0.x will use the old command + nzbget_version_str = nzbGetRPC.version() + nzbget_version = int(nzbget_version_str[:nzbget_version_str.find(".")]) + if nzbget_version == 0: + if nzbcontent64 is not None: + nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, addToTop, nzbcontent64) + else: + if nzb.resultType == "nzb": + genProvider = GenericProvider("") + data = genProvider.getURL(nzb.url) + if (data == None): + return False + nzbcontent64 = standard_b64encode(data) + nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, addToTop, nzbcontent64) + elif nzbget_version == 12: + if nzbcontent64 is not None: + nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, headphones.NZBGET_PRIORITY, False, + nzbcontent64, False, dupekey, dupescore, "score") + else: + nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, headphones.NZBGET_PRIORITY, False, + nzb.url, False, dupekey, dupescore, "score") + # v13+ has a new combined append method that accepts both (url and content) + # also the return value has changed from boolean to integer + # (Positive number representing NZBID of the queue item. 0 and negative numbers represent error codes.) + elif nzbget_version >= 13: + nzbget_result = True if nzbGetRPC.append(nzb.name + ".nzb", nzbcontent64 if nzbcontent64 is not None else nzb.url, + headphones.NZBGET_CATEGORY, headphones.NZBGET_PRIORITY, False, False, dupekey, dupescore, + "score") > 0 else False + else: + if nzbcontent64 is not None: + nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, headphones.NZBGET_PRIORITY, False, + nzbcontent64) + else: + nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", headphones.NZBGET_CATEGORY, headphones.NZBGET_PRIORITY, False, + nzb.url) + + if nzbget_result: + logger.debug(u"NZB sent to NZBget successfully") + return True + else: + logger.error(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb")) + return False + except: + logger.error(u"Connect Error to NZBget: could not add %s to the queue" % (nzb.name + ".nzb")) return False diff --git a/headphones/webserve.py b/headphones/webserve.py index 401e5921..7a8314c7 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -971,6 +971,7 @@ class WebInterface(object): "nzbget_user" : headphones.NZBGET_USERNAME, "nzbget_pass" : headphones.NZBGET_PASSWORD, "nzbget_cat" : headphones.NZBGET_CATEGORY, + "nzbget_priority" : headphones.NZBGET_PRIORITY, "transmission_host" : headphones.TRANSMISSION_HOST, "transmission_user" : headphones.TRANSMISSION_USERNAME, "transmission_pass" : headphones.TRANSMISSION_PASSWORD, @@ -1161,7 +1162,7 @@ class WebInterface(object): def configUpdate(self, http_host='0.0.0.0', http_username=None, http_port=8181, http_password=None, launch_browser=0, api_enabled=0, api_key=None, download_scan_interval=None, update_db_interval=None, mb_ignore_age=None, nzb_search_interval=None, libraryscan_interval=None, sab_host=None, sab_username=None, sab_apikey=None, sab_password=None, - sab_category=None, nzbget_host=None, nzbget_username=None, nzbget_password=None, nzbget_category=None, transmission_host=None, transmission_username=None, transmission_password=None, + sab_category=None, nzbget_host=None, nzbget_username=None, nzbget_password=None, nzbget_category=None, nzbget_priority=0, transmission_host=None, transmission_username=None, transmission_password=None, utorrent_host=None, utorrent_username=None, utorrent_password=None, utorrent_label=None,nzb_downloader=0, torrent_downloader=0, download_dir=None, blackhole_dir=None, usenet_retention=None, use_headphones_indexer=0, newznab=0, newznab_host=None, newznab_apikey=None, newznab_enabled=0, nzbsorg=0, nzbsorg_uid=None, nzbsorg_hash=None, omgwtfnzbs=0, omgwtfnzbs_uid=None, omgwtfnzbs_apikey=None, preferred_words=None, required_words=None, ignored_words=None, preferred_quality=0, preferred_bitrate=None, detect_bitrate=0, move_files=0, torrentblackhole_dir=None, download_torrent_dir=None, @@ -1202,6 +1203,7 @@ class WebInterface(object): headphones.NZBGET_USERNAME = nzbget_username headphones.NZBGET_PASSWORD = nzbget_password headphones.NZBGET_CATEGORY = nzbget_category + headphones.NZBGET_PRIORITY = int(nzbget_priority) headphones.TRANSMISSION_HOST = transmission_host headphones.TRANSMISSION_USERNAME = transmission_username headphones.TRANSMISSION_PASSWORD = transmission_password