summaryrefslogtreecommitdiff
path: root/www/external/NotificationService.swift
diff options
context:
space:
mode:
Diffstat (limited to 'www/external/NotificationService.swift')
-rw-r--r--www/external/NotificationService.swift109
1 files changed, 0 insertions, 109 deletions
diff --git a/www/external/NotificationService.swift b/www/external/NotificationService.swift
deleted file mode 100644
index 1fa81558..00000000
--- a/www/external/NotificationService.swift
+++ /dev/null
@@ -1,109 +0,0 @@
-// Credit: https://github.com/phonegap/phonegap-plugin-push/issues/1347#issuecomment-450206184
-import UserNotifications
-
-class NotificationService: UNNotificationServiceExtension {
-
- var contentHandler: ((UNNotificationContent) -> Void)?
- var bestAttemptContent: UNMutableNotificationContent?
-
- override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
- self.contentHandler = contentHandler
- self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
- guard let content = bestAttemptContent else {
- #if DEBUG
- exitGracefully("bestAttemptContent not a UNMutableNotificationContent")
- #endif
- return
- }
-
- DispatchQueue.main.async { [weak self] in
- let userInfo: [AnyHashable: Any] = request.content.userInfo
- content.attachments = self?.attachmentsFor(userInfo) ?? []
- guard let copy = self?.bestAttemptContent else {
- #if DEBUG
- self?.exitGracefully("bestAttemptContent is nil")
- #endif
- return
- }
- contentHandler(copy)
- }
- }
-
- override func serviceExtensionTimeWillExpire() {
- if let contentHandler = contentHandler, let content = self.bestAttemptContent {
- contentHandler(content)
- }
- }
-
- /// Helper function to extract Attachments from an userInfo object
- ///
- /// - Attribute userInfo: The user info extracted from the notification,
- /// which should contain one of the available keys to create
- /// a rich push notification.
- private func attachmentsFor(_ userInfo: [AnyHashable: Any]) -> [UNNotificationAttachment] {
- if let attachmentURLString = userInfo["image_url_png"] as? String {
- guard let attachmentURL = URL(string: attachmentURLString),
- let imageData = try? Data(contentsOf: attachmentURL),
- let attachment = self.save("image.png", data: imageData, options: nil) else {
- #if DEBUG
- self.exitGracefully("PNG was not saved properly")
- #endif
- return []
- }
- return [attachment]
- } else if let attachmentURLString = userInfo["image_url_jpg"] as? String {
- guard let attachmentURL = URL(string: attachmentURLString),
- let imageData = try? Data(contentsOf: attachmentURL),
- let attachment = self.save("image.jpg", data: imageData, options: nil) else {
- #if DEBUG
- self.exitGracefully("JPG was not saved properly")
- #endif
- return []
- }
- return [attachment]
- } else if let attachmentURLString = userInfo["image_url_gif"] as? String {
- guard let attachmentURL = URL(string: attachmentURLString),
- let imageData = try? Data(contentsOf: attachmentURL),
- let attachment = self.save("image.gif", data: imageData, options: nil) else {
- #if DEBUG
- self.exitGracefully("GIF was not saved properly")
- #endif
- return []
- }
- return [attachment]
- }
-
- return []
- }
-
- /// Save data object onto disk and return an optional attachment linked to this path.
- ///
- /// - Attributes:
- /// - identifier: The unique identifier of the attachment.
- /// Use this string to identify the attachment later. If you specify an
- /// empty string, this method creates a unique identifier string for you.
- /// - data: The data stored onto disk.
- /// - options: A dictionary of options related to the attached file.
- /// Use the options to specify meta information about the attachment,
- /// such as the clipping rectangle to use for the resulting thumbnail.
- private func save(_ identifier: String, data: Data, options: [AnyHashable: Any]?) -> UNNotificationAttachment? {
- // Create paths
- let directory = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString, isDirectory: true)
- let fileURL = directory.appendingPathComponent(identifier)
- // Write data on disk
- try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true, attributes: nil)
- try? data.write(to: fileURL, options: [])
- // Create Notification attachment
- return try? UNNotificationAttachment(identifier: identifier, url: fileURL, options: options)
- }
-
- /// Something went wrong, so maybe we want to clean up and present a fallback to the user.
- ///
- /// - Attribute reason: The reason why something went wrong.
- private func exitGracefully(_ reason: String = "") {
- guard let copy = bestAttemptContent?.mutableCopy() as? UNMutableNotificationContent else { return }
- copy.title = reason
- contentHandler?(copy)
- }
-
-}