123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /**
- * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
- #import "NCPushNotification.h"
- @implementation NCPushNotification
- NSString * const kNCPNAppKey = @"app";
- NSString * const kNCPNAppIdKey = @"spreed";
- NSString * const kNCPNTypeKey = @"type";
- NSString * const kNCPNSubjectKey = @"subject";
- NSString * const kNCPNIdKey = @"id";
- NSString * const kNCPNNotifIdKey = @"nid";
- NSString * const kNCPNNotifIdsKey = @"nids";
- NSString * const kNCPNTypeCallKey = @"call";
- NSString * const kNCPNTypeRoomKey = @"room";
- NSString * const kNCPNTypeChatKey = @"chat";
- NSString * const kNCPNTypeDeleteKey = @"delete";
- NSString * const kNCPNTypeDeleteAllKey = @"delete-all";
- NSString * const kNCPNTypeDeleteMultipleKey = @"delete-multiple";
- NSString * const kNCPNTypeRecording = @"recording";
- NSString * const kNCPNTypeFederation = @"remote_talk_share";
- NSString * const kNCPNTypeReminder = @"reminder";
- NSString * const kNCPNAppIdAdminNotificationKey = @"admin_notification_talk";
- NSString * const NCPushNotificationJoinChatNotification = @"NCPushNotificationJoinChatNotification";
- NSString * const NCPushNotificationJoinAudioCallAcceptedNotification = @"NCPushNotificationJoinAudioCallAcceptedNotification";
- NSString * const NCPushNotificationJoinVideoCallAcceptedNotification = @"NCPushNotificationJoinVideoCallAcceptedNotification";
- + (instancetype)pushNotificationFromDecryptedString:(NSString *)decryptedString withAccountId:(NSString *)accountId
- {
- if (!decryptedString) {
- return nil;
- }
-
- NSData *data = [decryptedString dataUsingEncoding:NSUTF8StringEncoding];
- id jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
-
- NSString *app = [jsonDict objectForKey:kNCPNAppKey];
- if (![app isEqualToString:kNCPNAppIdKey]) {
- return [self nonTalkPushNotification:jsonDict withAccountId:accountId];
- }
-
- NCPushNotification *pushNotification = [[NCPushNotification alloc] init];
- pushNotification.app = app;
- pushNotification.subject = [jsonDict objectForKey:kNCPNSubjectKey];
- pushNotification.roomToken = [jsonDict objectForKey:kNCPNIdKey];
- pushNotification.notificationId = [[jsonDict objectForKey:kNCPNNotifIdKey] integerValue];
-
- NSString *type = [jsonDict objectForKey:kNCPNTypeKey];
- pushNotification.type = NCPushNotificationTypeUnknown;
- if ([type isEqualToString:kNCPNTypeCallKey]) {
- pushNotification.type = NCPushNotificationTypeCall;
- } else if ([type isEqualToString:kNCPNTypeRoomKey]) {
- pushNotification.type = NCPushNotificationTypeRoom;
- } else if ([type isEqualToString:kNCPNTypeChatKey]) {
- pushNotification.type = NCPushNotificationTypeChat;
- } else if ([type isEqualToString:kNCPNTypeRecording]) {
- pushNotification.type = NCPushNotificationTypeRecording;
- } else if ([type isEqualToString:kNCPNTypeFederation]) {
- pushNotification.type = NCPUshNotificationTypeFederation;
- } else if ([type isEqualToString:kNCPNTypeReminder]) {
- pushNotification.type = NCPushNotificationTypeReminder;
- }
-
- pushNotification.accountId = accountId;
- pushNotification.jsonString = decryptedString;
-
- return pushNotification;
- }
- + (instancetype)nonTalkPushNotification:(id)jsonNotification withAccountId:(NSString *)accountId
- {
- NCPushNotification *pushNotification = [[NCPushNotification alloc] init];
- if ([jsonNotification objectForKey:kNCPNTypeDeleteKey]) {
- pushNotification.notificationId = [[jsonNotification objectForKey:kNCPNNotifIdKey] integerValue];
- pushNotification.type = NCPushNotificationTypeDelete;
- } else if ([jsonNotification objectForKey:kNCPNTypeDeleteAllKey]) {
- pushNotification.type = NCPushNotificationTypeDeleteAll;
- } else if ([jsonNotification objectForKey:kNCPNTypeDeleteMultipleKey]) {
- pushNotification.notificationIds = [jsonNotification objectForKey:kNCPNNotifIdsKey];
- pushNotification.type = NCPushNotificationTypeDeleteMultiple;
- } else {
- NSString *app = [jsonNotification objectForKey:kNCPNAppKey];
-
- if (![app isEqualToString:kNCPNAppIdAdminNotificationKey]) {
- return nil;
- }
-
- pushNotification.subject = [jsonNotification objectForKey:kNCPNSubjectKey];
- pushNotification.notificationId = [[jsonNotification objectForKey:kNCPNNotifIdKey] integerValue];
- pushNotification.type = NCPushNotificationTypeAdminNotification;
- }
-
- pushNotification.accountId = accountId;
- return pushNotification;
- }
- - (NSString *)bodyForRemoteAlerts
- {
- switch (_type) {
- case NCPushNotificationTypeCall:
- return [NSString stringWithFormat:@"📞 %@", _subject];
- break;
- case NCPushNotificationTypeRoom:
- return [NSString stringWithFormat:@"🔔 %@", _subject];
- break;
- case NCPushNotificationTypeChat:
- return [NSString stringWithFormat:@"💬 %@", _subject];
- break;
- default:
- return _subject;
- break;
- }
- }
- @end
|