This commit is contained in:
linyuchen
2024-02-11 02:58:34 +08:00
parent f9c376f6c5
commit d08601505b
19 changed files with 797 additions and 1615 deletions

View File

@@ -1,15 +1,19 @@
import {BrowserWindow} from 'electron';
import {getConfigUtil, log} from "../common/utils";
import {NTQQApiClass} from "./ntcall";
import {RawMessage} from "../common/types";
import {msgHistory} from "../common/data";
import {NTQQApiClass, sendMessagePool} from "./ntcall";
import { Group } from "./types";
import { RawMessage } from "./types";
import {groups, msgHistory} from "../common/data";
export let hookApiCallbacks: Record<string, (apiReturn: any)=>void>={}
export enum ReceiveCmd {
UPDATE_MSG = "nodeIKernelMsgListener/onMsgInfoListUpdate",
NEW_MSG = "nodeIKernelMsgListener/onRecvMsg",
SELF_SEND_MSG = "nodeIKernelMsgListener/onAddSendMsg"
SELF_SEND_MSG = "nodeIKernelMsgListener/onAddSendMsg",
USER_INFO = "nodeIKernelProfileListener/onProfileDetailInfoChanged",
GROUPS = "nodeIKernelGroupListener/onGroupListUpdate",
GROUPS_UNIX = "onGroupListUpdate"
}
interface NTQQApiReturnData<PayloadType=unknown> extends Array<any> {
@@ -28,13 +32,14 @@ interface NTQQApiReturnData<PayloadType=unknown> extends Array<any> {
let receiveHooks: Array<{
method: ReceiveCmd,
hookFunc: (payload: unknown) => void
hookFunc: (payload: any) => void
}> = []
export function hookNTQQApiReceive(window: BrowserWindow) {
const originalSend = window.webContents.send;
const patchSend = (channel: string, ...args: NTQQApiReturnData) => {
// 判断是否是列表
log(`received ntqq api message: ${channel}`, JSON.stringify(args))
if (args?.[1] instanceof Array) {
for (let receiveData of args?.[1]) {
const ntQQApiMethodName = receiveData.cmdName;
@@ -75,6 +80,25 @@ export function registerReceiveHook<PayloadType>(method: ReceiveCmd, hookFunc: (
})
}
function updateGroups(_groups: Group[]){
for(let group of _groups){
let existGroup = groups.find(g=>g.groupCode == group.groupCode)
if (!existGroup){
groups.push(group)
}
else{
Object.assign(existGroup, group);
}
}
}
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS, (payload)=>updateGroups(payload.groupList))
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS_UNIX, (payload)=>updateGroups(payload.groupList))
registerReceiveHook<any>(ReceiveCmd.USER_INFO, (payload)=>{
log("user info", payload);
})
registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.UPDATE_MSG, (payload) => {
for (const message of payload.msgList) {
msgHistory[message.msgId] = message;
@@ -84,7 +108,25 @@ registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.UPDATE_MSG, (payl
registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.NEW_MSG, (payload) => {
for (const message of payload.msgList) {
log("收到新消息push到历史记录", message)
msgHistory[message.msgId] = message;
if (!msgHistory[message.msgId]){
msgHistory[message.msgId] = message
}
else{
Object.assign(msgHistory[message.msgId], message)
}
}
})
registerReceiveHook<{msgRecord: RawMessage}>(ReceiveCmd.SELF_SEND_MSG, ({msgRecord})=>{
const message = msgRecord;
const peerUid = message.peerUid;
// log("收到自己发送成功的消息", Object.keys(sendMessagePool), message);
const sendCallback = sendMessagePool[peerUid];
if (sendCallback){
try{
sendCallback(message);
}catch(e){
log("receive self msg error", e.stack)
}
}
})