New file |
| | |
| | | /************************************************************ |
| | | * * Hyphenate CONFIDENTIAL |
| | | * __________________ |
| | | * Copyright (C) 2016 Hyphenate Inc. All rights reserved. |
| | | * |
| | | * NOTICE: All information contained herein is, and remains |
| | | * the property of Hyphenate Inc. |
| | | * Dissemination of this information or reproduction of this material |
| | | * is strictly forbidden unless prior written permission is obtained |
| | | * from Hyphenate Inc. |
| | | */ |
| | | |
| | | #import "EaseMessageModel.h" |
| | | |
| | | #import "EaseEmotionEscape.h" |
| | | #import "EaseConvertToCommonEmoticonsHelper.h" |
| | | |
| | | @implementation EaseMessageModel |
| | | |
| | | - (instancetype)initWithMessage:(EMMessage *)message |
| | | { |
| | | self = [super init]; |
| | | if (self) { |
| | | _cellHeight = -1; |
| | | _message = message; |
| | | _firstMessageBody = message.body; |
| | | _isMediaPlaying = NO; |
| | | |
| | | _nickname = message.from; |
| | | _isSender = message.direction == EMMessageDirectionSend ? YES : NO; |
| | | |
| | | switch (_firstMessageBody.type) { |
| | | case EMMessageBodyTypeText: |
| | | { |
| | | EMTextMessageBody *textBody = (EMTextMessageBody *)_firstMessageBody; |
| | | NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper convertToSystemEmoticons:textBody.text]; |
| | | self.text = didReceiveText; |
| | | } |
| | | break; |
| | | case EMMessageBodyTypeImage: |
| | | { |
| | | EMImageMessageBody *imgMessageBody = (EMImageMessageBody *)_firstMessageBody; |
| | | NSData *imageData = [NSData dataWithContentsOfFile:imgMessageBody.localPath]; |
| | | if (imageData.length) { |
| | | self.image = [UIImage imageWithData:imageData]; |
| | | } |
| | | |
| | | if ([imgMessageBody.thumbnailLocalPath length] > 0) { |
| | | self.thumbnailImage = [UIImage imageWithContentsOfFile:imgMessageBody.thumbnailLocalPath]; |
| | | } |
| | | else{ |
| | | CGSize size = self.image.size; |
| | | self.thumbnailImage = size.width * size.height > 200 * 200 ? [self scaleImage:self.image toScale:sqrt((200 * 200) / (size.width * size.height))] : self.image; |
| | | } |
| | | |
| | | self.thumbnailImageSize = self.thumbnailImage.size; |
| | | self.imageSize = imgMessageBody.size; |
| | | if (!_isSender) { |
| | | self.fileURLPath = imgMessageBody.remotePath; |
| | | if ([EMClient sharedClient].options.isAutoDownloadThumbnail) { |
| | | self.thumbnailFileURLPath = imgMessageBody.thumbnailRemotePath; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case EMMessageBodyTypeLocation: |
| | | { |
| | | EMLocationMessageBody *locationBody = (EMLocationMessageBody *)_firstMessageBody; |
| | | self.address = locationBody.address; |
| | | self.latitude = locationBody.latitude; |
| | | self.longitude = locationBody.longitude; |
| | | } |
| | | break; |
| | | case EMMessageBodyTypeVoice: |
| | | { |
| | | EMVoiceMessageBody *voiceBody = (EMVoiceMessageBody *)_firstMessageBody; |
| | | self.mediaDuration = voiceBody.duration; |
| | | self.isMediaPlayed = NO; |
| | | if (message.ext) { |
| | | self.isMediaPlayed = [[message.ext objectForKey:@"isPlayed"] boolValue]; |
| | | } |
| | | |
| | | // audio file path |
| | | self.fileURLPath = voiceBody.remotePath; |
| | | } |
| | | break; |
| | | case EMMessageBodyTypeVideo: |
| | | { |
| | | EMVideoMessageBody *videoBody = (EMVideoMessageBody *)message.body; |
| | | self.thumbnailImageSize = videoBody.thumbnailSize; |
| | | if ([videoBody.thumbnailLocalPath length] > 0) { |
| | | NSData *thumbnailImageData = [NSData dataWithContentsOfFile:videoBody.thumbnailLocalPath]; |
| | | if (thumbnailImageData.length) { |
| | | self.thumbnailImage = [UIImage imageWithData:thumbnailImageData]; |
| | | } |
| | | self.image = self.thumbnailImage; |
| | | } |
| | | |
| | | // video file path |
| | | self.fileURLPath = videoBody.remotePath; |
| | | } |
| | | break; |
| | | case EMMessageBodyTypeFile: |
| | | { |
| | | EMFileMessageBody *fileMessageBody = (EMFileMessageBody *)_firstMessageBody; |
| | | self.fileIconName = @"EaseUIResource.bundle/chat_item_file"; |
| | | self.fileName = fileMessageBody.displayName; |
| | | self.fileSize = fileMessageBody.fileLength; |
| | | |
| | | if (self.fileSize < 1024) { |
| | | self.fileSizeDes = [NSString stringWithFormat:@"%fB", self.fileSize]; |
| | | } |
| | | else if(self.fileSize < 1024 * 1024){ |
| | | self.fileSizeDes = [NSString stringWithFormat:@"%.2fkB", self.fileSize / 1024]; |
| | | } |
| | | else if (self.fileSize < 2014 * 1024 * 1024){ |
| | | self.fileSizeDes = [NSString stringWithFormat:@"%.2fMB", self.fileSize / (1024 * 1024)]; |
| | | } |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return self; |
| | | } |
| | | |
| | | - (NSString *)messageId |
| | | { |
| | | return _message.messageId; |
| | | } |
| | | |
| | | - (EMMessageStatus)messageStatus |
| | | { |
| | | return _message.status; |
| | | } |
| | | |
| | | - (EMChatType)messageType |
| | | { |
| | | return _message.chatType; |
| | | } |
| | | |
| | | - (EMMessageBodyType)bodyType |
| | | { |
| | | return self.firstMessageBody.type; |
| | | } |
| | | |
| | | - (BOOL)isMessageRead |
| | | { |
| | | return _message.isReadAcked; |
| | | } |
| | | |
| | | - (NSString *)fileLocalPath |
| | | { |
| | | if (_firstMessageBody) { |
| | | switch (_firstMessageBody.type) { |
| | | case EMMessageBodyTypeVideo: |
| | | case EMMessageBodyTypeImage: |
| | | case EMMessageBodyTypeVoice: |
| | | case EMMessageBodyTypeFile: |
| | | { |
| | | EMFileMessageBody *fileBody = (EMFileMessageBody *)_firstMessageBody; |
| | | return fileBody.localPath; |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | return nil; |
| | | } |
| | | |
| | | - (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize |
| | | { |
| | | UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize)); |
| | | [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)]; |
| | | UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); |
| | | UIGraphicsEndImageContext(); |
| | | return scaledImage; |
| | | } |
| | | |
| | | @end |