From 79a6ff4c99ba67fbeb15a9153f70ebae2395cbd5 Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Tue, 17 Mar 2026 17:06:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E9=9B=86=E6=8C=81=E4=B9=85=E5=8C=96=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 extension.ts 中初始化 contextHelper - 在 ICHelperPanel.ts 中加载已保存的文档集 - 在 contextHelper.ts 中实现持久化逻辑 - 使用 globalState 存储文档集数据 - 保存和删除时自动持久化 --- src/extension.ts | 3 +++ src/panels/ICHelperPanel.ts | 8 ++++++++ src/panels/helpers/contextHelper.ts | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 171268f..083360b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -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: { diff --git a/src/panels/ICHelperPanel.ts b/src/panels/ICHelperPanel.ts index bf31d94..0e42ba7 100644 --- a/src/panels/ICHelperPanel.ts +++ b/src/panels/ICHelperPanel.ts @@ -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); diff --git a/src/panels/helpers/contextHelper.ts b/src/panels/helpers/contextHelper.ts index 58b9a86..96cb569 100644 --- a/src/panels/helpers/contextHelper.ts +++ b/src/panels/helpers/contextHelper.ts @@ -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("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,