calculate and provide the estimated time of arrival
This commit is contained in:
A. Murat Eren
2005-11-21 12:53:56 +00:00
parent cc2cac1ade
commit 4a153d5761
2 changed files with 16 additions and 2 deletions
+2 -2
View File
@@ -114,8 +114,8 @@ class CLI(UI):
return False
def display_progress(self, **ka):
out = '\r%-30.30s %3d%% %12.2f %s' % \
(ka['filename'], ka['percent'], ka['rate'], ka['symbol'])
out = '\r%-30.30s %3d%% %12.2f %s [%s]' % \
(ka['filename'], ka['percent'], ka['rate'], ka['symbol'], ka['eta'])
self.output(out)
if ka['percent'] == 100:
self.output(colorize(_(' [complete]\n'), 'gray'))
+14
View File
@@ -27,6 +27,7 @@ from mimetools import Message
from base64 import encodestring
from shutil import move
from time import time
from time import gmtime
import gettext
__trans = gettext.translation('pisi', fallback=True)
@@ -63,6 +64,7 @@ class Fetcher:
self.url = url
self.filedest = dest
util.check_dir(self.filedest)
self.eta = '??:??:??'
self.percent = 0
self.rate = 0.0
self.progress = None
@@ -90,15 +92,19 @@ class Fetcher:
def _do_grab(self, fileURI, dest, totalsize):
symbols = [' B/s', 'KB/s', 'MB/s', 'GB/s']
bs, tt, = 1024, int(time())
s_time = time()
Tdiff = lambda: time() - s_time
size = existsize = self.existsize
symbol, depth = "B/s", 0
st = time()
chunk = fileURI.read(bs)
size += len(chunk)
if self.progress:
p = self.progress(totalsize, existsize)
self.percent = p.update(size)
self.complete = False
while chunk:
dest.write(chunk)
chunk = fileURI.read(bs)
@@ -106,11 +112,18 @@ class Fetcher:
ct = time()
if int(tt) != int(ct):
self.rate = (size - existsize) / (ct - st)
if self.percent:
self.eta = '%02d:%02d:%02d' %\
tuple([i for i in gmtime((Tdiff() * (100 - self.percent)) / self.percent)[3:6]])
while self.rate > 1000 and depth < 3:
self.rate /= 1024
depth += 1
symbol, depth = symbols[depth], 0
tt = time()
if self.progress:
if p.update(size):
self.percent = p.percent
@@ -118,6 +131,7 @@ class Fetcher:
ctx.ui.display_progress(filename = self.url.filename(),
percent = self.percent,
rate = self.rate,
eta = self.eta,
symbol = symbol)
if self.percent == 100: #FIXME: will be superseded by a
self.complete = True # working progress interface