[Notifications] Fix unhandled TypeErrors on Python 3

- Notify requires GLib.Variant for set_hint
- Twisted defer.fail only accepts Exceptions.

Fixes: #3267
This commit is contained in:
Calum Lind 2019-06-12 18:43:23 +01:00
parent 1b4ac88ce7
commit 63a4301a8b
1 changed files with 8 additions and 6 deletions

View File

@ -42,7 +42,7 @@ except ImportError:
try: try:
require_version('Notify', '0.7') require_version('Notify', '0.7')
from gi.repository import Notify from gi.repository import Notify, GLib
except (ValueError, ImportError): except (ValueError, ImportError):
POPUP_AVAILABLE = False POPUP_AVAILABLE = False
else: else:
@ -174,15 +174,17 @@ class GtkUiNotifications(CustomNotifications):
if not self.config['popup_enabled']: if not self.config['popup_enabled']:
return defer.succeed(_('Popup notification is not enabled.')) return defer.succeed(_('Popup notification is not enabled.'))
if not POPUP_AVAILABLE: if not POPUP_AVAILABLE:
return defer.fail(_('libnotify is not installed')) err_msg = _('libnotify is not installed')
log.warning(err_msg)
return defer.fail(ImportError(err_msg))
if Notify.init('Deluge'): if Notify.init('Deluge'):
self.note = Notify.Notification.new(title, message, 'deluge-panel') self.note = Notify.Notification.new(title, message, 'deluge-panel')
self.note.set_hint('desktop-entry', 'deluge') self.note.set_hint('desktop-entry', GLib.Variant.new_string('deluge'))
if not self.note.show(): if not self.note.show():
err_msg = _('Failed to popup notification') err_msg = _('Failed to popup notification')
log.warning(err_msg) log.warning(err_msg)
return defer.fail(err_msg) return defer.fail(Exception(err_msg))
return defer.succeed(_('Notification popup shown')) return defer.succeed(_('Notification popup shown'))
def __play_sound(self, sound_path=''): def __play_sound(self, sound_path=''):
@ -191,7 +193,7 @@ class GtkUiNotifications(CustomNotifications):
if not SOUND_AVAILABLE: if not SOUND_AVAILABLE:
err_msg = _('pygame is not installed') err_msg = _('pygame is not installed')
log.warning(err_msg) log.warning(err_msg)
return defer.fail(err_msg) return defer.fail(ImportError(err_msg))
pygame.init() pygame.init()
try: try:
@ -203,7 +205,7 @@ class GtkUiNotifications(CustomNotifications):
except pygame.error as ex: except pygame.error as ex:
err_msg = _('Sound notification failed %s') % ex err_msg = _('Sound notification failed %s') % ex
log.warning(err_msg) log.warning(err_msg)
return defer.fail(err_msg) return defer.fail(ex)
else: else:
msg = _('Sound notification Success') msg = _('Sound notification Success')
log.info(msg) log.info(msg)