- 将 1346 行的单文件拆分为 7 个职责单一的模块 - authHelper: 认证和登录检查 - userInfoHelper: 用户信息管理 - conversationHelper: 会话历史加载 - vcdHelper: VCD 文件处理 - contextHelper: 上下文管理 - fileHelper: 文件操作 - messageRouter: 消息路由分发 - 主组件精简至 157 行,提升可维护性
117 lines
2.9 KiB
TypeScript
117 lines
2.9 KiB
TypeScript
/**
|
||
* 用户信息辅助模块
|
||
* 功能:管理用户信息的获取、更新和发送
|
||
* 依赖:vscode, userService, creditsService
|
||
* 使用场景:面板初始化和余额更新时
|
||
*/
|
||
import * as vscode from "vscode";
|
||
import { getCachedUserInfo } from "../../services/userService";
|
||
import { setBalanceUpdateCallback } from "../../services/creditsService";
|
||
|
||
export function getTierIconUri(
|
||
webview: vscode.Webview,
|
||
context: vscode.ExtensionContext,
|
||
tierCode?: string,
|
||
): string | undefined {
|
||
if (!tierCode) {
|
||
return undefined;
|
||
}
|
||
|
||
const tierIconMap: Record<string, string> = {
|
||
BASIC: "free.png",
|
||
TRIAL: "PRO-Try.png",
|
||
ADVANCED: "PRO.png",
|
||
PROFESSIONAL: "PRO+.png",
|
||
};
|
||
|
||
const iconFile = tierIconMap[tierCode];
|
||
if (!iconFile) {
|
||
return undefined;
|
||
}
|
||
|
||
const iconUri = webview.asWebviewUri(
|
||
vscode.Uri.joinPath(
|
||
context.extensionUri,
|
||
"dist",
|
||
"assets",
|
||
"titleIcon",
|
||
iconFile,
|
||
),
|
||
);
|
||
|
||
return iconUri.toString();
|
||
}
|
||
|
||
export async function sendUserInfoToWebview(
|
||
panel: vscode.WebviewPanel,
|
||
context: vscode.ExtensionContext,
|
||
) {
|
||
try {
|
||
let userInfo = getCachedUserInfo();
|
||
|
||
if (userInfo) {
|
||
console.log("[UserInfoHelper] 使用缓存的用户信息:", userInfo);
|
||
const tierIconUrl = getTierIconUri(
|
||
panel.webview,
|
||
context,
|
||
userInfo.membership?.tierCode,
|
||
);
|
||
panel.webview.postMessage({
|
||
command: "updateUserInfo",
|
||
userInfo: {
|
||
userId: userInfo.userId,
|
||
nickname: userInfo.nickname,
|
||
username: userInfo.username,
|
||
credits: userInfo.credits,
|
||
membership: userInfo.membership,
|
||
},
|
||
tierIconUrl: tierIconUrl,
|
||
});
|
||
} else {
|
||
const session = await vscode.authentication.getSession("iccoder", [], {
|
||
createIfNone: false,
|
||
});
|
||
if (session) {
|
||
panel.webview.postMessage({
|
||
command: "updateUserInfo",
|
||
userInfo: {
|
||
userId: session.account.id,
|
||
nickname: session.account.label,
|
||
username: session.account.label,
|
||
},
|
||
});
|
||
}
|
||
}
|
||
} catch (error) {
|
||
console.error("[UserInfoHelper] 获取用户信息失败:", error);
|
||
}
|
||
}
|
||
|
||
export function setupBalanceUpdateCallback(
|
||
panel: vscode.WebviewPanel,
|
||
context: vscode.ExtensionContext,
|
||
) {
|
||
setBalanceUpdateCallback((balance: number) => {
|
||
const userInfo = getCachedUserInfo();
|
||
if (userInfo) {
|
||
userInfo.credits = balance;
|
||
const tierIconUrl = getTierIconUri(
|
||
panel.webview,
|
||
context,
|
||
userInfo.membership?.tierCode,
|
||
);
|
||
panel.webview.postMessage({
|
||
command: "updateUserInfo",
|
||
userInfo: {
|
||
userId: userInfo.userId,
|
||
nickname: userInfo.nickname,
|
||
username: userInfo.username,
|
||
credits: balance,
|
||
membership: userInfo.membership,
|
||
},
|
||
tierIconUrl: tierIconUrl,
|
||
});
|
||
}
|
||
});
|
||
}
|