Changeset 10987


Ignore:
Timestamp:
Jul 10, 2010, 2:05:25 AM (12 years ago)
Author:
charles
Message:

(trunk web) #3413 "download speed bad format in web interface" -- fixed.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/util.c

    r10986 r10987  
    5353const char * mem_T_str = N_("TiB");
    5454
    55 const int disk_K = 1000;
    56 const char * disk_K_str = N_("kB");
    57 const char * disk_M_str = N_("MB");
    58 const char * disk_G_str = N_("GB");
    59 const char * disk_T_str = N_("TB");
     55const int disk_K = 1024;
     56const char * disk_K_str = N_("KiB");
     57const char * disk_M_str = N_("MiB");
     58const char * disk_G_str = N_("GiB");
     59const char * disk_T_str = N_("TiB");
    6060
    6161const int speed_K = 1000;
  • trunk/libtransmission/utils.c

    r10986 r10987  
    15551555{
    15561556    char * name;
    1557     unsigned long value;
     1557    uint64_t value;
    15581558};
    15591559 
     
    15711571                const char * gb, const char * tb )
    15721572{
    1573     unsigned long value = kilo;
     1573    uint64_t value = kilo;
    15741574    units->units[TR_FMT_KB].name = tr_strdup( kb );
    15751575    units->units[TR_FMT_KB].value = value;
  • trunk/web/javascript/formatter.js

    r10931 r10987  
    88Transmission.fmt = (function()
    99{
     10        var speed_K = 1000;
    1011        var speed_B_str = 'B';
    1112        var speed_K_str = 'kB/s';
    1213        var speed_M_str = 'MB/s';
    1314        var speed_G_str = 'GB/s';
    14 
     15        var speed_T_str = 'TB/s';
     16
     17        var size_K = 1024;
    1518        var size_B_str = 'B';
    1619        var size_K_str = 'KiB';
    1720        var size_M_str = 'MiB';
    1821        var size_G_str = 'GiB';
     22        var size_T_str = 'TiB';
     23
     24        var mem_K = 1024;
     25        var mem_B_str = 'B';
     26        var mem_K_str = 'KiB';
     27        var mem_M_str = 'MiB';
     28        var mem_G_str = 'GiB';
     29        var mem_T_str = 'TiB';
    1930
    2031        return {
    21                 speed_K: 1000,
    22 
    23                 size_K: 1024,
     32
    2433
    2534                /*
     
    4857
    4958                /**
    50                  * Formats the bytes into a string value with B, KiB, MiB, or GiB units.
    51                  *
     59                 * Formats the a memory size into a human-readable string
    5260                 * @param {Number} bytes the filesize in bytes
    53                  * @return {String} formatted string with B, KiB, MiB or GiB units.
     61                 * @return {String} human-readable string
     62                 */
     63                mem: function( bytes )
     64                {
     65                        if( bytes < mem_K )
     66                                return bytes + ' ' + mem_B_str;
     67
     68                        var convertedSize;
     69                        var unit;
     70
     71                        if( bytes < Math.pow( mem_K, 2 ) )
     72                        {
     73                                convertedSize = bytes / mem_K;
     74                                unit = mem_K_str;
     75                        }
     76                        else if( bytes < Math.pow( mem_K, 3 ) )
     77                        {
     78                                convertedSize = bytes / Math.pow( mem_K, 2 );
     79                                unit = mem_M_str;
     80                        }
     81                        else if( bytes < Math.pow( mem_K, 4 ) )
     82                        {
     83                                convertedSize = bytes / Math.pow( mem_K, 3 );
     84                                unit = mem_G_str;
     85                        }
     86                        else
     87                        {
     88                                convertedSize = bytes / Math.pow( mem_K, 4 );
     89                                unit = mem_T_str;
     90                        }
     91
     92                        // try to have at least 3 digits and at least 1 decimal
     93                        return convertedSize <= 9.995 ? convertedSize.toTruncFixed(2) + ' ' + unit
     94                                                      : convertedSize.toTruncFixed(1) + ' ' + unit;
     95                },
     96
     97                /**
     98                 * Formats the a disk capacity or file size into a human-readable string
     99                 * @param {Number} bytes the filesize in bytes
     100                 * @return {String} human-readable string
    54101                 */
    55102                size: function( bytes )
    56103                {
    57                         var size_K = this.size_K;
    58                         var size_M = size_K * size_K;
    59                         var size_G = size_K * size_K * size_K;
    60 
    61                         if( !bytes )
    62                                 return 'None';
    63104                        if( bytes < size_K )
    64                                 return bytes.toTruncFixed(0) + size_B_str;
    65 
    66                         if( bytes < ( size_K * 100 ) )
    67                                 return (bytes/size_K).toTruncFixed(2) + ' ' + size_K_str;
    68                         if( bytes < size_M )
    69                                 return (bytes/size_K).toTruncFixed(1) + ' ' + size_K_str;
    70 
    71                         if( bytes < ( size_M * 100 ) )
    72                                 return (bytes/size_M).toTruncFixed(2) + ' ' + size_M_str;
    73                         if( bytes < size_G )
    74                                 return (bytes/size_M).toTruncFixed(1) + ' ' + size_M_str;
    75 
    76                         if( bytes < ( size_G * 100 ) )
    77                                 return (bytes/size_G).toTruncFixed(2) + ' ' + size_G_str;
    78                         else
    79                                 return (bytes/size_G).toTruncFixed(1) + ' ' + size_G_str;
    80                 },
    81 
    82                 speed: function( bytes )
    83                 {
    84                         var speed_K = this.speed_K;
    85                         var speed_M = speed_K * speed_K;
    86                         var speed_G = speed_K * speed_K * speed_K;
    87 
    88                         if( bytes==undefined || bytes==0 )
    89                                 return 'None';
    90 
    91                         if( bytes < speed_K )
    92                                 return bytes.toTruncFixed(0) + ' ' + speed_B_str;
    93 
    94                         if( bytes < ( speed_K * 100 ) )
    95                                 return (bytes/speed_K).toTruncFixed(2) + ' ' + speed_K_str;
    96                         if( bytes < speed_M )
    97                                 return (bytes/speed_K).toTruncFixed(1) + ' ' + speed_K_str;
    98 
    99                         if( bytes < ( speed_M * 100 ) )
    100                                 return (bytes/speed_M).toTruncFixed(2) + ' ' + speed_M_str;
    101                         if( bytes < speed_G )
    102                                 return (bytes/speed_M).toTruncFixed(1) + ' ' + speed_M_str;
    103 
    104                         if( bytes < ( speed_G * 100 ) )
    105                                 return (bytes/speed_G).toTruncFixed(2) + ' ' + speed_G_str;
    106                         else
    107                                 return (bytes/speed_G).toTruncFixed(1) + ' ' + speed_G_str;
     105                                return bytes + ' ' + size_B_str;
     106
     107                        var convertedSize;
     108                        var unit;
     109
     110                        if( bytes < Math.pow( size_K, 2 ) )
     111                        {
     112                                convertedSize = bytes / size_K;
     113                                unit = size_K_str;
     114                        }
     115                        else if( bytes < Math.pow( size_K, 3 ) )
     116                        {
     117                                convertedSize = bytes / Math.pow( size_K, 2 );
     118                                unit = size_M_str;
     119                        }
     120                        else if( bytes < Math.pow( size_K, 4 ) )
     121                        {
     122                                convertedSize = bytes / Math.pow( size_K, 3 );
     123                                unit = size_G_str;
     124                        }
     125                        else
     126                        {
     127                                convertedSize = bytes / Math.pow( size_K, 4 );
     128                                unit = size_T_str;
     129                        }
     130
     131                        // try to have at least 3 digits and at least 1 decimal
     132                        return convertedSize <= 9.995 ? convertedSize.toTruncFixed(2) + ' ' + unit
     133                                                      : convertedSize.toTruncFixed(1) + ' ' + unit;
     134                },
     135
     136                speed: function( KBps )
     137                {
     138                        var speed = KBps;
     139
     140                        if (speed <= 999.95) // 0 KBps to 999.9 K
     141                                return speed.toTruncFixed(1) + ' ' + speed_K_str;
     142
     143                        speed /= speed_K;
     144
     145                        if (speed <= 99.995) // 1 M to 99.99 M
     146                                return speed.toTruncFixed(2) + ' ' + speed_M_str;
     147                        if (speed <= 999.95) // 100 M to 999.9 M
     148                                return speed.toTruncFixed(1) + ' ' + speed_M_str;
     149
     150                        // insane speeds
     151                        speed /= speed_K;
     152                        return speed.toTruncFixed(2) + ' ' + speed_G_str;
    108153                },
    109154
  • trunk/web/javascript/transmission.js

    r10942 r10987  
    643643                }
    644644
    645                 var speed_K = Transmission.fmt.speed_K;
    646                 var up_bytes        = parseInt( $('#prefs_form #upload_rate'  )[0].value ) * speed_K;
    647                 var dn_bytes        = parseInt( $('#prefs_form #download_rate')[0].value ) * speed_K;
    648                 var turtle_up_bytes = parseInt( $('#prefs_form #turtle_upload_rate'  )[0].value ) * speed_K;
    649                 var turtle_dn_bytes = parseInt( $('#prefs_form #turtle_download_rate')[0].value ) * speed_K;
     645                var up_bytes        = parseInt( $('#prefs_form #upload_rate'  )[0].value );
     646                var dn_bytes        = parseInt( $('#prefs_form #download_rate')[0].value );
     647                var turtle_up_bytes = parseInt( $('#prefs_form #turtle_upload_rate'  )[0].value );
     648                var turtle_dn_bytes = parseInt( $('#prefs_form #turtle_download_rate')[0].value );
    650649
    651650                // pass the new prefs upstream to the RPC server
     
    937936                var up_limited        = prefs[RPC._UpSpeedLimited];
    938937                var dn_limited        = prefs[RPC._DownSpeedLimited];
    939                 var up_limit_b        = prefs[RPC._UpSpeedLimit];
    940                 var dn_limit_b        = prefs[RPC._DownSpeedLimit];
    941                 var up_limit_k        = up_limit_b                       / Transmission.fmt.speed_K;
    942                 var dn_limit_k        = dn_limit_b                       / Transmission.fmt.speed_K;
    943                 var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit]   / Transmission.fmt.speed_K;
    944                 var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit] / Transmission.fmt.speed_K;
     938                var up_limit_k        = prefs[RPC._UpSpeedLimit];
     939                var dn_limit_k        = prefs[RPC._DownSpeedLimit];
     940                var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit];
     941                var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit];
    945942
    946943                $('div.download_location input')[0].value = prefs[RPC._DownloadDir];
     
    963960                if (!iPhone)
    964961                {
    965                         setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(dn_limit_b) + ')' );
     962                        setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(dn_limit_k) + ')' );
    966963                        var key = dn_limited ? '#limited_download_rate'
    967964                                               : '#unlimited_download_rate';
    968965                        $(key).deselectMenuSiblings().selectMenuItem();
    969966
    970                         setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(up_limit_b) + ')' );
     967                        setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(up_limit_k) + ')' );
    971968                        key = up_limited ? '#limited_upload_rate'
    972969                                         : '#unlimited_upload_rate';
     
    10811078                                } else {
    10821079                                        var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
    1083                                         var rate_b = parseInt( rate_str ) * Transmission.fmt.speed_K;
    1084                                         setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_b) + ')' );
     1080                                        var rate_val = parseInt( rate_str );
     1081                                        setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
    10851082                                        $('#limited_download_rate').deselectMenuSiblings().selectMenuItem();
    10861083                                        $('div.preference input#download_rate')[0].value = rate_str;
    1087                                         args[RPC._DownSpeedLimit] = rate_b;
     1084                                        args[RPC._DownSpeedLimit] = rate_val;
    10881085                                        args[RPC._DownSpeedLimited] = true;
    10891086                                }
     
    11001097                                } else {
    11011098                                        var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
    1102                                         var rate_b = parseInt( rate_str ) * Transmission.fmt.speed_K;
    1103                                         setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_b) + ')' );
     1099                                        var rate_val = parseInt( rate_str );
     1100                                        setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
    11041101                                        $('#limited_upload_rate').deselectMenuSiblings().selectMenuItem();
    11051102                                        $('div.preference input#upload_rate')[0].value = rate_str;
    1106                                         args[RPC._UpSpeedLimit] = rate_b;
     1103                                        args[RPC._UpSpeedLimit] = rate_val;
    11071104                                        args[RPC._UpSpeedLimited] = true;
    11081105                                }
     
    12401237
    12411238                        hash = t.hash();
    1242                         pieces = t._pieceCount + ', ' + Transmission.fmt.size(t._pieceSize);
     1239                        pieces = t._pieceCount + ' pieces @ ' + Transmission.fmt.mem(t._pieceSize);
    12431240                        date_created = Transmission.fmt.timestamp( t._creator_date );
    12441241                }
Note: See TracChangeset for help on using the changeset viewer.