Merge pull request #50 from SimpleHQ/ios-url-support

updated fix URL encoding errors on iOS
This commit is contained in:
pwlin 2015-11-27 21:56:16 +01:00
commit 352c3b3072

View File

@ -27,58 +27,55 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#import <MobileCoreServices/MobileCoreServices.h> #import <MobileCoreServices/MobileCoreServices.h>
@implementation FileOpener2 @implementation FileOpener2
@synthesize controller = docController;
- (void) open: (CDVInvokedUrlCommand*)command { - (void) open: (CDVInvokedUrlCommand*)command {
NSString *path = [[command.arguments objectAtIndex:0] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *path = command.arguments[0];
//NSString *uti = [command.arguments objectAtIndex:1]; NSString *uti = command.arguments[1];
if (!uti || (NSNull*)uti == [NSNull null]) {
NSArray *dotParts = [path componentsSeparatedByString:@"."];
NSString *fileExt = [dotParts lastObject];
uti = (__bridge NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExt, NULL);
}
CDVViewController* cont = (CDVViewController*)[ super viewController ]; CDVViewController* cont = (CDVViewController*)[ super viewController ];
NSArray *dotParts = [path componentsSeparatedByString:@"."]; dispatch_async(dispatch_get_main_queue(), ^{
NSString *fileExt = [dotParts lastObject]; // TODO: test if this is a URI or a path
//NSString *fileExt = [[dotparts lastObject] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *fileURL = [NSURL URLWithString:path];
NSString *uti = (__bridge NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExt, NULL);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//NSLog(@"path %@, uti:%@", path, uti);
NSURL *fileURL = nil;
//fileURL = [NSURL URLWithString:path];
fileURL = [NSURL URLWithString:path];
//NSLog(@"%@",fileURL);
localFile = fileURL.path; localFile = fileURL.path;
dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"looking for file at %@", fileURL);
NSFileManager *fm = [NSFileManager defaultManager];
if(![fm fileExistsAtPath:localFile]) {
NSDictionary *jsonObj = @{@"status" : @"9",
@"message" : @"File does not exist"};
CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
messageAsDictionary:jsonObj];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
return;
}
docController = [UIDocumentInteractionController interactionControllerWithURL:fileURL]; self.controller = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
docController.delegate = self; self.controller.delegate = self;
docController.UTI = uti; self.controller.UTI = uti;
CGRect rect = CGRectMake(0, 0, 1000.0f, 150.0f); CGRect rect = CGRectMake(0, 0, 1000.0f, 150.0f);
CDVPluginResult* pluginResult = nil; CDVPluginResult* pluginResult = nil;
BOOL wasOpened = [docController presentOptionsMenuFromRect:rect inView:cont.view animated:NO]; BOOL wasOpened = [self.controller presentOptionsMenuFromRect:rect inView:cont.view animated:NO];
//presentOptionsMenuFromRect
//presentOpenInMenuFromRect
if(wasOpened) { if(wasOpened) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: @""]; pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: @""];
//NSLog(@"Success");
} else { } else {
NSDictionary *jsonObj = [ [NSDictionary alloc] NSDictionary *jsonObj = @{@"status" : @"9",
initWithObjectsAndKeys : @"message" : @"Could not handle UTI"};
@"9", @"status", pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
@"Could not handle UTI", @"message", messageAsDictionary:jsonObj];
nil
];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:jsonObj];
//NSLog(@"Could not handle UTI");
} }
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}); });
});
} }
@end @end