Find all books in workspace with multiple folders (#6613)

* find all books in workspace with multiple flolders

* fixed optional parameter
This commit is contained in:
Lucy Zhang
2019-08-06 10:20:57 -07:00
committed by GitHub
parent c3b7485e3f
commit a0163c8625
2 changed files with 23 additions and 22 deletions

View File

@@ -24,27 +24,29 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
private _throttleTimer: any; private _throttleTimer: any;
private _resource: string; private _resource: string;
constructor(private workspaceRoot: string, extensionContext: vscode.ExtensionContext) { constructor(workspaceFolders: vscode.WorkspaceFolder[], extensionContext: vscode.ExtensionContext) {
if (workspaceRoot !== '') { let workspacePaths: string[] = workspaceFolders.map(a => a.uri.fsPath);
this._tableOfContentsPath = this.getTocFiles(this.workspaceRoot); this._tableOfContentsPath = this.getTableOfContentFiles(workspacePaths);
let bookOpened: boolean = this._tableOfContentsPath && this._tableOfContentsPath.length > 0; let bookOpened: boolean = this._tableOfContentsPath && this._tableOfContentsPath.length > 0;
vscode.commands.executeCommand('setContext', 'bookOpened', bookOpened); vscode.commands.executeCommand('setContext', 'bookOpened', bookOpened);
}
this._extensionContext = extensionContext; this._extensionContext = extensionContext;
} }
private getTocFiles(dir: string): string[] { private getTableOfContentFiles(directories: string[]): string[] {
let allFiles: string[] = []; let tableOfContentPaths: string[] = [];
let files = fs.readdirSync(dir); let paths: string[];
for (let i in files) { directories.forEach(dir => {
let name = path.join(dir, files[i]); paths = fs.readdirSync(dir);
if (fs.statSync(name).isDirectory()) { paths.forEach(filename => {
allFiles = allFiles.concat(this.getTocFiles(name)); let fullPath = path.join(dir, filename);
} else if (files[i] === 'toc.yml') { if (fs.statSync(fullPath).isDirectory()) {
allFiles.push(name); tableOfContentPaths = tableOfContentPaths.concat(this.getTableOfContentFiles([fullPath]));
} } else if (filename === 'toc.yml') {
} tableOfContentPaths.push(fullPath);
return allFiles; }
});
});
return tableOfContentPaths;
} }
async openNotebook(resource: string): Promise<void> { async openNotebook(resource: string): Promise<void> {
@@ -231,4 +233,4 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
return Promise.resolve(result); return Promise.resolve(result);
} }
} }

View File

@@ -27,8 +27,7 @@ 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);
const bookTreeViewProvider = new BookTreeViewProvider(vscode.workspace.rootPath || '', extensionContext);
extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider('bookTreeView', bookTreeViewProvider)); extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider('bookTreeView', bookTreeViewProvider));
extensionContext.subscriptions.push(azdata.nb.registerNavigationProvider(bookTreeViewProvider)); extensionContext.subscriptions.push(azdata.nb.registerNavigationProvider(bookTreeViewProvider));
extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openNotebook', (resource) => bookTreeViewProvider.openNotebook(resource))); extensionContext.subscriptions.push(vscode.commands.registerCommand('bookTreeView.openNotebook', (resource) => bookTreeViewProvider.openNotebook(resource)));
@@ -248,4 +247,4 @@ export function deactivate() {
if (controller) { if (controller) {
controller.deactivate(); controller.deactivate();
} }
} }