mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-27 17:23:21 -05:00
Update kernels dropdown after installing a notebook extension (#20759)
This commit is contained in:
@@ -54,6 +54,7 @@ import { DEFAULT_NB_LANGUAGE_MODE, INTERACTIVE_LANGUAGE_MODE, INTERACTIVE_PROVID
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { SqlSerializationProvider } from 'sql/workbench/services/notebook/browser/sql/sqlSerializationProvider';
|
||||
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
|
||||
import { IStandardKernelWithProvider } from 'sql/workbench/services/notebook/browser/models/notebookUtils';
|
||||
|
||||
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
||||
|
||||
@@ -178,6 +179,7 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
private _onNotebookEditorAdd = new Emitter<INotebookEditor>();
|
||||
private _onNotebookEditorRemove = new Emitter<INotebookEditor>();
|
||||
private _onNotebookEditorRename = new Emitter<INotebookEditor>();
|
||||
private _onNotebookKernelsAdded = new Emitter<IStandardKernelWithProvider[]>();
|
||||
private _editors = new Map<string, INotebookEditor>();
|
||||
private _fileToProviderDescriptions = new Map<string, ProviderDescriptionRegistration[]>();
|
||||
private _providerToStandardKernels = new Map<string, StandardKernelsDescriptor>(); // Note: providerId key here should be in upper case
|
||||
@@ -426,7 +428,7 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
if (!this._executeProviders.has(p.id)) {
|
||||
this._executeProviders.set(p.id, new ExecuteProviderDescriptor(p.id));
|
||||
}
|
||||
this.addStandardKernels(registration);
|
||||
this.addStandardKernels(registration, registration.fileExtensions);
|
||||
} else {
|
||||
// Standard kernels might get registered later for VSCode notebooks, so add a descriptor to wait on
|
||||
if (!this._providerToStandardKernels.has(p.id)) {
|
||||
@@ -506,7 +508,7 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
// in the kernels dropdown list before a SessionManager has been started; this way,
|
||||
// every NotebookProvider doesn't need to have an active SessionManager in order to contribute
|
||||
// kernels to the dropdown
|
||||
private addStandardKernels(provider: ProviderDescriptionRegistration) {
|
||||
private addStandardKernels(provider: ProviderDescriptionRegistration, supportedFileExtensions?: string[]) {
|
||||
let providerUpperCase = provider.provider.toUpperCase();
|
||||
let descriptor = this._providerToStandardKernels.get(providerUpperCase);
|
||||
if (!descriptor) {
|
||||
@@ -526,6 +528,20 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
}
|
||||
descriptor.instance = standardKernels;
|
||||
this._providerToStandardKernels.set(providerUpperCase, descriptor);
|
||||
|
||||
// Emit update event if the provider is not one of the default options
|
||||
if (provider.provider !== SQL_NOTEBOOK_PROVIDER && provider.provider !== JUPYTER_PROVIDER_ID && standardKernels.length > 0) {
|
||||
this._onNotebookKernelsAdded.fire(standardKernels.map(kernel => {
|
||||
return {
|
||||
name: kernel.name,
|
||||
displayName: kernel.displayName,
|
||||
connectionProviderIds: kernel.connectionProviderIds,
|
||||
notebookProvider: provider.provider,
|
||||
supportedLanguages: kernel.supportedLanguages,
|
||||
supportedFileExtensions: supportedFileExtensions
|
||||
};
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
getSupportedFileExtensions(): string[] {
|
||||
@@ -632,6 +648,10 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
return this._onNotebookEditorRename.event;
|
||||
}
|
||||
|
||||
get onNotebookKernelsAdded(): Event<IStandardKernelWithProvider[]> {
|
||||
return this._onNotebookKernelsAdded.event;
|
||||
}
|
||||
|
||||
addNotebookEditor(editor: INotebookEditor): void {
|
||||
this._editors.set(editor.id, editor);
|
||||
this._onNotebookEditorAdd.fire(editor);
|
||||
|
||||
Reference in New Issue
Block a user