make encrypted content fast load if already stored decrypted

This commit is contained in:
audric 2021-09-02 10:33:42 +10:00
parent 0d90248450
commit 8462d7d38e
2 changed files with 35 additions and 2 deletions

View file

@ -1,12 +1,15 @@
import { useEffect, useRef, useState } from 'react';
import { getDecryptedMediaUrl } from '../session/crypto/DecryptedAttachmentsManager';
import {
getAlreadyDecryptedMediaUrl,
getDecryptedMediaUrl,
} from '../session/crypto/DecryptedAttachmentsManager';
import { perfEnd, perfStart } from '../session/utils/Performance';
export const useEncryptedFileFetch = (url: string, contentType: string) => {
// tslint:disable-next-line: no-bitwise
const [urlToLoad, setUrlToLoad] = useState('');
const [loading, setLoading] = useState(true);
const [loading, setLoading] = useState(false);
const mountedRef = useRef(true);
@ -22,8 +25,12 @@ export const useEncryptedFileFetch = (url: string, contentType: string) => {
setLoading(false);
}
}
const alreadyDecrypted = getAlreadyDecryptedMediaUrl(url);
useEffect(() => {
if (alreadyDecrypted) {
return;
}
setLoading(true);
mountedRef.current = true;
void fetchUrl();
@ -32,5 +39,9 @@ export const useEncryptedFileFetch = (url: string, contentType: string) => {
mountedRef.current = false;
};
}, [url]);
if (alreadyDecrypted) {
return { urlToLoad: alreadyDecrypted, loading: false };
}
return { urlToLoad, loading };
};

View file

@ -105,3 +105,25 @@ export const getDecryptedMediaUrl = async (url: string, contentType: string): Pr
return url;
}
};
/**
*
* Returns the already decrypted URL or null
*/
export const getAlreadyDecryptedMediaUrl = (url: string): string | null => {
if (!url) {
return null;
}
if (url.startsWith('blob:')) {
return url;
} else if (
window.Signal.Migrations.attachmentsPath &&
url.startsWith(window.Signal.Migrations.attachmentsPath)
) {
if (urlToDecryptedBlobMap.has(url)) {
const existingObjUrl = urlToDecryptedBlobMap.get(url)?.decrypted as string;
return existingObjUrl;
}
}
return null;
};