10f9680e4SŁukasz Kosmaty// Copyright 2018-present 650 Industries. All rights reserved.
20f9680e4SŁukasz Kosmaty
30f9680e4SŁukasz Kosmaty#import "EXScopedNotificationSchedulerModule.h"
40f9680e4SŁukasz Kosmaty#import "EXScopedNotificationsUtils.h"
5f6562485SCharlie Cruzan#import "EXScopedNotificationSerializer.h"
6d044143fSCharlie Cruzan#import "EXScopedNotificationsUtils.h"
70f9680e4SŁukasz Kosmaty
80f9680e4SŁukasz Kosmaty@interface EXScopedNotificationSchedulerModule ()
90f9680e4SŁukasz Kosmaty
10167fd314SWill Schurman@property (nonatomic, strong) NSString *scopeKey;
110f9680e4SŁukasz Kosmaty
120f9680e4SŁukasz Kosmaty@end
130f9680e4SŁukasz Kosmaty
140f9680e4SŁukasz Kosmaty@implementation EXScopedNotificationSchedulerModule
150f9680e4SŁukasz Kosmaty
16167fd314SWill Schurman- (instancetype)initWithScopeKey:(NSString *)scopeKey
170f9680e4SŁukasz Kosmaty{
180f9680e4SŁukasz Kosmaty  if (self = [super init]) {
19167fd314SWill Schurman    _scopeKey = scopeKey;
200f9680e4SŁukasz Kosmaty  }
210f9680e4SŁukasz Kosmaty
220f9680e4SŁukasz Kosmaty  return self;
230f9680e4SŁukasz Kosmaty}
240f9680e4SŁukasz Kosmaty
25d044143fSCharlie Cruzan- (UNNotificationRequest *)buildNotificationRequestWithIdentifier:(NSString *)identifier
26d044143fSCharlie Cruzan                                                          content:(NSDictionary *)contentInput
27d044143fSCharlie Cruzan                                                          trigger:(NSDictionary *)triggerInput
28d044143fSCharlie Cruzan{
29d044143fSCharlie Cruzan  NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier
30167fd314SWill Schurman                                                                    forExperience:_scopeKey];
31d044143fSCharlie Cruzan  return [super buildNotificationRequestWithIdentifier:scopedIdentifier content:contentInput trigger:triggerInput];
32d044143fSCharlie Cruzan}
33d044143fSCharlie Cruzan
340f9680e4SŁukasz Kosmaty- (NSArray * _Nonnull)serializeNotificationRequests:(NSArray<UNNotificationRequest *> * _Nonnull) requests;
350f9680e4SŁukasz Kosmaty{
360f9680e4SŁukasz Kosmaty  NSMutableArray *serializedRequests = [NSMutableArray new];
370f9680e4SŁukasz Kosmaty  for (UNNotificationRequest *request in requests) {
38167fd314SWill Schurman    if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:_scopeKey]) {
39f6562485SCharlie Cruzan      [serializedRequests addObject:[EXScopedNotificationSerializer serializedNotificationRequest:request]];
400f9680e4SŁukasz Kosmaty    }
410f9680e4SŁukasz Kosmaty  }
420f9680e4SŁukasz Kosmaty  return serializedRequests;
430f9680e4SŁukasz Kosmaty}
440f9680e4SŁukasz Kosmaty
45d044143fSCharlie Cruzan
46*efd75decSTomasz Sapeta- (void)cancelNotification:(NSString *)identifier resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject
470f9680e4SŁukasz Kosmaty{
48d044143fSCharlie Cruzan  NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier
49167fd314SWill Schurman                                                                    forExperience:_scopeKey];
50d044143fSCharlie Cruzan  [super cancelNotification:scopedIdentifier resolve:resolve rejecting:reject];
510f9680e4SŁukasz Kosmaty}
520f9680e4SŁukasz Kosmaty
53*efd75decSTomasz Sapeta- (void)cancelAllNotificationsWithResolver:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject
540f9680e4SŁukasz Kosmaty{
55167fd314SWill Schurman  __block NSString *scopeKey = _scopeKey;
560f9680e4SŁukasz Kosmaty  [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray<UNNotificationRequest *> * _Nonnull requests) {
570f9680e4SŁukasz Kosmaty    NSMutableArray<NSString *> *toRemove = [NSMutableArray new];
580f9680e4SŁukasz Kosmaty    for (UNNotificationRequest *request in requests) {
59167fd314SWill Schurman      if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:scopeKey]) {
600f9680e4SŁukasz Kosmaty        [toRemove addObject:request.identifier];
610f9680e4SŁukasz Kosmaty      }
620f9680e4SŁukasz Kosmaty    }
630f9680e4SŁukasz Kosmaty    [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:toRemove];
640f9680e4SŁukasz Kosmaty    resolve(nil);
650f9680e4SŁukasz Kosmaty  }];
660f9680e4SŁukasz Kosmaty}
670f9680e4SŁukasz Kosmaty
680f9680e4SŁukasz Kosmaty@end
69