mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 02:18:42 +00:00
(trunk) #3547 "Wrong speed display in web UI" -- fixed
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
/***
|
||||
****
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, '/​') );
|
||||
setInnerHTML( tab.creator, creator );
|
||||
setInnerHTML( tab.download_dir, download_dir == na ? download_dir : download_dir.replace(/([\/_\.])/g, "$1​") );
|
||||
@@ -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>',
|
||||
|
||||
Reference in New Issue
Block a user