/** * 用户信息辅助模块 * 功能:管理用户信息的获取、更新和发送 * 依赖: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 = { 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, }); } }); }