diff --git a/Classes/Utils/Utils.h b/Classes/Utils/Utils.h index 9ac9722bf..aa3ceeda7 100644 --- a/Classes/Utils/Utils.h +++ b/Classes/Utils/Utils.h @@ -49,6 +49,8 @@ typedef enum { + (NSString *)durationToString:(int)duration; + (NSString *)intervalToString:(NSTimeInterval)interval ; ++ (NSMutableDictionary *)photoAssetsDictionary; + @end @interface NSNumber (HumanReadableSize) diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index 3123b02ac..e5e9c8f2c 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -55,6 +55,24 @@ return [formatter stringFromTimeInterval:interval]; } + ++ (NSMutableDictionary *)photoAssetsDictionary { + NSMutableDictionary *assetDict = [NSMutableDictionary dictionary]; + + PHFetchOptions *options = [[PHFetchOptions alloc] init]; + [options setIncludeHiddenAssets:YES]; + [options setIncludeAllBurstAssets:YES]; + + PHFetchResult *fetchRes = [PHAsset fetchAssetsWithOptions:options]; + + for (PHAsset *asset in fetchRes) { + NSString *key = [asset valueForKey:@"filename"]; + [assetDict setObject:asset forKey:[[key componentsSeparatedByString:@"."] firstObject]]; + } + + return assetDict; +} + + (NSString *)timeToString:(time_t)time withFormat:(LinphoneDateFormat)format { NSString *formatstr; NSDate *todayDate = [[NSDate alloc] init]; diff --git a/linphoneExtension/ShareViewController.m b/linphoneExtension/ShareViewController.m index ae71c00c3..33a1c06c4 100644 --- a/linphoneExtension/ShareViewController.m +++ b/linphoneExtension/ShareViewController.m @@ -25,9 +25,11 @@ static NSString* groupName = @"group.belledonne-communications.linphone"; for (NSExtensionItem *item in self.extensionContext.inputItems) { for (NSItemProvider *provider in item.attachments) { NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:groupName]; - + // TODO: Use [provider registeredTypeIdentifiersWithFileOptions:0]; to get all type identifiers of the provider instead of this if/else if structure if ([provider hasItemConformingToTypeIdentifier:@"public.jpeg"]) { [self loadItem:provider typeIdentifier:@"public.jpeg" defaults:defaults key:@"img"]; + } else if ([provider hasItemConformingToTypeIdentifier:@"com.compuserve.gif"]) { + [self loadItem:provider typeIdentifier:@"com.compuserve.gif" defaults:defaults key:@"img"]; } else if ([provider hasItemConformingToTypeIdentifier:@"public.url"]) { [self loadItem:provider typeIdentifier:@"public.url" defaults:defaults key:@"web"]; } else if ([provider hasItemConformingToTypeIdentifier:@"public.movie"]) { @@ -55,11 +57,31 @@ static NSString* groupName = @"group.belledonne-communications.linphone"; - (void)loadItem:(NSItemProvider *)provider typeIdentifier:(NSString *)typeIdentifier defaults:(NSUserDefaults *)defaults key:(NSString *)key { [provider loadItemForTypeIdentifier:typeIdentifier options:nil completionHandler:^(id _Nullable item, NSError * _Null_unspecified error) { - if([(NSObject*)item isKindOfClass:[NSURL class]]) { - NSData *nsData = [NSData dataWithContentsOfURL:(NSURL*)item]; + if([(NSObject*)item isKindOfClass:[NSDictionary class]]) { + NSDictionary *dico = (NSDictionary *)item; + if (dico) { + return; + } + } else if([(NSObject*)item isKindOfClass:[NSURL class]]) { + NSURL *url = (NSURL *)item; + NSData *nsData = [NSData dataWithContentsOfURL:url]; if (nsData) { - NSDictionary *dict = @{@"nsData" : nsData, - @"url" : [(NSURL*)item absoluteString]}; + NSDictionary *dict; + // We get the corresponding PHAsset identifier so we can display the image in the app without having to duplicate it. + NSString *imgPath = url.path; + if ([imgPath hasPrefix:@"/var/mobile/Media/"] && ![imgPath containsString:@"OutgoingTemp"]) { // The image comes from the photos app + NSString *filename; + for ( NSString *comp in [imgPath componentsSeparatedByString:@"/"] ) { + if ([comp containsString:@"IMG_"]) { + filename = [[comp componentsSeparatedByString:@"."] firstObject]; + break; + } + } + dict = @{@"nsData" : nsData, + @"url" : filename}; + } else { + dict = @{@"nsData" : nsData}; + } [defaults setObject:dict forKey:key]; } else { NSLog(@"NSExtensionItem Error, provider = %@", provider); @@ -67,6 +89,7 @@ static NSString* groupName = @"group.belledonne-communications.linphone"; } } else if ([(NSObject*)item isKindOfClass:[UIImage class]]) { + NSLog(@"SHARED PHOTO UIIMAGE"); NSData *imgData = UIImagePNGRepresentation((UIImage*)item); if (imgData) { NSDictionary *dict = @{@"nsData" : imgData, @@ -78,6 +101,7 @@ static NSString* groupName = @"group.belledonne-communications.linphone"; } } else { + NSLog(@"SHARED PHOTO OTHER"); NSDictionary *dict = @{@"name" : self.contentText}; [defaults setObject:dict forKey:key]; }