123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-
- #import "CDVPluginResult.h"
- #import "CDVJSON_private.h"
- #import "CDVDebug.h"
-
- // This exists to preserve compatibility with early Swift plugins, who are
- // using CDVCommandStatus as ObjC-style constants rather than as Swift enum
- // values.
- // These constants alias the enum values back to their previous names.
- #define SWIFT_ENUM_COMPAT_HACK(enumVal) const CDVCommandStatus SWIFT_##enumVal NS_SWIFT_NAME(enumVal) = enumVal
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_NO_RESULT);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_OK);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_CLASS_NOT_FOUND_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_ILLEGAL_ACCESS_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_INSTANTIATION_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_MALFORMED_URL_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_IO_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_INVALID_ACTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_JSON_EXCEPTION);
- SWIFT_ENUM_COMPAT_HACK(CDVCommandStatus_ERROR);
- #undef SWIFT_ENUM_COMPAT_HACK
-
- @interface CDVPluginResult ()
-
- - (CDVPluginResult*)initWithStatus:(CDVCommandStatus)statusOrdinal message:(id)theMessage;
-
- @end
-
- @implementation CDVPluginResult
- @synthesize status, message, keepCallback, associatedObject;
-
- static NSArray* org_apache_cordova_CommandStatusMsgs;
-
- id messageFromArrayBuffer(NSData* data)
- {
- return @{
- @"CDVType" : @"ArrayBuffer",
- @"data" :[data base64EncodedStringWithOptions:0]
- };
- }
-
- id massageMessage(id message)
- {
- if ([message isKindOfClass:[NSData class]]) {
- return messageFromArrayBuffer(message);
- }
- return message;
- }
-
- id messageFromMultipart(NSArray* theMessages)
- {
- NSMutableArray* messages = [NSMutableArray arrayWithArray:theMessages];
-
- for (NSUInteger i = 0; i < messages.count; ++i) {
- [messages replaceObjectAtIndex:i withObject:massageMessage([messages objectAtIndex:i])];
- }
-
- return @{
- @"CDVType" : @"MultiPart",
- @"messages" : messages
- };
- }
-
- + (void)initialize
- {
- org_apache_cordova_CommandStatusMsgs = [[NSArray alloc] initWithObjects:@"No result",
- @"OK",
- @"Class not found",
- @"Illegal access",
- @"Instantiation error",
- @"Malformed url",
- @"IO error",
- @"Invalid action",
- @"JSON error",
- @"Error",
- nil];
- }
-
- - (CDVPluginResult*)init
- {
- return [self initWithStatus:CDVCommandStatus_NO_RESULT message:nil];
- }
-
- - (CDVPluginResult*)initWithStatus:(CDVCommandStatus)statusOrdinal message:(id)theMessage
- {
- self = [super init];
- if (self) {
- status = @(statusOrdinal);
- message = theMessage;
- keepCallback = [NSNumber numberWithBool:NO];
- }
- return self;
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal
- {
- return [[self alloc] initWithStatus:statusOrdinal message:nil];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsString:(NSString*)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:theMessage];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsArray:(NSArray*)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:theMessage];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsInt:(int)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:[NSNumber numberWithInt:theMessage]];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsNSInteger:(NSInteger)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:[NSNumber numberWithInteger:theMessage]];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsNSUInteger:(NSUInteger)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:[NSNumber numberWithUnsignedInteger:theMessage]];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsDouble:(double)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:[NSNumber numberWithDouble:theMessage]];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsBool:(BOOL)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:[NSNumber numberWithBool:theMessage]];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsDictionary:(NSDictionary*)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:theMessage];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsArrayBuffer:(NSData*)theMessage
- {
- return [[self alloc] initWithStatus:statusOrdinal message:messageFromArrayBuffer(theMessage)];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsMultipart:(NSArray*)theMessages
- {
- return [[self alloc] initWithStatus:statusOrdinal message:messageFromMultipart(theMessages)];
- }
-
- + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageToErrorObject:(int)errorCode
- {
- NSDictionary* errDict = @{@"code" :[NSNumber numberWithInt:errorCode]};
-
- return [[self alloc] initWithStatus:statusOrdinal message:errDict];
- }
-
- - (void)setKeepCallbackAsBool:(BOOL)bKeepCallback
- {
- [self setKeepCallback:[NSNumber numberWithBool:bKeepCallback]];
- }
-
- - (NSString*)argumentsAsJSON
- {
- id arguments = (self.message == nil ? [NSNull null] : self.message);
- NSArray* argumentsWrappedInArray = [NSArray arrayWithObject:arguments];
-
- NSString* argumentsJSON = [argumentsWrappedInArray cdv_JSONString];
-
- argumentsJSON = [argumentsJSON substringWithRange:NSMakeRange(1, [argumentsJSON length] - 2)];
-
- return argumentsJSON;
- }
-
- static BOOL gIsVerbose = NO;
- + (void)setVerbose:(BOOL)verbose
- {
- gIsVerbose = verbose;
- }
-
- + (BOOL)isVerbose
- {
- return gIsVerbose;
- }
-
- @end
|