
    V|h`                     V    S SK r S SKrSSKJr  SSKJr  SSKJrJ	r	J
r
   " S S\5      rg)	    N   )get_suitable_downloader)
FragmentFD   )ReExtractInfoupdate_url_queryurljoinc                   .    \ rS rSrSrSrS rS rS rSr	g)	DashSegmentsFD	   z
Download segments in a DASH manifest. External downloaders can take over
the fragment downloads by supporting the 'dash_frag_urls' protocol
dashsegmentsc                    SUS   R                  S5      ;   a  S nO@UR                  S5      (       a  U R                  S5        [        X R                  S SUS:H  S9n[
        R
                  " 5       nUR                  S	/ 5       Vs/ s H	  n0 UEUEPM     nn/ nU=(       d    U/ GH  n[        US
   [        5      (       a
  [        SSS9e U R                  R                  S5      (       a  SO[        US
   5      nUR                  S5      =(       d    UUR                  S5      (       a  SOUR                  S5      US.n	U(       a  U R                  U	5        OU R                  X5        XIS'   S n
UR                  S5      nU(       a  [        R                  R                  U5      n
U R!                  XYU
5      nU(       am  U R#                  SU R$                   SUR'                  5        35        [)        U5      US
'   U" U R*                  U R                  5      nUR-                  X5      s  $ UR/                  XU/5        GM     U R0                  " USS 06$ s  snf ! [         a    S n GNqf = f)Nhttp_dash_segments_generatorprotocol+is_livez"Live DASH videos are not supporteddash_frag_urls-)r   	to_stdoutrequested_formats	fragmentsz#the stream needs to be re-extractedT)expectedtestr   filepathis_from_start)filenamelivetotal_fragsstartextra_param_to_segment_url[z*] Fragment downloads will be delegated to is_fatalc                     U S:H  $ )Nr    )idxs    P/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/downloader/dash.py<lambda>.DashSegmentsFD.real_download.<locals>.<lambda>D   s    WZ^_W_    )splitgetreport_errorr   paramstime
isinstancestrr   len	TypeError_prepare_external_frag_download _prepare_and_start_frag_downloadurllibparseparse_qs_get_fragments	to_screenFD_NAMEget_basenamelistydlreal_downloadappend&download_and_append_fragments_multiple)selfr   	info_dictreal_downloader
real_startfmtr   argsfragment_countctxextra_queryr    fragments_to_downloadfds                 r&   r>   DashSegmentsFD.real_download   sM   )Yz-B-H-H-MM"O}}Y''!!"FG5;;7GT\`cTcfO YY[
=F]]K^`b=cd=cc1	1S1=cd$33C #k*C00#$ITXYY&&*kkoof&=&=3s;GWCX  GGJ/;8+.77?+C+CQZI[-C 44S955c?%LK)27S)T&)$ll334NO$($7$7+$N!~%OP_PlPlPnOopr)-.C)D	+&$TXXt{{;''<<KKS9:I 4L ::D`K_``Q e  &!%&s   I0II.-I.c                     [        U5      (       a  U" U5      OUnU R                  R                  S5      (       a  [        [	        U5      5      /$ U$ )Nr   )callabler-   r+   nextiter)rA   r   rH   s      r&   _resolve_fragments!DashSegmentsFD._resolve_fragmentsF   s@    &.y&9&9IcNy	*.++//&*A*AT)_%&PyPr)   c              #   T  #    UR                  S5      nU R                  US   U5      nSn[        U5       Hm  u  pxUS-  nXbS   ::  a  M  UR                  S5      n	U	(       d  U(       d   e[        XHS   5      n	U(       a  [	        X5      n	UUR                  S5      UU	S	.v   Mo     g 7f)
Nfragment_base_urlr   r   r   fragment_indexurlpathrG   )
frag_indexrG   indexrV   )r+   rQ   	enumerater	   r   )
rA   rE   rH   rI   rT   r   rX   ifragmentfragment_urls
             r&   r8   DashSegmentsFD._get_fragmentsJ   s     GG$78++C,<cB	
$Y/KA!OJ!122#<<.L(((&'86:JK/J )"*,,/?"@#	  0s   B&B(r$   N)
__name__
__module____qualname____firstlineno____doc__r:   r>   rQ   r8   __static_attributes__r$   r)   r&   r   r   	   s     
 G3ajQr)   r   )r.   urllib.parser5    r   r\   r   utilsr   r   r	   r   r$   r)   r&   <module>rh      s%      %   < <VZ Vr)   