a !c@spddlmZddlmZmZddlmZddlmZddl m Z ddl Z ddl Z ddl Z Gddde jjZdS) )unicode_literals) format_number format_time) _term_width)unicode)timeNc@sreZdZdZejjdejjdejjdejj diZ e j dddfd d Z d d ZdddZddZddZddZdS)MultiFileProgressMeterz"Multi-file download progress meterZFAILEDZSKIPPEDZMIRRORZDRPMg333333?g?g@cCsp||_||_||_||_d|_d|_tj|_d|_ d|_ d|_ g|_ i|_ d|_d|_d|_d|_d|_dS)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 rN)fo update_period tick_period rate_averageunknown_progres total_drpmsysstdoutisatty done_drpm done_files done_sizeactivestate last_time last_sizerate total_files total_size)selfr r r r r4/usr/lib/python3.9/site-packages/dnf/cli/progress.py__init__&s" zMultiFileProgressMeter.__init__cCstjd||jdS)NZ write_flush)dnfutilZ_terminal_messengerr )rmsgrrrmessage?szMultiFileProgressMeter.messagercCsF||_||_||_d|_d|_d|_g|_i|_d|_d|_ d|_ dSNr) rrrrrrrrrrr)rrrZ total_drpmsrrrstartBszMultiFileProgressMeter.startcCst}t|}t|j}t|}||jvrD|df|j|<|j||j|\}}||f|j|<|j||7_||j|j kr||j kr||_ | |dSr$) rrint download_sizerrappendrrr r_update)rpayloaddonenowtexttotalr%oldrrrprogressSs    zMultiFileProgressMeter.progresscCsL|jrj||j}|j|j}|dkrj|dkrj||}|jdurdt||jd}|||jd|}||_||_|j|_|jsdS|jt||j t |j}|j dkrd|j d}t |jdkr|d|j t |j7}d||j |f}|jr|j rt|j |j|j}nd}d|jr.t|jndt|j|f} tt | } | d d } | d kr2|j r|jd |j } t|j| d |j d \}} d |d| }d| | || f} | | d 8} nj|jd}d} |dkrdn|}d|d | }d| || f} | | d 8} |jd| kr,|jdnd|_|d| | || fdS)Nrz%dz-%dz (%s/%d): %sz--:--z %5sB/s | %5sB %9s ETA z--- d=-z%3d%% [%-*s]%s z [%-*s]%s%-*.*s%s)rrrrminr rrr&r lenrrrrrrdivmodr r#)rr,Z delta_timeZ delta_sizerZweightr-nZtime_etar"leftZblZpctpZbarrrrr)gs\        zMultiFileProgressMeter._updatec Cst}}t|}t|j}d}|tjjkr.n|tjjkrJ|jd7_nt||j vr|j |\}}|j |||8}|j d7_ |j|7_n(|tjjkr|j d7_ |j|7_|r*|tjjur|jdkrd|j||j|j|f} nd|j||f} tt| d} d| | |f} nl|jdkrHd|j |j|f}t||d} dtt|| t|t| f} tt| } d | | || f} || |j r||dS) Nrr1z[%s %d/%d] %s: z [%s] %s: z%s%-*s z (%d/%d): %sgMbP?z %5sB/s | %5sB %9s r:)rrr&r'r callback STATUS_MIRROR STATUS_DRPMrrpoprremoverrSTATUS_ALREADY_EXISTSr STATUS_2_STRrr<rmaxrfloatrr#r)) rr*statuserr_msgr%r,r-sizer+r"r?ZtmrrrendsL         zMultiFileProgressMeter.endN)r)__name__ __module__ __qualname____doc__r rAZ STATUS_FAILEDrFrBrCrGrstderrrr#r%r0r)rMrrrrrs 5r)Z __future__rZdnf.cli.formatrrZ dnf.cli.termrZ dnf.pycomprrrZ dnf.callbackr Zdnf.utilrAZDownloadProgressrrrrrs