提交 f4755117 编写于 作者: R rebornix

kernel change event.

上级 f33c9c14
......@@ -1822,6 +1822,7 @@ declare module 'vscode' {
}
export interface NotebookKernel {
readonly id: string;
label: string;
description?: string;
isPreferred?: boolean;
......@@ -1890,8 +1891,7 @@ declare module 'vscode' {
*/
export function createConcatTextDocument(notebook: NotebookDocument, selector?: DocumentSelector): NotebookConcatTextDocument;
export let activeNotebookKernel: NotebookKernel | undefined;
export const onDidChangeActiveNotebookKernel: Event<void>;
export const onDidChangeActiveNotebookKernel: Event<{ document: NotebookDocument, kernel: NotebookKernel | undefined }>;
}
//#endregion
......
......@@ -308,6 +308,10 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
this._updateState();
}));
this._register(this._notebookService.onDidChangeNotebookActiveKernel(e => {
this._proxy.$acceptNotebookActiveKernelChange(e);
}));
const updateOrder = () => {
let userOrder = this.configurationService.getValue<string[]>('notebook.displayOrder');
this._proxy.$acceptDisplayOrder({
......@@ -464,8 +468,14 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
const provider = this._notebookService.registerNotebookKernelProvider({
onDidChangeKernels: emitter.event,
selector: documentFilter,
provideKernels: (uri: URI, token: CancellationToken) => {
return that._proxy.$provideNotebookKernels(handle, uri, token);
provideKernels: async (uri: URI, token: CancellationToken) => {
const kernels = await that._proxy.$provideNotebookKernels(handle, uri, token);
return kernels.map(kernel => {
return {
...kernel,
providerHandle: handle
};
});
},
resolveKernel: (editorId: string, uri: URI, kernelId: string, token: CancellationToken) => {
return that._proxy.$resolveNotebookKernel(handle, editorId, uri, kernelId, token);
......
......@@ -933,10 +933,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
checkProposedApiEnabled(extension);
return extHostNotebook.onDidChangeVisibleNotebookEditors;
},
get activeNotebookKernel() {
checkProposedApiEnabled(extension);
return extHostNotebook.activeNotebookKernel;
},
get onDidChangeActiveNotebookKernel() {
checkProposedApiEnabled(extension);
return extHostNotebook.onDidChangeActiveNotebookKernel;
......
......@@ -1623,6 +1623,7 @@ export interface ExtHostNotebookShape {
$saveNotebookAs(viewType: string, uri: UriComponents, target: UriComponents, token: CancellationToken): Promise<boolean>;
$backup(viewType: string, uri: UriComponents, cancellation: CancellationToken): Promise<string | undefined>;
$acceptDisplayOrder(displayOrder: INotebookDisplayOrder): void;
$acceptNotebookActiveKernelChange(event: { uri: UriComponents, providerHandle: number | undefined, kernelId: string | undefined }): void;
$renderOutputs(uriComponents: UriComponents, id: string, request: IOutputRenderRequest<UriComponents>): Promise<IOutputRenderResponse<UriComponents> | undefined>;
$renderOutputs2<T>(uriComponents: UriComponents, id: string, request: IOutputRenderRequest<T>): Promise<IOutputRenderResponse<T> | undefined>;
$onDidReceiveMessage(editorId: string, rendererId: string | undefined, message: unknown): void;
......
......@@ -767,11 +767,18 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
const data = await this._provider.provideKernels(document, token) || [];
const newMap = new Map<vscode.NotebookKernel, string>();
let kernel_unique_pool = 0;
let kernelIdCache = new Set<string>();
const transformedData: INotebookKernelInfoDto2[] = data.map(kernel => {
let id = this._kernelToId.get(kernel);
if (id === undefined) {
id = UUID.generateUuid();
if (kernel.id && kernelIdCache.has(kernel.id)) {
id = `${this._extension.identifier.value}_${kernel.id}_${kernel_unique_pool++}`;
} else {
id = `${this._extension.identifier.value}_${kernel.id || UUID.generateUuid()}`;
}
this._kernelToId.set(kernel, id);
}
......@@ -798,6 +805,10 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
return transformedData;
}
getKernel(kernelId: string) {
return this._idToKernel.get(kernelId);
}
async resolveNotebook(kernelId: string, document: ExtHostNotebookDocument, webview: vscode.NotebookCommunication, token: CancellationToken) {
const kernel = this._idToKernel.get(kernelId);
......@@ -864,9 +875,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
private _onDidCloseNotebookDocument = new Emitter<vscode.NotebookDocument>();
onDidCloseNotebookDocument: Event<vscode.NotebookDocument> = this._onDidCloseNotebookDocument.event;
visibleNotebookEditors: ExtHostNotebookEditor[] = [];
activeNotebookKernel?: vscode.NotebookKernel;
private _onDidChangeActiveNotebookKernel = new Emitter<void>();
private _onDidChangeActiveNotebookKernel = new Emitter<{ document: ExtHostNotebookDocument, kernel: vscode.NotebookKernel | undefined }>();
onDidChangeActiveNotebookKernel = this._onDidChangeActiveNotebookKernel.event;
private _onDidChangeVisibleNotebookEditors = new Emitter<vscode.NotebookEditor[]>();
onDidChangeVisibleNotebookEditors = this._onDidChangeVisibleNotebookEditors.event;
......@@ -1314,6 +1323,15 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
this._outputDisplayOrder = displayOrder;
}
$acceptNotebookActiveKernelChange(event: { uri: UriComponents, providerHandle: number | undefined, kernelId: string | undefined }) {
if (event.providerHandle !== undefined) {
this._withAdapter(event.providerHandle, event.uri, async (adapter, document) => {
const kernel = event.kernelId ? adapter.getKernel(event.kernelId) : undefined;
this._onDidChangeActiveNotebookKernel.fire({ document, kernel });
});
}
}
// TODO: remove document - editor one on one mapping
private _getEditorFromURI(uriComponents: UriComponents) {
const uriStr = URI.revive(uriComponents).toString();
......
......@@ -174,6 +174,7 @@ export class NotebookService extends Disposable implements INotebookService, ICu
private readonly _models = new Map<string, ModelData>();
private _onDidChangeActiveEditor = new Emitter<string | null>();
onDidChangeActiveEditor: Event<string | null> = this._onDidChangeActiveEditor.event;
private _activeEditorDisposables = new DisposableStore();
private _onDidChangeVisibleEditors = new Emitter<string[]>();
onDidChangeVisibleEditors: Event<string[]> = this._onDidChangeVisibleEditors.event;
private readonly _onNotebookEditorAdd: Emitter<INotebookEditor> = this._register(new Emitter<INotebookEditor>());
......@@ -191,6 +192,8 @@ export class NotebookService extends Disposable implements INotebookService, ICu
private readonly _onDidChangeKernels = new Emitter<void>();
onDidChangeKernels: Event<void> = this._onDidChangeKernels.event;
private readonly _onDidChangeNotebookActiveKernel = new Emitter<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }>();
onDidChangeNotebookActiveKernel: Event<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }> = this._onDidChangeNotebookActiveKernel.event;
private cutItems: NotebookCellTextModel[] | undefined;
private _lastClipboardIsCopy: boolean = true;
......@@ -768,6 +771,17 @@ export class NotebookService extends Disposable implements INotebookService, ICu
}
updateActiveNotebookEditor(editor: INotebookEditor | null) {
this._activeEditorDisposables.clear();
if (editor) {
this._activeEditorDisposables.add(editor.onDidChangeKernel(() => {
this._onDidChangeNotebookActiveKernel.fire({
uri: editor.uri!,
providerHandle: editor.activeKernel?.providerHandle,
kernelId: editor.activeKernel?.id
});
}));
}
this._onDidChangeActiveEditor.fire(editor ? editor.getId() : null);
}
......
......@@ -118,7 +118,9 @@ export interface INotebookKernelInfo {
extension: ExtensionIdentifier;
extensionLocation: URI,
preloads: URI[];
providerHandle?: number;
executeNotebook(viewType: string, uri: URI, handle: number | undefined, token: CancellationToken): Promise<void>;
}
export interface INotebookKernelInfoDto {
......@@ -641,6 +643,7 @@ export interface INotebookKernelInfoDto2 {
label: string;
extension: ExtensionIdentifier;
extensionLocation: URI;
providerHandle?: number;
description?: string;
isPreferred?: boolean;
preloads?: UriComponents[];
......
......@@ -43,6 +43,7 @@ export interface INotebookService {
onNotebookDocumentRemove: Event<URI[]>;
onNotebookDocumentAdd: Event<URI[]>;
onDidChangeKernels: Event<void>;
onDidChangeNotebookActiveKernel: Event<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }>;
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController): void;
unregisterNotebookProvider(viewType: string): void;
registerNotebookRenderer(id: string, renderer: INotebookRendererInfo): void;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册