| /* |
| 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 <WebKit/WebKit.h> |
| #import "CDVInvokedUrlCommand.h" |
| |
| @implementation CDVInvokedUrlCommand |
| |
| @synthesize arguments = _arguments; |
| @synthesize callbackId = _callbackId; |
| @synthesize cmdClassName = _cmdClassName; |
| @synthesize methodName = _methodName; |
| |
| + (CDVInvokedUrlCommand*) commandFromJson:(NSArray*) jsonEntry { |
| return [[CDVInvokedUrlCommand alloc] initFromJson:jsonEntry]; |
| } |
| |
| - (id) initFromJson:(NSArray*) jsonEntry { |
| id tmp = jsonEntry[0]; |
| NSString* callbackId = tmp == [NSNull null] ? nil : tmp; |
| NSString* className = jsonEntry[1]; |
| NSString* methodName = jsonEntry[2]; |
| NSMutableArray* arguments = jsonEntry[3]; |
| |
| return [self initWithArguments:arguments |
| callbackId:callbackId |
| className:className |
| methodName:methodName]; |
| } |
| |
| - (id) initWithArguments:(NSArray*) arguments |
| callbackId:(NSString*) callbackId |
| className:(NSString*) className |
| methodName:(NSString*) methodName { |
| self = [super init]; |
| if (self != nil) { |
| _arguments = arguments; |
| _callbackId = callbackId; |
| _cmdClassName = className; |
| _methodName = methodName; |
| } |
| [self massageArguments]; |
| return self; |
| } |
| |
| - (void) massageArguments { |
| NSMutableArray* newArgs = nil; |
| |
| for (NSUInteger i = 0, count = [_arguments count]; i < count; ++i) { |
| id arg = _arguments[i]; |
| if (![arg isKindOfClass:[NSDictionary class]]) { |
| continue; |
| } |
| NSDictionary* dict = arg; |
| NSString* type = dict[@"CDVType"]; |
| if (!type || ![type isEqualToString:@"ArrayBuffer"]) { |
| continue; |
| } |
| NSString* data = dict[@"data"]; |
| if (!data) { |
| continue; |
| } |
| if (newArgs == nil) { |
| newArgs = [NSMutableArray arrayWithArray:_arguments]; |
| _arguments = newArgs; |
| } |
| newArgs[i] = [[NSData alloc] initWithBase64EncodedString:data options:0]; |
| } |
| } |
| |
| - (id) argumentAtIndex:(NSUInteger) index { |
| return [self argumentAtIndex:index withDefault:nil]; |
| } |
| |
| - (id) argumentAtIndex:(NSUInteger) index withDefault:(id) defaultValue { |
| return [self argumentAtIndex:index withDefault:defaultValue andClass:nil]; |
| } |
| |
| - (id) argumentAtIndex:(NSUInteger) index withDefault:(id) defaultValue andClass:(Class) aClass { |
| if (index >= [_arguments count]) { |
| return defaultValue; |
| } |
| id ret = _arguments[index]; |
| if (ret == [NSNull null] || ret == [WebUndefined undefined]) { |
| ret = defaultValue; |
| } |
| if ((aClass != nil) && ![ret isKindOfClass:aClass]) { |
| ret = defaultValue; |
| } |
| return ret; |
| } |
| |
| @end |