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
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;

6
interfaces/Config/templates/config_notify.tmpl

@ -79,7 +79,7 @@
</fieldset>
</div><!-- /col1 -->
</div><!-- /section -->
<div class="section">
<div class="section" id="growl">
<div class="col2">
<h3>$T('growlSettings')</h3>
</div><!-- /col2 -->
@ -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')');

2
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):

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
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
#------------------------------------------------------------------------------

Loading…
Cancel
Save