diff options
author | marinofaggiana <marino@marinofaggiana.com> | 2019-03-27 15:34:49 +0300 |
---|---|---|
committer | marinofaggiana <marino@marinofaggiana.com> | 2019-03-27 15:34:49 +0300 |
commit | 662acf4eaee0a85f63fb4fb22f15624079ff2e99 (patch) | |
tree | 585d8aa4dc887cde61a0d8bb6dbc939d3de69c45 /Notification Service Extension | |
parent | 39aa34fe66db4285e779b44e9a78a5368bb2c761 (diff) |
new push notification
Diffstat (limited to 'Notification Service Extension')
-rwxr-xr-x | Notification Service Extension/NotificationService.swift | 89 | ||||
-rwxr-xr-x | Notification Service Extension/NotificationServiceExtension-Bridging-Header.h | 31 |
2 files changed, 120 insertions, 0 deletions
diff --git a/Notification Service Extension/NotificationService.swift b/Notification Service Extension/NotificationService.swift new file mode 100755 index 000000000..b39d47b5a --- /dev/null +++ b/Notification Service Extension/NotificationService.swift @@ -0,0 +1,89 @@ +// +// NotificationService.swift +// Notification Service Extension +// +// Created by Marino Faggiana on 27/07/18. +// Copyright © 2018 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana <marino.faggiana@nextcloud.com> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// + +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 + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + + bestAttemptContent.title = "" + bestAttemptContent.body = "Nextcloud notification" + + guard let message = bestAttemptContent.userInfo["subject"] else { + contentHandler(bestAttemptContent) + return + } + + for result in NCManageDatabase.sharedInstance.getAllAccount() { + guard let privateKey = CCUtility.getPushNotificationPrivateKey(result.account) else { + continue + } + guard let decryptedMessage = NCPushNotificationEncryption.sharedInstance()?.decryptPushNotification(message as? String, withDevicePrivateKey: privateKey) else { + continue + } + guard let data = decryptedMessage.data(using: .utf8) else { + contentHandler(bestAttemptContent) + return + } + + do { + let json = try JSONSerialization.jsonObject(with: data) as! [String:AnyObject] + if let app = json["app"] as? String { + if app == "spreed" { + bestAttemptContent.title = "Nextcloud Talk" + } else { + bestAttemptContent.title = app.capitalized + } + } + if let subject = json["subject"] as? String { + bestAttemptContent.body = subject + } + } catch let error as NSError { + print("Failed : \(error.localizedDescription)") + } + } + + contentHandler(bestAttemptContent) + } + } + + override func serviceExtensionTimeWillExpire() { + + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + + bestAttemptContent.title = "" + bestAttemptContent.body = "Nextcloud" + + contentHandler(bestAttemptContent) + } + } +} diff --git a/Notification Service Extension/NotificationServiceExtension-Bridging-Header.h b/Notification Service Extension/NotificationServiceExtension-Bridging-Header.h new file mode 100755 index 000000000..fa881e42c --- /dev/null +++ b/Notification Service Extension/NotificationServiceExtension-Bridging-Header.h @@ -0,0 +1,31 @@ +// +// NotificationServiceExtension-Bridging-Header.h +// Nextcloud +// +// Created by Marino Faggiana on 27/07/18. +// Copyright © 2018 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana <marino.faggiana@nextcloud.com> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// + +#import "CCUtility.h" +#import "NCPushNotificationEncryption.h" + +#import "OCActivity.h" +#import "OCUserProfile.h" +#import "OCCapabilities.h" +#import "OCExternalSites.h" +#import "OCSharedDto.h" |