diff --git a/data/interfaces/default/config.html b/data/interfaces/default/config.html index 120ec49a..216e4eb6 100644 --- a/data/interfaces/default/config.html +++ b/data/interfaces/default/config.html @@ -1,7 +1,6 @@ m<%inherit file="base.html"/> <%! import headphones - from operator import itemgetter %> <%def name="headerIncludes()"> @@ -218,9 +217,9 @@ m<%inherit file="base.html"/> <% newznab_number = 2 %> - %for newznab in sorted(config['extra_newznabs'], key=itemgetter(0)): + %for newznab in config['extra_newznabs']: <% - if newznab[2]: + if newznab[2] == '1' or newznab[2] == 1: newznab_enabled = "checked" else: newznab_enabled = "" @@ -814,21 +813,25 @@ m<%inherit file="base.html"/> $("#mirror").change(handleNewSelection); handleNewSelection.apply($("#mirror")); + var deletedNewznabs = 0; + $(".remove").click(function() { $(this).parent().parent().remove(); + deletedNewznabs = deletedNewznabs + 1; }); $("#add_newznab").click(function() { - var intIdPrev = $("#newznab_providers > div").size(); - var intId = intIdPrev + 1; + var intId = $("#newznab_providers > div").size() + deletedNewznabs + 1; var formfields = $("
"); var removeButton = $("
"); removeButton.click(function() { $(this).parent().remove(); + deletedNewznabs = deletedNewznabs + 1; + }); formfields.append(removeButton); formfields.append("
"); - $("#newznab" + intIdPrev).after(formfields); + $("#add_newznab").before(formfields); }); $(function() { diff --git a/headphones/__init__.py b/headphones/__init__.py index f8eacc1a..265a016e 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -20,6 +20,7 @@ import os, sys, subprocess import threading import webbrowser import sqlite3 +import itertools from lib.apscheduler.scheduler import Scheduler from lib.configobj import ConfigObj @@ -229,7 +230,6 @@ def check_setting_str(config, cfg_name, item_name, def_val, log=True): else: logger.debug(item_name + " -> ******") return my_val - def initialize(): @@ -343,7 +343,10 @@ def initialize(): NEWZNAB_HOST = check_setting_str(CFG, 'Newznab', 'newznab_host', '') NEWZNAB_APIKEY = check_setting_str(CFG, 'Newznab', 'newznab_apikey', '') NEWZNAB_ENABLED = bool(check_setting_int(CFG, 'Newznab', 'newznab_enabled', 1)) - EXTRA_NEWZNABS = check_setting_str(CFG, 'Newznab', 'extra_newznabs', [], log=False) + + # Need to pack the extra newznabs back into a list of tuples + flattened_newznabs = check_setting_str(CFG, 'Newznab', 'extra_newznabs', [], log=False) + EXTRA_NEWZNABS = list(itertools.izip(*[itertools.islice(flattened_newznabs, i, None, 3) for i in range(3)])) NZBSORG = bool(check_setting_int(CFG, 'NZBsorg', 'nzbsorg', 0)) NZBSORG_UID = check_setting_str(CFG, 'NZBsorg', 'nzbsorg_uid', '') @@ -618,7 +621,13 @@ def config_write(): new_config['Newznab']['newznab_host'] = NEWZNAB_HOST new_config['Newznab']['newznab_apikey'] = NEWZNAB_APIKEY new_config['Newznab']['newznab_enabled'] = int(NEWZNAB_ENABLED) - new_config['Newznab']['extra_newznabs'] = EXTRA_NEWZNABS + # Need to unpack the extra newznabs for saving in config.ini + flattened_newznabs = [] + for newznab in EXTRA_NEWZNABS: + for item in newznab: + flattened_newznabs.append(item) + + new_config['Newznab']['extra_newznabs'] = flattened_newznabs new_config['NZBsorg'] = {} new_config['NZBsorg']['nzbsorg'] = int(NZBSORG) diff --git a/headphones/searcher.py b/headphones/searcher.py index a7808220..85b699e5 100644 --- a/headphones/searcher.py +++ b/headphones/searcher.py @@ -217,14 +217,11 @@ def searchNZB(albumid=None, new=False, losslessOnly=False): if headphones.NEWZNAB: - newznab_hosts = [[headphones.NEWZNAB_HOST, headphones.NEWZNAB_APIKEY, headphones.NEWZNAB_ENABLED]] - - # This is just to make sure we don't have any empty string for EXTRA_NEWZNABS - if not headphones.EXTRA_NEWZNABS: - headphones.EXTRA_NEWZNABS = [] + newznab_hosts = [(headphones.NEWZNAB_HOST, headphones.NEWZNAB_APIKEY, headphones.NEWZNAB_ENABLED)] for newznab_host in headphones.EXTRA_NEWZNABS: - newznab_hosts.append(newznab_host) + if newznab_host[2] == '1' or newznab_host[2] == 1: + newznab_hosts.append(newznab_host) provider = "newznab" if headphones.PREFERRED_QUALITY == 3 or losslessOnly: @@ -239,9 +236,6 @@ def searchNZB(albumid=None, new=False, losslessOnly=False): logger.info("Album type is audiobook/spokenword. Using audiobook category") for newznab_host in newznab_hosts: - - if newznab_host[2] == 0 or newznab_host[2] == '0': - continue params = { "t": "search", "apikey": newznab_host[1], diff --git a/headphones/webserve.py b/headphones/webserve.py index 2d190bf8..2b2e89fd 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -572,7 +572,7 @@ class WebInterface(object): except KeyError: newznab_enabled = 0 - headphones.EXTRA_NEWZNABS.append([newznab_host, newznab_api, newznab_enabled]) + headphones.EXTRA_NEWZNABS.append((newznab_host, newznab_api, newznab_enabled)) headphones.config_write()