diff --git a/packages/filepicker/src/Streaming/StreamingSaver.ts b/packages/filepicker/src/Streaming/StreamingSaver.ts index d7cf2f2d4..7b5b0c9be 100644 --- a/packages/filepicker/src/Streaming/StreamingSaver.ts +++ b/packages/filepicker/src/Streaming/StreamingSaver.ts @@ -21,17 +21,30 @@ export class StreamingFileSaver { return window.showSaveFilePicker != undefined } - /** This function must be called in response to a user interaction, otherwise, it will be rejected by the browser. */ - async selectFileToSaveTo(handle?: FileSystemFileHandle): Promise { + /** + * This function must be called in response to a user interaction, otherwise, it will be rejected by the browser. + * @returns Whether file was successfully selected or not. + */ + async selectFileToSaveTo(handle?: FileSystemFileHandle): Promise { this.log('Showing save file picker') - const downloadHandle = handle - ? handle - : await window.showSaveFilePicker({ - suggestedName: this.name, - }) + try { + const downloadHandle = handle + ? handle + : await window.showSaveFilePicker({ + suggestedName: this.name, + }) - this.writableStream = await downloadHandle.createWritable() + if (!downloadHandle) { + return false + } + + this.writableStream = await downloadHandle.createWritable() + + return true + } catch { + return false + } } async pushBytes(bytes: Uint8Array): Promise { diff --git a/packages/web/src/javascripts/Controllers/FilesController.ts b/packages/web/src/javascripts/Controllers/FilesController.ts index a9c3ad4eb..591ddf1f3 100644 --- a/packages/web/src/javascripts/Controllers/FilesController.ts +++ b/packages/web/src/javascripts/Controllers/FilesController.ts @@ -313,15 +313,18 @@ export class FilesController extends AbstractViewController { - if (isUsingStreamingSaver) { + if (isUsingStreamingSaver(saver)) { await saver.pushBytes(decryptedBytes) } else { decryptedBytesArray.push(decryptedBytes) @@ -378,7 +381,7 @@ export class FilesController extends AbstractViewController