mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-01 21:28:07 -06:00
Merge pull request #2145 from pmzqla/webui
Make Web API locale independent
This commit is contained in:
@@ -108,8 +108,10 @@ window.addEvent('load', function(){
|
||||
},
|
||||
onSuccess: function(info) {
|
||||
if(info) {
|
||||
$("DlInfos").set('html', info.dl_info);
|
||||
$("UpInfos").set('html', info.up_info);
|
||||
$("DlInfos").set('html', "_(D: %1 - T: %2)".replace("%1", friendlyUnit(info.dl_info_speed, true))
|
||||
.replace("%2", friendlyUnit(info.dl_info_data, false)));
|
||||
$("UpInfos").set('html', "_(U: %1 - T: %2)".replace("%1", friendlyUnit(info.up_info_speed, true))
|
||||
.replace("%2", friendlyUnit(info.up_info_data, false)));
|
||||
waitingTrInfo=false;
|
||||
loadTransferInfo.delay(3000);
|
||||
}
|
||||
@@ -143,30 +145,47 @@ window.addEvent('load', function(){
|
||||
events.each(function(event){
|
||||
events_hashes[events_hashes.length] = event.hash;
|
||||
var row = new Array();
|
||||
var data = new Array();
|
||||
row.length = 10;
|
||||
row[0] = stateToImg(event.state);
|
||||
row[1] = event.name;
|
||||
row[2] = event.priority
|
||||
row[3] = event.size;
|
||||
row[2] = event.priority > -1 ? event.priority : null;
|
||||
data[2] = event.priority;
|
||||
row[3] = friendlyUnit(event.size, false);
|
||||
data[3] = event.size;
|
||||
row[4] = (event.progress*100).round(1);
|
||||
if(row[4] == 100.0 && event.progress != 1.0)
|
||||
row[4] = 99.9;
|
||||
row[5] = event.num_seeds;
|
||||
row[6] = event.num_leechs;
|
||||
row[7] = event.dlspeed;
|
||||
row[8] = event.upspeed;
|
||||
row[9] = event.eta;
|
||||
row[10] = event.ratio;
|
||||
if(row[2] != "*")
|
||||
data[4] = event.progress;
|
||||
row[5] = event.num_seeds;
|
||||
if (event.num_complete != -1)
|
||||
row[5] += " (" + event.num_complete + ")";
|
||||
data[5] = event.num_seeds;
|
||||
row[6] = event.num_leechs;
|
||||
if (event.num_incomplete != -1)
|
||||
row[6] += " (" + event.num_incomplete + ")";
|
||||
data[6] = event.num_leechs;
|
||||
row[7] = friendlyUnit(event.dlspeed, true);
|
||||
data[7] = event.dlspeed;
|
||||
row[8] = friendlyUnit(event.upspeed, true);
|
||||
data[8] = event.upspeed;
|
||||
row[9] = friendlyDuration(event.eta);
|
||||
data[9] = event.eta
|
||||
if(event.ratio == -1)
|
||||
row[10] = "∞";
|
||||
else
|
||||
row[10] = (Math.floor(100 * event.ratio) / 100).toFixed(2); //Don't round up
|
||||
data[10] = event.ratio;
|
||||
if(row[2] != null)
|
||||
queueing_enabled = true;
|
||||
if(!torrent_hashes.contains(event.hash)) {
|
||||
// New unfinished torrent
|
||||
torrent_hashes[torrent_hashes.length] = event.hash;
|
||||
//alert("Inserting row");
|
||||
myTable.insertRow(event.hash, row, event.state);
|
||||
myTable.insertRow(event.hash, row, data, event.state);
|
||||
} else {
|
||||
// Update torrent data
|
||||
myTable.updateRow(event.hash, row, event.state);
|
||||
myTable.updateRow(event.hash, row, data, event.state);
|
||||
}
|
||||
});
|
||||
// Remove deleted torrents
|
||||
|
||||
@@ -56,70 +56,23 @@ var dynamicTable = new Class ({
|
||||
var reverseSort = tr2.getParent().reverseSort;
|
||||
switch(i) {
|
||||
case 1: // Name
|
||||
if(!reverseSort) {
|
||||
if(tr1.getElements('td')[i].get('html') > tr2.getElements('td')[i].get('html'))
|
||||
return 1;
|
||||
return -1;
|
||||
} else {
|
||||
if(tr1.getElements('td')[i].get('html') < tr2.getElements('td')[i].get('html'))
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
if(!reverseSort)
|
||||
return tr1.getElements('td')[i].get('html').localeCompare(tr2.getElements('td')[i].get('html'));
|
||||
else
|
||||
return tr2.getElements('td')[i].get('html').localeCompare(tr1.getElements('td')[i].get('html'));
|
||||
case 2: // Prio
|
||||
var prio1 = tr1.getElements('td')[i].get('html');
|
||||
if(prio1 == '*') prio1 = '-1';
|
||||
var prio2 = tr2.getElements('td')[i].get('html');
|
||||
if(prio2 == '*') prio2 = '-1';
|
||||
if(!reverseSort)
|
||||
return (prio1.toInt() - prio2.toInt());
|
||||
else
|
||||
return (prio2.toInt() - prio1.toInt());
|
||||
case 3: // Size
|
||||
case 7: // Up Speed
|
||||
case 8: // Down Speed
|
||||
var sizeStrToFloat = function(mystr) {
|
||||
var val1 = mystr.split(' ');
|
||||
var val1num = val1[0].toFloat()
|
||||
var unit = val1[1];
|
||||
switch(unit) {
|
||||
case '_(TiB)':
|
||||
return val1num*1099511627776;
|
||||
case '_(GiB)':
|
||||
return val1num*1073741824;
|
||||
case '_(MiB)':
|
||||
return val1num*1048576;
|
||||
case '_(KiB)':
|
||||
return val1num*1024;
|
||||
default:
|
||||
return val1num;
|
||||
}
|
||||
};
|
||||
if(!reverseSort)
|
||||
return (sizeStrToFloat(tr1.getElements('td')[i].get('html')) - sizeStrToFloat(tr2.getElements('td')[i].get('html')));
|
||||
else
|
||||
return (sizeStrToFloat(tr2.getElements('td')[i].get('html')) - sizeStrToFloat(tr1.getElements('td')[i].get('html')));
|
||||
case 4: // Progress
|
||||
if(!reverseSort)
|
||||
return (tr1.getElements('td')[i].getChildren()[0].getValue() - tr2.getElements('td')[i].getChildren()[0].getValue());
|
||||
else
|
||||
return (tr2.getElements('td')[i].getChildren()[0].getValue() - tr1.getElements('td')[i].getChildren()[0].getValue());
|
||||
case 5: // Seeds
|
||||
case 6: // Peers
|
||||
if(!reverseSort)
|
||||
return (tr1.getElements('td')[i].get('html').split(' ')[0].toInt() - tr2.getElements('td')[i].get('html').split(' ')[0].toInt());
|
||||
else
|
||||
return (tr2.getElements('td')[i].get('html').split(' ')[0].toInt() - tr1.getElements('td')[i].get('html').split(' ')[0].toInt());
|
||||
case 7: // Up Speed
|
||||
case 8: // Down Speed
|
||||
case 9: // ETA
|
||||
default: // Ratio
|
||||
var ratio1 = tr1.getElements('td')[i].get('html');
|
||||
if(ratio1 == '∞')
|
||||
ratio1 = '101.0';
|
||||
var ratio2 = tr2.getElements('td')[i].get('html');
|
||||
if(ratio2 == '∞')
|
||||
ratio2 = '101.0';
|
||||
if(!reverseSort)
|
||||
return (ratio1.toFloat() - ratio2.toFloat());
|
||||
return (tr1.getElements('td')[i].get('data-raw') - tr2.getElements('td')[i].get('data-raw'));
|
||||
else
|
||||
return (ratio2.toFloat() - ratio1.toFloat());
|
||||
return (tr2.getElements('td')[i].get('data-raw') - tr1.getElements('td')[i].get('data-raw'));
|
||||
}
|
||||
},
|
||||
|
||||
@@ -228,7 +181,7 @@ var dynamicTable = new Class ({
|
||||
return !tr.hasClass('invisible');
|
||||
},
|
||||
|
||||
insertRow: function(id, row, status){
|
||||
insertRow: function(id, row, data, status){
|
||||
if(this.rows.has(id)) {
|
||||
return;
|
||||
}
|
||||
@@ -240,6 +193,8 @@ var dynamicTable = new Class ({
|
||||
var td = new Element('td');
|
||||
if(i==this.progressIndex) {
|
||||
td.adopt(new ProgressBar(row[i].toFloat(), {'id': 'pb_'+id, 'width':80}));
|
||||
if (typeof data[i] != 'undefined')
|
||||
td.set('data-raw', data[i])
|
||||
} else {
|
||||
if(i==0) {
|
||||
td.adopt(new Element('img', {'src':row[i], 'class': 'statusIcon'}));
|
||||
@@ -250,6 +205,8 @@ var dynamicTable = new Class ({
|
||||
td.addClass('invisible');
|
||||
}
|
||||
td.set('html', row[i]);
|
||||
if (typeof data[i] != 'undefined')
|
||||
td.set('data-raw', data[i])
|
||||
}
|
||||
}
|
||||
td.injectInside(tr);
|
||||
@@ -369,7 +326,7 @@ var dynamicTable = new Class ({
|
||||
}, this);
|
||||
},
|
||||
|
||||
updateRow: function(id, row, status){
|
||||
updateRow: function(id, row, data, status){
|
||||
if(!this.rows.has(id)) {
|
||||
return false;
|
||||
}
|
||||
@@ -388,6 +345,8 @@ var dynamicTable = new Class ({
|
||||
tds[i].set('html', row[i]);
|
||||
}
|
||||
}
|
||||
if (typeof data[i] != 'undefined')
|
||||
tds[i].set('data-raw', data[i])
|
||||
};
|
||||
} else {
|
||||
// Row was hidden, check if it was selected
|
||||
|
||||
78
src/webui/www/public/scripts/misc.js
Normal file
78
src/webui/www/public/scripts/misc.js
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* JS counterpart of the function in src/misc.cpp
|
||||
*/
|
||||
function friendlyUnit(value, isSpeed) {
|
||||
units = [
|
||||
"_(B)",
|
||||
"_(KiB)",
|
||||
"_(MiB)",
|
||||
"_(GiB)",
|
||||
"_(TiB)",
|
||||
];
|
||||
|
||||
if (value < 0)
|
||||
return "_(Unknown)";
|
||||
var i = 0;
|
||||
while (value >= 1024. && i++ < 6)
|
||||
value /= 1024.;
|
||||
var ret;
|
||||
if (i == 0)
|
||||
ret = value.toFixed(2) + " " + units[0];
|
||||
else
|
||||
ret = value.toFixed(2) + " " + units[i];
|
||||
if (isSpeed)
|
||||
ret += "_(/s)";
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* JS counterpart of the function in src/misc.cpp
|
||||
*/
|
||||
function friendlyDuration(seconds) {
|
||||
var MAX_ETA = 8640000;
|
||||
if (seconds < 0 || seconds >= MAX_ETA)
|
||||
return "∞";
|
||||
if (seconds == 0)
|
||||
return "0";
|
||||
if (seconds < 60)
|
||||
return "< " + "_(%1m)".replace("%1", "1"); //translation of "< 1m" not working
|
||||
var minutes = seconds / 60;
|
||||
if (minutes < 60)
|
||||
return "_(%1m)".replace("%1", parseInt(minutes));
|
||||
var hours = minutes / 60;
|
||||
minutes = minutes - hours*60;
|
||||
if (hours < 24)
|
||||
return "_(%1h %2m)".replace("%1", parseInt(hours)).replace("%2", parseInt(minutes))
|
||||
var days = hours / 24;
|
||||
hours = hours - days * 24;
|
||||
if (days < 100)
|
||||
return "_(%1d %2h)".replace("%1", parseInt(days)).replace("%2", parseInt(hours))
|
||||
return "∞";
|
||||
}
|
||||
|
||||
/*
|
||||
* From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
|
||||
*/
|
||||
if (!Date.prototype.toISOString) {
|
||||
(function() {
|
||||
|
||||
function pad(number) {
|
||||
if (number < 10) {
|
||||
return '0' + number;
|
||||
}
|
||||
return number;
|
||||
}
|
||||
|
||||
Date.prototype.toISOString = function() {
|
||||
return this.getUTCFullYear() +
|
||||
'-' + pad(this.getUTCMonth() + 1) +
|
||||
'-' + pad(this.getUTCDate()) +
|
||||
'T' + pad(this.getUTCHours()) +
|
||||
':' + pad(this.getUTCMinutes()) +
|
||||
':' + pad(this.getUTCSeconds()) +
|
||||
'.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +
|
||||
'Z';
|
||||
};
|
||||
|
||||
}());
|
||||
}
|
||||
Reference in New Issue
Block a user