From 785f7a4567f4d9e227f83479dcea659477f786f0 Mon Sep 17 00:00:00 2001 From: Yasir Aslam Date: Fri, 23 Feb 2024 18:50:26 +0500 Subject: [PATCH 1/3] fix: an issue where event queue was not getting cleared + at once delivery of events to webview --- ext-src/extension.ts | 79 +++++++++++----- ext-src/providers/recommendation.provider.ts | 98 +++++++++++++++----- src/components/Analyze/index.tsx | 6 ++ src/context/UserContext.tsx | 6 +- src/state/atoms/index.ts | 4 +- 5 files changed, 145 insertions(+), 48 deletions(-) diff --git a/ext-src/extension.ts b/ext-src/extension.ts index cb19cce..de14d55 100644 --- a/ext-src/extension.ts +++ b/ext-src/extension.ts @@ -26,6 +26,7 @@ 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); @@ -216,19 +217,10 @@ export function activate(context: vscode.ExtensionContext): void { context.subscriptions.push( vscode.workspace.onDidOpenTextDocument((e: vscode.TextDocument) => { - const currentWorkSpaceFolder = Util.getRootFolderName(); - const documentMetaData = Util.extractMetaDataFromDocument(e); - if (!documentMetaData.fileName) { - debugChannel.appendLine( - 'onDidOpenTextDocument: fileName is undefined. ' + - '\n' + - documentMetaData.relativePath + - '\n' + - documentMetaData.filePath, - ); - return; - } - + const bufferedEParam: vscode.TextDocument = { + ...e, + fileName: e.fileName.replace('.git', ''), + }; const analyzeState = new Analyze(context); const analyzeValue = analyzeState.get()?.value; if (!analyzeValue) { @@ -237,10 +229,55 @@ export function activate(context: vscode.ExtensionContext): void { return; } - const results: Problem[] | undefined = Util.getCurrentEditorProblems( - analyzeValue, - documentMetaData.fileName, + const activeTextEditor = vscode.window.activeTextEditor; + if (!activeTextEditor) { + debugChannel.appendLine('onDidOpenTextDocument: activeTextEditor is undefined '); + + return; + } + + if (activeTextEditor.document.fileName !== bufferedEParam.fileName) { + debugChannel.appendLine( + 'onDidOpenTextDocument: activeTextEditor.document.fileName ' + + activeTextEditor.document.fileName + + ' e.fileName ' + + e.fileName, + ); + + return; + } + + const currentWorkSpaceFolder = Util.getRootFolderName(); + debugChannel.appendLine( + 'onDidOpenTextDocument: currentWorkSpaceFolder ' + currentWorkSpaceFolder, ); + const documentMetaData = Util.extractMetaDataFromDocument(bufferedEParam); + let fileName: string | undefined = undefined; + + if (documentMetaData.fileName) { + debugChannel.appendLine( + 'onDidOpenTextDocument: documentMetaData.fileName: ' + documentMetaData.fileName, + ); + fileName = documentMetaData.fileName; + } + + if (!fileName && documentMetaData.filePath) { + const splitKey: string | undefined = documentMetaData.filePath + .split('/') + .pop() + ?.replace('.git', ''); + if (splitKey) { + fileName = splitKey; + } + } + debugChannel.appendLine('onDidOpenTextDocument: fileName: ' + fileName); + + if (!fileName) { + debugChannel.appendLine('onDidOpenTextDocument: fileName is undefined. ' + fileName); + return; + } + + const results: Problem[] | undefined = Util.getCurrentEditorProblems(analyzeValue, fileName); if (!results) { debugChannel.appendLine('onDidOpenTextDocument: results is undefined'); @@ -256,14 +293,14 @@ export function activate(context: vscode.ExtensionContext): void { }, }); - getExtensionEventEmitter().fire({ + extensionEventEmitter.fire({ type: 'Analysis_Completed', data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...analyzeValue }, }); extensionEventEmitter.fire({ type: 'CURRENT_FILE', - data: { ...e }, + data: { ...activeTextEditor.document }, }); extensionEventEmitter.fire({ @@ -279,15 +316,11 @@ export function activate(context: vscode.ExtensionContext): void { return; } - const activeTextEditor = vscode.window.activeTextEditor; - if (!activeTextEditor) return; - if (activeTextEditor.document.fileName !== e.fileName) return; - Util.decorateCurrentEditorWithHighlights(results, activeTextEditor); extensionEventEmitter.fire({ type: 'CURRENT_FILE', - data: { ...e }, + data: { ...activeTextEditor.document }, }); extensionEventEmitter.fire({ diff --git a/ext-src/providers/recommendation.provider.ts b/ext-src/providers/recommendation.provider.ts index 11420c3..f38a636 100644 --- a/ext-src/providers/recommendation.provider.ts +++ b/ext-src/providers/recommendation.provider.ts @@ -34,6 +34,7 @@ export class RecommendationWebView implements WebviewViewProvider { private readonly extensionContext: ExtensionContext; private extensionEventEmitter: EventEmitter; private eventEmitterQueue: Array = []; + private interval: NodeJS.Timeout | undefined = undefined; constructor( extensionPath: string, @@ -44,7 +45,6 @@ export class RecommendationWebView implements WebviewViewProvider { this.extensionPath = extensionPath; this.extensionURI = extensionURI; this.extensionContext = context; - this.extensionEventEmitter = extensionEventEmitter; } @@ -76,9 +76,73 @@ export class RecommendationWebView implements WebviewViewProvider { this._view = webviewView; this.activateWebviewMessageListener(); this.activateExtensionEventListener(); + this.sendDefaultEvents(); + } + + sendDefaultEvents() { + const getanalyzeState = new Analyze(this.extensionContext).get()?.value; + if (!getanalyzeState) return; + const editor = window.activeTextEditor; + if (!editor) return; + const currentWorkSpaceFolder = Util.getWorkspacePath(); + + 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 }, + }); + + this.extensionEventEmitter.fire({ + type: 'CURRENT_PROJECT', + data: { + name: currentWorkSpaceFolder, + }, + }); + }, 600); + } + } + + intervalHandler() { + if (this?._view === null || this?._view === undefined || !this?._view.webview) { + return; + } + + if (!this._view.visible) { + return; + } + + 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 = []; + debugChannel.appendLine( + 'Metabob webview is visible now. Cleanup Events: ' + this.eventEmitterQueue.length, + ); + debugChannel.appendLine('this.intervals: ' + this.interval); + + clearInterval(this.interval); } activateExtensionEventListener(): void { + const self = this; this.extensionEventEmitter.event(event => { if (this?._view === null || this?._view === undefined || !this?._view.webview) { debugChannel.appendLine( @@ -88,30 +152,17 @@ export class RecommendationWebView implements WebviewViewProvider { return; } - let interval: NodeJS.Timeout | undefined = undefined; - - if (!this._view.visible) { + if (this._view.visible === false) { + debugChannel.appendLine('Metabob webview is not visible. Starting event queue.'); this.eventEmitterQueue.push(event); - interval = setInterval(() => { - if (this?._view === null || this?._view === undefined || !this?._view.webview) { - return; - } - - if (!this._view.visible) { - return; - } - - const latestEvent = this.eventEmitterQueue.pop(); - if (latestEvent) { - this?._view?.webview?.postMessage(latestEvent); - } - - clearInterval(interval); - this.eventEmitterQueue = []; - }, 500); + if (!this.interval) { + this.interval = setInterval(this.intervalHandler.bind(self), 300); + } return; } + this.eventEmitterQueue = []; + clearInterval(this.interval); this._view.webview.postMessage(event); }); } @@ -401,7 +452,10 @@ export class RecommendationWebView implements WebviewViewProvider { throw new Error('handleApplyRecommendation: Results are undefined'); } - const isCurrentFileDecorated = Util.decorateCurrentEditorWithHighlights(results, documentMetadata.editor) + const isCurrentFileDecorated = Util.decorateCurrentEditorWithHighlights( + results, + documentMetadata.editor, + ); if (!isCurrentFileDecorated) { throw new Error('handleApplyRecommendation: could not decorate current file'); diff --git a/src/components/Analyze/index.tsx b/src/components/Analyze/index.tsx index e4db65d..b75652c 100644 --- a/src/components/Analyze/index.tsx +++ b/src/components/Analyze/index.tsx @@ -38,6 +38,9 @@ export const AnalyzePage = ({ return false; } + console.log('problem.fullFilePath: ', problem.fullFilePath); + console.log('currentWorkSpaceProject: ', currentWorkSpaceProject); + if (problem.fullFilePath === currentWorkSpaceProject) { return true; } @@ -52,6 +55,9 @@ export const AnalyzePage = ({ return false; } + console.log('currentEditor: ', currentEditor); + console.log('splitString: ', splitString); + if (splitString !== currentEditor && problem.isDiscarded === false) { return true; } diff --git a/src/context/UserContext.tsx b/src/context/UserContext.tsx index df612e6..7c36ec0 100644 --- a/src/context/UserContext.tsx +++ b/src/context/UserContext.tsx @@ -129,7 +129,11 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => { } break; case EventDataType.CURRENT_FILE: - const filename: string | undefined = payload.fileName.split('/').pop(); + const filename: string | undefined = payload.fileName + .split('/') + .pop() + ?.replace('.git', ''); + if (!filename) { setCurrentEditor(undefined); break; diff --git a/src/state/atoms/index.ts b/src/state/atoms/index.ts index 56de965..9a121f6 100644 --- a/src/state/atoms/index.ts +++ b/src/state/atoms/index.ts @@ -56,10 +56,10 @@ export const identifiedProblems = atom({ export const currentEditor = atom({ default: undefined, - key: 'Metabob:currentEditor' + key: 'Metabob:currentEditor', }) export const currentWorkSpaceProject = atom({ default: undefined, - key: 'Metabob:currentWorkSpaceProject' + key: 'Metabob:currentWorkSpaceProject', }) \ No newline at end of file From 48dc5f45e1256f1aa55f136c0e64daf29044d4c4 Mon Sep 17 00:00:00 2001 From: Yasir Aslam Date: Fri, 23 Feb 2024 19:08:07 +0500 Subject: [PATCH 2/3] feat: reset application state when webview resolves --- ext-src/providers/recommendation.provider.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ext-src/providers/recommendation.provider.ts b/ext-src/providers/recommendation.provider.ts index f38a636..306b9f1 100644 --- a/ext-src/providers/recommendation.provider.ts +++ b/ext-src/providers/recommendation.provider.ts @@ -108,7 +108,12 @@ export class RecommendationWebView implements WebviewViewProvider { name: currentWorkSpaceFolder, }, }); - }, 600); + + this.extensionEventEmitter.fire({ + type: 'onDiscardSuggestionClicked:Success', + data: {}, + }); + }, 500); } } @@ -133,12 +138,6 @@ export class RecommendationWebView implements WebviewViewProvider { } this.eventEmitterQueue = []; - debugChannel.appendLine( - 'Metabob webview is visible now. Cleanup Events: ' + this.eventEmitterQueue.length, - ); - debugChannel.appendLine('this.intervals: ' + this.interval); - - clearInterval(this.interval); } activateExtensionEventListener(): void { From acbcb95dc3a775b8cf066d4bedc1551079ee14cd Mon Sep 17 00:00:00 2001 From: Yasir Aslam Date: Sat, 24 Feb 2024 02:26:00 +0500 Subject: [PATCH 3/3] fix: event delivery issue --- ext-src/commands/DetailDocument.ts | 7 ++ ext-src/extension.ts | 59 ++++++++++----- ext-src/providers/recommendation.provider.ts | 77 ++++++++++---------- ext-src/utils.ts | 14 +++- src/context/UserContext.tsx | 41 ++++++++++- 5 files changed, 137 insertions(+), 61 deletions(-) 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;