a
    ;hSB                     @   s   d dl Z 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
 ddlmZmZmZmZmZmZmZmZmZ ddlmZ G d	d
 d
eZdS )    N   )FileDownloader   )Request)CertificateVerifyError	HTTPErrorTransportError)	ContentTooShortErrorRetryManagerThrottledDownloadXAttrMetadataErrorXAttrUnavailableErrorint_or_noneparse_http_rangetry_callwrite_xattr)HTTPHeaderDictc                   @   s   e Zd Zdd ZdS )HttpFDc           
         s`  d  dd i }|d ur2|d< G dd dt}| |_|_d _tddi dj d	d
rj	n j dp di  dpdd_
d_j dd_t _t d\
	}j ddrtjjrtjj_jdk_G dd dtG dd dtG dd dt 	
fdd}fdd fdd}tj d jD ]}z|  | W   S  y }	 z"|	j|_W Y d }	~	qW Y d }	~	n^d }	~	0   y.   d |_| jd!8  _Y qY n* yD   Y  dS       Y n0 qd
S )"Nurlrequest_dataZimpersonatec                   @   s   e Zd ZejZejZejZ	dS )z-HttpFD.real_download.<locals>.DownloadContextN)
__name__
__module____qualname__dictget__getattr____setitem____setattr____delitem____delattr__ r    r    [/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/yt_dlp/downloader/http.pyDownloadContext#   s   r"   zAccept-Encodingidentityhttp_headerstestFZhttp_chunk_sizeZdownloader_optionsr   wbZ
buffersizei   RangeZ
continuedlTc                   @   s   e Zd ZdS )z-HttpFD.real_download.<locals>.SucceedDownloadNr   r   r   r    r    r    r!   SucceedDownloadE   s   r)   c                   @   s   e Zd Zdd ZdS )z+HttpFD.real_download.<locals>.RetryDownloadc                 S   s
   || _ d S N)source_error)selfr+   r    r    r!   __init__I   s    z4HttpFD.real_download.<locals>.RetryDownload.__init__N)r   r   r   r-   r    r    r    r!   RetryDownloadH   s   r.   c                   @   s   e Zd ZdS )z*HttpFD.real_download.<locals>.NextFragmentNr(   r    r    r    r!   NextFragmentL   s   r/   c            	         s  srt td n_jdkr\j
d urB
7 jrTj d_n"
d urj
njdkrzdnd d_jrj d } 	d u r| nt| 	 n	d ur	 nd  t	 fddrd_d_t
d	 d
  dt	 fddrjd  td}d u}|rZdt dt pNd |jd< zЈj|_|r
jjd}t|\}}}|krjr| ks| k r|_|sĈ	rt|pΈ		p|
pd _W d S dkr  d_d_tjjdd  __W n ty } z:|jdkrJz&jt_jjd }W n@ ty } z&|jdk s|jdkr W Y d }~nd }~0 0 |d ur&jd t|  k rjd k r&n n>j jj jdjjd n"  d_d_W Y d }~d S n|jdk sb|jdkrd |W Y d }~nJd }~0  ty    Y n. ty } z|W Y d }~n
d }~0 0 d S )Ngffffff?r   abFr   c                      s    kS r*   r    r    	range_endZrange_startr    r!   <lambda>l       zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>r&   zConflicting range. (start=z > end=)c                      s
    j kS r*   )content_lenr    )ctxr2   r    r!   r3   q   r4   )
extensionszbytes=- r'   zContent-RangeContent-lengthi  zContent-Lengthi  iX  d   finished)filenamestatusdownloaded_bytestotal_bytes)randomrandintint
chunk_size
resume_len	is_resumeZreport_resuming_byte	open_modeminr   	Exceptionr6   r   r   headersZydlurlopendatar   r   data_lenZreport_unable_to_resumer   r?   Zreport_file_already_downloadedr>   
try_renametmpfilename_hook_progressr   r   )	Zchunk_aware_endrequestZ	has_rangeZcontent_rangeZcontent_range_startZcontent_range_endr6   errcontent_length)r.   r)   rE   r7   rK   	info_dictis_testreq_end	req_startr   request_extensionsr,   r   r1   r!   establish_connectionO   s    


$
"
"


	z2HttpFD.real_download.<locals>.establish_connectionc                      s(    j d ur$ jdkr j   d  _ d S )Nr9   )streamrP   closer    )r7   r    r!   close_stream   s    


z*HttpFD.real_download.<locals>.close_streamc                     s
  j jd} j jdr d } r@| d u s:t| jkr@j} | d urt| j } jd}jd}|d ur| |k rd|  d| d dS |d ur| |krƈd	|  d
| d dS dj  j}t		 }d }|} fdd}z$j 
s
|nt||   }W n. tyJ }	 z||	 W Y d }	~	n
d }	~	0 0  t|7  t|dkrjq
jd u rfzFjj\__jd usJ j_j W n8 ty }	 zd|	  W Y d }	~	dS d }	~	0 0 jddrf| d urfztjdt|   W n: ttfyd }	 zd|	  W Y d }	~	n
d }	~	0 0 zj| W nB ty }	 z(d d|	  W Y d }	~	dS d }	~	0 0 || j  t		 }|}
jdds|
| t|}|
} || j }j!d u r(d }n""|t		 j!j  j }#d j!jj|||j$ dd	 | d ur | krq
|r|jdpdk rj%d u r|_%n6|j% dkrjd urjdkrj&  t'q|rd _%qjd u r.d d dS s^j(r^j)d ur^ j)k r^ _jdkrtj&  | d ur | krt* t| }	||	 +jj jdrڈ,jj jdd d< #  jdt		 j$ dd  d!S )"Nr;   zContent-encodingZmin_filesizeZmax_filesizez/[download] File is smaller than min-filesize (z	 bytes < z bytes). Aborting.Fz.[download] File is larger than max-filesize (z	 bytes > r   c                    sR     j dkr_n.ztjj _W n tyD   d_Y n0  | d S )Nr9   r   )rP   rF   ospathgetsizeFileNotFoundError)e)r.   byte_counterr]   r7   r    r!   retry   s    
z5HttpFD.real_download.<locals>.download.<locals>.retryzunable to open for writing: Zxattr_set_filesizezuser.ytdl.filesizezunable to set filesize xattr: 
zunable to write data: ZnoresizebufferZdownloadingctx_id)	r?   r@   rA   rP   r>   etaspeedelapsedrf   Zthrottledratelimit   r9   zDid not get any data blocksZ
updatetimezlast-modifiedZfiletimer=   )r@   rA   r>   r?   ri   rf   T)-rM   rK   r   rD   _TEST_FILE_SIZErF   paramsZ	to_screen
block_sizetimereadrI   r   lenr[   Zsanitize_openrP   rH   Zundo_temp_namer>   Zreport_destinationOSErrorZreport_errorr   strencoder   r   writeZ	to_stderrZ	slow_downZbest_block_sizeZ
calc_speedrN   Zcalc_etarQ   
start_timeZthrottle_startr\   r   rE   r6   r	   rO   Z	try_utime)rN   Zmin_data_lenZmax_data_lenrm   startnowbeforerd   Z
data_blockrS   afterrh   rg   )r/   r.   r]   r7   rU   rV   r,   )rc   r!   download   s    
$&
"



&
	z&HttpFD.real_download.<locals>.downloadretriesr   )r   Z_get_impersonate_targetr   r>   Z	temp_namerP   r[   r   rl   rk   rH   rF   rm   rn   ru   r   r^   r_   isfiler`   rG   rJ   r
   Zreport_retryr+   errorattempt)
r,   r>   rU   Zimpersonate_targetr"   _rZ   rz   rd   rS   r    )r/   r.   r)   rE   r]   r7   rK   rU   rV   rW   rX   r   rY   r,   r   r!   real_download   sh    


$v '"
zHttpFD.real_downloadN)r   r   r   r   r    r    r    r!   r      s   r   )r^   rB   rn   commonr   Z
networkingr   Znetworking.exceptionsr   r   r   utilsr	   r
   r   r   r   r   r   r   r   Zutils.networkingr   r   r    r    r    r!   <module>   s   ,