def notification(title, subtitle, message, data=None, sound=True, image=None): """Send a notification to Notification Center (Mac OS X 10.8+). If running on a version of Mac OS X that does not support notifications, a ``RuntimeError`` will be raised. Apple says, "The userInfo content must be of reasonable serialized size (less than 1k) or an exception will be thrown." So don't do that! :param title: text in a larger font. :param subtitle: text in a smaller font below the `title`. :param message: text representing the body of the notification below the `subtitle`. :param data: will be passed to the application's "notification center" (see :func:`rumps.notifications`) when this notification is clicked. :param sound: whether the notification should make a noise when it arrives. """ if not _NOTIFICATIONS: raise RuntimeError('Mac OS X 10.8+ is required to send notifications') if data is not None and not isinstance(data, Mapping): raise TypeError('notification data must be a mapping') _require_string_or_none(title, subtitle, message) notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) notification.setUserInfo_({} if data is None else data) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") if image != None: notification.setContentImage_(image) notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def notification(title, subtitle, message, data=None, sound=True): """Send a notification to Notification Center (OS X 10.8+). If running on a version of macOS that does not support notifications, a ``RuntimeError`` will be raised. Apple says, "The userInfo content must be of reasonable serialized size (less than 1k) or an exception will be thrown." So don't do that! :param title: text in a larger font. :param subtitle: text in a smaller font below the `title`. :param message: text representing the body of the notification below the `subtitle`. :param data: will be passed to the application's "notification center" (see :func:`rumps.notifications`) when this notification is clicked. :param sound: whether the notification should make a noise when it arrives. """ if not _NOTIFICATIONS: raise RuntimeError('OS X 10.8+ is required to send notifications') if data is not None and not isinstance(data, Mapping): raise TypeError('notification data must be a mapping') _require_string_or_none(title, subtitle, message) notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) notification.setUserInfo_({} if data is None else data) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) notification_center = _default_user_notification_center() notification_center.scheduleNotification_(notification)
def _pyobjc_notify(message, title=None, subtitle=None, appIcon=None, contentImage=None, open_URL=None, delay=0, sound=False): swizzle(objc.lookUpClass('NSBundle'), b'bundleIdentifier', swizzled_bundleIdentifier) notification = NSUserNotification.alloc().init() notification.setInformativeText_(message) if title: notification.setTitle_(title) if subtitle: notification.setSubtitle_(subtitle) if appIcon: url = NSURL.alloc().initWithString_(appIcon) image = NSImage.alloc().initWithContentsOfURL_(url) notification.set_identityImage_(image) if contentImage: url = NSURL.alloc().initWithString_(contentImage) image = NSImage.alloc().initWithContentsOfURL_(url) notification.setContentImage_(image) if sound: notification.setSoundName_( "NSUserNotificationDefaultSoundName") notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_(delay, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_( notification)
def notify(title, subtitle, info_text, delay=0, sound=False, userInfo={}): """ Python method to show a desktop notification on Mountain Lion. Where: title: Title of notification subtitle: Subtitle of notification info_text: Informative text of notification delay: Delay (in seconds) before showing the notification sound: Play the default notification sound userInfo: a dictionary that can be used to handle clicks in your app's applicationDidFinishLaunching:aNotification method """ from Foundation import NSDate from objc import lookUpClass NSUserNotification = lookUpClass('NSUserNotification') NSUserNotificationCenter = lookUpClass('NSUserNotificationCenter') notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(info_text) notification.setUserInfo_(userInfo) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(delay, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def send_OS_X_notify(title, content, img_path): '''发送Mac桌面通知''' def swizzle(cls, SEL, func): old_IMP = cls.instanceMethodForSelector_(SEL) def wrapper(self, *args, **kwargs): return func(self, old_IMP, *args, **kwargs) new_IMP = objc.selector(wrapper, selector=old_IMP.selector, signature=old_IMP.signature) objc.classAddMethod(cls, SEL, new_IMP) def swizzled_bundleIdentifier(self, original): # Use iTunes icon for notification return 'com.apple.itunes' swizzle(objc.lookUpClass('NSBundle'), b'bundleIdentifier', swizzled_bundleIdentifier) notification = NSUserNotification.alloc().init() notification.setInformativeText_('') notification.setTitle_(title.decode('utf-8')) notification.setSubtitle_(content.decode('utf-8')) notification.setInformativeText_('') notification.setUserInfo_({}) if img_path is not None: image = NSImage.alloc().initWithContentsOfFile_(img_path) # notification.setContentImage_(image) notification.set_identityImage_(image) notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date()) ) NSUserNotificationCenter.defaultUserNotificationCenter().\ scheduleNotification_(notification)
def _pyobjc_notify(message, title=None, subtitle=None, appIcon=None, contentImage=None, open_URL=None, delay=0, sound=False): swizzle(objc.lookUpClass('NSBundle'), b'bundleIdentifier', swizzled_bundleIdentifier) notification = NSUserNotification.alloc().init() notification.setInformativeText_(message) if title: notification.setTitle_(title) if subtitle: notification.setSubtitle_(subtitle) if appIcon: url = NSURL.alloc().initWithString_(appIcon) image = NSImage.alloc().initWithContentsOfURL_(url) notification.set_identityImage_(image) if contentImage: url = NSURL.alloc().initWithString_(contentImage) image = NSImage.alloc().initWithContentsOfURL_(url) notification.setContentImage_(image) if sound: notification.setSoundName_( "NSUserNotificationDefaultSoundName") notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_( delay, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter( ).scheduleNotification_(notification)
def send_OS_X_notify(title, content, img_path): '''发送Mac桌面通知''' def swizzle(cls, SEL, func): old_IMP = cls.instanceMethodForSelector_(SEL) def wrapper(self, *args, **kwargs): return func(self, old_IMP, *args, **kwargs) new_IMP = objc.selector(wrapper, selector=old_IMP.selector, signature=old_IMP.signature) objc.classAddMethod(cls, SEL, new_IMP) def swizzled_bundleIdentifier(self, original): # Use iTunes icon for notification return 'com.apple.itunes' swizzle(objc.lookUpClass('NSBundle'), b'bundleIdentifier', swizzled_bundleIdentifier) notification = NSUserNotification.alloc().init() notification.setInformativeText_('') notification.setTitle_(title.decode('utf-8')) notification.setSubtitle_(content.decode('utf-8')) notification.setInformativeText_('') notification.setUserInfo_({}) if img_path is not None: image = NSImage.alloc().initWithContentsOfFile_(img_path) # notification.setContentImage_(image) notification.set_identityImage_(image) notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().\ scheduleNotification_(notification)
def alert(self, title, subtitle, message, delay=0, sound=False, userInfo={}): self.notification.setTitle_(title) self.notification.setSubtitle_(subtitle) self.notification.setInformativeText_(message) self.notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(delay, NSDate.date())) # self.notification.setUserInfo_(userInfo) if sound: self.notification.setSoundName_("NSUserNotificationDefaultSoundName") NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(self.notification)
def notify(title, subtitle, msg_text, sound=False): # Function to generate OS X notification. NSUserNotification = lookUpClass("NSUserNotification") NSUserNotificationCenter = lookUpClass("NSUserNotificationCenter") notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(msg_text) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def notification(title, subtitle, message, data=None, sound=True): """ Notification sender. Apple says, "The userInfo content must be of reasonable serialized size (less than 1k) or an exception will be thrown." So don't do that! """ if data is not None and not isinstance(data, Mapping): raise TypeError('notification data must be a mapping') notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) notification.setUserInfo_({} if data is None else data) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def notification(title, subtitle, message, data=None, sound=True): """ Notification sender. Apple says, "The userInfo content must be of reasonable serialized size (less than 1k) or an exception will be thrown." So don't do that! """ if data is not None and not isinstance(data, Mapping): raise TypeError('notification data must be a mapping') notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) notification.setUserInfo_({} if data is None else data) if sound: notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setDeliveryDate_(NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date())) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def send_OS_X_notify(title, content, img_path): '''发送Mac桌面通知''' try: from Foundation import ( NSDate, NSUserNotification, NSUserNotificationCenter) from AppKit import NSImage import objc except ImportError: logger.info('failed to init OSX notify!') return def swizzle(cls, SEL, func): 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 = objc.selector(wrapper, selector=old_IMP.selector, signature=old_IMP.signature) objc.classAddMethod(cls, SEL.encode(), new_IMP) def swizzled_bundleIdentifier(self, original): # Use iTunes icon for notification return 'com.apple.itunes' swizzle(objc.lookUpClass('NSBundle'), 'bundleIdentifier', swizzled_bundleIdentifier) notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(content) notification.setInformativeText_('') notification.setUserInfo_({}) if img_path is not None: image = NSImage.alloc().initWithContentsOfFile_(img_path) # notification.setContentImage_(image) notification.set_identityImage_(image) notification.setDeliveryDate_( NSDate.dateWithTimeInterval_sinceDate_(0, NSDate.date()) ) NSUserNotificationCenter.defaultUserNotificationCenter().\ scheduleNotification_(notification) logger.info('send notify success!')