|  |  |  | 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, isAvatar: boolean) => { | 
					
						
							|  |  |  |   // 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, isAvatar); | 
					
						
							|  |  |  |     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 }; | 
					
						
							|  |  |  | }; |