From f60c7da9d5615ebca48e0d556dd1047e65c21495 Mon Sep 17 00:00:00 2001 From: Rob Moran Date: Sun, 23 Feb 2020 21:40:16 +0000 Subject: [PATCH] Don't stat for electron save dialog Signed-off-by: Rob Moran --- .../electron-file-dialog-service.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) 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 6aa3985eda367..5e348db5d5a45 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 @@ -43,17 +43,16 @@ export class ElectronFileDialogService extends DefaultFileDialogService { const rootNode = await this.getRootNode(folder); if (rootNode) { return new Promise | undefined>(resolve => { - remote.dialog.showOpenDialog(this.toOpenDialogOptions(rootNode.uri, props), (filePaths: string[] | undefined) => { + remote.dialog.showOpenDialog(this.toOpenDialogOptions(rootNode.uri, props), async (filePaths: string[] | undefined) => { if (!filePaths || filePaths.length === 0) { resolve(undefined); return; } + const uris = filePaths.map(path => FileUri.create(path)); - if (this.canReadWrite(uris)) { - resolve(uris.length === 1 ? uris[0] : uris); - } else { - resolve(undefined); - } + const canAccess = await this.canReadWrite(uris); + const result = canAccess ? uris.length === 1 ? uris[0] : uris : undefined; + resolve(result); }); }); } @@ -64,17 +63,21 @@ export class ElectronFileDialogService extends DefaultFileDialogService { const rootNode = await this.getRootNode(folder); if (rootNode) { return new Promise(resolve => { - remote.dialog.showSaveDialog(this.toSaveDialogOptions(rootNode.uri, props), (filename: string | undefined) => { + remote.dialog.showSaveDialog(this.toSaveDialogOptions(rootNode.uri, props), async (filename: string | undefined) => { if (!filename) { resolve(undefined); return; } + const uri = FileUri.create(filename); - if (this.canReadWrite(uri)) { + const exists = await this.fileSystem.exists(uri.toString()); + if (!exists) { resolve(uri); - } else { - resolve(undefined); + return; } + + const canAccess = await this.canReadWrite(uri); + resolve(canAccess ? uri : undefined); }); }); }