3
Õb`›<  ã               @   s”   d dl m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mZ ddlmZmZmZmZmZmZmZmZ G dd	„ d	e	ƒZdS )
é    )Úunicode_literalsNé   )ÚFileDownloaderé   )Ú
compat_strÚcompat_urllib_error)ÚContentTooShortErrorÚencodeFilenameÚint_or_noneÚsanitize_openÚsanitized_RequestÚwrite_xattrÚXAttrMetadataErrorÚXAttrUnavailableErrorc               @   s   e Zd Zdd„ ZdS )ÚHttpFDc                s*  ˆd ‰G dd„ dt ƒ}|ƒ ‰|ˆ_ˆ
j|ƒˆ_d ˆ_ddi‰ˆjdƒ}|rVˆj|ƒ ˆ
jjddƒ‰ˆrnˆ
jn ˆjd	i ƒjd
ƒpŽˆ
jjd
ƒpŽd‰dˆ_	dˆ_
d ˆ_ˆ
jjddƒˆ_tjƒ ˆ_d ˆ_ˆ
jjddƒrötjjtˆjƒƒrötjjtˆjƒƒˆ_
ˆj
dkˆ_d‰ˆ
jjddƒ‰	G dd„ dtƒ‰G dd„ dtƒ‰G dd„ dtƒ‰ dd„ ‰‡‡‡‡‡‡‡
‡‡f	dd„}‡ ‡‡‡‡‡‡	‡
fdd„}x”ˆˆ	k�ry|ƒ  |ƒ S  ˆk
�rä } z,ˆd7 ‰ˆˆ	k�rÐˆ
j|jˆˆ	ƒ �w„W Y d d }~X n. ˆ k
�rü   �w„Y n ˆk
�r   dS X �q„W ˆ
jdˆ	 ƒ dS ) NÚurlc               @   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   úKC:\Users\Broad\Desktop\BeinConnetFix\binaries\youtube_dl\downloader\http.pyÚDownloadContext   s   r   zYoutubedl-no-compressionÚTrueÚhttp_headersÚtestFZdownloader_optionsÚhttp_chunk_sizer   ÚwbÚ
buffersizei   Ú
continuedlTÚretriesc               @   s   e Zd ZdS )z-HttpFD.real_download.<locals>.SucceedDownloadN)r   r   r   r   r   r   r   ÚSucceedDownloadF   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__J   s    z4HttpFD.real_download.<locals>.RetryDownload.__init__N)r   r   r   r*   r   r   r   r   ÚRetryDownloadI   s   r+   c               @   s   e Zd ZdS )z*HttpFD.real_download.<locals>.NextFragmentN)r   r   r   r   r   r   r   ÚNextFragmentM   s   r,   c             S   s(   d| }|r|t |ƒ7 }| jd|ƒ d S )Nz	bytes=%d-ZRange)r   Ú
add_header)ÚreqÚstartÚendZrange_headerr   r   r   Ú	set_rangeP   s    z'HttpFD.real_download.<locals>.set_rangec                 s&  ˆ rˆrt jtˆd ƒˆƒnˆˆ_ˆjdkrNˆj} ˆjrFˆjˆjƒ dˆ_nˆjdkr^d} nd } dˆ_ˆjr|| ˆj d nd }|r¢ˆjd k	r¢|ˆjkr¢ˆjd }| d k	}|ˆ_	t
ˆd ˆƒ}|rÌˆ|| |ƒ yÆˆjj|ƒˆ_|�rxˆjjjdƒ}|�rdtjd|ƒ}|�rd| t|jdƒƒk�rdt|jdƒƒ}t|jd	ƒƒ}ˆj �pR||k�pR||k }|�rd|ˆ_d S ˆjƒ  dˆ_d
ˆ_tˆjjƒ jdd ƒƒˆ_d S  tjfk
�rä }	 �z.|	jdk�r²y(ˆjjt
ˆd ˆƒƒˆ_ˆjjƒ d }
W nB tjfk
�r" }	 z |	jdk �s|	jdk�r‚ W Y d d }	~	X nŽX |
d k	�r˜ˆjd t|
ƒ  k �oRˆjd k n  �r˜ˆjˆjƒ ˆjˆjˆjƒ ˆjˆjdˆjˆjdœƒ ˆƒ ‚nˆjƒ  dˆ_d
ˆ_d S n|	jdk �sÊ|	jdk�rÌ‚ ˆ |	ƒ‚W Y d d }	~	X n> tjk
�r  }	 z|	j t j!k�r‚ ˆ |	ƒ‚W Y d d }	~	X nX d S )Ngffffffî?r   ÚabFr   zContent-Rangezbytes (\d+)-(\d+)?(?:/(\d+))?r   é   r#   zContent-lengthi   zContent-Lengthiô  iX  éd   Úfinished)ÚfilenameÚstatusÚdownloaded_bytesÚtotal_bytes)"ÚrandomÚrandintÚintÚ
chunk_sizeÚ
resume_lenÚ	is_resumeÚreport_resuming_byteÚ	open_modeÚdata_lenÚ	has_ranger   ÚydlÚurlopenÚdataÚheadersr   ÚreÚsearchÚgroupr
   Úreport_unable_to_resumeÚinfor   Ú	HTTPErrorÚcodeÚreport_file_already_downloadedr6   Ú
try_renameÚtmpfilenameÚ_hook_progressÚsocketÚerrorÚerrnoÚ
ECONNRESET)Zrange_startZ	range_endrC   ÚrequestZcontent_rangeZcontent_range_mZcontent_range_endZcontent_lenZaccept_content_lenÚerrÚcontent_length)	r+   r'   r=   ÚctxrG   Úis_testr)   r1   r   r   r   Úestablish_connectionV   sŠ    $





,z2HttpFD.real_download.<locals>.establish_connectionc           B      s¶  ˆj jƒ jdd ƒ} ˆr2| d ks,t| ƒˆjkr2ˆj} | d k	r¬t| ƒˆj } ˆjjdƒ}ˆjjdƒ}|d k	r†| |k r†ˆjd| |f ƒ dS |d k	r¬| |kr¬ˆjd| |f ƒ dS dˆj ‰ ˆj}t	j	ƒ }d }|}‡‡ ‡fdd	„}�xÊy"ˆj j
ˆsð|nt|| ˆ  ƒƒ}W np tjk
�r0 }	 z||	ƒ W Y d d }	~	X nD tjk
�rr }	 z$|	jtjtjfk�rZ‚ ||	ƒ W Y d d }	~	X nX ˆ t|ƒ7 ‰ t|ƒdk�r�P ˆjd k�rŒyDtˆjˆjƒ\ˆ_ˆ_ˆjd k	�sÄt‚ˆjˆjƒˆ_ˆjˆjƒ W n8 ttfk
�r }
 zˆjd
t|
ƒ ƒ dS d }
~
X nX ˆjjddƒ�rŒ| d k	�rŒytˆjdt| ƒj dƒƒ W n: t!t"fk
�rŠ }
 zˆjdt|
ƒ ƒ W Y d d }
~
X nX yˆjj#|ƒ W nB ttfk
�rÞ }
 z ˆj$dƒ ˆjdt|
ƒ ƒ dS d }
~
X nX ˆj%||ˆ ˆj ƒ t	j	ƒ }|}ˆjjddƒ�s$ˆj&|| t|ƒƒ}|}ˆj'||ˆ ˆj ƒ}ˆj(d k�rNd }n"ˆj)|t	j	ƒ ˆj(ˆj ˆ ˆj ƒ}ˆj*dˆ ˆj(ˆjˆj|||ˆj+ dœƒ ˆràˆ | kràP qàW ˆ �rÞˆj,�rÞˆj(d k	�rÞˆ ˆj(k �rÞˆ ˆ_ˆƒ ‚ˆjd k�rˆj$dƒ ˆjdƒ dS ˆjdk�rˆjj-ƒ  | d k	�rPˆ | k�rPt.ˆ t| ƒƒ}
ˆˆk�rL||
ƒ |
‚ˆj/ˆjˆjƒ ˆjjddƒ�r�ˆj0ˆjˆj jƒ jdd ƒƒˆd< ˆj*ˆ ˆ ˆjdt	j	ƒ ˆj+ dœƒ dS )NzContent-lengthÚmin_filesizeÚmax_filesizezN[download] File is smaller than min-filesize (%s bytes < %s bytes). Aborting.FzM[download] File is larger than max-filesize (%s bytes > %s bytes). Aborting.r   c                sF   ˆj dk}|sˆjjƒ  d ˆ_|r&ˆntjjtˆj ƒƒˆ_ˆ | ƒ‚d S )Nú-)rQ   ÚstreamÚcloseÚosÚpathÚgetsizer	   r>   )ÚeZ	to_stdout)r+   Úbyte_counterrZ   r   r   ÚretryÛ   s    

z5HttpFD.real_download.<locals>.download.<locals>.retryzunable to open for writing: %sÚxattr_set_filesizezuser.ytdl.filesizezutf-8z unable to set filesize xattr: %sÚ
zunable to write data: %sÚnoresizebufferÚdownloading)r7   r8   r9   rQ   r6   ÚetaÚspeedÚelapsedzDid not get any data blocksr_   Ú
updatetimeTzlast-modifiedÚfiletimer5   )r8   r9   r6   r7   rn   )1rF   rL   r   r<   Ú_TEST_FILE_SIZEr>   ÚparamsÚ	to_screenÚ
block_sizeÚtimeÚreadÚminrS   ÚtimeoutrT   rU   rV   Z	ETIMEDOUTÚlenr`   r   rQ   rA   ÚAssertionErrorÚundo_temp_namer6   Úreport_destinationÚOSErrorÚIOErrorÚreport_errorÚstrr   Úencoder   r   ÚwriteÚ	to_stderrÚ	slow_downÚbest_block_sizeÚ
calc_speedrB   Úcalc_etarR   Ú
start_timer=   ra   r   rP   Ú	try_utime)rB   Zmin_data_lenZmax_data_lenrt   r/   ÚnowZbeforerg   Z
data_blockre   rX   Úafterrm   rl   )r,   r+   ÚcountrZ   Ú	info_dictr[   r&   r)   )rf   r   Údownload½   sÂ    
"$
"(



 z&HttpFD.real_download.<locals>.downloadr   zgiving up after %s retries)r   r6   Ú	temp_namerQ   r`   r   Úupdaterr   rq   rA   r>   rB   rt   ru   rˆ   r=   rb   rc   Úisfiler	   rd   r?   Ú	ExceptionÚreport_retryr(   r   )r)   r6   r�   r   Zadd_headersr\   rŽ   re   r   )r,   r+   r'   r=   rŒ   rZ   rG   r�   r[   r&   r)   r1   r   r   Úreal_download   sb    



g 
zHttpFD.real_downloadN)r   r   r   r”   r   r   r   r   r      s   r   )Ú
__future__r   rU   rb   rS   ru   r:   rH   Úcommonr   Úcompatr   r   Úutilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   (