fix: quick login 延迟问题

This commit is contained in:
手瓜一十雪
2025-03-16 11:39:38 +08:00
parent b39d8bae27
commit 55847f6e10

View File

@@ -114,22 +114,25 @@ async function handleLogin(
quickLoginUin: string | undefined, quickLoginUin: string | undefined,
historyLoginList: LoginListItem[] historyLoginList: LoginListItem[]
): Promise<SelfInfo> { ): Promise<SelfInfo> {
return new Promise<SelfInfo>(async (resolve) => { let inner_resolve: (value: SelfInfo) => void;
const loginListener = new NodeIKernelLoginListener(); let selfInfo: Promise<SelfInfo> = new Promise((resolve) => {
inner_resolve = resolve;
});
// 连接服务
let isLogined = false; let isLogined = false;
const loginListener = new NodeIKernelLoginListener();
loginListener.onUserLoggedIn = (userid: string) => { loginListener.onUserLoggedIn = (userid: string) => {
logger.logError(`当前账号(${userid})已登录,无法重复登录`); logger.logError(`当前账号(${userid})已登录,无法重复登录`);
}; };
loginListener.onQRCodeLoginSucceed = async (loginResult) => { loginListener.onQRCodeLoginSucceed = async (loginResult) => {
isLogined = true; isLogined = true;
resolve({ inner_resolve({
uid: loginResult.uid, uid: loginResult.uid,
uin: loginResult.uin, uin: loginResult.uin,
nick: '', nick: '',
online: true, online: true,
}); });
}; };
loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => { loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => {
@@ -165,23 +168,10 @@ async function handleLogin(
loginListener.onLoginFailed = (...args) => { loginListener.onLoginFailed = (...args) => {
logger.logError('[Core] [Login] Login Error , ErrInfo: ', JSON.stringify(args)); logger.logError('[Core] [Login] Login Error , ErrInfo: ', JSON.stringify(args));
}; };
loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger)); loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger));
const isConnect = loginService.connect(); loginService.connect();
if (!isConnect) { await waitForNetworkConnection(loginService, logger);
logger.logError('核心登录服务连接失败!'); // 等待网络
return;
}
logger.log('核心登录服务连接成功!');
loginService.getLoginList().then((res) => {
// 遍历 res.LocalLoginInfoList[x].isQuickLogin是否可以 res.LocalLoginInfoList[x].uin 转为string 加入string[] 最后遍历完成调用WebUiDataRuntime.setQQQuickLoginList
const list = res.LocalLoginInfoList.filter((item) => item.isQuickLogin);
WebUiDataRuntime.setQQQuickLoginList(list.map((item) => item.uin.toString()));
WebUiDataRuntime.setQQNewLoginList(list);
});
WebUiDataRuntime.setQuickLoginCall(async (uin: string) => { WebUiDataRuntime.setQuickLoginCall(async (uin: string) => {
return await new Promise((resolve) => { return await new Promise((resolve) => {
if (uin) { if (uin) {
@@ -200,12 +190,6 @@ async function handleLogin(
} }
}); });
}); });
let network_ok = false;
while (!network_ok) {
network_ok = loginService.getMsfStatus() === 0;
logger.log('等待网络连接...');
await sleep(500);
}
if (quickLoginUin) { if (quickLoginUin) {
if (historyLoginList.some(u => u.uin === quickLoginUin)) { if (historyLoginList.some(u => u.uin === quickLoginUin)) {
logger.log('正在快速登录 ', quickLoginUin); logger.log('正在快速登录 ', quickLoginUin);
@@ -231,7 +215,15 @@ async function handleLogin(
} }
loginService.getQRCodePicture(); loginService.getQRCodePicture();
} }
loginService.getLoginList().then((res) => {
// 遍历 res.LocalLoginInfoList[x].isQuickLogin是否可以 res.LocalLoginInfoList[x].uin 转为string 加入string[] 最后遍历完成调用WebUiDataRuntime.setQQQuickLoginList
const list = res.LocalLoginInfoList.filter((item) => item.isQuickLogin);
WebUiDataRuntime.setQQQuickLoginList(list.map((item) => item.uin.toString()));
WebUiDataRuntime.setQQNewLoginList(list);
}); });
return await selfInfo;
} }
async function initializeSession( async function initializeSession(
@@ -288,6 +280,20 @@ async function handleProxy(session: NodeIQQNTWrapperSession, logger: LogWrapper)
}); });
} }
} }
async function waitForNetworkConnection(loginService: NodeIKernelLoginService, logger: LogWrapper) {
let network_ok = false;
let tryCount = 0;
while (!network_ok) {
network_ok = loginService.getMsfStatus() === 0;
logger.log('等待网络连接...');
await sleep(500);
tryCount++;
}
logger.log('网络已连接');
return network_ok;
}
export async function NCoreInitShell() { export async function NCoreInitShell() {
console.log('NapCat Shell App Loading...'); console.log('NapCat Shell App Loading...');
const pathWrapper = new NapCatPathWrapper(); const pathWrapper = new NapCatPathWrapper();