1
0
Fork 0
mirror of https://github.com/mat-1/variance.git synced 2025-08-02 15:26:04 +00:00

fix loading encrypted images

This commit is contained in:
mat 2025-02-01 06:05:50 +00:00
parent 6264e0faff
commit 30e987d3a4
2 changed files with 20 additions and 8 deletions

View file

@ -88,7 +88,8 @@ export default [
'react/jsx-props-no-spreading': 'off',
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'no-console': 'off',
'no-use-before-define': 'off',
},

View file

@ -49,18 +49,24 @@ export async function getUrl(
if (cachedUnencryptedMedia.has(link)) {
const cachedValue = cachedUnencryptedMedia.get(link);
if (typeof cachedValue === 'string') return cachedValue;
return (await cachedValue)!;
const res = (await cachedValue)!;
return res;
}
// insert a promise
let resolvePromise;
const promise = new Promise<string>((resolve) => {
let resolvePromise: undefined | ((_value: string) => void);
const promise = new Promise<string>((resolve: (_value: string) => void) => {
resolvePromise = resolve;
});
cachedUnencryptedMedia.set(link, promise);
if (cachedUnencryptedMedia.size > 10000) {
console.info('cachedUnencryptedMedia is too large, clearing');
cachedUnencryptedMedia.clear();
// remove everything except the promises
cachedUnencryptedMedia.entries().forEach(([key, value]) => {
if (typeof value === 'string') {
cachedUnencryptedMedia.delete(key);
}
});
}
const response = await fetch(link, {
@ -73,12 +79,17 @@ export async function getUrl(
if (!contentType) {
throw new Error('Cannot decrypt media without a content type');
}
return URL.createObjectURL(await getDecryptedBlob(response, contentType, decryptionData));
const objectUrl = URL.createObjectURL(
await getDecryptedBlob(response, contentType, decryptionData),
);
cachedUnencryptedMedia.set(link, objectUrl);
resolvePromise?.(objectUrl);
return objectUrl;
}
const blob = await response.blob();
const objectUrl = URL.createObjectURL(blob);
const objectUrl: string = URL.createObjectURL(blob);
cachedUnencryptedMedia.set(link, objectUrl);
resolvePromise(objectUrl);
resolvePromise?.(objectUrl);
return objectUrl;
} catch (e) {
console.error(e);