make encrypted content fast load if already stored decrypted

pull/1888/head
audric 4 years ago
parent 0d90248450
commit 8462d7d38e

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

@ -105,3 +105,25 @@ export const getDecryptedMediaUrl = async (url: string, contentType: string): Pr
return url; 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;
};

Loading…
Cancel
Save