diff --git a/ext-src/commands/DetailDocument.ts b/ext-src/commands/DetailDocument.ts index dd56889..7943b8d 100644 --- a/ext-src/commands/DetailDocument.ts +++ b/ext-src/commands/DetailDocument.ts @@ -33,6 +33,13 @@ export function activateDetailSuggestionCommand(context: vscode.ExtensionContext } if (!sessionToken || !analyzeStateValue) { + getExtensionEventEmitter().fire({ + type: 'CURRENT_PROJECT', + data: { + name: currentWorkSpaceFolder + }, + }); + extensionEventEmitter.fire({ type: 'CURRENT_FILE', data: { ...documentMetaData.editor.document }, diff --git a/ext-src/extension.ts b/ext-src/extension.ts index de14d55..3c55a32 100644 --- a/ext-src/extension.ts +++ b/ext-src/extension.ts @@ -26,7 +26,6 @@ import { Analyze } from './state'; import { Problem } from './types'; export function activate(context: vscode.ExtensionContext): void { - let isChangingSelection = false; let previousEditor: vscode.TextEditor | undefined = undefined; bootstrapExtensionEventEmitter(); debugChannel.show(true); @@ -197,7 +196,7 @@ export function activate(context: vscode.ExtensionContext): void { const isValidEditor = Util.isValidDocument(editor.document); if (isValidEditor) { - getExtensionEventEmitter().fire({ + extensionEventEmitter.fire({ type: 'Analysis_Completed', data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, }); @@ -293,11 +292,6 @@ export function activate(context: vscode.ExtensionContext): void { }, }); - extensionEventEmitter.fire({ - type: 'Analysis_Completed', - data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, - }); - extensionEventEmitter.fire({ type: 'CURRENT_FILE', data: { ...activeTextEditor.document }, @@ -309,6 +303,17 @@ export function activate(context: vscode.ExtensionContext): void { name: currentWorkSpaceFolder, }, }); + + extensionEventEmitter.fire({ + type: 'onDiscardSuggestionClicked:Success', + data: {}, + }); + + extensionEventEmitter.fire({ + type: 'Analysis_Completed', + data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, + }); + debugChannel.appendLine( 'onDidOpenTextDocument: results have zero length. ' + documentMetaData.fileName, ); @@ -331,9 +336,9 @@ export function activate(context: vscode.ExtensionContext): void { }, }); - getExtensionEventEmitter().fire({ - type: 'Analysis_Completed', - data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, + extensionEventEmitter.fire({ + type: 'onDiscardSuggestionClicked:Success', + data: {}, }); extensionEventEmitter.fire({ @@ -342,6 +347,11 @@ export function activate(context: vscode.ExtensionContext): void { name: currentWorkSpaceFolder, }, }); + + extensionEventEmitter.fire({ + type: 'Analysis_Completed', + data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, + }); }), ); @@ -384,10 +394,6 @@ export function activate(context: vscode.ExtensionContext): void { hasWorkSpaceFolders: true, }, }); - getExtensionEventEmitter().fire({ - type: 'Analysis_Completed', - data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, - }); extensionEventEmitter.fire({ type: 'CURRENT_FILE', @@ -401,6 +407,16 @@ export function activate(context: vscode.ExtensionContext): void { }, }); + extensionEventEmitter.fire({ + type: 'onDiscardSuggestionClicked:Success', + data: {}, + }); + + extensionEventEmitter.fire({ + type: 'Analysis_Completed', + data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, + }); + debugChannel.appendLine( 'onDidChangeActiveTextEditor: results array has zero length. ' + fileName, ); @@ -418,11 +434,6 @@ export function activate(context: vscode.ExtensionContext): void { }, }); - getExtensionEventEmitter().fire({ - type: 'Analysis_Completed', - data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, - }); - extensionEventEmitter.fire({ type: 'CURRENT_FILE', data: { ...e.document }, @@ -435,6 +446,16 @@ export function activate(context: vscode.ExtensionContext): void { }, }); + extensionEventEmitter.fire({ + type: 'onDiscardSuggestionClicked:Success', + data: {}, + }); + + extensionEventEmitter.fire({ + type: 'Analysis_Completed', + data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, + }); + previousEditor = e; }), ); diff --git a/ext-src/providers/recommendation.provider.ts b/ext-src/providers/recommendation.provider.ts index 306b9f1..4008468 100644 --- a/ext-src/providers/recommendation.provider.ts +++ b/ext-src/providers/recommendation.provider.ts @@ -23,7 +23,6 @@ import { BackendService, GetChatGPTToken } from '../config'; import { DiscardCommandHandler, EndorseCommandHandler } from '../commands'; import CONSTANTS from '../constants'; import Util from '../utils'; -import debugChannel from '../debug'; import { AnalysisEvents } from '../events'; import { Problem } from '../types'; @@ -84,19 +83,10 @@ export class RecommendationWebView implements WebviewViewProvider { if (!getanalyzeState) return; const editor = window.activeTextEditor; if (!editor) return; - const currentWorkSpaceFolder = Util.getWorkspacePath(); + const currentWorkSpaceFolder = Util.getRootFolderName(); if (this._view?.visible === true) { setTimeout(() => { - this.extensionEventEmitter.fire({ - type: 'Analysis_Completed', - data: { - shouldResetRecomendation: true, - shouldMoveToAnalyzePage: true, - ...getanalyzeState, - }, - }); - this.extensionEventEmitter.fire({ type: 'CURRENT_FILE', data: { ...editor.document }, @@ -113,6 +103,15 @@ export class RecommendationWebView implements WebviewViewProvider { type: 'onDiscardSuggestionClicked:Success', data: {}, }); + + this.extensionEventEmitter.fire({ + type: 'Analysis_Completed', + data: { + shouldResetRecomendation: true, + shouldMoveToAnalyzePage: true, + ...getanalyzeState, + }, + }); }, 500); } } @@ -128,40 +127,31 @@ export class RecommendationWebView implements WebviewViewProvider { for (let i = 0; i < this.eventEmitterQueue.length; i++) { const event = this.eventEmitterQueue[i]; - debugChannel.appendLine( - 'Metabob webview is visible now. Sending events: ' + this.eventEmitterQueue.length, - ); - if (event) { this?._view?.webview?.postMessage(event); } } - this.eventEmitterQueue = []; + clearInterval(this.interval); } activateExtensionEventListener(): void { const self = this; this.extensionEventEmitter.event(event => { if (this?._view === null || this?._view === undefined || !this?._view.webview) { - debugChannel.appendLine( - `Metabob: this.view.webview is undefined and got event ${JSON.stringify(event)}`, - ); return; } if (this._view.visible === false) { - debugChannel.appendLine('Metabob webview is not visible. Starting event queue.'); this.eventEmitterQueue.push(event); - if (!this.interval) { + if (this.interval !== undefined) { this.interval = setInterval(this.intervalHandler.bind(self), 300); } return; } this.eventEmitterQueue = []; - clearInterval(this.interval); this._view.webview.postMessage(event); }); } @@ -369,13 +359,14 @@ export class RecommendationWebView implements WebviewViewProvider { postInitData(): void { const getanalyzeState = new Analyze(this.extensionContext).get()?.value; const currentEditor = window.activeTextEditor; + const currentWorkSpaceFolder = Util.getRootFolderName(); if ( this._view === null || this._view === undefined || this._view.webview === undefined || - !currentEditor || - this._view.visible === false + currentEditor === undefined || + currentWorkSpaceFolder === undefined ) { return; } @@ -384,16 +375,30 @@ export class RecommendationWebView implements WebviewViewProvider { initData?: any; hasOpenTextDocuments?: boolean; hasWorkSpaceFolders?: boolean; + currentWorkSpaceFolder?: string + currentFile?: any } = {}; if (getanalyzeState) { initPayload.initData = { ...getanalyzeState }; } + if (currentWorkSpaceFolder) { + initPayload.currentWorkSpaceFolder = currentWorkSpaceFolder + } + + if (currentEditor) { + initPayload.currentFile = { ...currentEditor.document } + } + initPayload.hasOpenTextDocuments = Util.hasOpenTextDocuments(); initPayload.hasWorkSpaceFolders = Util.hasWorkspaceFolder(); + this._view.webview.postMessage({ + type: 'initData', + data: { ...initPayload }, + }); - this.extensionEventEmitter.fire({ + this._view.webview.postMessage({ type: 'INIT_DATA_UPON_NEW_FILE_OPEN', data: { hasOpenTextDocuments: true, @@ -401,24 +406,22 @@ export class RecommendationWebView implements WebviewViewProvider { }, }); - this.extensionEventEmitter.fire({ - type: 'Analysis_Completed', - data: { shouldResetRecomendation: false, shouldMoveToAnalyzePage: false, ...getanalyzeState }, + this._view.webview.postMessage({ + type: 'CURRENT_PROJECT', + data: { + name: currentWorkSpaceFolder, + }, }); - this.extensionEventEmitter.fire({ + this._view.webview.postMessage({ type: 'CURRENT_FILE', data: { ...currentEditor.document }, }); - this._view.webview - .postMessage({ - type: 'initData', - data: { ...initPayload }, - }) - .then(undefined, err => { - window.showErrorMessage(err); - }); + this._view.webview.postMessage({ + type: 'Analysis_Completed', + data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...getanalyzeState }, + }); } async handleApplyRecommendation(input: string, initData: CurrentQuestionState) { diff --git a/ext-src/utils.ts b/ext-src/utils.ts index 2f967f1..eb4d0f7 100644 --- a/ext-src/utils.ts +++ b/ext-src/utils.ts @@ -66,9 +66,19 @@ export default class Utils { static sleep = (ms: number): Promise => new Promise(res => setTimeout(res, ms)); static getWorkspacePath(): string | undefined { - const folders = workspace.workspaceFolders; + let folders = workspace.workspaceFolders; + let path = folders ? folders![0].uri.fsPath : undefined; + if (path === undefined) { + return undefined + } + + const splitPath: string | undefined = path.split('/').pop()?.replace('.git', ''); + + if (splitPath === undefined) { + return undefined + } - return folders ? folders![0].uri.fsPath : undefined; + return splitPath } static getResource(rel: string): string { diff --git a/src/context/UserContext.tsx b/src/context/UserContext.tsx index 7c36ec0..8fe050a 100644 --- a/src/context/UserContext.tsx +++ b/src/context/UserContext.tsx @@ -53,7 +53,9 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => { break; case EventDataType.ANALYSIS_COMPLETED: const { shouldResetRecomendation, shouldMoveToAnalyzePage, ...problem } = payload; - setIdentifiedProblems(problem as AnalyzeState); + if (problem) { + setIdentifiedProblems(problem as AnalyzeState); + } if (shouldMoveToAnalyzePage) { setIdentifiedSuggestion(undefined); setApplicationState(ApplicationWebviewState.ANALYZE_MODE); @@ -78,7 +80,17 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => { } break; case EventDataType.INIT_DATA: - const { hasOpenTextDocuments, hasWorkSpaceFolders } = payload; + const { + hasOpenTextDocuments, + hasWorkSpaceFolders, + initData, + currentWorkSpaceFolder, + currentFile, + } = payload; + + console.log('INIT_DATA: ', payload); + + setApplicationState(ApplicationWebviewState.ANALYZE_MODE); if (hasOpenTextDocuments) { setHasOpenTextDocuments(hasOpenTextDocuments); @@ -87,6 +99,28 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => { if (hasWorkSpaceFolders) { setHasWorkSpaceFolders(hasWorkSpaceFolders); } + + if (initData) { + setIdentifiedProblems(initData as AnalyzeState); + } + + if (currentWorkSpaceFolder) { + setCurrentWorkSpaceProject(currentWorkSpaceFolder); + } + + if (currentFile) { + const filename: string | undefined = currentFile.fileName + .split('/') + .pop() + ?.replace('.git', ''); + + if (!filename) { + setCurrentEditor(undefined); + + return; + } + setCurrentEditor(filename); + } break; case EventDataType.GENERATE_CLICKED_GPT_RESPONSE: setIdentifiedRecommendation(prev => { @@ -136,7 +170,8 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => { if (!filename) { setCurrentEditor(undefined); - break; + + return; } setCurrentEditor(filename); break;