diff --git a/src/sql/workbench/contrib/notebook/browser/notebookActions.ts b/src/sql/workbench/contrib/notebook/browser/notebookActions.ts index 03bcbc1aec..58c868c48d 100644 --- a/src/sql/workbench/contrib/notebook/browser/notebookActions.ts +++ b/src/sql/workbench/contrib/notebook/browser/notebookActions.ts @@ -597,7 +597,7 @@ export class KernelsDropdown extends SelectBox { this._register(this.model.kernelChanged((changedArgs: azdata.nb.IKernelChangedArgs) => { this.updateKernel(changedArgs.newValue, changedArgs.nbKernelAlias); })); - this._register(this.model.kernelsChanged(kernel => { + this._register(this.model.kernelsAdded(kernel => { this.updateKernel(kernel); })); let kernel = this.model.clientSession && this.model.clientSession.kernel; diff --git a/src/sql/workbench/contrib/notebook/test/electron-browser/notebookModel.test.ts b/src/sql/workbench/contrib/notebook/test/electron-browser/notebookModel.test.ts index 0d1b52ccad..e2e7084208 100644 --- a/src/sql/workbench/contrib/notebook/test/electron-browser/notebookModel.test.ts +++ b/src/sql/workbench/contrib/notebook/test/electron-browser/notebookModel.test.ts @@ -1085,7 +1085,7 @@ suite('notebook model', function (): void { supportedFileExtensions: [DEFAULT_NOTEBOOK_FILETYPE] }; let kernelsAddedPromise = new Promise(resolve => { - model.kernelsChanged(kernel => { + model.kernelsAdded(kernel => { resolve(); }); }); @@ -1110,7 +1110,7 @@ suite('notebook model', function (): void { supportedFileExtensions: ['.html'] }; kernelsAddedPromise = new Promise((resolve, reject) => { - model.kernelsChanged(kernel => { + model.kernelsAdded(kernel => { reject('Should not have added a new kernel'); }); }); diff --git a/src/sql/workbench/services/notebook/browser/models/notebookModel.ts b/src/sql/workbench/services/notebook/browser/models/notebookModel.ts index 2dbbf4fd42..a0c0cf9ec3 100644 --- a/src/sql/workbench/services/notebook/browser/models/notebookModel.ts +++ b/src/sql/workbench/services/notebook/browser/models/notebookModel.ts @@ -84,6 +84,7 @@ export class NotebookModel extends Disposable implements INotebookModel { private _contextsLoadingEmitter = new Emitter(); private _contentChangedEmitter = new Emitter(); private _kernelsChangedEmitter = new Emitter(); + private _kernelsAddedEmitter = new Emitter(); private _kernelChangedEmitter = new Emitter(); private _viewModeChangedEmitter = new Emitter(); private _layoutChanged = new Emitter(); @@ -187,7 +188,7 @@ export class NotebookModel extends Disposable implements INotebookModel { let manager = await this._notebookService.getOrCreateExecuteManager(kernels[0].notebookProvider, this.notebookUri); this._notebookOptions.executeManagers.push(manager); - this._kernelsChangedEmitter.fire(this._activeClientSession?.kernel); + this._kernelsAddedEmitter.fire(this._activeClientSession?.kernel); } } @@ -256,6 +257,9 @@ export class NotebookModel extends Disposable implements INotebookModel { return this._activeClientSession; } + /** + * Event that gets fired after the kernel is changed from starting a session or selecting one from the kernel dropdown. + */ public get kernelChanged(): Event { return this._kernelChangedEmitter.event; } @@ -264,6 +268,13 @@ export class NotebookModel extends Disposable implements INotebookModel { return this._kernelsChangedEmitter.event; } + /** + * Event that gets fired when new kernels are added to the model from new notebook providers in the registry. + */ + public get kernelsAdded(): Event { + return this._kernelsAddedEmitter.event; + } + public get layoutChanged(): Event { return this._layoutChanged.event; } @@ -1279,7 +1290,9 @@ export class NotebookModel extends Disposable implements INotebookModel { private async updateKernelInfoOnKernelChange(kernel: nb.IKernel, kernelAlias?: string) { await this.updateKernelInfo(kernel); - kernelAlias = this.kernelAliases.find(kernel => this._defaultLanguageInfo?.name === kernel.toLowerCase()) ?? kernelAlias; + if (!kernelAlias) { + kernelAlias = this.kernelAliases.find(k => this._defaultLanguageInfo?.name === k.toLowerCase()); + } // In order to change from kernel alias to other kernel, set kernelAlias to undefined in order to update to new kernel language info if (this._selectedKernelDisplayName !== kernelAlias && this._selectedKernelDisplayName) { kernelAlias = undefined;