diff --git a/Classes/ChatConversationTableView.h b/Classes/ChatConversationTableView.h index 62830af62..57e37929b 100644 --- a/Classes/ChatConversationTableView.h +++ b/Classes/ChatConversationTableView.h @@ -24,7 +24,7 @@ @protocol ChatConversationDelegate -- (BOOL)startImageUpload:(UIImage *)image url:(NSURL *)url; +- (BOOL)startImageUpload:(UIImage *)image url:(NSURL *)url withQuality:(float)quality; - (void)resendChat:(NSString *)message withExternalUrl:(NSString *)url; - (void)tableViewIsScrolling; diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index 41a404042..82e6f2874 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -259,7 +259,7 @@ static UICompositeViewDescription *compositeDescription = nil; return TRUE; } -- (void)saveAndSend:(UIImage *)image url:(NSURL *)url { +- (void)saveAndSend:(UIImage *)image url:(NSURL *)url withQuality:(float)quality{ // photo from Camera, must be saved first if (url == nil) { [LinphoneManager.instance.photoLibrary @@ -282,11 +282,11 @@ static UICompositeViewDescription *compositeDescription = nil; [self presentViewController:errView animated:YES completion:nil]; } else { LOGI(@"Image saved to [%@]", [assetURL absoluteString]); - [self startImageUpload:image url:assetURL]; + [self startImageUpload:image url:assetURL withQuality:quality]; } }]; } else { - [self startImageUpload:image url:url]; + [self startImageUpload:image url:url withQuality:quality]; } } @@ -294,14 +294,13 @@ static UICompositeViewDescription *compositeDescription = nil; DTActionSheet *sheet = [[DTActionSheet alloc] initWithTitle:NSLocalizedString(@"Choose the image size", nil)]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for (NSString *key in [imageQualities allKeys]) { - NSNumber *number = [imageQualities objectForKey:key]; - NSData *data = UIImageJPEGRepresentation(image, [number floatValue]); + NSNumber *quality = [imageQualities objectForKey:key]; + NSData *data = UIImageJPEGRepresentation(image, [quality floatValue]); NSNumber *size = [NSNumber numberWithInteger:[data length]]; - NSString *text = [NSString stringWithFormat:@"%@ (%@)", key, [size toHumanReadableSize]]; [sheet addButtonWithTitle:text block:^() { - [self saveAndSend:[UIImage imageWithData:data] url:url]; + [self saveAndSend:image url:url withQuality:[quality floatValue]]; }]; } [sheet addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; @@ -572,9 +571,9 @@ static UICompositeViewDescription *compositeDescription = nil; #pragma mark ChatRoomDelegate -- (BOOL)startImageUpload:(UIImage *)image url:(NSURL *)url { +- (BOOL)startImageUpload:(UIImage *)image url:(NSURL *)url withQuality:(float)quality { FileTransferDelegate *fileTransfer = [[FileTransferDelegate alloc] init]; - [fileTransfer upload:image withURL:url forChatRoom:_chatRoom]; + [fileTransfer upload:image withURL:url forChatRoom:_chatRoom withQuality:quality]; [_tableController addChatEntry:linphone_chat_message_ref(fileTransfer.message)]; [_tableController scrollToBottom:true]; return TRUE; diff --git a/Classes/LinphoneUI/UIChatBubbleTextCell.m b/Classes/LinphoneUI/UIChatBubbleTextCell.m index 289e188bd..50952917c 100644 --- a/Classes/LinphoneUI/UIChatBubbleTextCell.m +++ b/Classes/LinphoneUI/UIChatBubbleTextCell.m @@ -218,6 +218,8 @@ if (state == LinphoneChatMessageStateNotDelivered || state == LinphoneChatMessageStateFileTransferError) { if (linphone_chat_message_get_file_transfer_information(_message) != NULL) { NSString *localImage = [LinphoneManager getMessageAppDataForKey:@"localimage" inMessage:_message]; + NSNumber *uploadQuality =[LinphoneManager getMessageAppDataForKey:@"uploadQuality" inMessage:_message]; + NSURL *imageUrl = [NSURL URLWithString:localImage]; [self onDeleteClick:nil]; @@ -226,8 +228,8 @@ resultBlock:^(ALAsset *asset) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { - UIImage *image = [[UIImage alloc] initWithCGImage:[asset thumbnail]]; - [_chatRoomDelegate startImageUpload:image url:imageUrl]; + UIImage *image = [[UIImage alloc] initWithCGImage:[[asset defaultRepresentation] fullResolutionImage]]; + [_chatRoomDelegate startImageUpload:image url:imageUrl withQuality:(uploadQuality ? [uploadQuality floatValue] : 0.9)]; }); } failureBlock:^(NSError *error) { diff --git a/Classes/SettingsView.m b/Classes/SettingsView.m index 3dac88570..f045126b2 100644 --- a/Classes/SettingsView.m +++ b/Classes/SettingsView.m @@ -765,6 +765,7 @@ void update_hash_cbs(LinphoneAccountCreator *creator, LinphoneAccountCreatorStat LinphoneChatMessage *msg = messages->data; if (!linphone_chat_message_is_outgoing(msg)) { [LinphoneManager setValueInMessageAppData:nil forKey:@"localimage" inMessage:messages->data]; + [LinphoneManager setValueInMessageAppData:nil forKey:@"uploadQuality" inMessage:messages->data]; } messages = messages->next; } diff --git a/Classes/Utils/FileTransferDelegate.h b/Classes/Utils/FileTransferDelegate.h index 652d42129..4b2f8de6c 100644 --- a/Classes/Utils/FileTransferDelegate.h +++ b/Classes/Utils/FileTransferDelegate.h @@ -12,7 +12,7 @@ @interface FileTransferDelegate : NSObject -- (void)upload:(UIImage *)image withURL:(NSURL *)url forChatRoom:(LinphoneChatRoom *)chatRoom; +- (void)upload:(UIImage *)image withURL:(NSURL *)url forChatRoom:(LinphoneChatRoom *)chatRoom withQuality:(float)quality; - (void)cancel; - (BOOL)download:(LinphoneChatMessage *)message; - (void)stopAndDestroy; diff --git a/Classes/Utils/FileTransferDelegate.m b/Classes/Utils/FileTransferDelegate.m index 2e335c885..4f57e53cd 100644 --- a/Classes/Utils/FileTransferDelegate.m +++ b/Classes/Utils/FileTransferDelegate.m @@ -166,11 +166,11 @@ static LinphoneBuffer *linphone_iphone_file_transfer_send(LinphoneChatMessage *m return NULL; } -- (void)upload:(UIImage *)image withURL:(NSURL *)url forChatRoom:(LinphoneChatRoom *)chatRoom { +- (void)upload:(UIImage *)image withURL:(NSURL *)url forChatRoom:(LinphoneChatRoom *)chatRoom withQuality:(float)quality { [LinphoneManager.instance.fileTransferDelegates addObject:self]; LinphoneContent *content = linphone_core_create_content(linphone_chat_room_get_core(chatRoom)); - _data = [NSMutableData dataWithData:UIImageJPEGRepresentation(image, 1.0)]; + _data = [NSMutableData dataWithData:UIImageJPEGRepresentation(image, quality)]; linphone_content_set_type(content, "image"); linphone_content_set_subtype(content, "jpeg"); linphone_content_set_name( @@ -187,6 +187,8 @@ static LinphoneBuffer *linphone_iphone_file_transfer_send(LinphoneChatMessage *m if (url) { // internal url is saved in the appdata for display and later save [LinphoneManager setValueInMessageAppData:[url absoluteString] forKey:@"localimage" inMessage:_message]; + [LinphoneManager setValueInMessageAppData:[NSNumber numberWithFloat:quality]forKey:@"uploadQuality" inMessage:_message]; + } LOGI(@"%p Uploading content from message %p", self, _message);