2021-07-21 05:40:21 +02:00
|
|
|
import { useEffect, useRef, useState } from 'react';
|
2021-03-25 00:58:21 +01:00
|
|
|
|
2021-09-02 02:33:42 +02:00
|
|
|
import {
|
|
|
|
getAlreadyDecryptedMediaUrl,
|
|
|
|
getDecryptedMediaUrl,
|
|
|
|
} from '../session/crypto/DecryptedAttachmentsManager';
|
2021-08-26 08:17:37 +02:00
|
|
|
import { perfEnd, perfStart } from '../session/utils/Performance';
|
2021-03-26 03:07:42 +01:00
|
|
|
|
2021-11-29 07:40:46 +01:00
|
|
|
export const useEncryptedFileFetch = (url: string, contentType: string, isAvatar: boolean) => {
|
2021-03-25 00:58:21 +01:00
|
|
|
// tslint:disable-next-line: no-bitwise
|
2021-03-26 03:07:42 +01:00
|
|
|
const [urlToLoad, setUrlToLoad] = useState('');
|
2021-09-02 02:33:42 +02:00
|
|
|
const [loading, setLoading] = useState(false);
|
2021-03-25 00:58:21 +01:00
|
|
|
|
2021-07-21 05:40:21 +02:00
|
|
|
const mountedRef = useRef(true);
|
2021-07-21 01:47:10 +02:00
|
|
|
|
2021-03-25 00:58:21 +01:00
|
|
|
async function fetchUrl() {
|
2021-08-27 08:57:29 +02:00
|
|
|
perfStart(`getDecryptedMediaUrl-${url}`);
|
2021-08-26 08:17:37 +02:00
|
|
|
|
2021-11-29 07:40:46 +01:00
|
|
|
const decryptedUrl = await getDecryptedMediaUrl(url, contentType, isAvatar);
|
2021-08-27 08:57:29 +02:00
|
|
|
perfEnd(`getDecryptedMediaUrl-${url}`, `getDecryptedMediaUrl-${url}`);
|
2021-08-26 08:17:37 +02:00
|
|
|
|
2021-07-21 05:40:21 +02:00
|
|
|
if (mountedRef.current) {
|
2021-07-21 01:47:10 +02:00
|
|
|
setUrlToLoad(decryptedUrl);
|
2021-03-26 03:07:42 +01:00
|
|
|
|
2021-07-21 01:47:10 +02:00
|
|
|
setLoading(false);
|
|
|
|
}
|
2021-03-25 00:58:21 +01:00
|
|
|
}
|
2021-09-02 02:33:42 +02:00
|
|
|
const alreadyDecrypted = getAlreadyDecryptedMediaUrl(url);
|
2021-03-25 00:58:21 +01:00
|
|
|
|
|
|
|
useEffect(() => {
|
2021-09-02 02:33:42 +02:00
|
|
|
if (alreadyDecrypted) {
|
|
|
|
return;
|
|
|
|
}
|
2021-07-27 08:41:46 +02:00
|
|
|
setLoading(true);
|
|
|
|
mountedRef.current = true;
|
2021-03-25 00:58:21 +01:00
|
|
|
void fetchUrl();
|
2021-07-21 01:47:10 +02:00
|
|
|
|
2021-07-22 08:34:17 +02:00
|
|
|
return () => {
|
|
|
|
mountedRef.current = false;
|
|
|
|
};
|
2021-03-25 00:58:21 +01:00
|
|
|
}, [url]);
|
2021-09-02 02:33:42 +02:00
|
|
|
|
|
|
|
if (alreadyDecrypted) {
|
|
|
|
return { urlToLoad: alreadyDecrypted, loading: false };
|
|
|
|
}
|
2021-03-26 03:07:42 +01:00
|
|
|
return { urlToLoad, loading };
|
2021-03-25 00:58:21 +01:00
|
|
|
};
|