web: fix file uploading not working in safari

This commit is contained in:
Abdullah Atta
2025-12-03 13:59:55 +05:00
parent db4d998705
commit c388045c68
2 changed files with 26 additions and 2 deletions

View File

@@ -20,8 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import { INNCrypto } from "@notesnook/crypto"; import { INNCrypto } from "@notesnook/crypto";
import CryptoWorker from "./nncrypto.worker?worker"; import CryptoWorker from "./nncrypto.worker?worker";
import { wrap } from "comlink"; import { wrap } from "comlink";
import { NNCrypto as NNCryptoSync } from "@notesnook/crypto";
import { isTransferableStreamsSupported } from "../utils/feature-check";
export const NNCrypto = wrap<INNCrypto>(new CryptoWorker()) as INNCrypto; export const NNCrypto = isTransferableStreamsSupported()
? (wrap<INNCrypto>(new CryptoWorker()) as INNCrypto)
: new NNCryptoSync();
// TODO: disable until we fix the `pull failed` errors for good. // TODO: disable until we fix the `pull failed` errors for good.
// IS_DESKTOP_APP && window.NativeNNCrypto // IS_DESKTOP_APP && window.NativeNNCrypto
// ? new window.NativeNNCrypto() // ? new window.NativeNNCrypto()

View File

@@ -22,9 +22,28 @@ const FEATURE_CHECKS = {
cache: false, cache: false,
indexedDB: false, indexedDB: false,
clonableCryptoKey: false, clonableCryptoKey: false,
applePaySupported: false applePaySupported: false,
transferableStreams: false
}; };
export function isTransferableStreamsSupported() {
try {
const readable = new ReadableStream({
pull(controller) {
controller.enqueue(new Uint8Array([1, 2, 3]));
controller.close();
}
});
window.postMessage(readable, [readable]);
FEATURE_CHECKS.transferableStreams = true;
return true;
} catch {
console.log("Transferable streams not supported");
FEATURE_CHECKS.transferableStreams = false;
return false;
}
}
async function isApplePaySupported() { async function isApplePaySupported() {
try { try {
FEATURE_CHECKS.applePaySupported = FEATURE_CHECKS.applePaySupported =
@@ -99,6 +118,7 @@ async function isCryptoKeyClonable() {
export async function initializeFeatureChecks() { export async function initializeFeatureChecks() {
await Promise.allSettled([ await Promise.allSettled([
isTransferableStreamsSupported(),
isOPFSSupported(), isOPFSSupported(),
isCacheSupported(), isCacheSupported(),
isIndexedDBSupported(), isIndexedDBSupported(),