diff --git a/extensions/mssql/src/objectExplorerNodeProvider/hdfsCommands.ts b/extensions/mssql/src/objectExplorerNodeProvider/hdfsCommands.ts index e1db838b1a..2631060317 100644 --- a/extensions/mssql/src/objectExplorerNodeProvider/hdfsCommands.ts +++ b/extensions/mssql/src/objectExplorerNodeProvider/hdfsCommands.ts @@ -305,11 +305,20 @@ export class PreviewFileCommand extends ProgressCommand { await this.executeWithProgress( async (cancelToken: vscode.CancellationTokenSource) => { let contents = await fileNode.getFileContentsAsString(PreviewFileCommand.DefaultMaxSize); - let doc = await this.openTextDocument(fspath.basename(fileNode.hdfsPath)); - let editor = await this.apiWrapper.showTextDocument(doc, vscode.ViewColumn.Active, false); - await editor.edit(edit => { - edit.insert(new vscode.Position(0, 0), contents); - }); + let fileName: string = fspath.basename(fileNode.hdfsPath); + if (fspath.extname(fileName) !== '.ipynb') { + let doc = await this.openTextDocument(fileName); + let editor = await this.apiWrapper.showTextDocument(doc, vscode.ViewColumn.Active, false); + await editor.edit(edit => { + edit.insert(new vscode.Position(0, 0), contents); + }); + } else { + let connectionProfile: azdata.IConnectionProfile = undefined; + if (context.type === constants.ObjectExplorerService) { + connectionProfile = context.explorerContext.connectionProfile; + } + await this.showNotebookDocument(fileName, connectionProfile, contents); + } }, localize('previewing', 'Generating preview'), false); @@ -322,6 +331,18 @@ export class PreviewFileCommand extends ProgressCommand { } } + private async showNotebookDocument(fileName: string, connectionProfile?: azdata.IConnectionProfile, + initialContent?: string + ): Promise { + let docUri: vscode.Uri = getSaveableUri(this.apiWrapper, fileName, true) + .with({ scheme: constants.UNTITLED_SCHEMA }); + return await azdata.nb.showNotebookDocument(docUri, { + connectionProfile: connectionProfile, + preview: false, + initialContent: initialContent + }); + } + private async openTextDocument(fileName: string): Promise { let docUri: vscode.Uri = getSaveableUri(this.apiWrapper, fileName, true); if (docUri) { diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index ef1c18b2ad..cbc583d338 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -4155,6 +4155,11 @@ declare module 'azdata' { * Default kernel for notebook */ defaultKernel?: nb.IKernelSpec; + + /** + * Optional content used to give an initial notebook state + */ + initialContent?: nb.INotebookContents | string; } /** diff --git a/src/sql/workbench/api/node/extHostNotebookDocumentsAndEditors.ts b/src/sql/workbench/api/node/extHostNotebookDocumentsAndEditors.ts index 3214f4dbc5..412695156b 100644 --- a/src/sql/workbench/api/node/extHostNotebookDocumentsAndEditors.ts +++ b/src/sql/workbench/api/node/extHostNotebookDocumentsAndEditors.ts @@ -169,6 +169,13 @@ export class ExtHostNotebookDocumentsAndEditors implements ExtHostNotebookDocume options.providerId = showOptions.providerId; options.connectionProfile = showOptions.connectionProfile; options.defaultKernel = showOptions.defaultKernel; + if (showOptions.initialContent) { + if (typeof (showOptions.initialContent) !== 'string') { + options.initialContent = JSON.stringify(showOptions.initialContent); + } else { + options.initialContent = showOptions.initialContent; + } + } } let id = await this._proxy.$tryShowNotebookDocument(uri, options); let editor = this.getEditor(id); diff --git a/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts b/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts index f546b86155..fb6522e5e6 100644 --- a/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts +++ b/src/sql/workbench/api/node/mainThreadNotebookDocumentsAndEditors.ts @@ -404,7 +404,7 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements }; let isUntitled: boolean = uri.scheme === Schemas.untitled; - const fileInput = isUntitled ? this._untitledEditorService.createOrGet(uri, notebookModeId) : + const fileInput = isUntitled ? this._untitledEditorService.createOrGet(uri, notebookModeId, options.initialContent) : this._editorService.createInput({ resource: uri, language: notebookModeId }); let input = this._instantiationService.createInstance(NotebookInput, path.basename(uri.fsPath), uri, fileInput); input.isTrusted = isUntitled; diff --git a/src/sql/workbench/api/node/sqlExtHost.protocol.ts b/src/sql/workbench/api/node/sqlExtHost.protocol.ts index 13ded69af6..58dedf080f 100644 --- a/src/sql/workbench/api/node/sqlExtHost.protocol.ts +++ b/src/sql/workbench/api/node/sqlExtHost.protocol.ts @@ -854,6 +854,7 @@ export interface INotebookShowOptions { providerId?: string; connectionProfile?: azdata.IConnectionProfile; defaultKernel?: azdata.nb.IKernelSpec; + initialContent?: string; } export interface ExtHostNotebookDocumentsAndEditorsShape {