feat:显示资源点

- 登录之后就获取资源点并持久化
- 显示剩余资源点到页面上
- 一轮对话完成之后重新获取资源点并且更新缓存
This commit is contained in:
Roe-xin
2026-01-12 19:09:19 +08:00
parent 3c93c07afd
commit 25966bc1e2
7 changed files with 116 additions and 12 deletions

View File

@ -8,6 +8,7 @@ import { URL } from 'url';
import * as vscode from 'vscode';
import { getStrangeLoopApiUrl, getConfig } from '../config/settings';
import type { UserInfoResponse, MembershipResponse, MultiMembershipVO, MembershipItemVO } from '../types/api';
import { fetchBalance, getCachedBalance } from './creditsService';
/**
* HTTP 请求选项
@ -114,6 +115,8 @@ export interface UserInfo {
remainingDays?: number;
monthlyCredits?: number;
};
// Credits 余额
credits?: number;
}
/**
@ -221,12 +224,13 @@ function getHighestTierMembership(allMemberships?: MembershipItemVO[]): Membersh
*/
export async function onTokenReceived(token: string): Promise<UserInfo | null> {
try {
console.log('[UserService] Token 已获取,正在获取用户信息会员信息...');
console.log('[UserService] Token 已获取,正在获取用户信息会员信息和余额...');
// 并行获取用户信息会员信息
const [userInfo, membershipInfo] = await Promise.all([
// 并行获取用户信息会员信息和余额
const [userInfo, membershipInfo, credits] = await Promise.all([
getUserInfo(token),
getMembershipInfo(token)
getMembershipInfo(token),
fetchBalance()
]);
if (!userInfo) {
@ -234,6 +238,15 @@ export async function onTokenReceived(token: string): Promise<UserInfo | null> {
return null;
}
// 添加 Credits 余额到用户信息
console.log('[UserService] 获取到的 Credits 余额:', credits);
if (credits !== null) {
userInfo.credits = credits;
console.log('[UserService] Credits 已添加到用户信息');
} else {
console.warn('[UserService] Credits 余额为 null未添加到用户信息');
}
// 打印用户信息到控制台
console.log('='.repeat(60));
console.log('用户信息详情:');
@ -286,6 +299,15 @@ export async function onTokenReceived(token: string): Promise<UserInfo | null> {
}
}
// 打印 Credits 余额
console.log('');
console.log('资源点余额:');
if (userInfo.credits !== undefined) {
console.log(`当前余额: ${userInfo.credits} Credits`);
} else {
console.log('当前余额: 未获取到余额信息');
}
console.log('='.repeat(60));
// 保存到持久化存储
@ -329,7 +351,18 @@ export function getCachedUserInfo(): UserInfo | null {
console.warn('[UserService] ExtensionContext 未初始化');
return null;
}
return extensionContext.globalState.get<UserInfo>('icCoderUserInfo') || null;
const userInfo = extensionContext.globalState.get<UserInfo>('icCoderUserInfo') || null;
// 从 creditsService 加载余额并合并到用户信息中
if (userInfo) {
const cachedCredits = getCachedBalance();
if (cachedCredits !== null) {
userInfo.credits = cachedCredits;
console.log('[UserService] 从 creditsService 加载余额:', cachedCredits);
}
}
return userInfo;
}
/**