save kernel selection to memento if there is no isPreferred.

This commit is contained in:
rebornix 2020-07-23 15:30:42 -07:00
parent 3bd820b15c
commit 52dfde3e21

View file

@ -69,6 +69,8 @@ export class NotebookEditorOptions extends EditorOptions {
}
}
const NotebookEditorActiveKernelCache = 'workbench.editor.notebook.activeKernel';
export class NotebookEditorWidget extends Disposable implements INotebookEditor {
static readonly ID: string = 'workbench.editor.notebook';
private static readonly EDITOR_MEMENTOS = new Map<string, EditorMemento<unknown>>();
@ -98,6 +100,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
protected readonly _contributions: { [key: string]: INotebookEditorContribution; };
private _scrollBeyondLastLine: boolean;
private readonly _memento: Memento;
private readonly _activeKernelMemento: Memento;
private readonly _onDidFocusEmitter = this._register(new Emitter<void>());
public readonly onDidFocus = this._onDidFocusEmitter.event;
private _cellContextKeyManager: CellContextKeyManager | null = null;
@ -150,6 +153,10 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
this._activeKernel = kernel;
const memento = this._activeKernelMemento.getMemento(StorageScope.GLOBAL);
memento[this.viewModel!.viewType] = this._activeKernel?.id;
this._activeKernelMemento.saveMemento();
this._onDidChangeKernel.fire();
}
@ -196,6 +203,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
) {
super();
this._memento = new Memento(NotebookEditorWidget.ID, storageService);
this._activeKernelMemento = new Memento(NotebookEditorActiveKernelCache, storageService);
this._outputRenderer = new OutputRenderer(this, this.instantiationService);
this._contributions = {};
@ -612,12 +620,17 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
private async _setKernelsFromProviders(provider: NotebookProviderInfo, kernels: INotebookKernelInfo2[], tokenSource: CancellationTokenSource) {
const rawAssociations = this.configurationService.getValue<NotebookKernelProviderAssociations>(notebookKernelProviderAssociationsSettingId) || [];
const userSetKernelProvider = rawAssociations.filter(e => e.viewType === this.viewModel?.viewType)[0]?.kernelProvider;
const memento = this._activeKernelMemento.getMemento(StorageScope.GLOBAL);
if (userSetKernelProvider) {
const filteredKernels = kernels.filter(kernel => kernel.extension.value === userSetKernelProvider);
if (filteredKernels.length) {
this.activeKernel = filteredKernels.find(kernel => kernel.isPreferred) || filteredKernels[0];
const cachedKernelId = memento[provider.id];
this.activeKernel =
filteredKernels.find(kernel => kernel.isPreferred)
|| filteredKernels.find(kernel => kernel.id === cachedKernelId)
|| filteredKernels[0];
} else {
this.activeKernel = undefined;
}
@ -627,6 +640,9 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
await this.activeKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
}
memento[provider.id] = this._activeKernel?.id;
this._activeKernelMemento.saveMemento();
tokenSource.dispose();
return;
}
@ -634,10 +650,17 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
// choose a preferred kernel
const kernelsFromSameExtension = kernels.filter(kernel => kernel.extension.value === provider.providerExtensionId);
if (kernelsFromSameExtension.length) {
const preferedKernel = kernelsFromSameExtension.find(kernel => kernel.isPreferred) || kernelsFromSameExtension[0];
const cachedKernelId = memento[provider.id];
const preferedKernel = kernelsFromSameExtension.find(kernel => kernel.isPreferred)
|| kernelsFromSameExtension.find(kernel => kernel.id === cachedKernelId)
|| kernelsFromSameExtension[0];
this.activeKernel = preferedKernel;
await this._loadKernelPreloads(this.activeKernel.extensionLocation, this.activeKernel);
await preferedKernel.resolve(this.viewModel!.uri, this.getId(), tokenSource.token);
memento[provider.id] = this._activeKernel?.id;
this._activeKernelMemento.saveMemento();
tokenSource.dispose();
return;
}