| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /*
- * Copyright (c) 2013-2015 by appPlant UG. All rights reserved.
- *
- * @APPPLANT_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apache License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://opensource.org/licenses/Apache-2.0/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPPLANT_LICENSE_HEADER_END@
- */
- #import "APPLocalNotificationOptions.h"
- // Default sound ressource path
- NSString* const DEFAULT_SOUND = @"res://platform_default";
- @interface APPLocalNotificationOptions ()
- // The dictionary which contains all notification properties
- @property(readwrite, assign) NSDictionary* dict;
- @end
- @implementation APPLocalNotificationOptions
- @synthesize dict;
- #pragma mark -
- #pragma mark Initialization
- /**
- * Initialize the object with the given options when calling on JS side:
- * notification.local.add(options)
- */
- - (id) initWithDict:(NSDictionary*)dictionary
- {
- self = [super init];
- self.dict = dictionary;
- return self;
- }
- #pragma mark -
- #pragma mark Attributes
- /**
- * The notification's ID.
- */
- - (NSString*) id
- {
- return [dict objectForKey:@"id"];
- }
- /**
- * The notification's title.
- */
- - (NSString*) title
- {
- return [dict objectForKey:@"title"];
- }
- /**
- * The notification's message.
- */
- - (NSString*) text
- {
- return [dict objectForKey:@"text"];
- }
- /**
- * The notification's badge number.
- */
- - (NSInteger) badgeNumber
- {
- return [[dict objectForKey:@"badge"] intValue];
- }
- #pragma mark -
- #pragma mark Complex Attributes
- /**
- * The notification's alert body.
- */
- - (NSString*) alertBody
- {
- NSString* title = [self title];
- NSString* msg = [self text];
- NSString* alertBody = msg;
- if (![self stringIsNullOrEmpty:title])
- {
- alertBody = [NSString stringWithFormat:@"%@\n%@",
- title, msg];
- }
- return alertBody;
- }
- /**
- * The notification's sound path.
- */
- - (NSString*) soundName
- {
- NSString* path = [dict objectForKey:@"sound"];
- if ([self stringIsNullOrEmpty:path])
- return NULL;
- if ([path isEqualToString:DEFAULT_SOUND])
- return UILocalNotificationDefaultSoundName;
- if ([path hasPrefix:@"file:/"])
- return [self soundNameForAsset:path];
- if ([path hasPrefix:@"res:"])
- return [self soundNameForResource:path];
- return NULL;
- }
- /**
- * The notification's fire date.
- */
- - (NSDate*) fireDate
- {
- double timestamp = [[dict objectForKey:@"at"]
- doubleValue];
- return [NSDate dateWithTimeIntervalSince1970:timestamp];
- }
- /**
- * The notification's repeat interval.
- */
- - (NSCalendarUnit) repeatInterval
- {
- NSString* interval = [dict objectForKey:@"every"];
- if ([self stringIsNullOrEmpty:interval]) {
- return NSCalendarUnitEra;
- }
- else if ([interval isEqualToString:@"second"]) {
- return NSCalendarUnitSecond;
- }
- else if ([interval isEqualToString:@"minute"]) {
- return NSCalendarUnitMinute;
- }
- else if ([interval isEqualToString:@"hour"]) {
- return NSCalendarUnitHour;
- }
- else if ([interval isEqualToString:@"day"]) {
- return NSCalendarUnitDay;
- }
- else if ([interval isEqualToString:@"week"]) {
- return NSCalendarUnitWeekOfYear;
- }
- else if ([interval isEqualToString:@"month"]) {
- return NSCalendarUnitMonth;
- }
- else if ([interval isEqualToString:@"year"]) {
- return NSCalendarUnitYear;
- }
- return NSCalendarUnitEra;
- }
- #pragma mark -
- #pragma mark Methods
- /**
- * The notification's user info dict.
- */
- - (NSDictionary*) userInfo
- {
- return dict;
- }
- /**
- * If it's a repeating notification.
- */
- - (BOOL) isRepeating
- {
- NSCalendarUnit interval = self.repeatInterval;
- return !(interval == NSCalendarUnitEra || interval == 0);
- }
- #pragma mark -
- #pragma mark Helpers
- /**
- * Convert relative path to valid sound name attribute.
- */
- - (NSString*) soundNameForAsset:(NSString*)path
- {
- return [path stringByReplacingOccurrencesOfString:@"file:/"
- withString:@"www"];
- }
- /**
- * Convert resource path to valid sound name attribute.
- */
- - (NSString*) soundNameForResource:(NSString*)path
- {
- return [path pathComponents].lastObject;
- }
- /**
- * If the string is empty.
- */
- - (BOOL) stringIsNullOrEmpty:(NSString*)str
- {
- if (str == (NSString*)[NSNull null])
- return YES;
- if ([str isEqualToString:@""])
- return YES;
- return NO;
- }
- @end
|