// // TUIMessageDataProvider+TUIPatch.m // TreeHole // // Created by wujiangwei on 2022/5/25. // #import "TUIMessageDataProvider+TUIPatch.h" #import #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