§
     ’Þjs"  ã                   ó(  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZ dD ]\  ZZ ej        ee¦  «         Œi Zi Zi Zi Z ej        ¦   «         Zdadadd„Zd„ Zd	„ Zdd
„Zdd„Zdd„Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%g d¢Z&dS )é    N)ÚPath)ÚquoteÚunquote))z
image/webpz.webp)z	audio/aacz.aac)z
audio/flacz.flac)zmodel/gltf-binaryz.glbFéX  c                 ó6  — t          j         ¦   «         }t          5  t          t                               ¦   «         ¦  «        D ]=\  }}||                     d|¦  «        z
  | k    rt                               |d ¦  «         Œ>	 d d d ¦  «         d S # 1 swxY w Y   d S )NÚcreated)ÚtimeÚ_download_jobs_lockÚlistÚ_download_jobsÚitemsÚgetÚpop)Úttl_secondsÚnowÚtokenÚjobs       ú>C:\Users\johnn\OneDrive\Documents\AI\shared\utils\downloads.pyÚ_cleanup_download_jobsr      sØ   € Ý
Œ)‰+Œ+€CÝ	ð 0ð 0Ý�~×3Ò3Ñ5Ô5Ñ6Ô6ð 	0ð 	0‰JˆE�3Ø�S—W’W˜Y¨Ñ,Ô,Ñ,¨{Ò:Ð:Ý×"Ò" 5¨$Ñ/Ô/Ð/øð	0ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   ›A%BÂBÂBc                 ó€   — t          j        dd| ¦  «                             ¦   «         pd}d|› dt          | ¦  «        › �S )Nz[^A-Za-z0-9._ -]+Ú_Údownloadzattachment; filename="z"; filename*=UTF-8'')ÚreÚsubÚstripr   )ÚfilenameÚfallbacks     r   Ú_content_dispositionr   #   sC   € ÝŒvÐ*¨C°Ñ:Ô:×@Ò@ÑBÔBÐPÀj€HØU XÐUÐUÅEÈ(ÁOÄOÐUÐUÐUó    c                 ó   — t          ¦   «          t          j        ¦   «         j        }t          5  t          j        ¦   «         | ||dœt          |<   d d d ¦  «         n# 1 swxY w Y   t          j        d|› �| dœ¦  «        S )N)r   r   Ú	mime_typeÚiterator_factoryú/wangp_api/download/)Úurlr   )	r   ÚuuidÚuuid4Úhexr
   r	   r   ÚjsonÚdumps)r   r!   r"   r   s       r   Úregister_downloadr*   (   s½   € ÝÑÔÐÝŒJ‰LŒLÔ€EÝ	ð 
ð 
å”y‘{”{Ø Ø"Ø 0ð	!
ð !
��uÑð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ Œ:Ð<°UÐ<Ð<È(ÐSÐSÑTÔTÐTs   ®!AÁAÁ"Ac                 óª  — t          | ¦  «                             ¦   «                              ¦   «         }|                     ¦   «         st	          d|› �¦  «        ‚t
          j                             t          |¦  «        ¦  «        }t          5  t                               |¦  «        }|€ot          j        t          j        |¦  «        j        }|t          |<   t          |¦  «        |j        |p t#          j        |j        ¦  «        d         pddœt&          |<   d d d ¦  «         n# 1 swxY w Y   d|› �|j        |                     ¦   «         j        dœS )NzDownload file does not exist: r   úapplication/octet-stream)Úpathr   r!   r#   ©r$   r   Ú
size_bytes)r   Ú
expanduserÚresolveÚis_fileÚFileNotFoundErrorÚosr-   ÚnormcaseÚstrr
   Ú_file_download_tokensr   r%   Úuuid5ÚNAMESPACE_URLr'   ÚnameÚ	mimetypesÚ
guess_typeÚ_file_downloadsÚstatÚst_size)r-   r!   Ú	file_pathÚkeyr   s        r   Úregister_file_downloadrB   5   sª  € Ý�T‘
”
×%Ò%Ñ'Ô'×/Ò/Ñ1Ô1€IØ×ÒÑÔð NÝÐ LÀÐ LÐ LÑMÔMÐMÝ
Œ'×
Ò
�3˜y™>œ>Ñ
*Ô
*€CÝ	ð {ð {Ý%×)Ò)¨#Ñ.Ô.ˆØˆ=Ý”J�tÔ1°3Ñ7Ô7Ô;ˆEØ).Õ! #Ñ&Ý.1°)©n¬nÈ)Ì.Ðgpð  hzÕt}ô  uIð  JSô  JXñ  uYô  uYð  Z[ô  u\ð  hzð  `zð  &{ð  &{�O˜EÑ"ð{ð {ð {ñ {ô {ð {ð {ð {ð {ð {ð {øøøð {ð {ð {ð {ð 2¨%Ð1Ð1¸y¼~Ð]f×]kÒ]kÑ]mÔ]mÔ]uÐvÐvÐvs   ÂBD%Ä%D)Ä,D)c                 óˆ  — t          | pd¦  «                             ¦   «                              ¦   «         } t          j        d| ¦  «        €t          d| › �¦  «        ‚t          |¦  «                             ¦   «                              ¦   «         }| 	                    ¦   «         st          d|› �¦  «        ‚t          5  t          |¦  «        |p t          j        |j        ¦  «        d         pddœt          | <   d d d ¦  «         n# 1 swxY w Y   dt!          | d¬	¦  «        › �|j        |                     ¦   «         j        d
œS )NÚ z(?:visual|audio):[a-f0-9]{12}zInvalid Gallery media id: zGallery file does not exist: r   r,   )r-   r!   ú/wangp_api/gallery/media/)Úsafer.   )r6   r   Úcasefoldr   Ú	fullmatchÚ
ValueErrorr   r0   r1   r2   r3   r
   r;   r<   r:   Ú_gallery_downloadsr   r>   r?   )Úmedia_idr-   r!   r@   s       r   Úregister_gallery_downloadrL   C   sº  € Ý�8�>˜rÑ"Ô"×(Ò(Ñ*Ô*×3Ò3Ñ5Ô5€HÝ	„|Ð4°hÑ?Ô?ÐGÝÐ@°hÐ@Ð@ÑAÔAÐAÝ�T‘
”
×%Ò%Ñ'Ô'×/Ò/Ñ1Ô1€IØ×ÒÑÔð MÝÐ KÀ	Ð KÐ KÑLÔLÐLÝ	ð að aÝ03°I±´ÈYð  N`ÕZcÔZnÐoxÔo}ÑZ~ÔZ~ð  @Aô  [Bð  N`ð  F`ð  (að  (aÕ˜8Ñ$ðað að añ aô að að að að að að aøøøð að að að aàI­u°XÀBÐ/GÑ/GÔ/GÐIÐIÐW`ÔWeÐu~÷  vDò  vDñ  vFô  vFô  vNð  Oð  Oð  Os   Â=<DÄD	ÄD	é   c              #   ój   K  — t          dt          | ¦  «        |¦  «        D ]}| |||z   …         V — Œd S )Nr   )ÚrangeÚlen)ÚdataÚ
chunk_sizeÚoffsets      r   Ústream_bytesrT   O   sO   è è € Ý˜�3˜t™9œ9 jÑ1Ô1ð /ð /ˆØ�6˜& :Ñ-Ð-Ô.Ð.Ð.Ð.Ð.ð/ð /r   c              #   óÚ  ‡ ‡‡‡‡‡K  — t          j        d¬¦  «        Št          j        ¦   «         Št	          ¦   «         Šˆˆfd„Š G ˆfd„d¦  «        Šˆˆˆˆ fd„}t          j        |d¬¦  «        }|                     ¦   «          	 	 ‰                     ¦   «         }|‰u rnt          |t          ¦  «        r|‚|V — Œ5	 ‰ 
                    ¦   «          d S # ‰ 
                    ¦   «          w xY w)	Né   )Úmaxsizec                 ó¶   •— ‰                      ¦   «         sC	 ‰                     | d¬¦  «         dS # t          j        $ r Y nw xY w‰                      ¦   «         ¯CdS )Ng      à?)ÚtimeoutTF)Úis_setÚputÚqueue_moduleÚFull)ÚitemÚchunksÚ
stop_events    €€r   Úpushzstream_writer.<locals>.pushY   sw   ø€ Ø×#Ò#Ñ%Ô%ð 	ðØ—
’
˜4¨�
Ñ-Ô-Ð-Ø�tøÝÔ$ð ð ð Ø�ðøøøð	 ×#Ò#Ñ%Ô%ð 	ð ˆus   —0 °AÁAc                   ó    •— e Zd Zˆ fd„Zd„ ZdS )ú&stream_writer.<locals>.StreamingWriterc                 ó|   •— |sdS t          |¦  «        } ‰|¦  «        rt          |¦  «        S t          d¦  «        ‚)Nr   zDownload stream closed)ÚbytesrP   ÚBrokenPipeError)ÚselfrQ   ra   s     €r   Úwritez,stream_writer.<locals>.StreamingWriter.writec   sF   ø€ Øð Ø�qÝ˜‘;”;ˆDØˆt�D‰zŒzð !Ý˜4‘y”yÐ Ý!Ð":Ñ;Ô;Ð;r   c                 ó   — d S ©N© )rg   s    r   Úflushz,stream_writer.<locals>.StreamingWriter.flushk   s   € ØˆDr   N)Ú__name__Ú
__module__Ú__qualname__rh   rl   )ra   s   €r   ÚStreamingWriterrc   b   s=   ø€ € € € € ð	<ð 	<ð 	<ð 	<ð 	<ð	ð 	ð 	ð 	ð 	r   rp   c                  óÎ   •— 	  ‰ ‰¦   «         ¦  «        du rt          d¦  «        ‚n"# t          $ r}  ‰| ¦  «         Y d } ~ nd } ~ ww xY w ‰‰¦  «         d S #  ‰‰¦  «         w xY w)NFz Failed to create download stream)ÚRuntimeErrorÚ	Exception)Úerp   ra   ÚsentinelÚwrite_fns    €€€€r   Úproducezstream_writer.<locals>.producen   s”   ø€ ð	Øˆx˜˜Ñ)Ô)Ñ*Ô*¨eÐ3Ð3Ý"Ð#EÑFÔFÐFð 4øåð 	ð 	ð 	ØˆD�‰GŒGˆGˆGˆGˆGˆGˆGøøøøð	øøøð ˆD�‰NŒNˆNˆNˆNøˆDˆD�‰NŒNˆNˆNøøøs*   ƒ$( §A ¨
A²A½A ÁAÁA ÁA$T)ÚtargetÚdaemon)r\   ÚQueueÚ	threadingÚEventÚobjectÚThreadÚstartr   Ú
isinstancers   Úset)	rv   rw   Úthreadr^   rp   r_   ra   ru   r`   s	   `   @@@@@r   Ústream_writerrƒ   T   sN  øøøøøøè è € ÝÔ¨Ð*Ñ*Ô*€FÝ”Ñ"Ô"€JÝ‰xŒx€Hðð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ðð ð ð ð ð ð ð õ Ô W°TÐ:Ñ:Ô:€FØ
‡L‚L�N„N€Nð	ð	Ø—:’:‘<”<ˆDØ�xÐÐØÝ˜$¥	Ñ*Ô*ð Ø�
ØˆJˆJˆJð	ð ð
 	�ŠÑÔÐÐÐøˆ
�ŠÑÔÐÐøøøs   Â6C ÃC*c                 óz   — t           5  t                               | d ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S rj   )r
   r   r   ©r   s    r   Ú_pop_download_jobr†   …   s   € Ý	ð /ð /Ý×!Ò! %¨Ñ.Ô.ð/ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /ð /s   ˆ0°4·4c                 óx   — t           5  t                               | ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S rj   )r
   r=   r   r…   s    r   Ú_get_file_downloadrˆ   Š   s}   € Ý	ð *ð *Ý×"Ò" 5Ñ)Ô)ð*ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *s   ˆ/¯3¶3c                 óÞ   — t           5  t                               t          | pd¦  «                             ¦   «                              ¦   «         ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NrD   )r
   rJ   r   r6   r   rG   )rK   s    r   Ú_get_gallery_downloadrŠ   �   sµ   € Ý	ð Nð NÝ!×%Ò%¥c¨(¨.°bÑ&9Ô&9×&?Ò&?Ñ&AÔ&A×&JÒ&JÑ&LÔ&LÑMÔMðNð Nð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nð Nð Ns   ˆAA"Á"A&Á)A&c                 óø   — t          t          | pd¦  «        ¦  «        } dt          fdt          ffD ]H\  }}|                      |¦  «        r. || t          |¦  «        d…         ¦  «        }|€dn|d         c S ŒIdS )zgLocal file behind a registered download or Gallery media URL, None when the URL is not registered here.rD   r#   rE   Nr-   )r   r6   rˆ   rŠ   Ú
startswithrP   )r$   ÚprefixÚlookupÚentrys       r   Úregistered_download_pathr�   ”   s”   € å
•#�c�i˜R‘.”.Ñ
!Ô
!€CØ2Õ4FÐGÐJeÕg|ÐI}Ð~ð <ð <‰ˆ�Ø�>Š>˜&Ñ!Ô!ð 	<Ø�F˜3�s 6™{œ{˜|˜|Ô,Ñ-Ô-ˆEØ ˜=�4�4¨e°F¬mÐ;Ð;Ð;ð	<ð ˆ4r   c                 óN  — ddl m}  |¦   «          t          | dd¦  «        rd S |                      d¦  «        ddt          dt
          fd„¦   «         }|                      d	¦  «        d
t          fd„¦   «         }|                      d¦  «        dt          fd„¦   «         }d| _        d S )Nr   )Úinstall_http_disconnect_patchÚ _wangp_download_routes_installedFz/wangp_api/download/{token}r   r   c              “   ó’  K  — ddl m} ddlm} ddlm} t          | ¦  «        }|�9dt          |d         ¦  «        i} | |d         ¦   «         |d         |¬	¦  «        S t          | ¦  «        }|�'t          |d
         ¦  «         
                    ¦   «         s |dd¬¦  «        S  ||d
         |d         |d         |rdnd¬¦  «        S )Nr   ©ÚResponse)ÚStreamingResponse©ÚDisconnectAwareFileResponsezContent-Dispositionr   r"   r!   ©Ú
media_typeÚheadersr-   zDownload expired or not foundé”  ©Ústatus_codeÚ
attachmentÚinline)r   r›   Úcontent_disposition_type)Úfastapir–   Úfastapi.responsesr—   Úshared.utils.http_disconnectr™   r†   r   rˆ   r   r2   )r   r   r–   r—   r™   r   rœ   Úfile_downloads           r   Ú_wangp_downloadz/_install_routes_on_app.<locals>._wangp_download¥   s:  è è € à$Ð$Ð$Ð$Ð$Ð$Ø7Ð7Ð7Ð7Ð7Ð7ØLÐLÐLÐLÐLÐLÝ Ñ&Ô&ˆØˆ?Ø,Õ.BÀ3ÀzÄ?Ñ.SÔ.SÐTˆGØ$Ð$Ð%< SÐ);Ô%<Ñ%>Ô%>È3È{ÔK[ÐelÐmÑmÔmÐmÝ*¨5Ñ1Ô1ˆØÐ ­¨]¸6Ô-BÑ(CÔ(C×(KÒ(KÑ(MÔ(MÐ Ø�8Ð;ÈÐMÑMÔMÐMØ*Ð*¨=¸Ô+@È=ÐYcÔKdÐq~ð  @Kô  rLð  wð  gMð  gsð  gsð  EMð  Nñ  Nô  Nð  	Nr   z#/wangp_api/gallery/media/{media_id}rK   c              “   óÚ   K  — ddl m} ddlm} t	          | ¦  «        }|�'t          |d         ¦  «                             ¦   «         s |dd¬¦  «        S  ||d         |d         ¬	¦  «        S )
Nr   r•   r˜   r-   z"Gallery media expired or not foundr�   rž   r!   )r›   )r£   r–   r¥   r™   rŠ   r   r2   )rK   r–   r™   Úgallery_downloads       r   Ú_wangp_gallery_mediaz4_install_routes_on_app.<locals>._wangp_gallery_media³   s–   è è € à$Ð$Ð$Ð$Ð$Ð$ØLÐLÐLÐLÐLÐLÝ0°Ñ:Ô:ÐØÐ#­4Ð0@ÀÔ0HÑ+IÔ+I×+QÒ+QÑ+SÔ+SÐ#Ø�8Ð@ÈcÐRÑRÔRÐRØ*Ð*Ð+;¸FÔ+CÐP`ÐalÔPmÐnÑnÔnÐnr   z%/wangp_api/download/{token}/thumbnailc              “   ó  K  — ddl m} ddlm} t	          | ¦  «        }|�'t          |d         ¦  «                             ¦   «         s |dd¬¦  «        S  ||d         ¦  «        ƒ d {V —†}|s |dd¬¦  «        S  ||d	d
di¬¦  «        S )Nr   r•   )Úrender_thumbnailr-   zPreview not foundr�   rž   zPreview unavailablez
image/jpegzCache-Controlzprivate, max-age=60rš   )r£   r–   Úshared.deepy.thumbnailsr¬   rˆ   r   r2   )r   r–   r¬   r¦   rQ   s        r   Ú_wangp_thumbnailz0_install_routes_on_app.<locals>._wangp_thumbnail¼   sÔ   è è € à$Ð$Ð$Ð$Ð$Ð$Ø<Ð<Ð<Ð<Ð<Ð<Ý*¨5Ñ1Ô1ˆØÐ ­¨]¸6Ô-BÑ(CÔ(C×(KÒ(KÑ(MÔ(MÐ Ø�8Ð/¸SÐAÑAÔAÐAØ%Ð% m°FÔ&;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<ˆØð 	DØ�8Ð1¸sÐCÑCÔCÐCØˆx˜¨ÀÐQfÐ?gÐhÑhÔhÐhr   T)F)r¥   r’   Úgetattrr   r6   Úboolr“   )Úfastapi_appr’   r§   rª   r®   s        r   Ú_install_routes_on_appr²   ž   s  € ØJÐJÐJÐJÐJÐJØ!Ð!Ñ#Ô#Ð#åˆ{Ð>ÀÑFÔFð Øˆà‡_‚_Ð2Ñ3Ô3ðNð N¥Sð NµDð Nð Nð Nñ 4Ô3ðNð ‡_‚_Ð:Ñ;Ô;ðo­Sð oð oð oñ <Ô;ðoð ‡_‚_Ð<Ñ=Ô=ð	i¥cð 	ið 	ið 	iñ >Ô=ð	ið 48€KÔ0Ð0Ð0r   c                  ód   — t           rd S ddlm}  | j        ad„ }t          |¦  «        | _        da d S )Nr   )ÚAppc                  ó<   — t          | i |¤Ž}t          |¦  «         |S rj   )Ú_download_original_create_appr²   )ÚargsÚkwargsr±   s      r   Ú_patched_create_appz+install_routes.<locals>._patched_create_appÒ   s(   € Ý3°TÐD¸VÐDÐDˆÝ˜{Ñ+Ô+Ð+ØÐr   T)Ú_download_routes_installedÚgradio.routesr´   Ú
create_appr¶   Ústaticmethod)r´   r¹   s     r   Úinstall_routesr¾   Ë   sV   € å!ð ØˆØ!Ð!Ð!Ð!Ð!Ð!Ø$'¤NÐ!ðð ð õ
 "Ð"5Ñ6Ô6€C„NØ!%ÐÐÐr   )r¾   r*   rB   rL   r�   rT   rƒ   )r   rj   )rM   )'r(   r;   r4   Úqueuer\   r   r{   r	   r%   Úpathlibr   Úurllib.parser   r   Ú
_mime_typeÚ
_extensionÚadd_typer   r=   r7   rJ   ÚLockr
   rº   r¶   r   r   r*   rB   rL   rT   rƒ   r†   rˆ   rŠ   r�   r²   r¾   Ú__all__rk   r   r   ú<module>rÇ      sã  ðà €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ð Gð /ð /Ñ€J�
Ø€IÔ�z :Ñ.Ô.Ð.Ð.à€Ø€ØÐ ØÐ Ø$�i”nÑ&Ô&Ð Ø"Ð Ø $Ð ð0ð 0ð 0ð 0ðVð Vð Vð

Uð 
Uð 
Uðwð wð wð wð	Oð 	Oð 	Oð 	Oð/ð /ð /ð /ð
.ð .ð .ðb/ð /ð /ð
*ð *ð *ð
Nð Nð Nð
ð ð ð*8ð *8ð *8ðZ&ð &ð &ð  fð  fð  f€€€r   