# 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
  # size is usually ZFTP_SIZE, but zftransfer may set ZFTP_TSIZE
  local size=${ZFTP_TSIZE:-$ZFTP_SIZE}
  if [[ -n $size ]]; then
    local frac="$(( ZFTP_COUNT * 100 / size ))%"
    if [[ $style = bar && ${+COLUMNS} = 1 && $COLUMNS -gt 0 ]]; then
      if (( ! ${+zftpseconds} )); then
	print "$ZFTP_FILE ($size bytes): $ZFTP_TRANSFER" 1>&2
      fi
      integer maxwidth=$(( COLUMNS - 7 ))
      local width="$(( ZFTP_COUNT * maxwidth / size ))"
      print -nP "\r%S${(l:width:):-}%s${(l:maxwidth-width:):-}: ${frac}%%" 1>&2
    else
      print -n "\r$ZFTP_FILE ($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
# }
