§
    oF§jÚ  ã                   óì   — 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 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 g d¢Z!dS )é    N)ÚPath)ÚquoteFé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\Wan2GP\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_downloadrA   0   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    z/wangp_api/gallery/media/)Úsafer-   )r5   r   Úcasefoldr   Ú	fullmatchÚ
ValueErrorr   r/   r0   r1   r2   r	   r:   r;   r9   Ú_gallery_downloadsr   r=   r>   )Úmedia_idr,   r    r?   s       r   Úregister_gallery_downloadrJ   >   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_bytesrR   J   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>.pushT   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)ÚbytesrN   ÚBrokenPipeError)ÚselfrO   r_   s     €r   Úwritez,stream_writer.<locals>.StreamingWriter.write^   sF   ø€ Øð Ø�qÝ˜‘;”;ˆDØˆt�D‰zŒzð !Ý˜4‘y”yÐ Ý!Ð":Ñ;Ô;Ð;r   c                 ó   — d S ©N© )re   s    r   Úflushz,stream_writer.<locals>.StreamingWriter.flushf   s   € ØˆDr   N)Ú__name__Ú
__module__Ú__qualname__rf   rj   )r_   s   €r   ÚStreamingWriterra   ]   s=   ø€ € € € € ð	<ð 	<ð 	<ð 	<ð 	<ð	ð 	ð 	ð 	ð 	r   rn   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)Úern   r_   ÚsentinelÚwrite_fns    €€€€r   Úproducezstream_writer.<locals>.producei   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)rZ   ÚQueueÚ	threadingÚEventÚobjectÚThreadÚstartr   Ú
isinstancerq   Úset)	rt   ru   Úthreadr\   rn   r]   r_   rs   r^   s	   `   @@@@@r   Ústream_writerr�   O   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 rh   )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 rh   )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 )NrC   )r	   rH   r   r5   r   rE   )rI   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                 ó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   r1   )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}rI   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   r1   )rI   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   r1   )r   rŽ   r¤   rž   rO   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   r5   Ú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 rh   )Ú_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)   rA   rJ   rR   r�   )r   rh   )rK   )"r'   r:   r3   ÚqueuerZ   r   ry   r   r$   Úpathlibr   Úurllib.parser   r   r<   r6   rH   ÚLockr	   r²   r®   r   r   r)   rA   rJ   rR   r�   r„   r†   rˆ   rª   r¶   Ú__all__ri   r   r   ú<module>r¼      s¡  ðØ €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð €Ø€ØÐ ØÐ Ø$�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&ð &ð &ð  Jð  Jð  J€€€r   