cdts/xdts-ios 3/TreeHole/Code/Features/Chat/UIPatch/TUIMessageDataProvider+TUIPatch.m

153 lines
5.9 KiB
Mathematica
Raw Normal View History

2023-07-27 09:20:00 +08:00
//
// TUIMessageDataProvider+TUIPatch.m
// TreeHole
//
// Created by wujiangwei on 2022/5/25.
//
#import "TUIMessageDataProvider+TUIPatch.h"
#import <JRSwizzle.h>
#import "TUIMessageDataProvider.h"
#import "TUIMessageDataProvider+Call.h"
#import "TUIMessageDataProvider+Live.h"
#import "TUITextMessageCellData.h"
#import "TUISystemMessageCellData.h"
#import "TUIVoiceMessageCellData.h"
#import "TUIImageMessageCellData.h"
#import "TUIFaceMessageCellData.h"
#import "TUIVideoMessageCellData.h"
#import "TUIFileMessageCellData.h"
#import "TUIMergeMessageCellData.h"
#import "TUIFaceMessageCellData.h"
#import "TUIJoinGroupMessageCellData.h"
#import "TUIReplyMessageCellData.h"
#import "TUIFaceView.h"
#import "TUIDefine.h"
#import "TUITool.h"
#import "TUILogin.h"
#import "NSString+TUIUtil.h"
static NSArray *customMessageInfo = nil;
@implementation TUIMessageDataProvider (TUIPatch)
+ (void)load {
// NSError *error;
// [self jr_swizzleClassMethod:@selector(patch_sendMessage:toConversation:isSendPushInfo:isOnlineUserOnly:priority:Progress:SuccBlock:FailBlock:) withClassMethod:@selector(sendMessage:toConversation:isSendPushInfo:isOnlineUserOnly:priority:Progress:SuccBlock:FailBlock:) error:&error];
// [self jr_swizzleClassMethod:@selector(patch_getCustomMessageInfo) withClassMethod:@selector(getCustomMessageInfo) error:&error];
// [self jr_swizzleClassMethod:@selector(patch_getCustomCellData:) withClassMethod:@selector(getCustomCellData:) error:&error];
// if (error) {
// NSLog(@"patch TUI error: %@", error);
// }
customMessageInfo = @[
// @{
// BussinessID: @"custom_message_tips",
// TMessageCell_Name: @"TUISystemMessageCell",
// TMessageCell_Data_Name: @"TUISystemMessageCellData"
// },
@{BussinessID : BussinessID_TextLink,
TMessageCell_Name : @"MyVIPCardsCell",
TMessageCell_Data_Name : @"MyVipCarDatas"
},
@{BussinessID : BussinessID_GroupCreate,
TMessageCell_Name : @"TUIGroupCreatedCell",
TMessageCell_Data_Name : @"TUIGroupCreatedCellData"
}
];
}
+ (NSArray *)patch_getCustomMessageInfo {
return customMessageInfo;
}
+ (TUIMessageCellData *)patch_getCustomCellData:(V2TIMMessage *)message {
NSDictionary *param = [NSJSONSerialization JSONObjectWithData:message.customElem.data options:NSJSONReadingAllowFragments error:nil];
if (!param || ![param isKindOfClass:[NSDictionary class]]) {
return nil;
}
NSString *businessID = param[BussinessID];
if (!businessID || ![businessID isKindOfClass:[NSString class]]) {
return nil;
}
for (NSDictionary *messageInfo in customMessageInfo) {
if ([businessID isEqualToString:messageInfo[BussinessID]]) {
NSString *cellDataName = messageInfo[TMessageCell_Data_Name];
Class cls = NSClassFromString(cellDataName);
if (cls == TUISystemMessageCellData.class) {
TUISystemMessageCellData *sysdata = [[TUISystemMessageCellData alloc] initWithDirection:MsgDirectionIncoming];
sysdata.content = param[@"text"];
sysdata.contentFont = MT_FONT_REGULAR_SIZE(12);
sysdata.contentColor = THEME_COLOR;
sysdata.reuseId = TSystemMessageCell_ReuseId;
return sysdata;
}
}
}
return nil;
}
+ (NSString *)patch_sendMessage:(V2TIMMessage *)message
toConversation:(TUIChatConversationModel *)conversationData
isSendPushInfo:(BOOL)isSendPushInfo
isOnlineUserOnly:(BOOL)isOnlineUserOnly
priority:(V2TIMMessagePriority)priority
Progress:(nullable V2TIMProgress)progress
SuccBlock:(nullable V2TIMSucc)succ
FailBlock:(nullable V2TIMFail)fail
{
NSString *userID = conversationData.userID;
NSString *groupID = conversationData.groupID;
NSAssert(userID || groupID, @"目标会话至少需要一个");
NSParameterAssert(message);
V2TIMOfflinePushInfo *pushInfo = nil;
if (isSendPushInfo) {
pushInfo = [[V2TIMOfflinePushInfo alloc] init];
BOOL isGroup = groupID.length > 0;
NSString *senderId = isGroup ? (groupID) : ([TUILogin getUserID]);
senderId = senderId?:@"";
NSString *nickName = isGroup ? (conversationData.title) : ([TUILogin getNickName]?:[TUILogin getUserID]);
nickName = nickName ?: @"";
NSDictionary *ext = @{
@"entity": @{
@"action": @1,
@"content": [self getDisplayString:message],
@"sender": senderId,
@"nickname": nickName,
@"faceUrl": [TUILogin getFaceUrl]?:@"",
@"chatType": isGroup?@(V2TIM_GROUP):@(V2TIM_C2C)
}
};
NSData *data = [NSJSONSerialization dataWithJSONObject:ext options:NSJSONWritingPrettyPrinted error:nil];
pushInfo.ext = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//add by wujiangwei
// pushInfo.title = @"新消息";
// pushInfo.desc = @"你收到一条新消息";
pushInfo.title = nickName;
pushInfo.desc = [self getDisplayString:message];
pushInfo.iOSSound = @"message.caf";
pushInfo.ext = NewC2CMessage;
//end add
pushInfo.AndroidOPPOChannelID = @"tuikit";
}
return [V2TIMManager.sharedInstance sendMessage:message
receiver:userID
groupID:groupID
priority:priority
onlineUserOnly:isOnlineUserOnly
offlinePushInfo:pushInfo
progress:progress
succ:succ
fail:fail];
}
@end