%
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