From 2dfad0a56454ec3d3bc981379078424ba443f2aa Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 20 Nov 2014 03:14:33 -0500
Subject: [PATCH] Make upload progress text more compact. E.g. "500 KB of 10 MB" becomes "0.5 of 10 MB"

---
 program/include/rcmail.php |   46 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 8ea42b6..527b74e 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -1958,13 +1958,32 @@
         }
 
         if (!empty($params['total'])) {
-            $params['percent'] = round($status['current']/$status['total']*100);
+            $total = $this->show_bytes($params['total'], $unit);
+            switch ($unit) {
+            case 'GB':
+                $gb      = $params['current']/1073741824;
+                $current = sprintf($gb >= 10 ? "%d" : "%.1f", $gb);
+                break;
+            case 'MB':
+                $mb      = $params['current']/1048576;
+                $current = sprintf($mb >= 10 ? "%d" : "%.1f", $mb);
+                break;
+            case 'KB':
+                $current = round($params['current']/1024);
+                break;
+            case 'B':
+            default:
+                $current = $params['current'];
+                break;
+            }
+
+            $params['percent'] = round($params['current']/$params['total']*100);
             $params['text']    = $this->gettext(array(
                 'name' => 'uploadprogress',
                 'vars' => array(
                     'percent' => $params['percent'] . '%',
-                    'current' => $this->show_bytes($params['current']),
-                    'total'   => $this->show_bytes($params['total'])
+                    'current' => $current,
+                    'total'   => $total
                 )
             ));
         }
@@ -2150,25 +2169,30 @@
     /**
      * Create a human readable string for a number of bytes
      *
-     * @param int Number of bytes
+     * @param int    Number of bytes
+     * @param string Size unit
      *
      * @return string Byte string
      */
-    public function show_bytes($bytes)
+    public function show_bytes($bytes, &$unit = null)
     {
         if ($bytes >= 1073741824) {
-            $gb  = $bytes/1073741824;
-            $str = sprintf($gb>=10 ? "%d " : "%.1f ", $gb) . $this->gettext('GB');
+            $unit = 'GB';
+            $gb   = $bytes/1073741824;
+            $str  = sprintf($gb >= 10 ? "%d " : "%.1f ", $gb) . $this->gettext($unit);
         }
         else if ($bytes >= 1048576) {
-            $mb  = $bytes/1048576;
-            $str = sprintf($mb>=10 ? "%d " : "%.1f ", $mb) . $this->gettext('MB');
+            $unit = 'MB';
+            $mb   = $bytes/1048576;
+            $str  = sprintf($mb >= 10 ? "%d " : "%.1f ", $mb) . $this->gettext($unit);
         }
         else if ($bytes >= 1024) {
-            $str = sprintf("%d ",  round($bytes/1024)) . $this->gettext('KB');
+            $unit = 'KB';
+            $str  = sprintf("%d ",  round($bytes/1024)) . $this->gettext($unit);
         }
         else {
-            $str = sprintf('%d ', $bytes) . $this->gettext('B');
+            $unit = 'B';
+            $str  = sprintf('%d ', $bytes) . $this->gettext();
         }
 
         return $str;

--
Gitblit v1.9.1