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

This commit is contained in:
Charles Kerr 2010-07-10 02:05:25 +00:00
parent 52c04a0d06
commit 71cadc02b6
4 changed files with 114 additions and 72 deletions

View File

@ -52,11 +52,11 @@ const char * mem_M_str = N_("MiB");
const char * mem_G_str = N_("GiB");
const char * mem_T_str = N_("TiB");
const int disk_K = 1000;
const char * disk_K_str = N_("kB");
const char * disk_M_str = N_("MB");
const char * disk_G_str = N_("GB");
const char * disk_T_str = N_("TB");
const int disk_K = 1024;
const char * disk_K_str = N_("KiB");
const char * disk_M_str = N_("MiB");
const char * disk_G_str = N_("GiB");
const char * disk_T_str = N_("TiB");
const int speed_K = 1000;
const char * speed_K_str = N_("kB/s");

View File

@ -1554,7 +1554,7 @@ tr_realpath( const char * path, char * resolved_path )
struct formatter_unit
{
char * name;
unsigned long value;
uint64_t value;
};
struct formatter_units
@ -1570,7 +1570,7 @@ formatter_init( struct formatter_units * units,
const char * kb, const char * mb,
const char * gb, const char * tb )
{
unsigned long value = kilo;
uint64_t value = kilo;
units->units[TR_FMT_KB].name = tr_strdup( kb );
units->units[TR_FMT_KB].value = value;

View File

@ -7,20 +7,29 @@
Transmission.fmt = (function()
{
var speed_K = 1000;
var speed_B_str = 'B';
var speed_K_str = 'kB/s';
var speed_M_str = 'MB/s';
var speed_G_str = 'GB/s';
var speed_T_str = 'TB/s';
var size_K = 1024;
var size_B_str = 'B';
var size_K_str = 'KiB';
var size_M_str = 'MiB';
var size_G_str = 'GiB';
var size_T_str = 'TiB';
var mem_K = 1024;
var mem_B_str = 'B';
var mem_K_str = 'KiB';
var mem_M_str = 'MiB';
var mem_G_str = 'GiB';
var mem_T_str = 'TiB';
return {
speed_K: 1000,
size_K: 1024,
/*
* Format a percentage to a string
@ -47,64 +56,100 @@ Transmission.fmt = (function()
},
/**
* Formats the bytes into a string value with B, KiB, MiB, or GiB units.
*
* Formats the a memory size into a human-readable string
* @param {Number} bytes the filesize in bytes
* @return {String} formatted string with B, KiB, MiB or GiB units.
* @return {String} human-readable string
*/
mem: function( bytes )
{
if( bytes < mem_K )
return bytes + ' ' + mem_B_str;
var convertedSize;
var unit;
if( bytes < Math.pow( mem_K, 2 ) )
{
convertedSize = bytes / mem_K;
unit = mem_K_str;
}
else if( bytes < Math.pow( mem_K, 3 ) )
{
convertedSize = bytes / Math.pow( mem_K, 2 );
unit = mem_M_str;
}
else if( bytes < Math.pow( mem_K, 4 ) )
{
convertedSize = bytes / Math.pow( mem_K, 3 );
unit = mem_G_str;
}
else
{
convertedSize = bytes / Math.pow( mem_K, 4 );
unit = mem_T_str;
}
// try to have at least 3 digits and at least 1 decimal
return convertedSize <= 9.995 ? convertedSize.toTruncFixed(2) + ' ' + unit
: convertedSize.toTruncFixed(1) + ' ' + unit;
},
/**
* Formats the a disk capacity or file size into a human-readable string
* @param {Number} bytes the filesize in bytes
* @return {String} human-readable string
*/
size: function( bytes )
{
var size_K = this.size_K;
var size_M = size_K * size_K;
var size_G = size_K * size_K * size_K;
if( !bytes )
return 'None';
if( bytes < size_K )
return bytes.toTruncFixed(0) + size_B_str;
return bytes + ' ' + size_B_str;
if( bytes < ( size_K * 100 ) )
return (bytes/size_K).toTruncFixed(2) + ' ' + size_K_str;
if( bytes < size_M )
return (bytes/size_K).toTruncFixed(1) + ' ' + size_K_str;
var convertedSize;
var unit;
if( bytes < ( size_M * 100 ) )
return (bytes/size_M).toTruncFixed(2) + ' ' + size_M_str;
if( bytes < size_G )
return (bytes/size_M).toTruncFixed(1) + ' ' + size_M_str;
if( bytes < ( size_G * 100 ) )
return (bytes/size_G).toTruncFixed(2) + ' ' + size_G_str;
if( bytes < Math.pow( size_K, 2 ) )
{
convertedSize = bytes / size_K;
unit = size_K_str;
}
else if( bytes < Math.pow( size_K, 3 ) )
{
convertedSize = bytes / Math.pow( size_K, 2 );
unit = size_M_str;
}
else if( bytes < Math.pow( size_K, 4 ) )
{
convertedSize = bytes / Math.pow( size_K, 3 );
unit = size_G_str;
}
else
return (bytes/size_G).toTruncFixed(1) + ' ' + size_G_str;
{
convertedSize = bytes / Math.pow( size_K, 4 );
unit = size_T_str;
}
// try to have at least 3 digits and at least 1 decimal
return convertedSize <= 9.995 ? convertedSize.toTruncFixed(2) + ' ' + unit
: convertedSize.toTruncFixed(1) + ' ' + unit;
},
speed: function( bytes )
speed: function( KBps )
{
var speed_K = this.speed_K;
var speed_M = speed_K * speed_K;
var speed_G = speed_K * speed_K * speed_K;
var speed = KBps;
if( bytes==undefined || bytes==0 )
return 'None';
if (speed <= 999.95) // 0 KBps to 999.9 K
return speed.toTruncFixed(1) + ' ' + speed_K_str;
if( bytes < speed_K )
return bytes.toTruncFixed(0) + ' ' + speed_B_str;
speed /= speed_K;
if( bytes < ( speed_K * 100 ) )
return (bytes/speed_K).toTruncFixed(2) + ' ' + speed_K_str;
if( bytes < speed_M )
return (bytes/speed_K).toTruncFixed(1) + ' ' + speed_K_str;
if (speed <= 99.995) // 1 M to 99.99 M
return speed.toTruncFixed(2) + ' ' + speed_M_str;
if (speed <= 999.95) // 100 M to 999.9 M
return speed.toTruncFixed(1) + ' ' + speed_M_str;
if( bytes < ( speed_M * 100 ) )
return (bytes/speed_M).toTruncFixed(2) + ' ' + speed_M_str;
if( bytes < speed_G )
return (bytes/speed_M).toTruncFixed(1) + ' ' + speed_M_str;
if( bytes < ( speed_G * 100 ) )
return (bytes/speed_G).toTruncFixed(2) + ' ' + speed_G_str;
else
return (bytes/speed_G).toTruncFixed(1) + ' ' + speed_G_str;
// insane speeds
speed /= speed_K;
return speed.toTruncFixed(2) + ' ' + speed_G_str;
},
timeInterval: function( seconds )

View File

@ -642,11 +642,10 @@ Transmission.prototype =
tr.togglePeriodicRefresh( true );
}
var speed_K = Transmission.fmt.speed_K;
var up_bytes = parseInt( $('#prefs_form #upload_rate' )[0].value ) * speed_K;
var dn_bytes = parseInt( $('#prefs_form #download_rate')[0].value ) * speed_K;
var turtle_up_bytes = parseInt( $('#prefs_form #turtle_upload_rate' )[0].value ) * speed_K;
var turtle_dn_bytes = parseInt( $('#prefs_form #turtle_download_rate')[0].value ) * speed_K;
var up_bytes = parseInt( $('#prefs_form #upload_rate' )[0].value );
var dn_bytes = parseInt( $('#prefs_form #download_rate')[0].value );
var turtle_up_bytes = parseInt( $('#prefs_form #turtle_upload_rate' )[0].value );
var turtle_dn_bytes = parseInt( $('#prefs_form #turtle_download_rate')[0].value );
// pass the new prefs upstream to the RPC server
var o = { };
@ -936,12 +935,10 @@ Transmission.prototype =
var up_limited = prefs[RPC._UpSpeedLimited];
var dn_limited = prefs[RPC._DownSpeedLimited];
var up_limit_b = prefs[RPC._UpSpeedLimit];
var dn_limit_b = prefs[RPC._DownSpeedLimit];
var up_limit_k = up_limit_b / Transmission.fmt.speed_K;
var dn_limit_k = dn_limit_b / Transmission.fmt.speed_K;
var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit] / Transmission.fmt.speed_K;
var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit] / Transmission.fmt.speed_K;
var up_limit_k = prefs[RPC._UpSpeedLimit];
var dn_limit_k = prefs[RPC._DownSpeedLimit];
var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit];
var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit];
$('div.download_location input')[0].value = prefs[RPC._DownloadDir];
$('div.port input')[0].value = prefs[RPC._PeerPort];
@ -962,12 +959,12 @@ Transmission.prototype =
if (!iPhone)
{
setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(dn_limit_b) + ')' );
setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(dn_limit_k) + ')' );
var key = dn_limited ? '#limited_download_rate'
: '#unlimited_download_rate';
$(key).deselectMenuSiblings().selectMenuItem();
setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(up_limit_b) + ')' );
setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(up_limit_k) + ')' );
key = up_limited ? '#limited_upload_rate'
: '#unlimited_upload_rate';
$(key).deselectMenuSiblings().selectMenuItem();
@ -1080,11 +1077,11 @@ Transmission.prototype =
args[RPC._DownSpeedLimited] = false;
} else {
var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
var rate_b = parseInt( rate_str ) * Transmission.fmt.speed_K;
setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_b) + ')' );
var rate_val = parseInt( rate_str );
setInnerHTML( $('#limited_download_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
$('#limited_download_rate').deselectMenuSiblings().selectMenuItem();
$('div.preference input#download_rate')[0].value = rate_str;
args[RPC._DownSpeedLimit] = rate_b;
args[RPC._DownSpeedLimit] = rate_val;
args[RPC._DownSpeedLimited] = true;
}
$('div.preference input#limit_download')[0].checked = args[RPC._DownSpeedLimited];
@ -1099,11 +1096,11 @@ Transmission.prototype =
args[RPC._UpSpeedLimited] = false;
} else {
var rate_str = ($element[0].innerHTML).replace(/[^0-9]/ig, '');
var rate_b = parseInt( rate_str ) * Transmission.fmt.speed_K;
setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_b) + ')' );
var rate_val = parseInt( rate_str );
setInnerHTML( $('#limited_upload_rate')[0], 'Limit (' + Transmission.fmt.speed(rate_val) + ')' );
$('#limited_upload_rate').deselectMenuSiblings().selectMenuItem();
$('div.preference input#upload_rate')[0].value = rate_str;
args[RPC._UpSpeedLimit] = rate_b;
args[RPC._UpSpeedLimit] = rate_val;
args[RPC._UpSpeedLimited] = true;
}
$('div.preference input#limit_upload')[0].checked = args[RPC._UpSpeedLimited];
@ -1239,7 +1236,7 @@ Transmission.prototype =
download_dir = t._download_dir;
hash = t.hash();
pieces = t._pieceCount + ', ' + Transmission.fmt.size(t._pieceSize);
pieces = t._pieceCount + ' pieces @ ' + Transmission.fmt.mem(t._pieceSize);
date_created = Transmission.fmt.timestamp( t._creator_date );
}