(trunk) #3547 "Wrong speed display in web UI" -- fixed

This commit is contained in:
Charles Kerr
2010-09-18 23:06:03 +00:00
parent bf3dec4299
commit 4d7046fd67
6 changed files with 133 additions and 70 deletions

View File

@@ -400,47 +400,58 @@
4.1. Session Arguments
string | value type & description
---------------------------------+-------------------------------------------------
"alt-speed-down" | number max global download speed (KBps)
"alt-speed-enabled" | boolean true means use the alt speeds
"alt-speed-time-begin" | number when to turn on alt speeds (units: minutes after midnight)
"alt-speed-time-enabled" | boolean true means the scheduled on/off times are used
"alt-speed-time-end" | number when to turn off alt speeds (units: same)
"alt-speed-time-day" | number what day(s) to turn on alt speeds (look at tr_sched_day)
"alt-speed-up" | number max global upload speed (KBps)
"blocklist-enabled" | boolean true means enabled
"blocklist-size" | number number of rules in the blocklist
"cache-size" | number maximum size of the disk cache (MB)
"config-dir" | string location of transmission's configuration directory
"download-dir" | string default path to download torrents
"dht-enabled" | boolean true means allow dht in public torrents
"encryption" | string "required", "preferred", "tolerated"
"idle-seeding-limit" | number the default seed inactivity limit for torrents to use
"idle-seeding-limit-enabled" | boolean true if the seeding inactivity limit is honored by default
"incomplete-dir" | string path for incomplete torrents, when enabled
"incomplete-dir-enabled" | boolean true means keep torrents in incomplete-dir until done
"lpd-enabled" | boolean true means allow Local Peer Discovery in public torrents
"peer-limit-global" | number maximum global number of peers
"peer-limit-per-torrent" | number maximum global number of peers
"pex-enabled" | boolean true means allow pex in public torrents
"peer-port" | number port number
"peer-port-random-on-start" | boolean true means pick a random peer port on launch
"port-forwarding-enabled" | boolean true means enabled
"rename-partial-files" | boolean true means append ".part" to incomplete files
"rpc-version" | number the current RPC API version
"rpc-version-minimum" | number the minimum RPC API version supported
"script-torrent-done-filename" | string filename of the script to run
"script-torrent-done-enabled" | boolean whether or not to call the "done" script
"seedRatioLimit" | double the default seed ratio for torrents to use
"seedRatioLimited" | boolean true if seedRatioLimit is honored by default
"speed-limit-down" | number max global download speed (KBps)
"speed-limit-down-enabled" | boolean true means enabled
"speed-limit-up" | number max global upload speed (KBps)
"speed-limit-up-enabled" | boolean true means enabled
"start-added-torrents" | boolean true means added torrents will be started right away
"trash-original-torrent-files" | boolean true means the .torrent file of added torrents will be deleted
"version" | string long version string "$version ($revision)"
string | value type | description
---------------------------------+------------+-------------------------------------
"alt-speed-down" | number | max global download speed (KBps)
"alt-speed-enabled" | boolean | true means use the alt speeds
"alt-speed-time-begin" | number | when to turn on alt speeds (units: minutes after midnight)
"alt-speed-time-enabled" | boolean | true means the scheduled on/off times are used
"alt-speed-time-end" | number | when to turn off alt speeds (units: same)
"alt-speed-time-day" | number | what day(s) to turn on alt speeds (look at tr_sched_day)
"alt-speed-up" | number | max global upload speed (KBps)
"blocklist-enabled" | boolean | true means enabled
"blocklist-size" | number | number of rules in the blocklist
"cache-size" | number | maximum size of the disk cache (MB)
"config-dir" | string | location of transmission's configuration directory
"download-dir" | string | default path to download torrents
"dht-enabled" | boolean | true means allow dht in public torrents
"encryption" | string | "required", "preferred", "tolerated"
"idle-seeding-limit" | number | the default seed inactivity limit for torrents to use
"idle-seeding-limit-enabled" | boolean | true if the seeding inactivity limit is honored by default
"incomplete-dir" | string | path for incomplete torrents, when enabled
"incomplete-dir-enabled" | boolean | true means keep torrents in incomplete-dir until done
"lpd-enabled" | boolean | true means allow Local Peer Discovery in public torrents
"peer-limit-global" | number | maximum global number of peers
"peer-limit-per-torrent" | number | maximum global number of peers
"pex-enabled" | boolean | true means allow pex in public torrents
"peer-port" | number | port number
"peer-port-random-on-start" | boolean | true means pick a random peer port on launch
"port-forwarding-enabled" | boolean | true means enabled
"rename-partial-files" | boolean | true means append ".part" to incomplete files
"rpc-version" | number | the current RPC API version
"rpc-version-minimum" | number | the minimum RPC API version supported
"script-torrent-done-filename" | string | filename of the script to run
"script-torrent-done-enabled" | boolean | whether or not to call the "done" script
"seedRatioLimit" | double | the default seed ratio for torrents to use
"seedRatioLimited" | boolean | true if seedRatioLimit is honored by default
"speed-limit-down" | number | max global download speed (KBps)
"speed-limit-down-enabled" | boolean | true means enabled
"speed-limit-up" | number | max global upload speed (KBps)
"speed-limit-up-enabled" | boolean | true means enabled
"start-added-torrents" | boolean | true means added torrents will be started right away
"trash-original-torrent-files" | boolean | true means the .torrent file of added torrents will be deleted
"units" | object | see below
"version" | string | long version string "$version ($revision)"
---------------------------------+------------+-----------------------------+
units | object containing: |
+--------------+--------+------------------+
| speed-units | array | 4 strings: KB/s, MB/s, GB/s, TB/s
| speed-bytes | number | number of bytes in a KB (1000 for kB; 1024 for KiB)
| size-units | array | 4 strings: KB/s, MB/s, GB/s, TB/s
| size-bytes | number | number of bytes in a KB (1000 for kB; 1024 for KiB)
| memory-units | array | 4 strings: KB/s, MB/s, GB/s, TB/s
| memory-bytes | number | number of bytes in a KB (1000 for kB; 1024 for KiB)
+--------------+--------+------------------+
"rpc-version" indicates the RPC interface version supported by the RPC server.
It is incremented when a new version of Transmission changes the RPC interface.
@@ -622,5 +633,6 @@
| | yes | session-set | new arg "idle-seeding-limit-enabled"
| | yes | session-get | new arg "idle-seeding-limit"
| | yes | session-get | new arg "idle-seeding-limit-enabled"
| | yes | session-get | new arg "units"
| | yes | torrent-set | new arg "seedIdleLimit"
| | yes | torrent-set | new arg "seedIdleMode"

View File

@@ -1520,7 +1520,7 @@ sessionGet( tr_session * s,
struct tr_rpc_idle_data * idle_data UNUSED )
{
const char * str;
tr_benc * d = args_out;
tr_benc * d = args_out;
assert( idle_data == NULL );
tr_bencDictAddInt ( d, TR_PREFS_KEY_ALT_SPEED_UP_KBps, tr_sessionGetAltSpeed_KBps(s,TR_UP) );
@@ -1560,6 +1560,7 @@ sessionGet( tr_session * s,
tr_bencDictAddBool( d, TR_PREFS_KEY_DSPEED_ENABLED, tr_sessionIsSpeedLimited( s, TR_DOWN ) );
tr_bencDictAddStr ( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, tr_sessionGetTorrentDoneScript( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED, tr_sessionIsTorrentDoneScriptEnabled( s ) );
tr_formatter_get_units( tr_bencDictAddDict( d, "units", 0 ) );
tr_bencDictAddStr ( d, "version", LONG_VERSION_STRING );
switch( tr_sessionGetEncryption( s ) ) {
case TR_CLEAR_PREFERRED: str = "tolerated"; break;

View File

@@ -50,6 +50,7 @@
#endif
#include "transmission.h"
#include "bencode.h"
#include "fdlimit.h"
#include "ConvertUTF.h"
#include "list.h"
@@ -1686,3 +1687,25 @@ tr_formatter_mem_B( char * buf, uint64_t bytes_per_second, size_t buflen )
{
return formatter_get_size_str( &mem_units, buf, bytes_per_second, buflen );
}
void
tr_formatter_get_units( tr_benc * d )
{
int i;
tr_benc * l;
tr_bencDictReserve( d, 6 );
tr_bencDictAddInt( d, "memory-bytes", mem_units.units[TR_FMT_KB].value );
l = tr_bencDictAddList( d, "memory-units", 4 );
for( i=0; i<4; i++ ) tr_bencListAddStr( l, mem_units.units[i].name );
tr_bencDictAddInt( d, "size-bytes", size_units.units[TR_FMT_KB].value );
l = tr_bencDictAddList( d, "size-units", 4 );
for( i=0; i<4; i++ ) tr_bencListAddStr( l, size_units.units[i].name );
tr_bencDictAddInt( d, "speed-bytes", speed_units.units[TR_FMT_KB].value );
l = tr_bencDictAddList( d, "speed-units", 4 );
for( i=0; i<4; i++ ) tr_bencListAddStr( l, speed_units.units[i].name );
}

View File

@@ -590,6 +590,7 @@ static inline char* tr_formatter_mem_MB( char * buf, double MBps, size_t buflen
/* format a file size from bytes into a user-readable string. */
char* tr_formatter_size_B( char * buf, uint64_t bytes, size_t buflen );
void tr_formatter_get_units( struct tr_benc * dict );
/***
****

View File

@@ -9,27 +9,47 @@ Transmission.fmt = (function()
{
var speed_K = 1000;
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_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 size_K_str = 'KB';
var size_M_str = 'MB';
var size_G_str = 'GB';
var size_T_str = 'TB';
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';
var mem_K_str = 'KB';
var mem_M_str = 'MB';
var mem_G_str = 'GB';
var mem_T_str = 'TB';
return {
updateUnits: function( u )
{
speed_K = u['speed-bytes'];
speed_K_str = u['speed-units'][0];
speed_M_str = u['speed-units'][1];
speed_G_str = u['speed-units'][2];
speed_T_str = u['speed-units'][3];
size_K = u['size-bytes'];
size_K_str = u['size-units'][0];
size_M_str = u['size-units'][1];
size_G_str = u['size-units'][2];
size_T_str = u['size-units'][3];
mem_K = u['memory-bytes'];
mem_K_str = u['memory-units'][0];
mem_M_str = u['memory-units'][1];
mem_G_str = u['memory-units'][2];
mem_T_str = u['memory-units'][3];
},
/*
* Format a percentage to a string

View File

@@ -987,6 +987,9 @@ Transmission.prototype =
var turtle_up_limit_k = prefs[RPC._TurtleUpSpeedLimit];
var turtle_dn_limit_k = prefs[RPC._TurtleDownSpeedLimit];
if( prefs.units )
Transmission.fmt.updateUnits( prefs.units );
$('div.download_location input')[0].value = prefs[RPC._DownloadDir];
$('div.port input')[0].value = prefs[RPC._PeerPort];
$('div.auto_start input')[0].checked = prefs[RPC._StartAddedTorrent];
@@ -1055,18 +1058,19 @@ Transmission.prototype =
// can't think of a reason to remember this
//this._stats = stats;
var fmt = Transmission.fmt;
var session = stats["current-stats"];
var total = stats["cumulative-stats"];
setInnerHTML( $('#stats_session_uploaded')[0], Transmission.fmt.size(session["uploadedBytes"]) );
setInnerHTML( $('#stats_session_downloaded')[0], Transmission.fmt.size(session["downloadedBytes"]) );
setInnerHTML( $('#stats_session_ratio')[0], Transmission.fmt.ratioString(Math.ratio(session["uploadedBytes"],session["downloadedBytes"])));
setInnerHTML( $('#stats_session_duration')[0], Transmission.fmt.timeInterval(session["secondsActive"]) );
setInnerHTML( $('#stats_session_uploaded')[0], fmt.size(session["uploadedBytes"]) );
setInnerHTML( $('#stats_session_downloaded')[0], fmt.size(session["downloadedBytes"]) );
setInnerHTML( $('#stats_session_ratio')[0], fmt.ratioString(Math.ratio(session["uploadedBytes"],session["downloadedBytes"])));
setInnerHTML( $('#stats_session_duration')[0], fmt.timeInterval(session["secondsActive"]) );
setInnerHTML( $('#stats_total_count')[0], total["sessionCount"] + " times" );
setInnerHTML( $('#stats_total_uploaded')[0], Transmission.fmt.size(total["uploadedBytes"]) );
setInnerHTML( $('#stats_total_downloaded')[0], Transmission.fmt.size(total["downloadedBytes"]) );
setInnerHTML( $('#stats_total_ratio')[0], Transmission.fmt.ratioString(Math.ratio(total["uploadedBytes"],total["downloadedBytes"])));
setInnerHTML( $('#stats_total_duration')[0], Transmission.fmt.timeInterval(total["secondsActive"]) );
setInnerHTML( $('#stats_total_uploaded')[0], fmt.size(total["uploadedBytes"]) );
setInnerHTML( $('#stats_total_downloaded')[0], fmt.size(total["downloadedBytes"]) );
setInnerHTML( $('#stats_total_ratio')[0], fmt.ratioString(Math.ratio(total["uploadedBytes"],total["downloadedBytes"])));
setInnerHTML( $('#stats_total_duration')[0], fmt.timeInterval(total["secondsActive"]) );
},
setSearch: function( search ) {
@@ -1311,27 +1315,28 @@ Transmission.prototype =
}
var private_string = '';
var fmt = Transmission.fmt;
if( have_private && have_public ) private_string = 'Mixed';
else if( have_private ) private_string = 'Private Torrent';
else if( have_public ) private_string = 'Public Torrent';
setInnerHTML( tab.name, name );
setInnerHTML( tab.size, torrents.length ? Transmission.fmt.size( total_size ) : na );
setInnerHTML( tab.size, torrents.length ? fmt.size( total_size ) : na );
setInnerHTML( tab.pieces, pieces );
setInnerHTML( tab.hash, hash );
setInnerHTML( tab.state, total_state );
setInnerHTML( tab.download_speed, torrents.length ? Transmission.fmt.speedBps( total_download_speed ) : na );
setInnerHTML( tab.upload_speed, torrents.length ? Transmission.fmt.speedBps( total_upload_speed ) : na );
setInnerHTML( tab.uploaded, torrents.length ? Transmission.fmt.size( total_upload ) : na );
setInnerHTML( tab.downloaded, torrents.length ? Transmission.fmt.size( total_download ) : na );
setInnerHTML( tab.availability, torrents.length ? Transmission.fmt.percentString(Math.ratio( total_availability*100, sizeWhenDone )) + '%' : na );
setInnerHTML( tab.ratio, torrents.length ? Transmission.fmt.ratioString(Math.ratio( total_upload, total_download )) : na );
setInnerHTML( tab.have, torrents.length ? Transmission.fmt.size(total_completed) + ' (' + Transmission.fmt.size(total_verified) + ' verified)' : na );
setInnerHTML( tab.download_speed, torrents.length ? fmt.speedBps( total_download_speed ) : na );
setInnerHTML( tab.upload_speed, torrents.length ? fmt.speedBps( total_upload_speed ) : na );
setInnerHTML( tab.uploaded, torrents.length ? fmt.size( total_upload ) : na );
setInnerHTML( tab.downloaded, torrents.length ? fmt.size( total_download ) : na );
setInnerHTML( tab.availability, torrents.length ? fmt.percentString(Math.ratio( total_availability*100, sizeWhenDone )) + '%' : na );
setInnerHTML( tab.ratio, torrents.length ? fmt.ratioString(Math.ratio( total_upload, total_download )) : na );
setInnerHTML( tab.have, torrents.length ? fmt.size(total_completed) + ' (' + fmt.size(total_verified) + ' verified)' : na );
setInnerHTML( tab.upload_to, torrents.length ? total_upload_peers : na );
setInnerHTML( tab.download_from, torrents.length ? total_download_peers : na );
setInnerHTML( tab.secure, private_string );
setInnerHTML( tab.creator_date, date_created );
setInnerHTML( tab.progress, torrents.length ? Transmission.fmt.percentString(Math.ratio( sizeDone*100, sizeWhenDone )) + '%' : na );
setInnerHTML( tab.progress, torrents.length ? fmt.percentString(Math.ratio( sizeDone*100, sizeWhenDone )) + '%' : na );
setInnerHTML( tab.comment, comment == na ? comment : comment.replace(/\//g, '/&#8203;') );
setInnerHTML( tab.creator, creator );
setInnerHTML( tab.download_dir, download_dir == na ? download_dir : download_dir.replace(/([\/_\.])/g, "$1&#8203;") );
@@ -1366,6 +1371,7 @@ Transmission.prototype =
updatePeersLists: function() {
var tr = this;
var html = [ ];
var fmt = Transmission.fmt;
var torrents = this.getSelectedTorrents( );
if( $(this._inspector_peers_list).is(':visible') ) {
for( var k=0, torrent; torrent=torrents[k]; ++k ) {
@@ -1391,8 +1397,8 @@ Transmission.prototype =
var parity = ((i+1) % 2 == 0 ? 'even' : 'odd');
html.push( '<tr class="inspector_peer_entry ', parity, '">',
'<td>', (peer.isEncrypted ? '<img src="images/graphics/lock_icon.png" alt="Encrypted"/>' : ''), '</td>',
'<td>', ( peer.rateToPeer ? Transmission.fmt.speedBps(peer.rateToPeer) : '' ), '</td>',
'<td>', ( peer.rateToClient ? Transmission.fmt.speedBps(peer.rateToClient) : '' ), '</td>',
'<td>', ( peer.rateToPeer ? fmt.speedBps(peer.rateToPeer) : '' ), '</td>',
'<td>', ( peer.rateToClient ? fmt.speedBps(peer.rateToClient) : '' ), '</td>',
'<td class="percentCol">', Math.floor(peer.progress*100), '%', '</td>',
'<td>', peer.flagStr, '</td>',
'<td>', peer.address, '</td>',