mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-14 01:03:08 -07:00
* Do not refresh filtered torrents since they are not visible * Do not refresh torrent name in list since it connot change - Fixed unitialized torrent status when it was added to the list (it did not cause any issue but it was not optimal)
196 lines
5.7 KiB
JavaScript
196 lines
5.7 KiB
JavaScript
/*
|
|
* MIT License
|
|
* Copyright (c) 2008 Ishan Arora <ishan@qbittorrent.org>,
|
|
* Christophe Dumez <chris@qbittorrent.org>
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
myTable = new dynamicTable();
|
|
ajaxfn = function(){};
|
|
|
|
window.addEvent('domready', function(){
|
|
|
|
var saveColumnSizes = function() {
|
|
var filters_width = $('Filters').getSize().x;
|
|
var properties_height = $('properties').getSize().y;
|
|
// Save it in a cookie
|
|
Cookie.write('filters_width', filters_width);
|
|
Cookie.write('properties_height', properties_height);
|
|
}
|
|
|
|
MochaUI.Desktop = new MochaUI.Desktop();
|
|
MochaUI.Desktop.desktop.setStyles({
|
|
'background': '#fff',
|
|
'visibility': 'visible'
|
|
});
|
|
var filt_w = Cookie.read('filters_width');
|
|
if($defined(filt_w))
|
|
filt_w = filt_w.toInt();
|
|
else
|
|
filt_w = 120;
|
|
new MochaUI.Column({
|
|
id: 'filtersColumn',
|
|
placement: 'left',
|
|
onResize: saveColumnSizes,
|
|
width: filt_w,
|
|
resizeLimit: [100, 300]
|
|
});
|
|
new MochaUI.Column({
|
|
id: 'mainColumn',
|
|
placement: 'main',
|
|
width: null,
|
|
resizeLimit: [100, 300]
|
|
});
|
|
new MochaUI.Panel({
|
|
id: 'Filters',
|
|
title: 'Panel',
|
|
loadMethod: 'xhr',
|
|
contentURL: 'filters.html',
|
|
column: 'filtersColumn',
|
|
height: 300
|
|
});
|
|
new MochaUI.Panel({
|
|
id: 'transferList',
|
|
title: 'Panel',
|
|
loadMethod: 'xhr',
|
|
contentURL: 'transferlist.html',
|
|
column: 'mainColumn',
|
|
onResize: saveColumnSizes,
|
|
height: null
|
|
});
|
|
var prop_h = Cookie.read('properties_height');
|
|
if($defined(prop_h))
|
|
prop_h = prop_h.toInt();
|
|
else
|
|
prop_h = 200;
|
|
new MochaUI.Panel({
|
|
id: 'properties',
|
|
title: 'Panel',
|
|
loadMethod: 'xhr',
|
|
contentURL: 'properties.html',
|
|
column: 'mainColumn',
|
|
height: prop_h
|
|
});
|
|
initializeWindows();
|
|
var r=0;
|
|
var waiting=false;
|
|
|
|
var stateToImg = function(state){
|
|
return 'images/skin/'+state+'.png';
|
|
};
|
|
var ajaxfn = function(){
|
|
var queueing_enabled = false;
|
|
var url = 'json/events';
|
|
if (!waiting){
|
|
waiting=true;
|
|
var request = new Request.JSON({
|
|
url: url,
|
|
method: 'get',
|
|
onFailure: function() {
|
|
$('error_div').set('html', 'qBittorrent client is not reachable');
|
|
waiting=false;
|
|
ajaxfn.delay(2000);
|
|
},
|
|
onSuccess: function(events) {
|
|
$('error_div').set('html', '');
|
|
if(events){
|
|
// Add new torrents or update them
|
|
torrent_hashes = myTable.getRowIds();
|
|
events_hashes = new Array();
|
|
events.each(function(event){
|
|
events_hashes[events_hashes.length] = event.hash;
|
|
var row = new Array();
|
|
row.length = 10;
|
|
row[0] = stateToImg(event.state);
|
|
row[1] = event.name;
|
|
row[2] = event.priority
|
|
row[3] = event.size;
|
|
row[4] = (event.progress*100).round(1);
|
|
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] != "*")
|
|
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);
|
|
} else {
|
|
// Update torrent data
|
|
myTable.updateRow(event.hash, row, event.state);
|
|
}
|
|
});
|
|
// Remove deleted torrents
|
|
torrent_hashes.each(function(hash){
|
|
if(!events_hashes.contains(hash)) {
|
|
myTable.removeRow(hash);
|
|
}
|
|
});
|
|
if(queueing_enabled) {
|
|
$('queueingButtons').removeClass('invisible');
|
|
myTable.showPriority();
|
|
} else {
|
|
$('queueingButtons').addClass('invisible');
|
|
myTable.hidePriority();
|
|
}
|
|
}
|
|
waiting=false;
|
|
ajaxfn.delay(1000);
|
|
}
|
|
}).send();
|
|
}
|
|
};
|
|
ajaxfn();
|
|
// ajaxfn.periodical(5000);
|
|
|
|
setFilter = function(f) {
|
|
// Visually Select the right filter
|
|
$("all_filter").removeClass("selectedFilter");
|
|
$("downloading_filter").removeClass("selectedFilter");
|
|
$("completed_filter").removeClass("selectedFilter");
|
|
$("active_filter").removeClass("selectedFilter");
|
|
$("inactive_filter").removeClass("selectedFilter");
|
|
$(f+"_filter").addClass("selectedFilter");
|
|
myTable.setFilter(f);
|
|
ajaxfn();
|
|
}
|
|
|
|
});
|
|
|
|
function closeWindows() {
|
|
MochaUI.closeAll();
|
|
}
|
|
|
|
// This runs when a person leaves your page.
|
|
|
|
window.addEvent('unload', function(){
|
|
if (MochaUI) MochaUI.garbageCleanUp();
|
|
});
|
|
|
|
window.addEvent('keydown', function(event){
|
|
if (event.key == 'a' && event.control) {
|
|
event.stop();
|
|
myTable.selectAll();
|
|
}
|
|
});
|