You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import { useEffect, useRef, useState } from 'react';
 | |
| 
 | |
| 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(false);
 | |
| 
 | |
|   const mountedRef = useRef(true);
 | |
| 
 | |
|   async function fetchUrl() {
 | |
|     perfStart(`getDecryptedMediaUrl-${url}`);
 | |
| 
 | |
|     const decryptedUrl = await getDecryptedMediaUrl(url, contentType);
 | |
|     perfEnd(`getDecryptedMediaUrl-${url}`, `getDecryptedMediaUrl-${url}`);
 | |
| 
 | |
|     if (mountedRef.current) {
 | |
|       setUrlToLoad(decryptedUrl);
 | |
| 
 | |
|       setLoading(false);
 | |
|     }
 | |
|   }
 | |
|   const alreadyDecrypted = getAlreadyDecryptedMediaUrl(url);
 | |
| 
 | |
|   useEffect(() => {
 | |
|     if (alreadyDecrypted) {
 | |
|       return;
 | |
|     }
 | |
|     setLoading(true);
 | |
|     mountedRef.current = true;
 | |
|     void fetchUrl();
 | |
| 
 | |
|     return () => {
 | |
|       mountedRef.current = false;
 | |
|     };
 | |
|   }, [url]);
 | |
| 
 | |
|   if (alreadyDecrypted) {
 | |
|     return { urlToLoad: alreadyDecrypted, loading: false };
 | |
|   }
 | |
|   return { urlToLoad, loading };
 | |
| };
 |