blob: 344d1c9c15eda33cbeb9eba5528fcfcc1090e332 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# function zftp_progress {
# Basic progress metre, showing the percent of the file transferred.
# You want growing bars? You gottem.
# zfconfig keys:
# progress
# empty or `none' no progress meter
# `bar' use a growing bar of inverse video
# `percent' or other non-blank show the percentage transferred
# If size of remote file is not available, `bar' or `percent' just show
# bytes.
# update
# Minimum time in seconds between updates of the progress display.
# Don't show progress unless stderr is a terminal
[[ ! -t 2 || ${zfconfig[progress]} = (|none) ]] && return 0
# Tunable parameters.
# How many seconds to wait before printing an updated progress report.
integer update=${zfconfig[update]:-1}
# What style: either bar for growing bars, or anything else for simple
# percentage. For bar we need to have the terminal width in COLUMNS,
# which is often set automatically, but you never know.
local style=${zfconfig[progress]}
if [[ -n $ZFTP_TRANSFER ]]; then
# avoid a `parameter unset' message
[[ $ZFTP_TRANSFER != *F ]] &&
(( ${+zftpseconds} )) && (( SECONDS - zftpseconds < update )) && return
if [[ -n $ZFTP_SIZE ]]; then
local frac="$(( ZFTP_COUNT * 100 / ZFTP_SIZE ))%"
if [[ $style = bar && ${+COLUMNS} = 1 && $COLUMNS -gt 0 ]]; then
if (( ! ${+zftpseconds} )); then
print "$ZFTP_FILE ($ZFTP_SIZE bytes): $ZFTP_TRANSFER" 1>&2
fi
integer maxwidth=$(( COLUMNS - 7 ))
local width="$(( ZFTP_COUNT * maxwidth / ZFTP_SIZE ))"
print -nP "\r%S${(l:width:):-}%s${(l:maxwidth-width:):-}: ${frac}%%" 1>&2
else
print -n "\r$ZFTP_FILE ($ZFTP_SIZE bytes): $ZFTP_TRANSFER $frac" 1>&2
fi
else
print -n "\r$ZFTP_FILE: $ZFTP_TRANSFER $ZFTP_COUNT" 1>&2
fi
if [[ $ZFTP_TRANSFER = *F && ${+zftpseconds} = 1 ]]; then
unset zftpseconds
print 1>&2
else
zftpseconds=$SECONDS
fi
fi
# }
|