
    uki`                     V    d dl Z d dlZddlmZ ddlmZ ddlmZm	Z	m
Z
  G d de      Zy)	    N   )get_suitable_downloader)
FragmentFD   )ReExtractInfoupdate_url_queryurljoinc                   &    e Zd ZdZdZd Zd Zd Zy)DashSegmentsFDz
    Download segments in a DASH manifest. External downloaders can take over
    the fragment downloads by supporting the 'dash_frag_urls' protocol
    dashsegmentsc                    d|d   j                  d      v rd }n?|j                  d      r| j                  d       t        || j                  d d|dk(        }t        j
                         }|j                  d	g       D cg c]  }i ||
 }}g }|xs |gD ]  }t        |d
   t              rt        dd      	 | j                  j                  d      rdnt        |d
         }|j                  d      xs ||j                  d      rdn|j                  d      |d}	|r| j                  |	       n| j                  |	|       ||	d<   d }
|j                  d      }|rt        j                  j                  |      }
| j!                  ||	|
      }|rn| j#                  d| j$                   d|j'                                 t)        |      |d
<    || j*                  | j                        }|j-                  ||      c S |j/                  |	||g         | j0                  |dd iS c c}w # t        $ r d }Y Zw xY w)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                     | dk(  S )Nr    )idxs    Q/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/downloader/dash.py<lambda>z.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<   zDashSegmentsFD.real_download   sO   )Yz-B-H-H-MM"O}}Y'!!"FG54;;7GT\`cTcfO YY[
=F]]K^`b=cdc1	1S1dd$3 $	;C #k*C0#$ITXYY&&*kkoof&=3s;GWCX  GGJ/;8+.77?+CQZI[-C 44S955c3?%CLK)27S)T&)$ll334NO$($7$7S+$N!~%OP_PlPlPnOopr)-.C)D	+&$TXXt{{;'')<<KK3S9:I$	;L ;t::D`K_``Q e  &!%&s   H0>+H55IIc                     t        |      r ||      n|}| j                  j                  d      rt        t	        |            gS |S )Nr   )callabler+   r)   nextiter)r?   r   rF   s      r%   _resolve_fragmentsz!DashSegmentsFD._resolve_fragmentsF   s:    &.y&9IcNy	*.++//&*AT)_%&PyPr'   c              #   6  K   |j                  d      }| j                  |d   |      }d}t        |      D ]_  \  }}|dz  }||d   k  r|j                  d      }	|	s|sJ t        ||d         }	|rt	        |	|      }	||j                  d      ||	d	 a y w)
Nfragment_base_urlr   r   r   fragment_indexurlpathrE   )
frag_indexrE   indexrR   )r)   rN   	enumerater	   r   )
r?   rC   rF   rG   rP   r   rT   ifragmentfragment_urls
             r%   r6   zDashSegmentsFD._get_fragmentsJ   s     GG$78++C,<cB	
$Y/ 	KAx!OJS!122#<<.L(((&'8(6:JK/kJ )"*,,/?"@#	 	s   BBN)__name__
__module____qualname____doc__r8   r<   rN   r6   r#   r'   r%   r   r   	   s     
 G3ajQr'   r   )r,   urllib.parser3    r   rX   r   utilsr   r   r	   r   r#   r'   r%   <module>ra      s%      %   < <VZ Vr'   