
    i7                     x    S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
r
 " S	 S
\5      r " S S5      rS r\rg)z7Downloader module for URLs requiring youtube-dl support   )DownloaderBase   )ytdltext    )ElementTree)CookieNc                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)YoutubeDLDownloader   r   c                 b   [         R                  " X5        UR                  nU R                  SUR                  5      U l        U R
                  S:  a  U R
                  S-   O
[        S5      U R                  SUR                  5      U R                  SUR                  5      (       + U R                  (       a  U R                  R                  S5      OS SS	.U l        S U l        S U l        U R                  S
S5      U l        U R                  SS5      U l        U R                  S5      U l        g )Nretriesr   r   inftimeoutverifyhttpT)r   socket_timeoutnocheckcertificateproxyignoreerrorszforward-cookiesprogressg      @outtmpl)r   __init__	extractorconfig_retriesr   float_timeout_verifyproxiesget	ytdl_optsytdl_instancerate_dynforward_cookiesr   r   )selfjobr   s      G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/downloader/ytdl.pyr   YoutubeDLDownloader.__init__   s    *MM	{{9i.@.@A)-):t||A~e"kk)Y5G5GH&*kk(I<M<M&N"N15T\\%%f-4 
 "#{{+<dCJ4{{9-    c           	      	   UR                   nSnS US'   UR                  SS 5      =n(       a$  U R                  U5        UR                  S5      nGO)U R                  nU(       d   [        R
                  " U R                  S5      5      n UR                  R                   n	U R                  R%                  SXy5        [        R&                  " XpU R(                  UR+                  S5      5      =U l        nUR,                  U l        U R0                  S:X  a  UR2                  U l        U R                  U5        U R4                  (       aa  U R                  R%                  SUR6                  5        UR8                  R:                  n
U R<                  R>                   H  nU
" U5        M     USS  nUR+                  S5      n US-  nS U l         Uc  U RA                  XQ5      nOU RC                  XQU5      nU R                  b  U R                  nOU(       d  SnOO`U(       a+  U R                  R                  SXU RH                  S-   5        OU R                  R                  U5        gX@RH                  :  a  gM  UR+                  S5      =n(       a  URK                  U5         US-  nS U l         SU;   a  U RM                  XRU5      nOU RO                  XRU5      nU R                  b  U R                  nOU(       d  SnO gU(       a+  U R                  R                  SXU RH                  S-   5        OU R                  R                  U5        gX@RH                  :  a  gM  ! [        [        4 a  nUR                  (       a  U R                  R                  S5        O'U R                  R                  S[        USS	5      5        U R                  R                  U5        S
 U l         S nAgS nAff = f! ["         a    S	n	 GNdf = f! ["         aU  nU R                  R                  U5        URD                  nUR6                  S:X  a  SnURF                   SU 3n S nAGNIS nAff = f! ["         aU  nU R                  R                  U5        URD                  nUR6                  S:X  a  SnURF                   SU 3n S nAGNS nAff = f)Nr   _mtime_http_ytdl_instance_ytdl_info_dictmodulez"Cannot import yt-dlp or youtube-dlzCannot import module '%s'name c                     g)NF )ups     r(   <lambda>.YoutubeDLDownloader.download.<locals>.<lambda>>   s    r*   FzUsing %s version %s_ytdl_paramsdefaultzForwarding cookies to %s   _ytdl_manifestTr   zEmpty 'info_dict' databuiltinsz: z
%s (%s/%s)_ytdl_extraentriesError)(kwdictpop_preparer#   r   import_moduler   ImportErrorSyntaxError__context__logerrorgetattr	tracebackdownloadversion__version__	Exceptiondebugconstruct_YoutubeDLr"   r!   postprocessorytdl_ppr   DEFAULT_OUTTMPLr%   
__module__	cookiejar
set_cookiesessioncookies_extract_url_extract_manifest	__class____name__r   update_download_playlist_download_video)r&   urlpathfmtr@   triesr#   	info_dictr/   excytdl_versionrV   cookiemanifestmsgclsextrasuccesss                    r(   rK   YoutubeDLDownloader.download(   s    $}"JJ'7>>=>MM-(

#45I !..M 
!!//H0EFF&#)>>#=#=L 4fK595M5M$..&**^2L6N N"]%33<<9,#)#9#9DLm,##9,779*44??
"ll22Fv& 3 ab'Czz"23H
!
'$($5$5)%0	 %)$:$:)%8	 zz-"jj&6HHNN<T\\!^LHHNN3' <<' = @ JJ}--5-U#QJEDJ	)"55%	;G #22%	;G ::)**C !C  |SaHs#||#= G $[1 !'KL'B'.sFB'?AHH&&s+$6DM ! ! &#%L&< ! 3HH&&s+--C~~3 % \\N"SE2C3F  /""3'mm>>Z/!Eb./s]   %%M" O6 'P	 1+Q+ "O32A7O..O36PP	
Q(A
Q##Q(+
S
5A
SS
c                 $    UR                   " USS9$ )NFrK   )extract_info)r&   r   r`   s      r(   rY    YoutubeDLDownloader._extract_url   s      u55r*   c                    UR                   " S5      nUR                  U5      nUR                  S5      =n(       ae  [        U[        5      (       a  UR                  5       nUR                  R                  nU H$  u  pU" [        SXS SSSSSSSS SS S 0 5      5        M&     US   n
UR                  S5      nUR                  S	5      nUR                  S
5      nU
S:X  a<  U(       a  SOSnSnUc   UR                  X%XUS9u  nnO UR                  XXUS9u  nnOmU
S:X  aX  Uc   UR                  X%US9u  nnOO[        U[         5      (       a  ["        R$                  " U5      n UR'                  USS9u  nnO[+        SU
 S35      eU(       a  U H  nUUS'   M
     SUUUUS.nUR,                  " USS9nU(       a*  U R.                  R1                  U R2                  U5      /US'   U$ ! [         a    UR                  X%XUS9nS n Nf = f! [         a    UR                  XXUS9nS n Nf = f! [         a    UR                  X%US9nS n Nf = f! [         a    UR)                  USS9nS n Nf = f)NGeneric_ytdl_manifest_cookiesr   Fr1   /r;   _ytdl_manifest_data_ytdl_manifest_remux_ytdl_manifest_headershlsr   mp4m3u8_native)headersdash)mpd_idzUnsupported manifest type ''http_headers)r   idtitleformats	subtitlesrn   __postprocessors)get_info_extractor_generic_idr!   
isinstancedictitemsrU   rV   r	   #_extract_m3u8_formats_and_subtitlesAttributeError_extract_m3u8_formats!_parse_m3u8_formats_and_subtitles_parse_m3u8_formats"_extract_mpd_formats_and_subtitles_extract_mpd_formatsstrr   
fromstring _parse_mpd_formats_and_subtitles_parse_mpd_formats
ValueErrorprocess_ie_resultrR   FFmpegVideoRemuxerPPr#   )r&   r   r`   r@   extrvideo_idrX   rV   r0   valuetypedataremuxr{   extprotocolfmtssubsfmtrc   s                       r(   rZ   %YoutubeDLDownloader._extract_manifest   s   &&y1##C(jj!9::7:'4((!--/22J&6tD%uc54dB   ' &'zz/0

12**565=!&uC$H| !%!I!Isg "J "GJD$ !%!G!G3' "H "CJD$ V^| !%!H!Hw "I "8JD$ dC((&11$7D !%!F!FV "G "-JD$ :4&BCC&-N#  !!
	 **9uE	11$2D2DeL-NI() k &  55sg 6 GDD  &  333' 4 CDD  &  44w 5 8DD  &  22V 3 -DD sH   0G) H %H/ %I )H	H	H,+H,/III0/I0c                    SU;   a[  SUR                   ;   a'  [        R                  " US   5      UR                   S'   O$[        R                  " US   UR                   5        UR	                  S5      nU(       a  [        U5      (       d  SUS'   OSU;  a   US   S   S   US'   U R                  (       am  U R                  XR                  5        UR                  U5      =Ul
        nUS   Ul        UR                  U-   Ul        UR                  U-   =Ul        Ul        O-US   S
:w  a$  UR#                  US   5        UR%                  5         UR'                  5       (       a  SUl        gU R(                  b  U R)                  5       UR*                  S'   U R,                  R/                  UR                  5        U R0                  (       a  UR2                  UR                   S'   UR5                  UR                   5      nUS   UR                   S'   U R6                  (       a+  [8        R                  R;                  U R6                  U5      nOUR                  U-   nUR=                  SS5      S-   nOUR                  R=                  SS5      nU R                  X5        UR?                  U5        UR	                  S5      =(       d    US   Ul        g! [         a	    S	US'    GNBf = f)Nr`   filename	extensionrequested_formatsmkvr   r   r   ry   r   r1   T	ratelimit%%%z%(ext)sfilepath	_filename) r@   r   ext_from_urlnameext_from_urlr!   compatible_formatsLookupErrorr   _set_outtmplprepare_filenamer   r   	directorypathrealdirectoryrealpathtemppathset_extension
build_pathexistsr$   paramsoutstartpartprefixbuild_filenamepartdirosjoinreplaceprocess_info)r&   r#   ra   rc   r   r   r   s          r(   r_   #YoutubeDLDownloader._download_video   sz   IW^^+%%i&67 {+ %%i&6G-- 34-g66$Ie)#)#,Y#7#:5#A	%  <<m\\:..y9:Gx )% 0G",,x7GL%%02Gw/u'!!)E"23 >>!G==$04M  -w||$99*1..GNN;'--gnn=H*3E*:GNN;'||ww||DLL(;,,x7<<T*Y6D##++C6D-.""9-$==4N	+8NO  )#(	% )s   K K('K(c                 |   UR                   UR                  S'   UR                  UR                  5      nUR                  UR                  S'   UR                  U-   nUR                  SS5      S-   nU R                  X5        SnUS    HJ  nU(       d  M  U R                  b  U R                  5       UR                  S'    UR                  U5        SnML     U$ ! [         aW  nU R                  R                  U5        U R                  R                  S	UR                  R                  U5         S nAM  S nAff = f)
Nr   r   r   z%(playlist_index)s.%(ext)sFr>   r   Tz%s: %s)r   r@   r   r   r   r   r   r$   r   r   rN   rG   rJ   rH   r[   r\   )	r&   r#   ra   rc   r   r   statusentryrd   s	            r(   r^   &YoutubeDLDownloader._download_playlist'  s   &-nn{#))'..9&-&7&7{#$$x/||C&)EE-.y)E}}(48MMO$$[1F**51 *   F""3'x)?)?EEFs   C
D;$AD66D;c                    SUR                   ;  a  g UR                   S	 U R                  b  UR                  U R                  5        UR                   R	                  SS5      =n(       a  X l        [        X5      UR                   S'   g )N__gdl_initialize__gdl_ratelimit_funcFlogger)r   r   add_progress_hook_progress_hookrA   r$   LoggerAdapter)r&   r#   rlfs      r(   rB   YoutubeDLDownloader._prepare=  sy    ]%9%99  !34==$++D,?,?@&&**+A5II3IM)6t)KX&r*   c                 4   US   S:X  a  US   U R                   :  a{  UR                  S5      =(       d    UR                  S5      nUR                  S5      nU R                  R                  Uc  S O
[        U5      US   U(       a  [        U5      OS5        g g g )	Nr   downloadingelapsedtotal_bytestotal_bytes_estimatespeeddownloaded_bytesr   )r   r!   r   int)r&   infototalr   s       r(   r   "YoutubeDLDownloader._progress_hookH  s    >]*Y4==0HH]+Otxx8N/OEHHW%EHH3u:'(#E
 1 +r*   c                      UR                     SU0UR                  S'   g ! [         a1     X!R                  S'    g ! [         a    X!R                  S'     g f = ff = f)Nr9   r   )_parse_outtmplr   r   outtmpl_dict)r&   r#   r   s      r(   r    YoutubeDLDownloader._set_outtmplS  si    	C(( 09'.BM  +  	::8?**95! :29$$Y/:	:s$     
A;AAAA)
rK   rH   r%   r   r   r$   r   r#   r"   rR   N)r\   rT   __qualname____firstlineno__schemer   rK   rY   rZ   r_   r^   rB   r   r   __static_attributes__r3   r*   r(   r   r      s;    F.&qf6Pd5n,	L		Cr*   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	r   i_  )objrG   c                 P    Xl         UR                  R                  S5      U l        g )Nr   )r   r   r!   rG   )r&   r   r#   s      r(   r   LoggerAdapter.__init__b  s     ''++H5r*   c                     U R                   b;  US   S:X  a  XR                  S5      S-   S  nU R                   R                  U5        g g )Nr   []r   )rG   findrO   r&   rh   s     r(   rO   LoggerAdapter.debugf  sC    881v}((3-/*+HHNN3  r*   c                     U R                   b8  SU;   a  XR                  S5      S-   S  nU R                   R                  U5        g g )NzWARNING: r   )rG   r   warningr   s     r(   r   LoggerAdapter.warningl  sB    88S ((3-/*+HHS!  r*   c                 \    SU;   a  XR                  S5      S-   S  nXR                  l        g )NzERROR:r   r   )r   r   rH   r   s     r(   rH   LoggerAdapter.errorr  s)    s?hhsmAo&'Cr*   )rG   r   N)
r\   rT   r   r   	__slots__r   rO   r   rH   r   r3   r*   r(   r   r   _  s    I6 "r*   r   c                     U S   R                  S5      nU S   R                  S5      nUS:X  a  US:X  a  gSnX;   =(       a    X#;   $ )z2Returns True if 'formats' are compatible for merger   r   r   webmT)	mp3ry   m4am4pm4bm4rm4vismvisma)r!   )r   	video_ext	audio_extextss       r(   r   r   x  sN    
u%I
u%IFyF2LD2!22r*   )__doc__commonr   r1   r   r   	xml.etreer   http.cookiejarr	   r   r   r   r   __downloader__r3   r*   r(   <module>r     s@    > "  ! ! 	JC. JCZ
 2	3 %r*   