progress: Add 'display-download-progress'.
* guix/progress.scm (display-download-progress): New procedure. (progress-reporter/file)[render]: Rewrite in terms of 'display-download-progress'.
This commit is contained in:
parent
363d7d6608
commit
fe65b559a6
|
@ -39,6 +39,7 @@
|
|||
progress-reporter/file
|
||||
progress-reporter/bar
|
||||
|
||||
display-download-progress
|
||||
byte-count->string
|
||||
current-terminal-columns
|
||||
|
||||
|
@ -183,24 +184,20 @@ width of the bar is BAR-WIDTH."
|
|||
move the cursor to the beginning of the line."
|
||||
(display "\r\x1b[K" port))
|
||||
|
||||
(define* (progress-reporter/file file size
|
||||
#:optional (log-port (current-output-port))
|
||||
#:key (abbreviation basename))
|
||||
"Return a <progress-reporter> object to show the progress of FILE's download,
|
||||
which is SIZE bytes long. The progress report is written to LOG-PORT, with
|
||||
ABBREVIATION used to shorten FILE for display."
|
||||
(let ((start-time (current-time time-monotonic))
|
||||
(transferred 0))
|
||||
(define (render)
|
||||
"Write the progress report to LOG-PORT."
|
||||
(define* (display-download-progress file size
|
||||
#:key
|
||||
start-time (transferred 0)
|
||||
(log-port (current-error-port)))
|
||||
"Write the progress report to LOG-PORT. Use START-TIME (a SRFI-19 time
|
||||
object) and TRANSFERRED (a total number of bytes) to determine the
|
||||
throughput."
|
||||
(define elapsed
|
||||
(duration->seconds
|
||||
(time-difference (current-time time-monotonic) start-time)))
|
||||
(if (number? size)
|
||||
(let* ((% (* 100.0 (/ transferred size)))
|
||||
(throughput (/ transferred elapsed))
|
||||
(left (format #f " ~a ~a"
|
||||
(abbreviation file)
|
||||
(left (format #f " ~a ~a" file
|
||||
(byte-count->string size)))
|
||||
(right (format #f "~a/s ~a ~a~6,1f%"
|
||||
(byte-count->string throughput)
|
||||
|
@ -212,8 +209,7 @@ ABBREVIATION used to shorten FILE for display."
|
|||
log-port)
|
||||
(force-output log-port))
|
||||
(let* ((throughput (/ transferred elapsed))
|
||||
(left (format #f " ~a"
|
||||
(abbreviation file)))
|
||||
(left (format #f " ~a" file))
|
||||
(right (format #f "~a/s ~a | ~a transferred"
|
||||
(byte-count->string throughput)
|
||||
(seconds->string elapsed)
|
||||
|
@ -224,6 +220,20 @@ ABBREVIATION used to shorten FILE for display."
|
|||
log-port)
|
||||
(force-output log-port))))
|
||||
|
||||
(define* (progress-reporter/file file size
|
||||
#:optional (log-port (current-output-port))
|
||||
#:key (abbreviation basename))
|
||||
"Return a <progress-reporter> object to show the progress of FILE's download,
|
||||
which is SIZE bytes long. The progress report is written to LOG-PORT, with
|
||||
ABBREVIATION used to shorten FILE for display."
|
||||
(let ((start-time (current-time time-monotonic))
|
||||
(transferred 0))
|
||||
(define (render)
|
||||
(display-download-progress (abbreviation file) size
|
||||
#:start-time start-time
|
||||
#:transferred transferred
|
||||
#:log-port log-port))
|
||||
|
||||
(progress-reporter
|
||||
(start render)
|
||||
;; Report the progress every 300ms or longer.
|
||||
|
|
Loading…
Reference in New Issue