diff --git a/interfaces/Config/templates/_inc_header_uc.tmpl b/interfaces/Config/templates/_inc_header_uc.tmpl index 99b184b..e84d104 100644 --- a/interfaces/Config/templates/_inc_header_uc.tmpl +++ b/interfaces/Config/templates/_inc_header_uc.tmpl @@ -110,7 +110,11 @@ // could use .serializeArray() but that omits unchecked items inputs.each(function (i,elem) { - target[elem.name] = elem.value; + if (elem.type == "checkbox") { + target[elem.name] = elem.checked; + } else { + target[elem.name] = elem.value; + } }); return this; diff --git a/interfaces/Config/templates/config_notify.tmpl b/interfaces/Config/templates/config_notify.tmpl index e98ac3b..e2f47d6 100644 --- a/interfaces/Config/templates/config_notify.tmpl +++ b/interfaces/Config/templates/config_notify.tmpl @@ -79,7 +79,7 @@ -
+

$T('growlSettings')

@@ -164,10 +164,12 @@ } }); \$('#test_notification').click(function () { + var data = { mode: 'test_notif', apikey: '$session', output: 'json' }; + \$("#growl").extractFormDataTo(data); \$.ajax({ type: "GET", url: "../../tapi", - data: {mode: 'test_notif', apikey: '$session', output: 'json' }, + data: data, beforeSend: function () { \$('#test_notification').attr("disabled", "disabled"); \$('#testnotice-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')'); diff --git a/sabnzbd/api.py b/sabnzbd/api.py index f26009c..eae84f0 100644 --- a/sabnzbd/api.py +++ b/sabnzbd/api.py @@ -691,7 +691,7 @@ def _api_test_email(name, output, kwargs): def _api_test_notif(name, output, kwargs): """ API: send a test notification, return result """ logging.info("Sending test notification") - res = sabnzbd.growler.send_notification('SABnzbd', T('Test Notification'), 'other', wait=True) + res = sabnzbd.growler.send_notification('SABnzbd', T('Test Notification'), 'other', wait=True, test=kwargs) return report(output, error=res) def _api_undefined(name, output, kwargs): diff --git a/sabnzbd/growler.py b/sabnzbd/growler.py index 1a8be50..942b550 100644 --- a/sabnzbd/growler.py +++ b/sabnzbd/growler.py @@ -102,25 +102,39 @@ def have_ntfosd(): #------------------------------------------------------------------------------ -def send_notification(title , msg, gtype, wait=False): +def send_notification(title , msg, gtype, wait=False, test=None): """ Send Notification message Return '' when OK, otherwise an error string """ res = [] if gtype in sabnzbd.cfg.notify_classes() or wait: - if sabnzbd.DARWIN_ML and sabnzbd.cfg.ncenter_enable(): + + # support testing values from UI + if (test): + ncenter_enable = test.get('ncenter_enable') == 'true' + ntfosd_enable = test.get('ntfosd_enable') == 'true' + growl_enable = test.get('growl_enable') == 'true' + growl_server = test.get('growl_server') or None + else: + ncenter_enable = sabnzbd.cfg.ncenter_enable() + ntfosd_enable = sabnzbd.cfg.ntfosd_enable() + growl_enable = sabnzbd.cfg.growl_enable() + growl_server = sabnzbd.cfg.growl_server() + + if sabnzbd.DARWIN_ML and ncenter_enable: res.append(send_notification_center(title, msg, gtype)) - if sabnzbd.cfg.growl_enable(): - if _HAVE_CLASSIC_GROWL and not sabnzbd.cfg.growl_server(): + if growl_enable: + if _HAVE_CLASSIC_GROWL and not growl_server: return send_local_growl(title, msg, gtype) else: if wait: - res.append(send_growl(title, msg, gtype)) + # we only test with wait=True + res.append(send_growl(title, msg, gtype, test)) else: res.append('ok') Thread(target=send_growl, args=(title, msg, gtype)).start() time.sleep(0.5) - if have_ntfosd(): + if ntfosd_enable and have_ntfosd(): res.append(send_notify_osd(title, msg)) return ' / '.join([r for r in res if r]) @@ -135,11 +149,19 @@ def reset_growl(): #------------------------------------------------------------------------------ -def register_growl(): +def register_growl(test=None): """ Register this app with Growl """ error = None - host, port = sabnzbd.misc.split_host(sabnzbd.cfg.growl_server()) + + if (test): + growl_server = test.get('growl_server') + growl_password = test.get('growl_password') + else: + growl_server = sabnzbd.cfg.growl_server() + growl_password = sabnzbd.cfg.growl_password() + + host, port = sabnzbd.misc.split_host(growl_server) sys_name = hostname(host) @@ -153,7 +175,7 @@ def register_growl(): notifications = [Tx(NOTIFICATION[key]) for key in NOTIFY_KEYS], hostname = host or 'localhost', port = port or 23053, - password = sabnzbd.cfg.growl_password() or None + password = growl_password or None ) try: @@ -182,15 +204,19 @@ def register_growl(): #------------------------------------------------------------------------------ -def send_growl(title , msg, gtype): +def send_growl(title , msg, gtype, test=None): """ Send Growl message """ global _GROWL, _GROWL_REG for n in (0, 1): if not _GROWL_REG: _GROWL = None + + if test: + reset_growl() + if not _GROWL: - _GROWL, error = register_growl() + _GROWL, error = register_growl(test) if _GROWL: assert isinstance(_GROWL, GrowlNotifier) _GROWL_REG = True @@ -204,22 +230,27 @@ def send_growl(title , msg, gtype): description = unicoder(msg), ) if ret is None or isinstance(ret, bool): - return None + result = None elif ret[0] == '401': _GROWL = False else: logging.debug('Growl error %s', ret) - return 'Growl error %s', ret + result = 'Growl error %s', ret except socket.error, err: error = 'Growl error %s' % err logging.debug(error) - return error + result = error except: error = 'Growl error (unknown)' logging.debug(error) - return error + result = error else: - return error + result = error + + if test: + reset_growl() + + return result return None #------------------------------------------------------------------------------