153 lines
5.9 KiB
Objective-C
153 lines
5.9 KiB
Objective-C
//
|
|
// 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
|