mirror of
https://github.com/transmission/transmission
synced 2024-12-26 09:37:56 +00:00
879a2afcbd
The Berne Convention says that the copyright year is moot, so instead of adding another year to each file as in previous years, I've removed the year altogether from the source code comments in libtransmission, gtk, qt, utils, daemon, and cli. Juliusz's copyright notice in tr-dht and Johannes' copyright notice in tr-lpd have been left alone; it didn't seem appropriate to modify them.
272 lines
6.2 KiB
JavaScript
272 lines
6.2 KiB
JavaScript
/**
|
|
*** This file Copyright (C) Mnemosyne LLC
|
|
***
|
|
*** This code is licensed under the GPL version 2.
|
|
*** For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
**/
|
|
|
|
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 = '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 = '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
|
|
*/
|
|
percentString: function( x ) {
|
|
if( x < 10.0 )
|
|
return x.toTruncFixed( 2 );
|
|
else if( x < 100.0 )
|
|
return x.toTruncFixed( 1 );
|
|
else
|
|
return x.toTruncFixed( 0 );
|
|
},
|
|
|
|
/*
|
|
* Format a ratio to a string
|
|
*/
|
|
ratioString: function( x ) {
|
|
if( x == -1 )
|
|
return "None";
|
|
else if( x == -2 )
|
|
return '∞';
|
|
else
|
|
return this.percentString( x );
|
|
},
|
|
|
|
/**
|
|
* Formats the a memory size into a human-readable string
|
|
* @param {Number} bytes the filesize in bytes
|
|
* @return {String} human-readable string
|
|
*/
|
|
mem: function( bytes )
|
|
{
|
|
if( bytes < mem_K )
|
|
return [ bytes, mem_B_str ].join(' ');
|
|
|
|
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 ].join(' ')
|
|
: [ convertedSize.toTruncFixed(1), unit ].join(' ');
|
|
},
|
|
|
|
/**
|
|
* 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 )
|
|
{
|
|
if( bytes < size_K )
|
|
return [ bytes, size_B_str ].join(' ');
|
|
|
|
var convertedSize;
|
|
var unit;
|
|
|
|
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
|
|
{
|
|
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 ].join(' ')
|
|
: [ convertedSize.toTruncFixed(1), unit ].join(' ');
|
|
},
|
|
|
|
speedBps: function( Bps )
|
|
{
|
|
return this.speed( this.toKBps( Bps ) );
|
|
},
|
|
|
|
toKBps: function( Bps )
|
|
{
|
|
return Math.floor( Bps / speed_K );
|
|
},
|
|
|
|
speed: function( KBps )
|
|
{
|
|
var speed = KBps;
|
|
|
|
if (speed <= 999.95) // 0 KBps to 999.9 K
|
|
return [ speed.toTruncFixed(1), speed_K_str ].join(' ');
|
|
|
|
speed /= speed_K;
|
|
|
|
if (speed <= 99.995) // 1 M to 99.99 M
|
|
return [ speed.toTruncFixed(2), speed_M_str ].join(' ');
|
|
if (speed <= 999.95) // 100 M to 999.9 M
|
|
return [ speed.toTruncFixed(1), speed_M_str ].join(' ');
|
|
|
|
// insane speeds
|
|
speed /= speed_K;
|
|
return [ speed.toTruncFixed(2), speed_G_str ].join(' ');
|
|
},
|
|
|
|
timeInterval: function( seconds )
|
|
{
|
|
var result;
|
|
var days = Math.floor(seconds / 86400);
|
|
var hours = Math.floor((seconds % 86400) / 3600);
|
|
var minutes = Math.floor((seconds % 3600) / 60);
|
|
var seconds = Math.floor((seconds % 3600) % 60);
|
|
|
|
if (days > 0 && hours == 0)
|
|
result = [ days, 'days' ];
|
|
else if (days > 0 && hours > 0)
|
|
result = [ days, 'days', hours, 'hr' ];
|
|
else if (hours > 0 && minutes == 0)
|
|
result = [ hours, 'hr' ];
|
|
else if (hours > 0 && minutes > 0)
|
|
result = [ hours,'hr', minutes, 'min' ];
|
|
else if (minutes > 0 && seconds == 0)
|
|
result = [ minutes, 'min' ];
|
|
else if (minutes > 0 && seconds > 0)
|
|
result = [ minutes, 'min', seconds, 'seconds' ];
|
|
else
|
|
result = [ seconds, 'seconds' ];
|
|
|
|
return result.join(' ');
|
|
},
|
|
|
|
timestamp: function( seconds )
|
|
{
|
|
if( !seconds )
|
|
return 'N/A';
|
|
|
|
var myDate = new Date(seconds*1000);
|
|
var now = new Date();
|
|
|
|
var date = "";
|
|
var time = "";
|
|
|
|
var sameYear = now.getFullYear() == myDate.getFullYear();
|
|
var sameMonth = now.getMonth() == myDate.getMonth();
|
|
|
|
var dateDiff = now.getDate() - myDate.getDate();
|
|
if(sameYear && sameMonth && Math.abs(dateDiff) <= 1){
|
|
if(dateDiff == 0){
|
|
date = "Today";
|
|
}
|
|
else if(dateDiff == 1){
|
|
date = "Yesterday";
|
|
}
|
|
else{
|
|
date = "Tomorrow";
|
|
}
|
|
}
|
|
else{
|
|
date = myDate.toDateString();
|
|
}
|
|
|
|
var hours = myDate.getHours();
|
|
var period = "AM";
|
|
if(hours > 12){
|
|
hours = hours - 12;
|
|
period = "PM";
|
|
}
|
|
if(hours == 0){
|
|
hours = 12;
|
|
}
|
|
if(hours < 10){
|
|
hours = "0" + hours;
|
|
}
|
|
var minutes = myDate.getMinutes();
|
|
if(minutes < 10){
|
|
minutes = "0" + minutes;
|
|
}
|
|
var seconds = myDate.getSeconds();
|
|
if(seconds < 10){
|
|
seconds = "0" + seconds;
|
|
}
|
|
|
|
time = [hours, minutes, seconds].join(':');
|
|
|
|
return [date, time, period].join(' ');
|
|
},
|
|
|
|
plural: function( i, word )
|
|
{
|
|
return [ i, ' ', word, (word==1?'':'s') ].join('');
|
|
}
|
|
}
|
|
})();
|