mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -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 * as nls from 'vscode-nls';
|
||||||
import { isEditorTitleFree } from '../common/utils';
|
import { isEditorTitleFree } from '../common/utils';
|
||||||
import { BookModel } from './bookModel';
|
import { BookModel } from './bookModel';
|
||||||
|
import { Deferred } from '../common/promise';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
@@ -24,6 +25,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
|||||||
private _resource: string;
|
private _resource: string;
|
||||||
private _extensionContext: vscode.ExtensionContext;
|
private _extensionContext: vscode.ExtensionContext;
|
||||||
private prompter: IPrompter;
|
private prompter: IPrompter;
|
||||||
|
private _initializeDeferred: Deferred<void> = new Deferred<void>();
|
||||||
|
|
||||||
// For testing
|
// For testing
|
||||||
private _errorMessage: string;
|
private _errorMessage: string;
|
||||||
@@ -38,14 +40,14 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
|||||||
this._extensionContext = extensionContext;
|
this._extensionContext = extensionContext;
|
||||||
this.books = [];
|
this.books = [];
|
||||||
this.initialize(workspaceFolders.map(a => a.uri.fsPath));
|
this.initialize(workspaceFolders.map(a => a.uri.fsPath));
|
||||||
vscode.commands.executeCommand('setContext', 'untitledBooks', openAsUntitled);
|
|
||||||
this.viewId = view;
|
this.viewId = view;
|
||||||
this.prompter = new CodeAdapter();
|
this.prompter = new CodeAdapter();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async initialize(bookPaths: string[]): Promise<any> {
|
private async initialize(bookPaths: string[]): Promise<void> {
|
||||||
return Promise.all(bookPaths.map(async (bookPath) => {
|
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);
|
let book: BookModel = new BookModel(bookPath, this._openAsUntitled, this._extensionContext);
|
||||||
await book.initializeContents();
|
await book.initializeContents();
|
||||||
this.books.push(book);
|
this.books.push(book);
|
||||||
@@ -53,13 +55,16 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
|||||||
this.currentBook = book;
|
this.currentBook = book;
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
this._initializeDeferred.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
public get onReadAllTOCFiles(): vscode.Event<void> {
|
public get onReadAllTOCFiles(): vscode.Event<void> {
|
||||||
return this._onReadAllTOCFiles.event;
|
return this._onReadAllTOCFiles.event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get initialized(): Promise<void> {
|
||||||
|
return this._initializeDeferred.promise;
|
||||||
|
}
|
||||||
|
|
||||||
async openBook(bookPath: string, urlToOpen?: string): Promise<void> {
|
async openBook(bookPath: string, urlToOpen?: string): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -28,10 +28,6 @@ let controller: JupyterController;
|
|||||||
type ChooseCellType = { label: string, id: CellType };
|
type ChooseCellType = { label: string, id: CellType };
|
||||||
|
|
||||||
export async function activate(extensionContext: vscode.ExtensionContext): Promise<IExtensionApi> {
|
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.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.openNotebook', (resource) => bookTreeViewProvider.openNotebook(resource)));
|
||||||
extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openUntitledNotebook', (resource) => untitledBookTreeViewProvider.openNotebookAsUntitled(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;
|
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 {
|
return {
|
||||||
getJupyterController() {
|
getJupyterController() {
|
||||||
return controller;
|
return controller;
|
||||||
|
|||||||
Reference in New Issue
Block a user