summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios')
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.h (renamed from StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h)2
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.m (renamed from StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m)4
-rw-r--r--StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m80
3 files changed, 61 insertions, 25 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.h
index d7da331d..71447b60 100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.h
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.h
@@ -1,5 +1,5 @@
#import <Foundation/Foundation.h>
-@interface NSString (URLEncoding)
+@interface NSString (SSURLEncoding)
@property (readonly) NSString *URLEncodedString;
@end
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.m
index b737626c..c8e746d3 100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+URLEncoding.m
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/NSString+SSURLEncoding.m
@@ -1,6 +1,6 @@
-#import "NSString+URLEncoding.h"
+#import "NSString+SSURLEncoding.h"
-@implementation NSString (URLEncoding)
+@implementation NSString (SSURLEncoding)
- (NSString*)URLEncodedString
{
NSString* result = (NSString *)CFBridgingRelease(
diff --git a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
index 014925bd..57336cd9 100644
--- a/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
+++ b/StoneIsland/plugins/cordova-plugin-x-socialsharing/src/ios/SocialSharing.m
@@ -1,5 +1,5 @@
#import "SocialSharing.h"
-#import "NSString+URLEncoding.h"
+#import "NSString+SSURLEncoding.h"
#import <Cordova/CDV.h>
#import <Social/Social.h>
#import <Foundation/NSException.h>
@@ -137,7 +137,7 @@ static NSString *const kShareOptionUrl = @"url";
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
[self cleanupStoredFiles];
- NSDictionary * result = @{@"completed":@(completed), @"app":activityType};
+ NSDictionary * result = @{@"completed":@(completed), @"app":activityType == nil ? @"" : activityType};
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
@@ -361,21 +361,43 @@ static NSString *const kShareOptionUrl = @"url";
NSURL *file = [self getFile:path];
NSData* data = [fileManager contentsAtPath:file.path];
+ if (!data) {
+ CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"invalid attachment"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
NSString* fileName;
NSString* mimeType;
NSString* basename = [self getBasenameFromAttachmentPath:path];
- if ([basename hasPrefix:@"data:"]) {
- mimeType = (NSString*)[[[basename substringFromIndex:5] componentsSeparatedByString: @";"] objectAtIndex:0];
- fileName = @"attachment.";
- fileName = [fileName stringByAppendingString:(NSString*)[[mimeType componentsSeparatedByString: @"/"] lastObject]];
- NSString *base64content = (NSString*)[[basename componentsSeparatedByString: @","] lastObject];
- data = [SocialSharing dataFromBase64String:base64content];
- } else {
- fileName = [basename pathComponents].lastObject;
- mimeType = [self getMimeTypeFromFileExtension:[basename pathExtension]];
- }
- [self.globalMailComposer addAttachmentData:data mimeType:mimeType fileName:fileName];
+ //Find data anywhere in string
+ NSRange rangeData = [basename rangeOfString:@"data:"];
+ if (rangeData.location == NSNotFound)
+ {
+ fileName = [basename pathComponents].lastObject;
+ mimeType = [self getMimeTypeFromFileExtension:[basename pathExtension]];
+ }
+ else
+ {
+ mimeType = (NSString*)[[[basename substringFromIndex:rangeData.location+rangeData.length] componentsSeparatedByString: @";"] objectAtIndex:0];
+
+ //Find df anywhere in string
+ NSRange rangeDF = [basename rangeOfString:@"df:"];
+ //If not found fallback to default name
+ if (rangeDF.location == NSNotFound) {
+ fileName = @"attachment.";
+ fileName = [fileName stringByAppendingString:(NSString*)[[mimeType componentsSeparatedByString: @"/"] lastObject]];
+ } else {
+ //Found, apply name
+ fileName = (NSString*)[[[basename substringFromIndex:rangeDF.location+rangeDF.length] componentsSeparatedByString: @";"] objectAtIndex:0];
+ }
+
+
+ NSString *base64content = (NSString*)[[basename componentsSeparatedByString: @","] lastObject];
+ data = [SocialSharing dataFromBase64String:base64content];
+ }
+ [self.globalMailComposer addAttachmentData:data mimeType:mimeType fileName:fileName];
}
}
@@ -479,7 +501,7 @@ static NSString *const kShareOptionUrl = @"url";
_command = command;
[self.commandDelegate runInBackground:^{
picker.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
- [[self getTopMostViewController] presentViewController:picker animated:YES completion:nil];
+ [[self getTopMostViewController] presentViewController:picker animated:NO completion:nil];
}];
} else {
CDVPluginResult * pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"not available"];
@@ -694,6 +716,7 @@ static NSString *const kShareOptionUrl = @"url";
-(NSURL*)getFile: (NSString *)fileName {
NSURL *file = nil;
if (fileName != (id)[NSNull null]) {
+ NSRange rangeData = [fileName rangeOfString:@"data:"];
if ([fileName hasPrefix:@"http"]) {
NSURL *url = [NSURL URLWithString:fileName];
NSData *fileData = [NSData dataWithContentsOfURL:url];
@@ -706,14 +729,27 @@ static NSString *const kShareOptionUrl = @"url";
} else if ([fileName hasPrefix:@"file://"]) {
// stripping the first 6 chars, because the path should start with / instead of file://
file = [NSURL fileURLWithPath:[fileName substringFromIndex:6]];
- } else if ([fileName hasPrefix:@"data:"]) {
- // using a base64 encoded string
- // extract some info from the 'fileName', which is for example: data:text/calendar;base64,<encoded stuff here>
- NSString *fileType = (NSString*)[[[fileName substringFromIndex:5] componentsSeparatedByString: @";"] objectAtIndex:0];
- fileType = (NSString*)[[fileType componentsSeparatedByString: @"/"] lastObject];
- NSString *base64content = (NSString*)[[fileName componentsSeparatedByString: @","] lastObject];
- NSData *fileData = [SocialSharing dataFromBase64String:base64content];
- file = [NSURL fileURLWithPath:[self storeInFile:[NSString stringWithFormat:@"%@.%@", @"file", fileType] fileData:fileData]];
+ } else if (rangeData.location != NSNotFound ){
+ //If found "data:"
+ NSString *fileType = (NSString*)[[[fileName substringFromIndex:rangeData.location+rangeData.length] componentsSeparatedByString: @";"] objectAtIndex:0];
+
+ NSString* attachmentName;
+ //Find df anywhere in string
+ NSRange rangeDF = [fileName rangeOfString:@"df:"];
+ //If not found fallback to default name
+ if (rangeDF.location == NSNotFound) {
+ attachmentName = @"attachment.";
+ attachmentName = [attachmentName stringByAppendingString:(NSString*)[[fileType componentsSeparatedByString: @"/"] lastObject]];
+ } else {
+ //Found, apply name
+ attachmentName = (NSString*)[[[fileName substringFromIndex:rangeDF.location+rangeDF.length] componentsSeparatedByString: @";"] objectAtIndex:0];
+ }
+
+
+ NSString *base64content = (NSString*)[[fileName componentsSeparatedByString: @","] lastObject];
+ NSData* data = [SocialSharing dataFromBase64String:base64content];
+ file = [NSURL fileURLWithPath:[self storeInFile:attachmentName fileData:data]];
+
} else {
// assume anywhere else, on the local filesystem
file = [NSURL fileURLWithPath:fileName];