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
pdd_	d_
d _
jjdd_tj _d _
jjddrtjjtjrt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	 wW Y d d }~X n.  k
r   wY n k
r   dS X qW 
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   FC:\Users\Broad\Desktop\All-Down\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ry(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 nX |
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	rt| 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	}xy"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rP jd kryDtjj\__jd k	st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	ry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rP qW  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   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   (