fix: self nickname

fix: @member msg report
fix: send file:// on Windows
ver: 3.0.2
This commit is contained in:
linyuchen
2024-02-13 18:37:01 +08:00
parent 6a8d67a8ae
commit 1936671cb3
8 changed files with 122 additions and 125 deletions

View File

@@ -1,24 +1,24 @@
import {BrowserWindow} from 'electron';
import {getConfigUtil, log} from "../common/utils";
import {NTQQApi, NTQQApiClass, sendMessagePool} from "./ntcall";
import { BrowserWindow } from 'electron';
import { getConfigUtil, log } from "../common/utils";
import { NTQQApi, NTQQApiClass, sendMessagePool } from "./ntcall";
import { Group, User } from "./types";
import { RawMessage } from "./types";
import {friends, groups, msgHistory} from "../common/data";
import { friends, groups, msgHistory } from "../common/data";
import { v4 as uuidv4 } from 'uuid';
export let hookApiCallbacks: Record<string, (apiReturn: any)=>void>={}
export let hookApiCallbacks: Record<string, (apiReturn: any) => void> = {}
export enum ReceiveCmd {
UPDATE_MSG = "nodeIKernelMsgListener/onMsgInfoListUpdate",
NEW_MSG = "nodeIKernelMsgListener/onRecvMsg",
SELF_SEND_MSG = "nodeIKernelMsgListener/onAddSendMsg",
USER_INFO = "nodeIKernelProfileListener/onProfileDetailInfoChanged",
USER_INFO = "nodeIKernelProfileListener/onProfileSimpleChanged",
GROUPS = "nodeIKernelGroupListener/onGroupListUpdate",
GROUPS_UNIX = "onGroupListUpdate",
FRIENDS = "onBuddyListChange"
}
interface NTQQApiReturnData<PayloadType=unknown> extends Array<any> {
interface NTQQApiReturnData<PayloadType = unknown> extends Array<any> {
0: {
"type": "request",
"eventName": NTQQApiClass,
@@ -51,7 +51,7 @@ export function hookNTQQApiReceive(window: BrowserWindow) {
new Promise((resolve, reject) => {
try {
hook.hookFunc(receiveData.payload);
}catch (e) {
} catch (e) {
log("hook error", e, receiveData.payload)
}
}).then()
@@ -59,10 +59,10 @@ export function hookNTQQApiReceive(window: BrowserWindow) {
}
}
}
if (args[0]?.callbackId){
if (args[0]?.callbackId) {
// log("hookApiCallback", hookApiCallbacks, args)
const callbackId = args[0].callbackId;
if (hookApiCallbacks[callbackId]){
if (hookApiCallbacks[callbackId]) {
// log("callback found")
new Promise((resolve, reject) => {
hookApiCallbacks[callbackId](args[1]);
@@ -85,36 +85,43 @@ export function registerReceiveHook<PayloadType>(method: ReceiveCmd, hookFunc: (
return id;
}
export function removeReceiveHook(id: string){
const index = receiveHooks.findIndex(h=>h.id === id)
export function removeReceiveHook(id: string) {
const index = receiveHooks.findIndex(h => h.id === id)
receiveHooks.splice(index, 1);
}
async function updateGroups(_groups: Group[]){
for(let group of _groups){
let existGroup = groups.find(g=>g.groupCode == group.groupCode)
if (!existGroup){
// log("update group")
let _membeers = await NTQQApi.getGroupMembers(group.groupCode)
if (_membeers){
group.members = _membeers
}
async function updateGroups(_groups: Group[]) {
for (let group of _groups) {
let existGroup = groups.find(g => g.groupCode == group.groupCode)
if (!existGroup) {
NTQQApi.getGroupMembers(group.groupCode).then(members => {
if (members) {
group.members = members
}
})
groups.push(group)
log("update group members", group.members)
}
else{
group.members = [...existGroup.members]
} else {
Object.assign(existGroup, group)
}
}
groups.length = 0;
groups.push(..._groups)
}
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS, (payload)=>updateGroups(payload.groupList).then())
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS_UNIX, (payload)=>updateGroups(payload.groupList).then())
registerReceiveHook<{data:{categoryId: number, categroyName: string, categroyMbCount: number, buddyList: User[]}[]}>(ReceiveCmd.FRIENDS, payload=>{
friends.length = 0
registerReceiveHook<{ groupList: Group[] }>(ReceiveCmd.GROUPS, (payload) => updateGroups(payload.groupList).then())
registerReceiveHook<{ groupList: Group[] }>(ReceiveCmd.GROUPS_UNIX, (payload) => updateGroups(payload.groupList).then())
registerReceiveHook<{
data: { categoryId: number, categroyName: string, categroyMbCount: number, buddyList: User[] }[]
}>(ReceiveCmd.FRIENDS, payload => {
for (const fData of payload.data) {
friends.push(...fData.buddyList)
const _friends = fData.buddyList;
for (let friend of _friends) {
let existFriend = friends.find(f => f.uin == friend.uin)
if (!existFriend) {
friends.push(friend)
} else {
Object.assign(existFriend, friend)
}
}
}
})
@@ -131,24 +138,27 @@ 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)
if (!msgHistory[message.msgId]){
if (!msgHistory[message.msgId]) {
msgHistory[message.msgId] = message
}
else{
} else {
Object.assign(msgHistory[message.msgId], message)
}
}
const msgIds = Object.keys(msgHistory);
if (msgIds.length > 3000) {
delete msgHistory[msgIds.sort()[0]]
}
})
registerReceiveHook<{msgRecord: RawMessage}>(ReceiveCmd.SELF_SEND_MSG, ({msgRecord})=>{
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{
if (sendCallback) {
try {
sendCallback(message);
}catch(e){
} catch (e) {
log("receive self msg error", e.stack)
}
}