a
    !c                     @   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 | _d| _	d| _
d| _g | _i | _d| _d| _d| _d| _d| _dS )zCreates 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   4/usr/lib/python3.9/site-packages/dnf/cli/progress.py__init__&   s"    zMultiFileProgressMeter.__init__c                 C   s   t 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vrD|df| j|< | j| | j| \}}||f| j|< |  j|| 7  _|| j | j	kr|| j
kr|| _
| | d S r$   )r   r   intdownload_sizer   r   appendr   r   r
   r   _update)r   payloaddonenowtexttotalr%   oldr   r   r   progressS   s    


zMultiFileProgressMeter.progressc                 C   sL  | j rj|| j  }| j| j }|dkrj|dkrj|| }| jd urdt|| j d}|| | jd|   }|| _|| _ | j| _| jsd S | jt|| j	 t
| j  }| jdkrd| jd  }t
| jdkr|d| jt
| j  7 }d|| j|f }| jr| jrt| j| j | j }nd}d| jr.t| jndt| j|f }	t t
|	 }
|
d	 d
 }|dkr2| jr| jd | j }t| j| d
 | j d
\}}d| d|  }d||||	f }	|
|d	 8 }
nj| jd }d}|dk rdn|}d| d|  }d|||	f }	|
|d	 8 }
| jd |k r,| jd nd| _| 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]%s%-*.*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   s\    




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	v r| j	
|\}}| j| ||8 }|  jd7  _|  j|7  _n(|tjjkr|  jd7  _|  j|7  _|r*|tjju r| jdkrd| 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r| | d S )
Nr   r1   z[%s %d/%d] %s: z	[%s] %s: z%s%-*s
z(%d/%d): %sgMbP?z %5sB/s | %5sB %9s    
r:   )r   r   r&   r'   r    callbackSTATUS_MIRRORSTATUS_DRPMr   r   popr   remover   r   STATUS_ALREADY_EXISTSr   STATUS_2_STRr   r<   r   maxr   floatr   r#   r)   )r   r*   Zstatuserr_msgr%   r,   r-   sizer+   r"   r?   Ztmr   r   r   end   sL    



zMultiFileProgressMeter.endN)r   )__name__
__module____qualname____doc__r    rA   ZSTATUS_FAILEDrF   rB   rC   rG   r   stderrr   r#   r%   r0   r)   rL   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.utilrA   ZDownloadProgressr   r   r   r   r   <module>   s   