From a3524ef8aa50c9dbe76ce6e23e071ad61ec24977 Mon Sep 17 00:00:00 2001 From: Ade Date: Tue, 2 Jun 2015 09:02:29 +1200 Subject: [PATCH] OS X Notification fix --- headphones/notifiers.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/headphones/notifiers.py b/headphones/notifiers.py index 4c6ec1f6..5592a347 100644 --- a/headphones/notifiers.py +++ b/headphones/notifiers.py @@ -732,23 +732,32 @@ class OSX_NOTIFY(object): self.objc = __import__("objc") self.AppKit = __import__("AppKit") except: + logger.warn('OS X Notification: Cannot import objc or AppKit') return False def swizzle(self, cls, SEL, func): - old_IMP = cls.instanceMethodForSelector_(SEL) + old_IMP = getattr(cls, SEL, None) + if old_IMP is None: + old_IMP = cls.instanceMethodForSelector_(SEL) def wrapper(self, *args, **kwargs): return func(self, old_IMP, *args, **kwargs) - new_IMP = self.objc.selector(wrapper, selector=old_IMP.selector, - signature=old_IMP.signature) - self.objc.classAddMethod(cls, SEL, new_IMP) + + new_IMP = self.objc.selector( + wrapper, + selector=old_IMP.selector, + signature=old_IMP.signature + ) + self.objc.classAddMethod(cls, SEL.encode(), new_IMP) def notify(self, title, subtitle=None, text=None, sound=True, image=None): try: - self.swizzle(self.objc.lookUpClass('NSBundle'), - b'bundleIdentifier', - self.swizzled_bundleIdentifier) + self.swizzle( + self.objc.lookUpClass('NSBundle'), + 'bundleIdentifier', + self.swizzled_bundleIdentifier + ) NSUserNotification = self.objc.lookUpClass('NSUserNotification') NSUserNotificationCenter = self.objc.lookUpClass('NSUserNotificationCenter')