diff --git a/packages/web/src/javascripts/Controllers/FilesController.ts b/packages/web/src/javascripts/Controllers/FilesController.ts index a9a8f3ee6..bdf733af5 100644 --- a/packages/web/src/javascripts/Controllers/FilesController.ts +++ b/packages/web/src/javascripts/Controllers/FilesController.ts @@ -20,6 +20,7 @@ import { action, makeObservable, observable, reaction } from 'mobx' import { WebApplication } from '../Application/Application' import { AbstractViewController } from './Abstract/AbstractViewController' import { NotesController } from './NotesController' +import { downloadOrShareBlobBasedOnPlatform } from '@/Utils/DownloadOrShareBasedOnPlatform' const UnprotectedFileActions = [PopoverFileItemActionType.ToggleFileProtection] const NonMutatingFileActions = [PopoverFileItemActionType.DownloadFile, PopoverFileItemActionType.PreviewFile] @@ -267,7 +268,10 @@ export class FilesController extends AbstractViewController { await saver.finish() } else { const finalBytes = concatenateUint8Arrays(decryptedBytesArray) - saver.saveFile(file.name, finalBytes) + const blob = new Blob([finalBytes], { + type: file.mimeType, + }) + await downloadOrShareBlobBasedOnPlatform(this.application, blob, file.name, false) } addToast({ diff --git a/packages/web/src/javascripts/NativeMobileWeb/DownloadBlobOnAndroid.tsx b/packages/web/src/javascripts/NativeMobileWeb/DownloadBlobOnAndroid.tsx index edd60fad8..eba4caec3 100644 --- a/packages/web/src/javascripts/NativeMobileWeb/DownloadBlobOnAndroid.tsx +++ b/packages/web/src/javascripts/NativeMobileWeb/DownloadBlobOnAndroid.tsx @@ -3,18 +3,31 @@ import { getBase64FromBlob } from '@/Utils' import { Platform } from '@standardnotes/snjs' import { addToast, ToastType, dismissToast } from '@standardnotes/toast' -export const downloadBlobOnAndroid = async (application: WebApplication, blob: Blob, filename: string) => { +export const downloadBlobOnAndroid = async ( + application: WebApplication, + blob: Blob, + filename: string, + showToast = true, +) => { if (!application.isNativeMobileWeb() || application.platform !== Platform.Android) { throw new Error('Download function being used on non-android platform') } - const loadingToastId = addToast({ - type: ToastType.Loading, - message: `Downloading ${filename}..`, - }) + let loadingToastId: string | undefined + if (showToast) { + loadingToastId = addToast({ + type: ToastType.Loading, + message: `Downloading ${filename}..`, + }) + } const base64 = await getBase64FromBlob(blob) const downloaded = await application.mobileDevice.downloadBase64AsFile(base64, filename) - if (downloaded) { + if (loadingToastId) { dismissToast(loadingToastId) + } + if (!showToast) { + return + } + if (downloaded) { addToast({ type: ToastType.Success, message: `Downloaded ${filename}`, diff --git a/packages/web/src/javascripts/Utils/DownloadOrShareBasedOnPlatform.ts b/packages/web/src/javascripts/Utils/DownloadOrShareBasedOnPlatform.ts index 8fe56857f..5381cc0d1 100644 --- a/packages/web/src/javascripts/Utils/DownloadOrShareBasedOnPlatform.ts +++ b/packages/web/src/javascripts/Utils/DownloadOrShareBasedOnPlatform.ts @@ -3,7 +3,12 @@ import { downloadBlobOnAndroid } from '@/NativeMobileWeb/DownloadBlobOnAndroid' import { shareBlobOnMobile } from '@/NativeMobileWeb/ShareBlobOnMobile' import { Platform } from '@standardnotes/snjs' -export const downloadOrShareBlobBasedOnPlatform = async (application: WebApplication, blob: Blob, filename: string) => { +export const downloadOrShareBlobBasedOnPlatform = async ( + application: WebApplication, + blob: Blob, + filename: string, + showToastOnAndroid = true, +) => { if (!application.isNativeMobileWeb()) { application.getArchiveService().downloadData(blob, filename) return @@ -15,7 +20,7 @@ export const downloadOrShareBlobBasedOnPlatform = async (application: WebApplica } if (application.platform === Platform.Android) { - downloadBlobOnAndroid(application, blob, filename) + downloadBlobOnAndroid(application, blob, filename, showToastOnAndroid) return } }