提交
This commit is contained in:
173
TUIKit/TUIChat/BaseCellData/Reply/TUIReplyMessageCellData.m
Normal file
173
TUIKit/TUIChat/BaseCellData/Reply/TUIReplyMessageCellData.m
Normal file
@@ -0,0 +1,173 @@
|
||||
//
|
||||
// TUIReplyMessageCellData.m
|
||||
// TUIChat
|
||||
//
|
||||
// Created by harvy on 2021/11/11.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
/**
|
||||
The protocol format of the custom field cloudMessageData of the message
|
||||
|
||||
{
|
||||
"messageReply":{
|
||||
"messageID": "xxxx0xxx=xx",
|
||||
"messageAbstract":"origin message abstract..."
|
||||
"messageSender":"NickName/99618",
|
||||
"messageType": "1/2/..",
|
||||
"version":"1",
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
#import "TUIReplyMessageCellData.h"
|
||||
#import <TIMCommon/NSString+TUIEmoji.h>
|
||||
#import "TUIFileMessageCellData.h"
|
||||
#import "TUIImageMessageCellData.h"
|
||||
#import "TUIMergeMessageCellData.h"
|
||||
#import "TUITextMessageCellData.h"
|
||||
#import "TUIVideoMessageCellData.h"
|
||||
#import "TUIVoiceMessageCellData.h"
|
||||
|
||||
#import "TUICloudCustomDataTypeCenter.h"
|
||||
#import "TUIFileReplyQuoteViewData.h"
|
||||
#import "TUIImageReplyQuoteViewData.h"
|
||||
#import "TUIMergeReplyQuoteViewData.h"
|
||||
#import "TUIReplyPreviewData.h"
|
||||
#import "TUITextReplyQuoteViewData.h"
|
||||
#import "TUIVideoReplyQuoteViewData.h"
|
||||
#import "TUIVoiceReplyQuoteViewData.h"
|
||||
|
||||
@implementation TUIReplyMessageCellData
|
||||
{
|
||||
NSString *_sender;
|
||||
}
|
||||
|
||||
- (void)setSender:(NSString *)sender {
|
||||
_sender = sender;
|
||||
}
|
||||
|
||||
- (NSString *__nullable)sender {
|
||||
if (self.originMessage) {
|
||||
return self.originMessage.nameCard ? : (self.originMessage.friendRemark ? : (self.originMessage.nickName ? : self.originMessage.sender));
|
||||
}
|
||||
return _sender;
|
||||
}
|
||||
|
||||
+ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message {
|
||||
if (message.cloudCustomData == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
__block TUIReplyMessageCellData *replyData = nil;
|
||||
[message doThingsInContainsCloudCustomOfDataType:TUICloudCustomDataType_MessageReply
|
||||
callback:^(BOOL isContains, id obj) {
|
||||
if (isContains) {
|
||||
if (obj && [obj isKindOfClass:NSDictionary.class]) {
|
||||
NSDictionary *reply = (NSDictionary *)obj;
|
||||
// This message is a "reply message"
|
||||
replyData = [[TUIReplyMessageCellData alloc]
|
||||
initWithDirection:(message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming)];
|
||||
replyData.reuseId = TReplyMessageCell_ReuseId;
|
||||
replyData.originMsgID = reply[@"messageID"];
|
||||
replyData.msgAbstract = reply[@"messageAbstract"];
|
||||
replyData.sender = reply[@"messageSender"];
|
||||
replyData.originMsgType = (V2TIMElemType)[reply[@"messageType"] integerValue];
|
||||
replyData.content = message.textElem.text;
|
||||
replyData.messageRootID = reply[@"messageRootID"];
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
return replyData;
|
||||
}
|
||||
|
||||
- (instancetype)initWithDirection:(TMsgDirection)direction {
|
||||
self = [super initWithDirection:direction];
|
||||
if (self) {
|
||||
if (direction == MsgDirectionIncoming) {
|
||||
self.cellLayout = [TUIMessageCellLayout incommingTextMessageLayout];
|
||||
} else {
|
||||
self.cellLayout = [TUIMessageCellLayout outgoingTextMessageLayout];
|
||||
}
|
||||
_emojiLocations = [NSMutableArray array];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (CGSize)quotePlaceholderSizeWithType:(V2TIMElemType)type data:(TUIReplyQuoteViewData *)data {
|
||||
if (data == nil) {
|
||||
return CGSizeMake(20, 20);
|
||||
}
|
||||
|
||||
return [data contentSize:TReplyQuoteView_Max_Width - 12];
|
||||
}
|
||||
|
||||
- (TUIReplyQuoteViewData *)getQuoteData:(TUIMessageCellData *)originCellData {
|
||||
TUIReplyQuoteViewData *quoteData = nil;
|
||||
Class class = [originCellData getReplyQuoteViewDataClass];
|
||||
BOOL hasRiskContent = originCellData.innerMessage.hasRiskContent;
|
||||
if (hasRiskContent && [TIMConfig isClassicEntrance]){
|
||||
// Return text reply data in default
|
||||
TUITextReplyQuoteViewData *myData = [[TUITextReplyQuoteViewData alloc] init];
|
||||
myData.text = [TUIReplyPreviewData displayAbstract:self.originMsgType abstract:self.msgAbstract withFileName:NO isRisk:hasRiskContent];
|
||||
quoteData = myData;
|
||||
}
|
||||
else if (class && [class respondsToSelector:@selector(getReplyQuoteViewData:)]) {
|
||||
quoteData = [class getReplyQuoteViewData:originCellData];
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
if (quoteData == nil) {
|
||||
//
|
||||
// Return text reply data in default
|
||||
TUITextReplyQuoteViewData *myData = [[TUITextReplyQuoteViewData alloc] init];
|
||||
myData.text = [TUIReplyPreviewData displayAbstract:self.originMsgType abstract:self.msgAbstract withFileName:NO isRisk:hasRiskContent];
|
||||
quoteData = myData;
|
||||
}
|
||||
|
||||
quoteData.originCellData = originCellData;
|
||||
@weakify(self);
|
||||
quoteData.onFinish = ^{
|
||||
@strongify(self);
|
||||
if (self.onFinish) {
|
||||
self.onFinish();
|
||||
}
|
||||
};
|
||||
return quoteData;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation TUIReferenceMessageCellData
|
||||
|
||||
+ (TUIMessageCellData *)getCellData:(V2TIMMessage *)message {
|
||||
if (message.cloudCustomData == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
__block TUIReplyMessageCellData *replyData = nil;
|
||||
[message doThingsInContainsCloudCustomOfDataType:TUICloudCustomDataType_MessageReference
|
||||
callback:^(BOOL isContains, id obj) {
|
||||
if (isContains) {
|
||||
if (obj && [obj isKindOfClass:NSDictionary.class]) {
|
||||
NSDictionary *reply = (NSDictionary *)obj;
|
||||
if ([reply isKindOfClass:NSDictionary.class]) {
|
||||
// This message is 「quote message」which indicating the original message
|
||||
replyData = [[TUIReferenceMessageCellData alloc]
|
||||
initWithDirection:(message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming)];
|
||||
replyData.reuseId = TUIReferenceMessageCell_ReuseId;
|
||||
replyData.originMsgID = reply[@"messageID"];
|
||||
replyData.msgAbstract = reply[@"messageAbstract"];
|
||||
replyData.sender = reply[@"messageSender"];
|
||||
replyData.originMsgType = (V2TIMElemType)[reply[@"messageType"] integerValue];
|
||||
replyData.content = message.textElem.text; // text only
|
||||
}
|
||||
}
|
||||
}
|
||||
}];
|
||||
return replyData;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user