feat: 实现文档集持久化存储
- 在 extension.ts 中初始化 contextHelper
- 在 ICHelperPanel.ts 中加载已保存的文档集
- 在 contextHelper.ts 中实现持久化逻辑
- 使用 globalState 存储文档集数据
- 保存和删除时自动持久化
This commit is contained in:
@ -11,10 +11,13 @@ import { isTokenExpired } from "./utils/jwtUtils";
|
|||||||
import { NotificationService } from "./services/notificationService";
|
import { NotificationService } from "./services/notificationService";
|
||||||
import { InvitationService } from "./services/invitationService";
|
import { InvitationService } from "./services/invitationService";
|
||||||
import { ICCoderCodeActionProvider } from "./providers/codeActionProvider";
|
import { ICCoderCodeActionProvider } from "./providers/codeActionProvider";
|
||||||
|
import { initializeContextHelper } from "./panels/helpers/contextHelper";
|
||||||
|
|
||||||
export async function activate(context: vscode.ExtensionContext) {
|
export async function activate(context: vscode.ExtensionContext) {
|
||||||
console.log("🎉 IC Coder 插件已激活!");
|
console.log("🎉 IC Coder 插件已激活!");
|
||||||
|
|
||||||
|
initializeContextHelper(context);
|
||||||
|
|
||||||
// 创建装饰类型(代码旁边的提示)
|
// 创建装饰类型(代码旁边的提示)
|
||||||
const decorationType = vscode.window.createTextEditorDecorationType({
|
const decorationType = vscode.window.createTextEditorDecorationType({
|
||||||
after: {
|
after: {
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import {
|
|||||||
setupBalanceUpdateCallback,
|
setupBalanceUpdateCallback,
|
||||||
} from "./helpers/userInfoHelper";
|
} from "./helpers/userInfoHelper";
|
||||||
import { handleWebviewMessage } from "./helpers/messageRouter";
|
import { handleWebviewMessage } from "./helpers/messageRouter";
|
||||||
|
import { getDocumentSets } from "./helpers/contextHelper";
|
||||||
|
|
||||||
function getIconUris(
|
function getIconUris(
|
||||||
webview: vscode.Webview,
|
webview: vscode.Webview,
|
||||||
@ -123,6 +124,13 @@ export async function showICHelperPanel(
|
|||||||
await sendUserInfoToWebview(panel, context);
|
await sendUserInfoToWebview(panel, context);
|
||||||
setupBalanceUpdateCallback(panel, context);
|
setupBalanceUpdateCallback(panel, context);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
panel.webview.postMessage({
|
||||||
|
command: "documentSetSaved",
|
||||||
|
documentSets: getDocumentSets(),
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
|
||||||
const pendingMessage = context.globalState.get("pendingMessage") as any;
|
const pendingMessage = context.globalState.get("pendingMessage") as any;
|
||||||
if (pendingMessage) {
|
if (pendingMessage) {
|
||||||
await context.globalState.update("pendingMessage", undefined);
|
await context.globalState.update("pendingMessage", undefined);
|
||||||
|
|||||||
@ -6,6 +6,13 @@
|
|||||||
*/
|
*/
|
||||||
import * as vscode from "vscode";
|
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) {
|
export async function handleAddContextFile(panel: vscode.WebviewPanel) {
|
||||||
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
|
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
|
||||||
if (!workspaceFolder) {
|
if (!workspaceFolder) {
|
||||||
@ -154,6 +161,7 @@ export function saveDocumentSet(
|
|||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
};
|
};
|
||||||
documentSets.push(newDocSet);
|
documentSets.push(newDocSet);
|
||||||
|
persistDocumentSets();
|
||||||
panel.webview.postMessage({
|
panel.webview.postMessage({
|
||||||
command: "documentSetSaved",
|
command: "documentSetSaved",
|
||||||
documentSets: documentSets,
|
documentSets: documentSets,
|
||||||
@ -167,12 +175,24 @@ let documentSets: Array<{
|
|||||||
updatedAt: string;
|
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() {
|
export function getDocumentSets() {
|
||||||
return documentSets;
|
return documentSets;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function deleteDocumentSet(id: string, panel: vscode.WebviewPanel) {
|
export function deleteDocumentSet(id: string, panel: vscode.WebviewPanel) {
|
||||||
documentSets = documentSets.filter(ds => ds.id !== id);
|
documentSets = documentSets.filter(ds => ds.id !== id);
|
||||||
|
persistDocumentSets();
|
||||||
panel.webview.postMessage({
|
panel.webview.postMessage({
|
||||||
command: "documentSetSaved",
|
command: "documentSetSaved",
|
||||||
documentSets: documentSets,
|
documentSets: documentSets,
|
||||||
|
|||||||
Reference in New Issue
Block a user