U
    y^<                     @   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              
      s2  d G dd dt }| |_
|_d _ddid}|rV| 
jddrn
jn d	i d
p
jd
pdd_	d_
d _
jdd_t _d _
jddrtjtjrtjtj_
j
dk_d
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}	kr z|  | W S  k
r } z0d7 	krЈ
|j	 W Y qW 5 d }~X Y n2  k
r   Y qY n k
r   Y dS X q
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   MC:\Users\TaGoRe\Desktop\beinconnect-dl\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>.NextFragmentNr'   r   r   r   r   NextFragmentM   s   r-   c                 S   s(   d| }|r|t |7 }| 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.  srt td n_jdkrLj} jrDj d_njdkr\d} nd } d_jrz| j d nd }|rjd k	r|jkrjd }| d k	}|_	t
d }|rʈ|| | zʈj|_|rxjjd}|rdtd|}|rd| t|dkrdt|d}t|d	}j pP||kpP||k }|rd|_W d S   d_d
_tj dd _W d S  tjfk
r }	 z2|	jdkrz(jt
d _j d }
W nB tjfk
r$ }	 z|	jdk s|	jdkr W 5 d }	~	X Y nX |
d k	rjd t|
  k rXjd k rn n>j jj jdjjd  n  d_d
_W Y ,d S n|	jdk s|	jdkrԂ  |	W 5 d }	~	X Y n> tjk
r( }	 z|	j t j!kr  |	W 5 d }	~	X Y nX d S )Ngffffff?r   abFr   zContent-Rangezbytes (\d+)-(\d+)?(?:/(\d+))?r      r#   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_downloadedr8   
try_renametmpfilename_hook_progresssocketerrorerrno
ECONNRESET)Zrange_startZ	range_endrE   requestZcontent_rangeZcontent_range_mZcontent_range_endZcontent_lenZaccept_content_lenerrcontent_length)	r,   r(   r?   ctxrI   is_testr*   r2   r   r   r   establish_connectionV   s    





 
	z2HttpFD.real_download.<locals>.establish_connectionc                     s  j  dd } r2| d ks,t| jkr2j} | d k	rt| j } jd}jd}|d k	r| |k rd| |f  dS |d k	r| |krd| |f  dS dj  j}t		 }d }|} fdd	}z"j 
s|nt||   }W np tjk
r, }	 z||	 W 5 d }	~	X Y nD tjk
rn }	 z"|	jtjtjfkrV ||	 W 5 d }	~	X Y nX  t|7  t|dkrqjd krzDtjj\__jd k	stj_j W n@ ttfk
r }
 zd
t|
  W Y dS d }
~
X Y nX jddr| d k	rztjdt|  d W n: t!t"fk
r }
 zdt|
  W 5 d }
~
X Y nX zj#| W nJ ttfk
r }
 z&$d dt|
  W Y dS d }
~
X Y nX %|| j  t		 }|}jdds2&|| t|}|}'|| j }j(d kr\d }n")|t		 j(j  j }*d j(jj|||j+ d r܈ | krܐqq܈sj,rj(d k	r j(k r _ jd kr$d d dS jdkr$j-  | d k	r\ | kr\t. t| }
krX||
 |
/jj jddr0jj  dd d< *  jdt		 j+ d dS )Nr5   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  d _|r&ntjtj _ | d S )N-)rS   streamcloseospathgetsizer	   r@   )eZ	to_stdout)r,   byte_counterr\   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)r9   r:   r;   rS   r8   etaspeedelapsedzDid not get any data blocksra   
updatetimeTzlast-modifiedfiletimer7   )r:   r;   r8   r9   rp   )1rH   rN   r   r>   _TEST_FILE_SIZEr@   params	to_screen
block_sizetimereadminrU   timeoutrV   rW   rX   Z	ETIMEDOUTlenrb   r   rS   rC   AssertionErrorundo_temp_namer8   report_destinationOSErrorIOErrorreport_errorstrr   encoder   r   write	to_stderr	slow_downbest_block_size
calc_speedrD   calc_etarT   
start_timer?   rc   r   rR   	try_utime)rD   Zmin_data_lenZmax_data_lenrv   r0   nowZbeforeri   Z
data_blockrg   rZ   Zafterro   rn   )r-   r,   countr\   	info_dictr]   r&   r*   )rh   r   download   s    
	" $
"&



 z&HttpFD.real_download.<locals>.downloadr   zgiving up after %s retries)r   r8   	temp_namerS   rb   r   updatert   rs   rC   r@   rD   rv   rw   r   r?   rd   re   isfiler	   rf   rA   	Exceptionreport_retryr)   r   )r*   r8   r   r   Zadd_headersr^   r   rg   r   )r-   r,   r(   r?   r   r\   rI   r   r]   r&   r*   r2   r   r   real_download   sj    




g 


zHttpFD.real_downloadN)r   r   r   r   r   r   r   r   r      s   r   )
__future__r   rW   rd   rU   rw   r<   rJ   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   <module>   s   (