Index: smart/interfaces/text/progress.py
===================================================================
--- smart/interfaces/text/progress.py	(revisão 746)
+++ smart/interfaces/text/progress.py	(cópia de trabalho)
@@ -113,7 +113,7 @@
         if not done:
             speed = data.get("speed")
             if speed:
-                suffix = "(%s - %d%%)\r" % (speed, current)
+                suffix = "(%s - %d%% - ETA %s)\r" % (speed, current, data.get("eta"))
             else:
                 suffix = "(%3d%%)\r" % current
         elif subpercent is None:
Index: smart/fetcher.py
===================================================================
--- smart/fetcher.py	(revisão 746)
+++ smart/fetcher.py	(cópia de trabalho)
@@ -20,7 +20,7 @@
 # along with Smart Package Manager; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
-from smart.util.strtools import sizeToStr, speedToStr
+from smart.util.strtools import sizeToStr, speedToStr, secondsToStr
 from smart.media import MediaSet, DeviceMedia
 from smart.uncompress import Uncompressor
 from smart.mirror import MirrorSystem
@@ -67,6 +67,7 @@
         self._activedownloadslock = thread.allocate_lock()
         self._maxactivedownloads = 0
         self.time = 0
+        self._eta = 0
 
     def reset(self):
         self._items.clear()
@@ -261,6 +262,7 @@
                       not item.getInfo("uncomp")):
                     if updatespeed:
                         item.updateSpeed()
+                        item.updateETA()
                     continue
                 localpath = item.getTargetPath()
                 if localpath in uncompchecked:
@@ -512,6 +514,7 @@
                 subdata["current"] = sizeToStr(current)
                 subdata["total"] = sizeToStr(total)
                 subdata["speed"] = speedToStr(self._speed)
+                subdata["eta"] = secondsToStr(self._eta)
                 self._progress.setSub(self._urlobj.original, current, total, 1,
                                       subdata)
                 self._progress.show()
@@ -532,6 +535,13 @@
                 self._speedcurrent = self._current
                 self.progress(self._current, self._total)
 
+    def updateETA(self):
+        if self._status is RUNNING:
+            if self._speed > 0:
+              self._eta = self._info.get("size") / self._speed
+            else:
+              self._eta = 999999.99
+
     def setSucceeded(self, targetpath, fetchedsize=0):
         if self._status is not FAILED:
             self._status = SUCCEEDED
Index: smart/util/strtools.py
===================================================================
--- smart/util/strtools.py	(revisão 746)
+++ smart/util/strtools.py	(cópia de trabalho)
@@ -71,6 +71,16 @@
     else:
         return "%.1fMB/s" % (speed/1024000.)
 
+def secondsToStr(time):
+    if time == 999999.99:
+        return "99:99:99"
+    elif time < 1:
+        return "00:00:01"
+    else:
+        minutes, seconds = divmod(time, 60)
+        hours, minutes = divmod(minutes, 60)
+        return "%02i:%02i:%02i" % (hours, minutes, seconds)
+
 _nulltrans = string.maketrans('', '')
 def isRegEx(s):
     return s.translate(_nulltrans, '^{[*') != s
