from UserNotifications import ( UNAuthorizationOptionAlert, UNMutableNotificationContent, UNNotificationAttachment, UNNotificationRequest, UNUserNotificationCenter, ) from Foundation import NSURL from radiotrack import RadioTrack class UserNotification: def __init__(self): self._center = UNUserNotificationCenter.currentNotificationCenter() self._center.requestAuthorizationWithOptions_completionHandler_( UNAuthorizationOptionAlert, self._auth_callback ) def create_notification( self, title=None, subtitle=None, body=None, attachments=None ): content = UNMutableNotificationContent.alloc().init() content.setTitle_(title) content.setSubtitle_(subtitle) content.setBody_(body) if attachments: content.setAttachments_(attachments) request = UNNotificationRequest.requestWithIdentifier_content_trigger_( "top2000_id", content, None ) self._center.addNotificationRequest_withCompletionHandler_( request, self._notification_callback ) content.dealloc() @staticmethod def _auth_callback(granted, err): if not granted: print(granted, err) @staticmethod def _notification_callback(err): if err: print(err) class SongNotification(UserNotification): def __init__(self): super().__init__() def notify_song(self, song: RadioTrack): url = NSURL.URLWithString_(f"file://{song.cover_path}") err = None atachement = ( UNNotificationAttachment.attachmentWithIdentifier_URL_options_error_( "", url, None, err, ) )[0] if err: print(err) atachement = None self.create_notification( song.title, song.artist, attachments=[atachement], )