feat: 实现文档集持久化存储

- 在 extension.ts 中初始化 contextHelper
   - 在 ICHelperPanel.ts 中加载已保存的文档集
   - 在 contextHelper.ts 中实现持久化逻辑
     - 使用 globalState 存储文档集数据
     - 保存和删除时自动持久化
This commit is contained in:
Roe-xin
2026-03-17 17:06:23 +08:00
parent ada3a3bffd
commit 79a6ff4c99
3 changed files with 31 additions and 0 deletions

View File

@ -11,10 +11,13 @@ import { isTokenExpired } from "./utils/jwtUtils";
import { NotificationService } from "./services/notificationService";
import { InvitationService } from "./services/invitationService";
import { ICCoderCodeActionProvider } from "./providers/codeActionProvider";
import { initializeContextHelper } from "./panels/helpers/contextHelper";
export async function activate(context: vscode.ExtensionContext) {
console.log("🎉 IC Coder 插件已激活!");
initializeContextHelper(context);
// 创建装饰类型(代码旁边的提示)
const decorationType = vscode.window.createTextEditorDecorationType({
after: {

View File

@ -13,6 +13,7 @@ import {
setupBalanceUpdateCallback,
} from "./helpers/userInfoHelper";
import { handleWebviewMessage } from "./helpers/messageRouter";
import { getDocumentSets } from "./helpers/contextHelper";
function getIconUris(
webview: vscode.Webview,
@ -123,6 +124,13 @@ export async function showICHelperPanel(
await sendUserInfoToWebview(panel, context);
setupBalanceUpdateCallback(panel, context);
setTimeout(() => {
panel.webview.postMessage({
command: "documentSetSaved",
documentSets: getDocumentSets(),
});
}, 500);
const pendingMessage = context.globalState.get("pendingMessage") as any;
if (pendingMessage) {
await context.globalState.update("pendingMessage", undefined);

View File

@ -6,6 +6,13 @@
*/
import * as vscode from "vscode";
let globalContext: vscode.ExtensionContext;
export function initializeContextHelper(context: vscode.ExtensionContext) {
globalContext = context;
loadDocumentSets();
}
export async function handleAddContextFile(panel: vscode.WebviewPanel) {
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
if (!workspaceFolder) {
@ -154,6 +161,7 @@ export function saveDocumentSet(
updatedAt: new Date().toISOString(),
};
documentSets.push(newDocSet);
persistDocumentSets();
panel.webview.postMessage({
command: "documentSetSaved",
documentSets: documentSets,
@ -167,12 +175,24 @@ let documentSets: Array<{
updatedAt: string;
}> = [];
function loadDocumentSets() {
const saved = globalContext.globalState.get<typeof documentSets>("documentSets");
if (saved) {
documentSets = saved;
}
}
function persistDocumentSets() {
globalContext.globalState.update("documentSets", documentSets);
}
export function getDocumentSets() {
return documentSets;
}
export function deleteDocumentSet(id: string, panel: vscode.WebviewPanel) {
documentSets = documentSets.filter(ds => ds.id !== id);
persistDocumentSets();
panel.webview.postMessage({
command: "documentSetSaved",
documentSets: documentSets,