Selaa lähdekoodia

Schedule multiple notifications at once (iOS)

Sebastián Katzer 11 vuotta sitten
vanhempi
commit
cbe4f5baf4
3 muutettua tiedostoa jossa 37 lisäystä ja 35 poistoa
  1. 1 1
      CHANGELOG.md
  2. 13 16
      src/ios/APPLocalNotification.m
  3. 23 18
      www/local-notification.js

+ 1 - 1
CHANGELOG.md

@@ -9,7 +9,7 @@
 - [enhancement:] Scope parameter for `isScheduled` and `getScheduledIds`
 - [enhancement:] Callbacks for `add`, `cancel` & `cancelAll`
 - [enhancement:] `image:` accepts remote URLs and local URIs (Android)
-- [enhancement:] Schedule multiple notifications at once (Android)
+- [enhancement:] Schedule multiple notifications at once
 - [enhancement:] Cancel multiple notifications at once
 - [enhancement:] Clear multiple notifications at once (Android)
 - [enhancement:] `clear` & `clearAll` methods (Android)

+ 13 - 16
src/ios/APPLocalNotification.m

@@ -62,41 +62,38 @@
 }
 
 /**
- * Schedule a new local notification.
+ * Schedule a set of notifications.
  *
  * @param properties
- *      A dict of properties
+ *      A dict of properties for each notification
  */
 - (void) add:(CDVInvokedUrlCommand*)command
 {
     [self.commandDelegate runInBackground:^{
-        NSDictionary* options = [[command arguments]
-                                 objectAtIndex:0];
+        for (NSDictionary* options in command.arguments) {
+            UILocalNotification* notification;
 
-        UILocalNotification* notification;
+            notification = [[UILocalNotification alloc]
+                            initWithOptions:options];
 
-        notification = [[UILocalNotification alloc]
-                        initWithOptions:options];
+            [self scheduleLocalNotification:notification];
+            [self fireEvent:@"add" localNotification:notification];
+        }
 
-        [self scheduleLocalNotification:notification];
-        [self fireEvent:@"add" localNotification:notification];
         [self execCallback:command];
     }];
 }
 
 /**
- * Cancels a given local notification.
+ * Cancel a set of notifications.
  *
- * @param id
- *      The ID of the local notification
+ * @param ids
+ *      The IDs of the notifications
  */
 - (void) cancel:(CDVInvokedUrlCommand*)command
 {
     [self.commandDelegate runInBackground:^{
-        NSArray* ids = [[command arguments]
-                        objectAtIndex:0];
-
-        for (NSString* id in ids) {
+        for (NSString* id in command.arguments) {
             UILocalNotification* notification;
 
             notification = [[UIApplication sharedApplication]

+ 23 - 18
www/local-notification.js

@@ -104,29 +104,28 @@ exports.setDefaults = function (newDefaults) {
  *      A function to be called after the notification has been canceled
  * @param {Object} scope
  *      The scope for the callback function
- *
- * @return {Number}
- *      The notification's ID
  */
 exports.add = function (props, callback, scope) {
-    var options = this.mergeWithDefaults(props),
-        fn      = this.createCallbackFn(callback, scope);
+    this.registerPermission(function(granted) {
 
-    this.convertOptions(options);
+        if (!granted)
+            return;
 
-    if (['WinCE', 'Win32NT'].indexOf(device.platform) > -1) {
-        fn = function (cmd) {
-            eval(cmd);
-        };
-    }
+        var notifications = Array.isArray(props) ? props : [props];
 
-    this.registerPermission(function(granted) {
-        if (granted) {
-            this.exec('add', options, callback, scope);
+        for (var i = 0; i < notifications.length; i++) {
+            var properties = notifications[i];
+
+            this.mergeWithDefaults(properties);
+            this.convertProperties(properties);
         }
-    }, this);
 
-    return options.id;
+        if (device.platform != 'iOS') {
+            notifications = notifications[0];
+        }
+
+        this.exec('add', notifications, callback, scope);
+    }, this);
 };
 
 /**
@@ -519,7 +518,7 @@ exports.mergeWithDefaults = function (options) {
  * @retrun {Object}
  *      The converted property list
  */
-exports.convertOptions = function (options) {
+exports.convertProperties = function (options) {
     if (options.id) {
         options.id = options.id.toString();
     }
@@ -618,7 +617,13 @@ exports.createCallbackFn = function (callbackFn, scope) {
  */
 exports.exec = function (action, args, callback, scope) {
     var fn = this.createCallbackFn(callback, scope),
-        params = args ? [args] : [];
+        params = [];
+
+    if (Array.isArray(args)) {
+        params = args;
+    } else if (args) {
+        params.push(args);
+    }
 
     exec(fn, null, 'LocalNotification', action, params);
 };