(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_G_str = N_("GiB");
const char * mem_T_str = N_("TiB"); const char * mem_T_str = N_("TiB");
const int disk_K = 1000; const int disk_K = 1024;
const char * disk_K_str = N_("kB"); const char * disk_K_str = N_("KiB");
const char * disk_M_str = N_("MB"); const char * disk_M_str = N_("MiB");
const char * disk_G_str = N_("GB"); const char * disk_G_str = N_("GiB");
const char * disk_T_str = N_("TB"); const char * disk_T_str = N_("TiB");
const int speed_K = 1000; const int speed_K = 1000;
const char * speed_K_str = N_("kB/s"); 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 struct formatter_unit
{ {
char * name; char * name;
unsigned long value; uint64_t value;
}; };
struct formatter_units struct formatter_units
@@ -1570,7 +1570,7 @@ formatter_init( struct formatter_units * units,
const char * kb, const char * mb, const char * kb, const char * mb,
const char * gb, const char * tb ) 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].name = tr_strdup( kb );
units->units[TR_FMT_KB].value = value; units->units[TR_FMT_KB].value = value;

View File

@@ -7,20 +7,29 @@
Transmission.fmt = (function() Transmission.fmt = (function()
{ {
var speed_K = 1000;
var speed_B_str = 'B'; var speed_B_str = 'B';
var speed_K_str = 'kB/s'; var speed_K_str = 'kB/s';
var speed_M_str = 'MB/s'; var speed_M_str = 'MB/s';
var speed_G_str = 'GB/s'; var speed_G_str = 'GB/s';
var speed_T_str = 'TB/s';
var size_K = 1024;
var size_B_str = 'B'; var size_B_str = 'B';
var size_K_str = 'KiB'; var size_K_str = 'KiB';
var size_M_str = 'MiB'; var size_M_str = 'MiB';
var size_G_str = 'GiB'; 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 { return {
speed_K: 1000,
size_K: 1024,
/* /*
* Format a percentage to a string * 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 * @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 ) 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 ) if( bytes < size_K )
return bytes.toTruncFixed(0) + size_B_str; return bytes + ' ' + size_B_str;
if( bytes < ( size_K * 100 ) ) var convertedSize;
return (bytes/size_K).toTruncFixed(2) + ' ' + size_K_str; var unit;
if( bytes < size_M )
return (bytes/size_K).toTruncFixed(1) + ' ' + size_K_str;
if( bytes < ( size_M * 100 ) ) if( bytes < Math.pow( size_K, 2 ) )
return (bytes/size_M).toTruncFixed(2) + ' ' + size_M_str; {
if( bytes < size_G ) convertedSize = bytes / size_K;
return (bytes/size_M).toTruncFixed(1) + ' ' + size_M_str; unit = size_K_str;
}
if( bytes < ( size_G * 100 ) ) else if( bytes < Math.pow( size_K, 3 ) )
return (bytes/size_G).toTruncFixed(2) + ' ' + size_G_str; {
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 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 = KBps;
var speed_M = speed_K * speed_K;
var speed_G = speed_K * speed_K * speed_K;
if( bytes==undefined || bytes==0 ) if (speed <= 999.95) // 0 KBps to 999.9 K
return 'None'; return speed.toTruncFixed(1) + ' ' + speed_K_str;
if( bytes < speed_K ) speed /= speed_K;
return bytes.toTruncFixed(0) + ' ' + speed_B_str;
if( bytes < ( speed_K * 100 ) ) if (speed <= 99.995) // 1 M to 99.99 M
return (bytes/speed_K).toTruncFixed(2) + ' ' + speed_K_str; return speed.toTruncFixed(2) + ' ' + speed_M_str;
if( bytes < speed_M ) if (speed <= 999.95) // 100 M to 999.9 M
return (bytes/speed_K).toTruncFixed(1) + ' ' + speed_K_str; return speed.toTruncFixed(1) + ' ' + speed_M_str;
if( bytes < ( speed_M * 100 ) ) // insane speeds
return (bytes/speed_M).toTruncFixed(2) + ' ' + speed_M_str; speed /= speed_K;
if( bytes < speed_G ) return speed.toTruncFixed(2) + ' ' + speed_G_str;
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;
}, },
timeInterval: function( seconds ) timeInterval: function( seconds )

View File

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