% hook CMessageMgr
- (void)onRevokeMsg:(CMessageWrap * )arg1 {
if (HZWechatConfig.preventRevoke) {
NSString * msgContent = arg1.m_nsContent;
NSString * (^parseParam)(NSString * , NSString * ,NSString * ) = ^NSString * (NSString * content, NSString * paramBegin,NSString * paramEnd) {
NSUInteger startIndex = [content rangeOfString:paramBegin].location + paramBegin.length;
NSUInteger endIndex = [content rangeOfString:paramEnd].location;
NSRange range = NSMakeRange(startIndex, endIndex - startIndex);
return [content substringWithRange: range ];
};
NSString * session = parseParam(msgContent, @ "<session>" , @ "</session>" );
NSString * newmsgid = parseParam(msgContent, @ "<newmsgid>" , @ "</newmsgid>" );
NSString * fromUsrName = parseParam(msgContent, @ "<![CDATA[" , @ "撤回了一条消息" );
CMessageWrap * revokemsg = [ self GetMsg:session n64SvrID:[newmsgid integerValue]];
CContactMgr * contactMgr = [[objc_getClass( "MMServiceCenter" ) defaultCenter] getService:objc_getClass( "CContactMgr" )];
CContact * selfContact = [contactMgr getSelfContact];
NSString * newMsgContent = @"";
if ([revokemsg.m_nsFromUsr isEqualToString:selfContact.m_nsUsrName]) {
if (revokemsg.m_uiMessageType = = 1 ) { / / 判断是否为文本消息
newMsgContent = [NSString stringWithFormat:@ "拦截到你撤回了一条消息:n %@" ,revokemsg.m_nsContent];
} else {
newMsgContent = @ "拦截到你撤回一条消息" ;
}
} else {
if (revokemsg.m_uiMessageType = = 1 ) {
newMsgContent = [NSString stringWithFormat:@ "拦截到一条 %@撤回消息:n %@" ,fromUsrName, revokemsg.m_nsContent];
} else {
newMsgContent = [NSString stringWithFormat:@ "拦截到一条 %@撤回消息" ,fromUsrName];
}
}
CMessageWrap * newWrap = ({
CMessageWrap * msg = [[ % c(CMessageWrap) alloc] initWithMsgType: 0x2710 ];
[msg setM_nsFromUsr:revokemsg.m_nsFromUsr];
[msg setM_nsToUsr:revokemsg.m_nsToUsr];
[msg setM_uiStatus: 0x4 ];
[msg setM_nsContent:newMsgContent];
[msg setM_uiCreateTime:[arg1 m_uiCreateTime]];
msg;
});
[ self AddLocalMsg:session MsgWrap:newWrap fixTime: 0x1 NewMsgArriveNotify: 0x0 ];
return ;
}
% orig;
}
% end
|