mirror of
https://github.com/bitwarden/browser.git
synced 2024-09-27 04:03:00 +02:00
cb8849c355
* add eslint rule no-floating-promises * add eslint-disable comment to offending lines
43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { Injectable } from "@angular/core";
|
|
|
|
import { FileDownloadBuilder } from "@bitwarden/common/platform/abstractions/file-download/file-download.builder";
|
|
import { FileDownloadRequest } from "@bitwarden/common/platform/abstractions/file-download/file-download.request";
|
|
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
|
|
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
|
|
|
import { SafariApp } from "../../browser/safariApp";
|
|
import { BrowserApi } from "../browser/browser-api";
|
|
|
|
@Injectable()
|
|
export class BrowserFileDownloadService implements FileDownloadService {
|
|
download(request: FileDownloadRequest): void {
|
|
const builder = new FileDownloadBuilder(request);
|
|
if (BrowserApi.isSafariApi) {
|
|
let data: BlobPart = null;
|
|
if (builder.blobOptions.type === "text/plain" && typeof request.blobData === "string") {
|
|
data = request.blobData;
|
|
} else {
|
|
data = Utils.fromBufferToB64(request.blobData as ArrayBuffer);
|
|
}
|
|
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
SafariApp.sendMessageToApp(
|
|
"downloadFile",
|
|
JSON.stringify({
|
|
blobData: data,
|
|
blobOptions: request.blobOptions,
|
|
fileName: request.fileName,
|
|
}),
|
|
true,
|
|
);
|
|
} else {
|
|
const a = window.document.createElement("a");
|
|
a.href = URL.createObjectURL(builder.blob);
|
|
a.download = request.fileName;
|
|
window.document.body.appendChild(a);
|
|
a.click();
|
|
window.document.body.removeChild(a);
|
|
}
|
|
}
|
|
}
|