Move to broadcast channel check for worker put asset

This commit is contained in:
Mitchell McCaffrey 2021-06-27 15:13:45 +10:00
parent ab9cc9e148
commit 0bbfc4cdc3
3 changed files with 12 additions and 15 deletions

View File

@ -75,13 +75,18 @@ export function AssetsProvider({ children }) {
const putAsset = useCallback(
async (asset) => {
// Attempt to use worker to put map to avoid UI lockup
const packedAsset = encode(asset);
const success = await worker.putData(
Comlink.transfer(packedAsset, [packedAsset.buffer]),
"assets"
);
if (!success) {
// Check for broadcast channel and attempt to use worker to put map to avoid UI lockup
// Safari doesn't support BC so fallback to single thread
if (window.BroadcastChannel) {
const packedAsset = encode(asset);
const success = await worker.putData(
Comlink.transfer(packedAsset, [packedAsset.buffer]),
"assets"
);
if (!success) {
await database.table("assets").put(asset);
}
} else {
await database.table("assets").put(asset);
}
},

View File

@ -75,9 +75,6 @@ export function groupBy(array, key) {
}
export const isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
export const isSafari = /^((?!chrome|android).)*safari/i.test(
navigator.userAgent
);
export function shuffle(array) {
let temp = [...array];

View File

@ -8,7 +8,6 @@ import { encode, decode } from "@msgpack/msgpack";
import { getDatabase } from "../database";
import blobToBuffer from "../helpers/blobToBuffer";
import { isSafari } from "../helpers/shared";
// Worker to load large amounts of database data on a separate thread
let service = {
@ -46,10 +45,6 @@ let service = {
* @param {string} table
*/
async putData(data, table) {
if (isSafari) {
// Safari is unable to put data into indexedb and have useLiveQuery update
return false;
}
try {
let db = getDatabase({});
const decoded = decode(data);