From 60ef9125ab57e8308581f2085046bf2f6bd29cd1 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 2 Feb 2023 12:39:36 -0600 Subject: [PATCH] Enable restoring a selected kernel that is not yet registered Fix #171385 --- .../contrib/notebook/browser/notebookEditorWidget.ts | 8 +------- .../browser/services/notebookKernelServiceImpl.ts | 10 ++++++++++ .../contrib/notebook/common/notebookKernelService.ts | 6 ++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts index 4ee2867f1cb25..bc619fc57c76b 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts @@ -1640,13 +1640,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD private _restoreSelectedKernel(viewState: INotebookEditorViewState | undefined): void { if (viewState?.selectedKernelId && this.textModel) { - const matching = this.notebookKernelService.getMatchingKernel(this.textModel); - const kernel = matching.all.find(k => k.id === viewState.selectedKernelId); - // Selected kernel may have already been picked prior to the view state loading - // If so, don't overwrite it with the saved kernel. - if (kernel && !matching.selected) { - this.notebookKernelService.selectKernelForNotebook(kernel, this.textModel); - } + this.notebookKernelService.restoreKernelIdForNotebook(viewState.selectedKernelId, this.textModel); } } diff --git a/src/vs/workbench/contrib/notebook/browser/services/notebookKernelServiceImpl.ts b/src/vs/workbench/contrib/notebook/browser/services/notebookKernelServiceImpl.ts index faadb661ad5c6..a692eede15390 100644 --- a/src/vs/workbench/contrib/notebook/browser/services/notebookKernelServiceImpl.ts +++ b/src/vs/workbench/contrib/notebook/browser/services/notebookKernelServiceImpl.ts @@ -282,6 +282,16 @@ export class NotebookKernelService extends Disposable implements INotebookKernel } } + restoreKernelIdForNotebook(kernelId: string, notebook: INotebookTextModelLike): void { + const key = NotebookTextModelLikeId.str(notebook); + const oldKernel = this._notebookBindings.get(key); + if (!oldKernel) { + this._notebookBindings.set(key, kernelId); + this._onDidChangeNotebookKernelBinding.fire({ notebook: notebook.uri, oldKernel, newKernel: kernelId }); + this._persistMementos(); + } + } + preselectKernelForNotebook(kernel: INotebookKernel, notebook: INotebookTextModelLike): void { const key = NotebookTextModelLikeId.str(notebook); const oldKernel = this._notebookBindings.get(key); diff --git a/src/vs/workbench/contrib/notebook/common/notebookKernelService.ts b/src/vs/workbench/contrib/notebook/common/notebookKernelService.ts index 5786526435fad..0ab0ebab35899 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookKernelService.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookKernelService.ts @@ -117,6 +117,12 @@ export interface INotebookKernelService { */ selectKernelForNotebook(kernel: INotebookKernel, notebook: INotebookTextModelLike): void; + /** + * Restore a previously selected kernel id. The kernel may or may not be registered yet + * when this is called. + */ + restoreKernelIdForNotebook(kernelId: string, notebook: INotebookTextModelLike): void; + /** * Set the kernel that a notebook should use when it starts up */