Browse Source

Notification: Respect NotifyOSD-preference and allow testing of values from UI.

pull/150/head
Jostein Kjønigsen 11 years ago
parent
commit
e2790cbaa9
  1. 6
      interfaces/Config/templates/_inc_header_uc.tmpl
  2. 6
      interfaces/Config/templates/config_notify.tmpl
  3. 2
      sabnzbd/api.py
  4. 63
      sabnzbd/growler.py

6
interfaces/Config/templates/_inc_header_uc.tmpl

@ -110,7 +110,11 @@
// could use .serializeArray() but that omits unchecked items // could use .serializeArray() but that omits unchecked items
inputs.each(function (i,elem) { 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; return this;

6
interfaces/Config/templates/config_notify.tmpl

@ -79,7 +79,7 @@
</fieldset> </fieldset>
</div><!-- /col1 --> </div><!-- /col1 -->
</div><!-- /section --> </div><!-- /section -->
<div class="section"> <div class="section" id="growl">
<div class="col2"> <div class="col2">
<h3>$T('growlSettings')</h3> <h3>$T('growlSettings')</h3>
</div><!-- /col2 --> </div><!-- /col2 -->
@ -164,10 +164,12 @@
} }
}); });
\$('#test_notification').click(function () { \$('#test_notification').click(function () {
var data = { mode: 'test_notif', apikey: '$session', output: 'json' };
\$("#growl").extractFormDataTo(data);
\$.ajax({ \$.ajax({
type: "GET", type: "GET",
url: "../../tapi", url: "../../tapi",
data: {mode: 'test_notif', apikey: '$session', output: 'json' }, data: data,
beforeSend: function () { beforeSend: function () {
\$('#test_notification').attr("disabled", "disabled"); \$('#test_notification').attr("disabled", "disabled");
\$('#testnotice-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')'); \$('#testnotice-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')');

2
sabnzbd/api.py

@ -691,7 +691,7 @@ def _api_test_email(name, output, kwargs):
def _api_test_notif(name, output, kwargs): def _api_test_notif(name, output, kwargs):
""" API: send a test notification, return result """ """ API: send a test notification, return result """
logging.info("Sending test notification") 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) return report(output, error=res)
def _api_undefined(name, output, kwargs): def _api_undefined(name, output, kwargs):

63
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 """ Send Notification message
Return '' when OK, otherwise an error string Return '' when OK, otherwise an error string
""" """
res = [] res = []
if gtype in sabnzbd.cfg.notify_classes() or wait: 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)) res.append(send_notification_center(title, msg, gtype))
if sabnzbd.cfg.growl_enable(): if growl_enable:
if _HAVE_CLASSIC_GROWL and not sabnzbd.cfg.growl_server(): if _HAVE_CLASSIC_GROWL and not growl_server:
return send_local_growl(title, msg, gtype) return send_local_growl(title, msg, gtype)
else: else:
if wait: if wait:
res.append(send_growl(title, msg, gtype)) # we only test with wait=True
res.append(send_growl(title, msg, gtype, test))
else: else:
res.append('ok') res.append('ok')
Thread(target=send_growl, args=(title, msg, gtype)).start() Thread(target=send_growl, args=(title, msg, gtype)).start()
time.sleep(0.5) time.sleep(0.5)
if have_ntfosd(): if ntfosd_enable and have_ntfosd():
res.append(send_notify_osd(title, msg)) res.append(send_notify_osd(title, msg))
return ' / '.join([r for r in res if r]) 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 """ Register this app with Growl
""" """
error = None 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) sys_name = hostname(host)
@ -153,7 +175,7 @@ def register_growl():
notifications = [Tx(NOTIFICATION[key]) for key in NOTIFY_KEYS], notifications = [Tx(NOTIFICATION[key]) for key in NOTIFY_KEYS],
hostname = host or 'localhost', hostname = host or 'localhost',
port = port or 23053, port = port or 23053,
password = sabnzbd.cfg.growl_password() or None password = growl_password or None
) )
try: 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 """ Send Growl message
""" """
global _GROWL, _GROWL_REG global _GROWL, _GROWL_REG
for n in (0, 1): for n in (0, 1):
if not _GROWL_REG: _GROWL = None if not _GROWL_REG: _GROWL = None
if test:
reset_growl()
if not _GROWL: if not _GROWL:
_GROWL, error = register_growl() _GROWL, error = register_growl(test)
if _GROWL: if _GROWL:
assert isinstance(_GROWL, GrowlNotifier) assert isinstance(_GROWL, GrowlNotifier)
_GROWL_REG = True _GROWL_REG = True
@ -204,22 +230,27 @@ def send_growl(title , msg, gtype):
description = unicoder(msg), description = unicoder(msg),
) )
if ret is None or isinstance(ret, bool): if ret is None or isinstance(ret, bool):
return None result = None
elif ret[0] == '401': elif ret[0] == '401':
_GROWL = False _GROWL = False
else: else:
logging.debug('Growl error %s', ret) logging.debug('Growl error %s', ret)
return 'Growl error %s', ret result = 'Growl error %s', ret
except socket.error, err: except socket.error, err:
error = 'Growl error %s' % err error = 'Growl error %s' % err
logging.debug(error) logging.debug(error)
return error result = error
except: except:
error = 'Growl error (unknown)' error = 'Growl error (unknown)'
logging.debug(error) logging.debug(error)
return error result = error
else: else:
return error result = error
if test:
reset_growl()
return result
return None return None
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

Loading…
Cancel
Save