declare cancellation support for openNotebook and wire it up, exempt notebook content provider from provider naming rules
This commit is contained in:
parent
0e04c15de4
commit
98a22a957a
|
@ -985,7 +985,8 @@
|
||||||
"CustomEditorProvider",
|
"CustomEditorProvider",
|
||||||
"CustomReadonlyEditorProvider",
|
"CustomReadonlyEditorProvider",
|
||||||
"TerminalLinkProvider",
|
"TerminalLinkProvider",
|
||||||
"AuthenticationProvider"
|
"AuthenticationProvider",
|
||||||
|
"NotebookContentProvider"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
26
src/vs/vscode.proposed.d.ts
vendored
26
src/vs/vscode.proposed.d.ts
vendored
|
@ -1555,27 +1555,27 @@ declare module 'vscode' {
|
||||||
readonly backupId?: string;
|
readonly backupId?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo@API use openNotebookDOCUMENT to align with openCustomDocument etc?
|
||||||
export interface NotebookContentProvider {
|
export interface NotebookContentProvider {
|
||||||
|
|
||||||
readonly options?: NotebookDocumentContentOptions;
|
readonly options?: NotebookDocumentContentOptions;
|
||||||
readonly onDidChangeNotebookContentOptions?: Event<NotebookDocumentContentOptions>;
|
readonly onDidChangeNotebookContentOptions?: Event<NotebookDocumentContentOptions>;
|
||||||
|
|
||||||
|
// todo@API remove! against separation of data provider and renderer
|
||||||
|
// eslint-disable-next-line vscode-dts-cancellation
|
||||||
|
resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Content providers should always use [file system providers](#FileSystemProvider) to
|
* Content providers should always use [file system providers](#FileSystemProvider) to
|
||||||
* resolve the raw content for `uri` as the resouce is not necessarily a file on disk.
|
* resolve the raw content for `uri` as the resouce is not necessarily a file on disk.
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line vscode-dts-provider-naming
|
openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext, token: CancellationToken): NotebookData | Thenable<NotebookData>;
|
||||||
openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext): NotebookData | Thenable<NotebookData>;
|
|
||||||
// eslint-disable-next-line vscode-dts-provider-naming
|
|
||||||
// eslint-disable-next-line vscode-dts-cancellation
|
|
||||||
resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
|
|
||||||
// eslint-disable-next-line vscode-dts-provider-naming
|
|
||||||
saveNotebook(document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
|
|
||||||
// eslint-disable-next-line vscode-dts-provider-naming
|
|
||||||
saveNotebookAs(targetResource: Uri, document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
|
|
||||||
// eslint-disable-next-line vscode-dts-provider-naming
|
|
||||||
backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, cancellation: CancellationToken): Thenable<NotebookDocumentBackup>;
|
|
||||||
|
|
||||||
// ???
|
saveNotebook(document: NotebookDocument, token: CancellationToken): Thenable<void>;
|
||||||
// provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult<T[]>;
|
|
||||||
|
saveNotebookAs(targetResource: Uri, document: NotebookDocument, token: CancellationToken): Thenable<void>;
|
||||||
|
|
||||||
|
backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, token: CancellationToken): Thenable<NotebookDocumentBackup>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export namespace notebook {
|
export namespace notebook {
|
||||||
|
|
|
@ -403,8 +403,8 @@ export class MainThreadNotebooks implements MainThreadNotebookShape {
|
||||||
contentOptions.transientOutputs = newOptions.transientOutputs;
|
contentOptions.transientOutputs = newOptions.transientOutputs;
|
||||||
},
|
},
|
||||||
viewOptions: options.viewOptions,
|
viewOptions: options.viewOptions,
|
||||||
openNotebook: async (viewType: string, uri: URI, backupId?: string) => {
|
openNotebook: async (viewType: string, uri: URI, backupId: string | undefined, token: CancellationToken) => {
|
||||||
const data = await this._proxy.$openNotebook(viewType, uri, backupId);
|
const data = await this._proxy.$openNotebook(viewType, uri, backupId, token);
|
||||||
return {
|
return {
|
||||||
data,
|
data,
|
||||||
transientOptions: contentOptions
|
transientOptions: contentOptions
|
||||||
|
|
|
@ -1863,7 +1863,7 @@ export interface ExtHostNotebookShape {
|
||||||
$executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined): Promise<void>;
|
$executeNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined): Promise<void>;
|
||||||
$cancelNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined): Promise<void>;
|
$cancelNotebookKernelFromProvider(handle: number, uri: UriComponents, kernelId: string, cellHandle: number | undefined): Promise<void>;
|
||||||
$onDidReceiveMessage(editorId: string, rendererId: string | undefined, message: unknown): void;
|
$onDidReceiveMessage(editorId: string, rendererId: string | undefined, message: unknown): void;
|
||||||
$openNotebook(viewType: string, uri: UriComponents, backupId?: string): Promise<NotebookDataDto>;
|
$openNotebook(viewType: string, uri: UriComponents, backupId: string | undefined, token: CancellationToken): Promise<NotebookDataDto>;
|
||||||
$saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean>;
|
$saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean>;
|
||||||
$saveNotebookAs(viewType: string, uri: UriComponents, target: UriComponents, token: CancellationToken): Promise<boolean>;
|
$saveNotebookAs(viewType: string, uri: UriComponents, target: UriComponents, token: CancellationToken): Promise<boolean>;
|
||||||
$backupNotebook(viewType: string, uri: UriComponents, cancellation: CancellationToken): Promise<string>;
|
$backupNotebook(viewType: string, uri: UriComponents, cancellation: CancellationToken): Promise<string>;
|
||||||
|
|
|
@ -497,9 +497,9 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
|
||||||
|
|
||||||
// --- open, save, saveAs, backup
|
// --- open, save, saveAs, backup
|
||||||
|
|
||||||
async $openNotebook(viewType: string, uri: UriComponents, backupId?: string): Promise<NotebookDataDto> {
|
async $openNotebook(viewType: string, uri: UriComponents, backupId: string | undefined, token: CancellationToken): Promise<NotebookDataDto> {
|
||||||
const { provider } = this._getProviderData(viewType);
|
const { provider } = this._getProviderData(viewType);
|
||||||
const data = await provider.openNotebook(URI.revive(uri), { backupId });
|
const data = await provider.openNotebook(URI.revive(uri), { backupId }, token);
|
||||||
return {
|
return {
|
||||||
metadata: {
|
metadata: {
|
||||||
...notebookDocumentMetadataDefaults,
|
...notebookDocumentMetadataDefaults,
|
||||||
|
|
|
@ -512,12 +512,12 @@ export class NotebookService extends Disposable implements INotebookService, IEd
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async fetchNotebookRawData(viewType: string, uri: URI, backupId?: string): Promise<{ data: NotebookDataDto, transientOptions: TransientOptions }> {
|
async fetchNotebookRawData(viewType: string, uri: URI, backupId: string | undefined, token: CancellationToken): Promise<{ data: NotebookDataDto, transientOptions: TransientOptions }> {
|
||||||
if (!await this.canResolve(viewType)) {
|
if (!await this.canResolve(viewType)) {
|
||||||
throw new Error(`CANNOT fetch notebook data, there is NO provider for '${viewType}'`);
|
throw new Error(`CANNOT fetch notebook data, there is NO provider for '${viewType}'`);
|
||||||
}
|
}
|
||||||
const provider = this._withProvider(viewType)!;
|
const provider = this._withProvider(viewType)!;
|
||||||
return await provider.controller.openNotebook(viewType, uri, backupId);
|
return await provider.controller.openNotebook(viewType, uri, backupId, token);
|
||||||
}
|
}
|
||||||
|
|
||||||
async save(viewType: string, resource: URI, token: CancellationToken): Promise<boolean> {
|
async save(viewType: string, resource: URI, token: CancellationToken): Promise<boolean> {
|
||||||
|
|
|
@ -170,7 +170,7 @@ export class NotebookEditorModel extends EditorModel implements INotebookEditorM
|
||||||
|
|
||||||
private async _loadFromProvider(backupId: string | undefined): Promise<void> {
|
private async _loadFromProvider(backupId: string | undefined): Promise<void> {
|
||||||
|
|
||||||
const data = await this._notebookService.fetchNotebookRawData(this.viewType, this.resource, backupId);
|
const data = await this._notebookService.fetchNotebookRawData(this.viewType, this.resource, backupId, CancellationToken.None);
|
||||||
this._lastResolvedFileStat = await this._resolveStats(this.resource);
|
this._lastResolvedFileStat = await this._resolveStats(this.resource);
|
||||||
|
|
||||||
if (this.isDisposed()) {
|
if (this.isDisposed()) {
|
||||||
|
|
|
@ -22,9 +22,10 @@ export const INotebookService = createDecorator<INotebookService>('notebookServi
|
||||||
export interface IMainNotebookController {
|
export interface IMainNotebookController {
|
||||||
viewOptions?: { displayName: string; filenamePattern: (string | IRelativePattern | INotebookExclusiveDocumentFilter)[]; exclusive: boolean; };
|
viewOptions?: { displayName: string; filenamePattern: (string | IRelativePattern | INotebookExclusiveDocumentFilter)[]; exclusive: boolean; };
|
||||||
options: { transientOutputs: boolean; transientMetadata: TransientMetadata; };
|
options: { transientOutputs: boolean; transientMetadata: TransientMetadata; };
|
||||||
openNotebook(viewType: string, uri: URI, backupId?: string): Promise<{ data: NotebookDataDto, transientOptions: TransientOptions; }>;
|
|
||||||
resolveNotebookEditor(viewType: string, uri: URI, editorId: string): Promise<void>;
|
resolveNotebookEditor(viewType: string, uri: URI, editorId: string): Promise<void>;
|
||||||
onDidReceiveMessage(editorId: string, rendererType: string | undefined, message: any): void;
|
onDidReceiveMessage(editorId: string, rendererType: string | undefined, message: any): void;
|
||||||
|
|
||||||
|
openNotebook(viewType: string, uri: URI, backupId: string | undefined, token: CancellationToken): Promise<{ data: NotebookDataDto, transientOptions: TransientOptions; }>;
|
||||||
save(uri: URI, token: CancellationToken): Promise<boolean>;
|
save(uri: URI, token: CancellationToken): Promise<boolean>;
|
||||||
saveAs(uri: URI, target: URI, token: CancellationToken): Promise<boolean>;
|
saveAs(uri: URI, target: URI, token: CancellationToken): Promise<boolean>;
|
||||||
backup(uri: URI, token: CancellationToken): Promise<string>;
|
backup(uri: URI, token: CancellationToken): Promise<string>;
|
||||||
|
@ -66,7 +67,7 @@ export interface INotebookService {
|
||||||
getNotebookProviderResourceRoots(): URI[];
|
getNotebookProviderResourceRoots(): URI[];
|
||||||
destoryNotebookDocument(viewType: string, notebook: INotebookTextModel): void;
|
destoryNotebookDocument(viewType: string, notebook: INotebookTextModel): void;
|
||||||
|
|
||||||
fetchNotebookRawData(viewType: string, uri: URI, backupId?: string): Promise<INotebookRawData>;
|
fetchNotebookRawData(viewType: string, uri: URI, backupId: string | undefined, token: CancellationToken): Promise<INotebookRawData>;
|
||||||
save(viewType: string, resource: URI, token: CancellationToken): Promise<boolean>;
|
save(viewType: string, resource: URI, token: CancellationToken): Promise<boolean>;
|
||||||
saveAs(viewType: string, resource: URI, target: URI, token: CancellationToken): Promise<boolean>;
|
saveAs(viewType: string, resource: URI, target: URI, token: CancellationToken): Promise<boolean>;
|
||||||
backup(viewType: string, uri: URI, token: CancellationToken): Promise<string | undefined>;
|
backup(viewType: string, uri: URI, token: CancellationToken): Promise<string | undefined>;
|
||||||
|
|
Loading…
Reference in a new issue