diff --git a/vscode/microsoft-kiota/src/extension.ts b/vscode/microsoft-kiota/src/extension.ts index cfc16c15b5..45576ea78b 100644 --- a/vscode/microsoft-kiota/src/extension.ts +++ b/vscode/microsoft-kiota/src/extension.ts @@ -201,7 +201,7 @@ export async function activate( `${treeViewId}.searchOrOpenApiDescription`, async () => { const yesAnswer = vscode.l10n.t("Yes, override it"); - if (!openApiTreeProvider.isEmpty() && openApiTreeProvider.hasSelectionChanged()) { + if (!openApiTreeProvider.isEmpty() && openApiTreeProvider.hasChanges()) { const response = await vscode.window.showWarningMessage( vscode.l10n.t( "Before adding a new API description, consider that your changes and current selection will be lost."), @@ -249,6 +249,7 @@ export async function activate( clientOrPluginObject = clientObject; workspaceGenerationType = generationType; await loadEditPaths(clientOrPluginKey, clientObject, openApiTreeProvider); + openApiTreeProvider.resetInitialState(); await updateTreeViewIcons(treeViewId, false, true); }), registerCommandWithTelemetry(reporter,`${treeViewId}.regenerateButton`, async () => { @@ -441,10 +442,10 @@ export async function activate( async function displayGenerationResults(context: vscode.ExtensionContext, openApiTreeProvider: OpenApiTreeProvider, config: any, outputPath: string) { const clientNameOrPluginName = config.clientClassName || config.pluginName; openApiTreeProvider.refreshView(); - openApiTreeProvider.setSelectionChanged(false); const workspaceJsonPath = getWorkspaceJsonPath(); await loadLockFile({fsPath: workspaceJsonPath}, openApiTreeProvider, clientNameOrPluginName ); await vscode.commands.executeCommand('kiota.workspace.refresh'); + openApiTreeProvider.resetInitialState(); await updateTreeViewIcons(treeViewId, false, true); } async function regenerateClient(clientKey: string, clientObject:any, settings: ExtensionSettings, selectedPaths?: string[]): Promise { @@ -480,7 +481,7 @@ export async function activate( return result; }); void vscode.window.showInformationMessage(`Client ${clientKey} re-generated successfully.`); - openApiTreeProvider.setSelectionChanged(false); + openApiTreeProvider.resetInitialState(); } async function regeneratePlugin(clientKey: string, clientObject:any, settings: ExtensionSettings, selectedPaths?: string[]) { const pluginTypes = Array.isArray(clientObject.types) ? parsePluginType(clientObject.types) : [KiotaPluginType.ApiPlugin]; @@ -514,7 +515,7 @@ export async function activate( return result; }); void vscode.window.showInformationMessage(`Plugin ${clientKey} re-generated successfully.`); - openApiTreeProvider.setSelectionChanged(false); + openApiTreeProvider.resetInitialState(); } // create a new status bar item that we can now manage diff --git a/vscode/microsoft-kiota/src/openApiTreeProvider.ts b/vscode/microsoft-kiota/src/openApiTreeProvider.ts index 9763cfa1e8..c84ae71c3a 100644 --- a/vscode/microsoft-kiota/src/openApiTreeProvider.ts +++ b/vscode/microsoft-kiota/src/openApiTreeProvider.ts @@ -3,6 +3,7 @@ import * as os from 'os'; import * as path from 'path'; import * as vscode from 'vscode'; import * as rpc from 'vscode-jsonrpc/node'; +import * as crypto from 'crypto'; import { ClientObjectProperties, ClientOrPluginProperties, @@ -23,7 +24,7 @@ export class OpenApiTreeProvider implements vscode.TreeDataProvider = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; private apiTitle?: string; - private selectionChanged: boolean = false; + private initialStateHash: string = ''; constructor( private readonly context: vscode.ExtensionContext, private readonly settingsGetter: () => ExtensionSettings, @@ -168,17 +169,12 @@ export class OpenApiTreeProvider implements vscode.TreeDataProvider { this.closeDescription(false); this._descriptionUrl = descriptionUrl; const settings = this.settingsGetter(); await this.loadNodes(settings.clearCache); + this.initialStateHash = this.hashDescription(this.rawRootNode); this.refreshView(); } public get descriptionUrl(): string { @@ -196,7 +192,6 @@ export class OpenApiTreeProvider implements vscode.TreeDataProvider this.selectInternal(x, selected, recursive)); @@ -206,7 +201,6 @@ export class OpenApiTreeProvider implements vscode.TreeDataProvider