Skip to content

Commit 2d3d520

Browse files
committed
re microsoft#102503. send out save event after notebook content provider handles saving.
1 parent ccb2e96 commit 2d3d520

5 files changed

Lines changed: 36 additions & 18 deletions

File tree

src/vs/workbench/api/browser/mainThreadNotebook.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
305305
this._proxy.$acceptNotebookActiveKernelChange(e);
306306
}));
307307

308+
this._register(this._notebookService.onNotebookDocumentSaved(e => {
309+
this._proxy.$acceptModelSaved(e);
310+
}));
311+
308312
const updateOrder = () => {
309313
let userOrder = this.configurationService.getValue<string[]>('notebook.displayOrder');
310314
this._proxy.$acceptDisplayOrder({

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1633,6 +1633,7 @@ export interface ExtHostNotebookShape {
16331633
$renderOutputs2<T>(uriComponents: UriComponents, id: string, request: IOutputRenderRequest<T>): Promise<IOutputRenderResponse<T> | undefined>;
16341634
$onDidReceiveMessage(editorId: string, rendererId: string | undefined, message: unknown): void;
16351635
$acceptModelChanged(uriComponents: UriComponents, event: NotebookCellsChangedEvent): void;
1636+
$acceptModelSaved(uriComponents: UriComponents): void;
16361637
$acceptEditorPropertiesChanged(uriComponents: UriComponents, data: INotebookEditorPropertiesChangeData): void;
16371638
$acceptDocumentAndEditorsDelta(delta: INotebookDocumentsAndEditorsDelta): Promise<void>;
16381639
$undoNotebook(viewType: string, uri: UriComponents, editId: number, isDirty: boolean): Promise<void>;

src/vs/workbench/api/common/extHostNotebook.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import * as vscode from 'vscode';
6+
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
77
import { readonly } from 'vs/base/common/errors';
88
import { Emitter, Event } from 'vs/base/common/event';
9+
import { hash } from 'vs/base/common/hash';
910
import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
11+
import { Schemas } from 'vs/base/common/network';
12+
import { joinPath } from 'vs/base/common/resources';
1013
import { ISplice } from 'vs/base/common/sequence';
14+
import { NotImplementedProxy } from 'vs/base/common/types';
1115
import { URI, UriComponents } from 'vs/base/common/uri';
1216
import * as UUID from 'vs/base/common/uuid';
1317
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
14-
import { CellKind, ExtHostNotebookShape, IMainContext, MainContext, MainThreadNotebookShape, NotebookCellOutputsSplice, MainThreadDocumentsShape, INotebookEditorPropertiesChangeData, INotebookDocumentsAndEditorsDelta } from 'vs/workbench/api/common/extHost.protocol';
18+
import { CellKind, ExtHostNotebookShape, IMainContext, INotebookDocumentsAndEditorsDelta, INotebookEditorPropertiesChangeData, MainContext, MainThreadDocumentsShape, MainThreadNotebookShape, NotebookCellOutputsSplice } from 'vs/workbench/api/common/extHost.protocol';
1519
import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
16-
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
17-
import { CellEditType, diff, ICellEditOperation, ICellInsertEdit, INotebookDisplayOrder, INotebookEditData, NotebookCellsChangedEvent, NotebookCellsSplice2, ICellDeleteEdit, notebookDocumentMetadataDefaults, NotebookCellsChangeType, NotebookDataDto, IOutputRenderRequest, IOutputRenderResponse, IOutputRenderResponseOutputInfo, IOutputRenderResponseCellInfo, IRawOutput, CellOutputKind, IProcessedOutput, INotebookKernelInfoDto2, IMainCellDto, NotebookCellMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
18-
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
19-
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
2020
import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData';
21-
import { NotImplementedProxy } from 'vs/base/common/types';
21+
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
22+
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
2223
import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters';
24+
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
2325
import { asWebviewUri, WebviewInitData } from 'vs/workbench/api/common/shared/webview';
24-
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
25-
import { joinPath } from 'vs/base/common/resources';
26-
import { Schemas } from 'vs/base/common/network';
27-
import { hash } from 'vs/base/common/hash';
26+
import { CellEditType, CellOutputKind, diff, ICellDeleteEdit, ICellEditOperation, ICellInsertEdit, IMainCellDto, INotebookDisplayOrder, INotebookEditData, INotebookKernelInfoDto2, IOutputRenderRequest, IOutputRenderResponse, IOutputRenderResponseCellInfo, IOutputRenderResponseOutputInfo, IProcessedOutput, IRawOutput, NotebookCellMetadata, NotebookCellsChangedEvent, NotebookCellsChangeType, NotebookCellsSplice2, NotebookDataDto, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
27+
import * as vscode from 'vscode';
2828
import { Cache } from './cache';
2929

3030
interface IObservable<T> {
@@ -895,7 +895,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
895895
private readonly _notebookKernelProviders = new Map<number, ExtHostNotebookKernelProviderAdapter>();
896896
private readonly _documents = new Map<string, ExtHostNotebookDocument>();
897897
private readonly _unInitializedDocuments = new Map<string, ExtHostNotebookDocument>();
898-
private readonly _editors = new Map<string, { editor: ExtHostNotebookEditor }>();
898+
private readonly _editors = new Map<string, { editor: ExtHostNotebookEditor; }>();
899899
private readonly _webviewComm = new Map<string, ExtHostWebviewCommWrapper>();
900900
private readonly _notebookOutputRenderers = new Map<string, ExtHostNotebookOutputRenderer>();
901901
private readonly _renderersUsedInNotebooks = new WeakMap<ExtHostNotebookDocument, Set<ExtHostNotebookOutputRenderer>>();
@@ -933,7 +933,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
933933
private _onDidSaveNotebookDocument = new Emitter<vscode.NotebookDocument>();
934934
onDidSaveNotebookDocument: Event<vscode.NotebookDocument> = this._onDidCloseNotebookDocument.event;
935935
visibleNotebookEditors: ExtHostNotebookEditor[] = [];
936-
private _onDidChangeActiveNotebookKernel = new Emitter<{ document: ExtHostNotebookDocument, kernel: vscode.NotebookKernel | undefined }>();
936+
private _onDidChangeActiveNotebookKernel = new Emitter<{ document: ExtHostNotebookDocument, kernel: vscode.NotebookKernel | undefined; }>();
937937
onDidChangeActiveNotebookKernel = this._onDidChangeActiveNotebookKernel.event;
938938
private _onDidChangeVisibleNotebookEditors = new Emitter<vscode.NotebookEditor[]>();
939939
onDidChangeVisibleNotebookEditors = this._onDidChangeVisibleNotebookEditors.event;
@@ -1413,7 +1413,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
14131413
this._outputDisplayOrder = displayOrder;
14141414
}
14151415

1416-
$acceptNotebookActiveKernelChange(event: { uri: UriComponents, providerHandle: number | undefined, kernelId: string | undefined }) {
1416+
$acceptNotebookActiveKernelChange(event: { uri: UriComponents, providerHandle: number | undefined, kernelId: string | undefined; }) {
14171417
if (event.providerHandle !== undefined) {
14181418
this._withAdapter(event.providerHandle, event.uri, async (adapter, document) => {
14191419
const kernel = event.kernelId ? adapter.getKernel(event.kernelId) : undefined;
@@ -1430,7 +1430,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
14301430
// TODO: remove document - editor one on one mapping
14311431
private _getEditorFromURI(uriComponents: UriComponents) {
14321432
const uriStr = URI.revive(uriComponents).toString();
1433-
let editor: { editor: ExtHostNotebookEditor } | undefined;
1433+
let editor: { editor: ExtHostNotebookEditor; } | undefined;
14341434
this._editors.forEach(e => {
14351435
if (e.editor.uri.toString() === uriStr) {
14361436
editor = e;
@@ -1625,7 +1625,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
16251625
});
16261626
}
16271627

1628-
const removedEditors: { editor: ExtHostNotebookEditor }[] = [];
1628+
const removedEditors: { editor: ExtHostNotebookEditor; }[] = [];
16291629

16301630
if (delta.removedEditors) {
16311631
delta.removedEditors.forEach(editorid => {

src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ export class NotebookService extends Disposable implements INotebookService, ICu
253253
public readonly onNotebookDocumentAdd: Event<URI[]> = this._onNotebookDocumentAdd.event;
254254
private readonly _onNotebookDocumentRemove: Emitter<URI[]> = this._register(new Emitter<URI[]>());
255255
public readonly onNotebookDocumentRemove: Event<URI[]> = this._onNotebookDocumentRemove.event;
256+
private readonly _onNotebookDocumentSaved: Emitter<URI> = this._register(new Emitter<URI>());
257+
public readonly onNotebookDocumentSaved: Event<URI> = this._onNotebookDocumentSaved.event;
256258
private readonly _notebookEditors = new Map<string, INotebookEditor>();
257259

258260
private readonly _onDidChangeViewTypes = new Emitter<void>();
@@ -1019,7 +1021,12 @@ export class NotebookService extends Disposable implements INotebookService, ICu
10191021
const provider = this._notebookProviders.get(viewType);
10201022

10211023
if (provider) {
1022-
return provider.controller.save(resource, token);
1024+
const ret = await provider.controller.save(resource, token);
1025+
if (ret) {
1026+
this._onNotebookDocumentSaved.fire(resource);
1027+
}
1028+
1029+
return ret;
10231030
}
10241031

10251032
return false;
@@ -1029,7 +1036,12 @@ export class NotebookService extends Disposable implements INotebookService, ICu
10291036
const provider = this._notebookProviders.get(viewType);
10301037

10311038
if (provider) {
1032-
return provider.controller.saveAs(resource, target, token);
1039+
const ret = await provider.controller.saveAs(resource, target, token);
1040+
if (ret) {
1041+
this._onNotebookDocumentSaved.fire(resource);
1042+
}
1043+
1044+
return ret;
10331045
}
10341046

10351047
return false;

src/vs/workbench/contrib/notebook/common/notebookService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface INotebookService {
4646
onNotebookEditorsRemove: Event<IEditor[]>;
4747
onNotebookDocumentRemove: Event<URI[]>;
4848
onNotebookDocumentAdd: Event<URI[]>;
49+
onNotebookDocumentSaved: Event<URI>;
4950
onDidChangeKernels: Event<void>;
5051
onDidChangeNotebookActiveKernel: Event<{ uri: URI, providerHandle: number | undefined, kernelId: string | undefined }>;
5152
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController): void;

0 commit comments

Comments
 (0)