
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
©ft`¹  ã               @   sp   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m	Z	 d dl
Z
d dlZd dlZG dd„ dejjƒZdS )	é    )Úunicode_literals)Úformat_numberÚformat_time)Ú_term_width)Úunicode)ÚtimeNc               @   sr   e Zd ZdZejjdejjdejjdejj	diZ
ejdddfd	d
„Zdd„ Zddd„Zdd„ Zdd„ Zdd„ ZdS )ÚMultiFileProgressMeterz"Multi-file download progress meterZFAILEDZSKIPPEDZMIRRORZDRPMg333333Ó?g      ð?g      @c             C   sp   || _ || _|| _|| _d| _d| _tjjƒ | _d| _	d| _
d| _g | _i | _d| _d| _d| _d| _d| _dS )z÷Creates a new progress meter instance

        update_period -- how often to update the progress bar
        tick_period -- how fast to cycle through concurrent downloads
        rate_average -- time constant for average speed calculation
        r   N)ÚfoÚupdate_periodÚtick_periodÚrate_averageÚunknown_progresÚ
total_drpmÚsysÚstdoutÚisattyÚ	done_drpmÚ
done_filesÚ	done_sizeÚactiveÚstateÚ	last_timeÚ	last_sizeÚrateÚtotal_filesÚ
total_size)Úselfr	   r
   r   r   © r   ú/usr/lib/python3.6/progress.pyÚ__init__&   s"    zMultiFileProgressMeter.__init__c             C   s   t jjd|| jƒ d S )NZwrite_flush)ÚdnfÚutilZ_terminal_messengerr	   )r   Úmsgr   r   r   Úmessage?   s    zMultiFileProgressMeter.messager   c             C   sF   || _ || _|| _d| _d| _d| _g | _i | _d| _d| _	d | _
d S )Nr   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   Ztotal_drpmsr   r   r   ÚstartB   s    zMultiFileProgressMeter.startc             C   s    t ƒ }t|ƒ}t|jƒ}t|ƒ}|| jkrD|df| j|< | jj|ƒ | j| \}}||f| j|< |  j|| 7  _|| j | j	krœ|| j
kr’|| _
| j|ƒ d S )Nr   )r   r   ÚintÚdownload_sizer   r   Úappendr   r   r
   r   Ú_update)r   ÚpayloadÚdoneÚnowÚtextZtotalr$   Úoldr   r   r   ÚprogressS   s    


zMultiFileProgressMeter.progressc             C   sJ  | j rj|| j  }| j| j }|dkrj|dkrj|| }| jd k	rdt|| j dƒ}|| | jd|   }|| _|| _ | j| _| js‚d S | jt|| j	 ƒt
| jƒ  }| jdkrîd| jd  }t
| jƒdkrÞ|d| jt
| jƒ  7 }d|| j|f }| joø| j�rt| j| j | j ƒ}nd}d| j�r,t| jƒndt| jƒ|f }	tƒ t
|	ƒ }
|
d	 d
 }|dk�r0| j�rÆ| jd | j }t| j| d
 | j d
ƒ\}}d| d|  }d||||	f }	|
|d	 8 }
nj| jd }d}|dk �râdn|}d| d|  }d|||	f }	|
|d	 8 }
| jd |k �r*| jd nd| _| jd|
|
||	f ƒ d S )Nr   é   z%dz-%dz(%s/%d): %sz--:--z %5sB/s | %5sB %9s ETAz---  é   é   é   éd   ú=ú-z%3d%% [%-*s]%sé   ú z     [%-*s]%sz%-*.*s%s)r   r   r   r   Úminr   r   r   r%   r   Úlenr   r   r   r   r   r   Údivmodr   r#   )r   r+   Z
delta_timeZ
delta_sizer   Zweightr,   ÚnZtime_etar"   ÚleftZblZpctÚpZbarr   r   r   r(   g   sX    




zMultiFileProgressMeter._updatec             C   s¶  t ƒ  }}t|ƒ}t|jƒ}d}|tjjkr.n�|tjjkrJ|  jd7  _nt|| j	kr–| j	j
|ƒ\}}| jj|ƒ ||8 }|  jd7  _|  j|7  _n(|tjjkr¾|  jd7  _|  j|7  _|�r*|tjjkrö| jdkröd| j| | j| j|f }	nd| j| |f }	tƒ t|	ƒ d }
d|	|
|f }	nl| jdk�rHd| j| j|f }t|| dƒ}dtt|ƒ| ƒt|ƒt|ƒf }	tƒ t|	ƒ }
d	|
|
||	f }	| j|	ƒ | j�r²| j|ƒ d S )
Nr   r/   z[%s %d/%d] %s: z	[%s] %s: z%s%-*s
z(%d/%d): %sgü©ñÒMbP?z %5sB/s | %5sB %9s    
z%-*.*s%s)r   r   r%   r&   r    ÚcallbackÚSTATUS_MIRRORÚSTATUS_DRPMr   r   Úpopr   Úremover   r   ÚSTATUS_ALREADY_EXISTSr   ÚSTATUS_2_STRr   r9   r   Úmaxr   Úfloatr   r#   r(   )r   r)   ZstatusZerr_msgr$   r+   r,   Úsizer*   r"   r<   Ztmr   r   r   Úendœ   sH    



zMultiFileProgressMeter.endN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r>   ZSTATUS_FAILEDrC   r?   r@   rD   r   Ústderrr   r#   r$   r.   r(   rH   r   r   r   r   r      s   
5r   )Z
__future__r   Zdnf.cli.formatr   r   Zdnf.cli.termr   Z
dnf.pycompr   r   r   Zdnf.callbackr    Zdnf.utilr>   ZDownloadProgressr   r   r   r   r   Ú<module>   s   