From a002a95739e667c4f4d854d3a37ed1b1dc740341 Mon Sep 17 00:00:00 2001 From: Federico Bozzini Date: Fri, 12 Apr 2019 15:32:20 +0100 Subject: [PATCH] Handled case where the folder parameter is a file. Signed-off-by: Federico Bozzini --- .../src/browser/file-dialog/file-dialog-service.ts | 9 +++++---- .../file-dialog/electron-file-dialog-service.ts | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/filesystem/src/browser/file-dialog/file-dialog-service.ts b/packages/filesystem/src/browser/file-dialog/file-dialog-service.ts index 2e3d6f0ca83f1..05ea7411f069f 100644 --- a/packages/filesystem/src/browser/file-dialog/file-dialog-service.ts +++ b/packages/filesystem/src/browser/file-dialog/file-dialog-service.ts @@ -45,7 +45,7 @@ export class DefaultFileDialogService { async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise; async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise | undefined> { const title = props.title || 'Open'; - const rootNode = await this.getDirNode(folder); + const rootNode = await this.getRootNode(folder); if (rootNode) { const dialog = this.openFileDialogFactory(Object.assign(props, { title })); await dialog.model.navigateTo(rootNode); @@ -62,7 +62,7 @@ export class DefaultFileDialogService { async showSaveDialog(props: SaveFileDialogProps, folder?: FileStat): Promise { const title = props.title || 'Save'; - const rootNode = await this.getDirNode(folder); + const rootNode = await this.getRootNode(folder); if (rootNode) { const dialog = this.saveFileDialogFactory(Object.assign(props, { title })); await dialog.model.navigateTo(rootNode); @@ -71,10 +71,11 @@ export class DefaultFileDialogService { return undefined; } - protected async getDirNode(folderToOpen?: FileStat): Promise { + protected async getRootNode(folderToOpen?: FileStat): Promise { const folder = folderToOpen || await this.fileSystem.getCurrentUserHome(); if (folder) { - const rootUri = new URI(folder.uri); + const folderUri = new URI(folder.uri); + const rootUri = folder.isDirectory ? folderUri : folderUri.parent; const name = this.labelProvider.getName(rootUri); const [rootStat, label] = await Promise.all([ this.fileSystem.getFileStat(rootUri.toString()), diff --git a/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts b/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts index 7d90a9aa4becb..21e53a598a77c 100644 --- a/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts +++ b/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts @@ -40,7 +40,7 @@ export class ElectronFileDialogService extends DefaultFileDialogService { async showOpenDialog(props: OpenFileDialogProps & { canSelectMany: true }, folder?: FileStat): Promise | undefined>; async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise; async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise | undefined> { - const rootNode = await this.getDirNode(folder); + const rootNode = await this.getRootNode(folder); if (rootNode) { return new Promise | undefined>(resolve => { remote.dialog.showOpenDialog(this.toOpenDialogOptions(rootNode.uri, props), (filePaths: string[] | undefined) => { @@ -61,7 +61,7 @@ export class ElectronFileDialogService extends DefaultFileDialogService { } async showSaveDialog(props: SaveFileDialogProps, folder?: FileStat): Promise { - const rootNode = await this.getDirNode(folder); + const rootNode = await this.getRootNode(folder); if (rootNode) { return new Promise(resolve => { remote.dialog.showSaveDialog(this.toSaveDialogOptions(rootNode.uri, props), (filename: string | undefined) => {