mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-11 10:38:31 -05:00
Fix async problem with jupyter book viewlet loading (#7591)
* Fix async problem with jupyter book viewlet * PR Feedback
This commit is contained in:
@@ -13,6 +13,7 @@ import { BookTreeItem } from './bookTreeItem';
|
||||
import * as nls from 'vscode-nls';
|
||||
import { isEditorTitleFree } from '../common/utils';
|
||||
import { BookModel } from './bookModel';
|
||||
import { Deferred } from '../common/promise';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
@@ -24,6 +25,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
private _resource: string;
|
||||
private _extensionContext: vscode.ExtensionContext;
|
||||
private prompter: IPrompter;
|
||||
private _initializeDeferred: Deferred<void> = new Deferred<void>();
|
||||
|
||||
// For testing
|
||||
private _errorMessage: string;
|
||||
@@ -38,14 +40,14 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
this._extensionContext = extensionContext;
|
||||
this.books = [];
|
||||
this.initialize(workspaceFolders.map(a => a.uri.fsPath));
|
||||
vscode.commands.executeCommand('setContext', 'untitledBooks', openAsUntitled);
|
||||
this.viewId = view;
|
||||
this.prompter = new CodeAdapter();
|
||||
|
||||
}
|
||||
|
||||
private async initialize(bookPaths: string[]): Promise<any> {
|
||||
return Promise.all(bookPaths.map(async (bookPath) => {
|
||||
private async initialize(bookPaths: string[]): Promise<void> {
|
||||
await vscode.commands.executeCommand('setContext', 'untitledBooks', this._openAsUntitled);
|
||||
await Promise.all(bookPaths.map(async (bookPath) => {
|
||||
let book: BookModel = new BookModel(bookPath, this._openAsUntitled, this._extensionContext);
|
||||
await book.initializeContents();
|
||||
this.books.push(book);
|
||||
@@ -53,13 +55,16 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
this.currentBook = book;
|
||||
}
|
||||
}));
|
||||
this._initializeDeferred.resolve();
|
||||
}
|
||||
|
||||
public get onReadAllTOCFiles(): vscode.Event<void> {
|
||||
return this._onReadAllTOCFiles.event;
|
||||
}
|
||||
|
||||
|
||||
public get initialized(): Promise<void> {
|
||||
return this._initializeDeferred.promise;
|
||||
}
|
||||
|
||||
async openBook(bookPath: string, urlToOpen?: string): Promise<void> {
|
||||
try {
|
||||
|
||||
@@ -28,10 +28,6 @@ let controller: JupyterController;
|
||||
type ChooseCellType = { label: string, id: CellType };
|
||||
|
||||
export async function activate(extensionContext: vscode.ExtensionContext): Promise<IExtensionApi> {
|
||||
const bookTreeViewProvider = new BookTreeViewProvider(vscode.workspace.workspaceFolders || [], extensionContext, false, BOOKS_VIEWID);
|
||||
const untitledBookTreeViewProvider = new BookTreeViewProvider([], extensionContext, true, READONLY_BOOKS_VIEWID);
|
||||
extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider(BOOKS_VIEWID, bookTreeViewProvider));
|
||||
extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider(READONLY_BOOKS_VIEWID, untitledBookTreeViewProvider));
|
||||
extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openBook', (bookPath: string, openAsUntitled: boolean, urlToOpen?: string) => openAsUntitled ? untitledBookTreeViewProvider.openBook(bookPath, urlToOpen) : bookTreeViewProvider.openBook(bookPath, urlToOpen)));
|
||||
extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openNotebook', (resource) => bookTreeViewProvider.openNotebook(resource)));
|
||||
extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openUntitledNotebook', (resource) => untitledBookTreeViewProvider.openNotebookAsUntitled(resource)));
|
||||
@@ -101,6 +97,15 @@ export async function activate(extensionContext: vscode.ExtensionContext): Promi
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let workspaceFolders = vscode.workspace.workspaceFolders || [];
|
||||
const bookTreeViewProvider = new BookTreeViewProvider(workspaceFolders, extensionContext, false, BOOKS_VIEWID);
|
||||
await bookTreeViewProvider.initialized;
|
||||
const untitledBookTreeViewProvider = new BookTreeViewProvider([], extensionContext, true, READONLY_BOOKS_VIEWID);
|
||||
await untitledBookTreeViewProvider.initialized;
|
||||
|
||||
extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider(BOOKS_VIEWID, bookTreeViewProvider));
|
||||
extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider(READONLY_BOOKS_VIEWID, untitledBookTreeViewProvider));
|
||||
|
||||
return {
|
||||
getJupyterController() {
|
||||
return controller;
|
||||
|
||||
Reference in New Issue
Block a user