Skip to content

Commit c1994c7

Browse files
committed
fix: 修正右键指令不响应stop
1 parent fe085a7 commit c1994c7

File tree

2 files changed

+39
-20
lines changed

2 files changed

+39
-20
lines changed

src/extension.ts

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,36 @@ import { queryCodeReDesign, generateFilenameFromRequest, analyzeCode } from './d
77
import { setupCvbAsMarkdown } from './cvbMarkdownHandler';
88
import { registerCvbContextMenu } from './siderBar';
99

10+
let currentOperationController: AbortController | null = null;
11+
12+
export function getCurrentOperationController() {
13+
if (!currentOperationController) {
14+
currentOperationController = new AbortController;
15+
}
16+
return currentOperationController;
17+
}
18+
19+
export function resetCurrentOperationController() {
20+
if (currentOperationController) {
21+
currentOperationController.abort();
22+
currentOperationController = null;
23+
}
24+
currentOperationController = new AbortController;
25+
}
26+
27+
export function clearCurrentOperationController() {
28+
if (currentOperationController) {
29+
currentOperationController.abort(); // 中止操作
30+
currentOperationController = null; // 清除引用
31+
}
32+
}
33+
1034
// 插件激活时调用
1135
export function activate(context: vscode.ExtensionContext) {
1236
console.log('Congratulations, your extension "CodeReDesign" is now active!');
1337

1438
// 创建输出通道
1539
const outputChannel = vscode.window.createOutputChannel('CodeReDesign API Stream');
16-
// 用于存储当前的上传操作
17-
let currentOperationController: AbortController | null = null;
1840

1941
// 注册命令:选择文件并生成 CVB
2042
let generateCvbCommand = vscode.commands.registerCommand('codeReDesign.generateCvb', async () => {
@@ -90,21 +112,16 @@ export function activate(context: vscode.ExtensionContext) {
90112
const cvbFilePath = path.join(tmpDir, selectedCvbFile);
91113
const cvbContent = fs.readFileSync(cvbFilePath, 'utf-8');
92114

93-
if (currentOperationController){
94-
currentOperationController.abort();
95-
currentOperationController = null;
96-
}
97-
98-
// 创建新的 AbortController
99-
currentOperationController = new AbortController();
100-
const apiResponse = await queryCodeReDesign(cvbContent, userPrompt, outputChannel, currentOperationController.signal);
115+
resetCurrentOperationController();
116+
117+
const apiResponse = await queryCodeReDesign(cvbContent, userPrompt, outputChannel, getCurrentOperationController().signal);
101118
if (apiResponse) {
102119
const { cvbContent: newCvbContent, metadata, files } = parseCvb(apiResponse);
103120
const newCvbFilePath = path.join(tmpDir, fileName);
104121
fs.writeFileSync(newCvbFilePath, newCvbContent, 'utf-8');
105122
vscode.window.showInformationMessage(`API response saved as CVB file: ${newCvbFilePath}`);
106123
}
107-
currentOperationController = null;
124+
clearCurrentOperationController();
108125
});
109126

110127
// 注册命令:中断当前的上传操作
@@ -196,14 +213,9 @@ export function activate(context: vscode.ExtensionContext) {
196213
return;
197214
}
198215

199-
if (currentOperationController){
200-
currentOperationController.abort();
201-
currentOperationController = null;
202-
}
203-
// 创建新的 AbortController
204-
currentOperationController = new AbortController();
216+
resetCurrentOperationController();
205217
// 调用分析代码功能
206-
const analysisResult = await analyzeCode(cvbContent, userRequest, outputChannel, currentOperationController.signal);
218+
const analysisResult = await analyzeCode(cvbContent, userRequest, outputChannel, getCurrentOperationController().signal);
207219
if (analysisResult) {
208220
vscode.window.showInformationMessage('Analysis completed. Check the output channel for details.');
209221
}

src/siderBar.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as path from 'path';
33
import * as fs from 'fs';
44
import { applyCvbToWorkspace } from './cvbManager';
55
import { queryCodeReDesign, analyzeCode } from './deepseekApi';
6+
import { getCurrentOperationController, resetCurrentOperationController, clearCurrentOperationController} from './extension';
67

78
export function registerCvbContextMenu(context: vscode.ExtensionContext) {
89

@@ -165,10 +166,13 @@ async function uploadThisCvb(filePath: string) {
165166
const cvbContent = fs.readFileSync(filePath, 'utf-8');
166167
const outputChannel = vscode.window.createOutputChannel('CodeReDesign API Stream');
167168

168-
const apiResponse = await queryCodeReDesign(cvbContent, userPrompt, outputChannel);
169+
resetCurrentOperationController();
170+
171+
const apiResponse = await queryCodeReDesign(cvbContent, userPrompt, outputChannel, getCurrentOperationController().signal);
169172
if (apiResponse) {
170173
vscode.window.showInformationMessage('API response received. Check the output channel for details.');
171174
}
175+
clearCurrentOperationController();
172176
}
173177

174178
/**
@@ -188,10 +192,13 @@ async function analyzeThisCvb(filePath: string) {
188192
const cvbContent = fs.readFileSync(filePath, 'utf-8');
189193
const outputChannel = vscode.window.createOutputChannel('CodeReDesign API Stream');
190194

191-
const analysisResult = await analyzeCode(cvbContent, userRequest, outputChannel);
195+
resetCurrentOperationController();
196+
197+
const analysisResult = await analyzeCode(cvbContent, userRequest, outputChannel, getCurrentOperationController().signal);
192198
if (analysisResult) {
193199
vscode.window.showInformationMessage('Analysis completed. Check the output channel for details.');
194200
}
201+
clearCurrentOperationController();
195202
}
196203

197204
export function deactivate() {}

0 commit comments

Comments
 (0)