diff --git a/src/webui/www/public/scripts/client.js b/src/webui/www/public/scripts/client.js index 1dfa9425e..64d5c9560 100644 --- a/src/webui/www/public/scripts/client.js +++ b/src/webui/www/public/scripts/client.js @@ -24,6 +24,8 @@ myTable = new dynamicTable(); +var updatePropertiesPanel = function(){}; + var stateToImg = function (state) { if (state == "pausedUP" || state == "pausedDL") { state = "paused"; @@ -320,22 +322,34 @@ window.addEvent('load', function () { tabsOnload : function() { MochaUI.initializeTabs('propertiesTabs'); + updatePropertiesPanel = function() { + if (!$('prop_general').hasClass('invisible')) + updateTorrentData(); + else if (!$('prop_trackers').hasClass('invisible')) + updateTrackersData(); + else if (!$('prop_files').hasClass('invisible')) + updateTorrentFilesData(); + } + $('PropGeneralLink').addEvent('click', function(e){ $('prop_general').removeClass("invisible"); $('prop_trackers').addClass("invisible"); $('prop_files').addClass("invisible"); + updatePropertiesPanel(); }); $('PropTrackersLink').addEvent('click', function(e){ $('prop_trackers').removeClass("invisible"); $('prop_general').addClass("invisible"); $('prop_files').addClass("invisible"); + updatePropertiesPanel(); }); $('PropFilesLink').addEvent('click', function(e){ $('prop_files').removeClass("invisible"); $('prop_general').addClass("invisible"); $('prop_trackers').addClass("invisible"); + updatePropertiesPanel(); }); }, column : 'mainColumn', diff --git a/src/webui/www/public/scripts/dynamicTable.js b/src/webui/www/public/scripts/dynamicTable.js index 0c5b2a44f..f7e3accac 100644 --- a/src/webui/www/public/scripts/dynamicTable.js +++ b/src/webui/www/public/scripts/dynamicTable.js @@ -220,7 +220,7 @@ var dynamicTable = new Class({ temptr.addClass('selected'); } this.cur[0] = id; - // TODO: Warn Properties panel + updatePropertiesPanel(); } } return false; diff --git a/src/webui/www/public/scripts/prop-files.js b/src/webui/www/public/scripts/prop-files.js index de326d675..344522048 100644 --- a/src/webui/www/public/scripts/prop-files.js +++ b/src/webui/www/public/scripts/prop-files.js @@ -1,4 +1,3 @@ -var waitingTorrentFiles = false; var is_seed = true; var current_hash = ""; @@ -273,6 +272,7 @@ var filesDynTable = new Class({ }, }); +var loadTorrentFilesDataTimer; var loadTorrentFilesData = function() { if ($('prop_files').hasClass('invisible')) { // Tab changed, don't do anything @@ -281,7 +281,7 @@ var loadTorrentFilesData = function() { var new_hash = myTable.getCurrentTorrentHash(); if (new_hash == "") { fTable.removeAllRows(); - loadTorrentFilesData.delay(1500); + loadTorrentFilesDataTimer = loadTorrentFilesData.delay(1500); return; } if (new_hash != current_hash) { @@ -289,60 +289,60 @@ var loadTorrentFilesData = function() { current_hash = new_hash; } var url = 'json/propertiesFiles/' + current_hash; - if (!waitingTorrentFiles) { - waitingTorrentFiles = true; - var request = new Request.JSON({ - url: url, - noCache: true, - method: 'get', - onFailure: function() { - $('error_div').set('html', '_(qBittorrent client is not reachable)'); - waitingTorrentFiles = false; - loadTorrentFilesData.delay(2000); - }, - onSuccess: function(files) { - $('error_div').set('html', ''); - if (files) { - // Update Trackers data - var i = 0; - files.each(function(file) { - if (i == 0) { - is_seed = file.is_seed; - } - var row = new Array(); - row.length = 4; - row[0] = file.priority; - row[1] = file.name; - row[2] = friendlyUnit(file.size, false); - row[3] = (file.progress * 100).round(1); - if (row[3] == 100.0 && file.progress < 1.0) - row[3] = 99.9 - row[4] = file.priority; - fTable.insertRow(i, row); - i++; - }.bind(this)); - // Set global CB state - if (allCBChecked()) { - setCBState("checked"); - } - else { - if (allCBUnchecked()) { - setCBState("unchecked"); - } - else { - setCBState("partial"); - } + var request = new Request.JSON({ + url: url, + noCache: true, + method: 'get', + onFailure: function() { + $('error_div').set('html', '_(qBittorrent client is not reachable)'); + loadTorrentFilesDataTimer = loadTorrentFilesData.delay(2000); + }, + onSuccess: function(files) { + $('error_div').set('html', ''); + if (files) { + // Update Trackers data + var i = 0; + files.each(function(file) { + if (i == 0) { + is_seed = file.is_seed; } + var row = new Array(); + row.length = 4; + row[0] = file.priority; + row[1] = file.name; + row[2] = friendlyUnit(file.size, false); + row[3] = (file.progress * 100).round(1); + if (row[3] == 100.0 && file.progress < 1.0) + row[3] = 99.9 + row[4] = file.priority; + fTable.insertRow(i, row); + i++; + }.bind(this)); + // Set global CB state + if (allCBChecked()) { + setCBState("checked"); } else { - fTable.removeAllRows(); + if (allCBUnchecked()) { + setCBState("unchecked"); + } + else { + setCBState("partial"); + } } - waitingTorrentFiles = false; - loadTorrentFilesData.delay(1500); } - }).send(); - } - + else { + fTable.removeAllRows(); + } + loadTorrentFilesDataTimer = loadTorrentFilesData.delay(1500); + } + }).send(); } + +var updateTorrentFilesData = function() { + clearTimeout(loadTorrentFilesDataTimer); + loadTorrentFilesData(); +} + fTable = new filesDynTable(); fTable.setup($('filesTable')); \ No newline at end of file diff --git a/src/webui/www/public/scripts/prop-general.js b/src/webui/www/public/scripts/prop-general.js index 5afe750d3..4f6147009 100644 --- a/src/webui/www/public/scripts/prop-general.js +++ b/src/webui/www/public/scripts/prop-general.js @@ -1,5 +1,3 @@ -var waiting = false; - var clearData = function() { $('torrent_hash').set('html', ''); $('save_path').set('html', ''); @@ -16,7 +14,8 @@ var clearData = function() { $('share_ratio').set('html', ''); } -var loadData = function() { +var loadTorrentDataTimer; +var loadTorrentData = function() { if ($('prop_general').hasClass('invisible')) { // Tab changed, don't do anything return; @@ -24,61 +23,61 @@ var loadData = function() { var current_hash = myTable.getCurrentTorrentHash(); if (current_hash == "") { clearData(); - loadData.delay(1500); + loadTorrentDataTimer = loadTorrentData.delay(1500); return; } // Display hash $('torrent_hash').set('html', current_hash); var url = 'json/propertiesGeneral/' + current_hash; - if (!waiting) { - waiting = true; - var request = new Request.JSON({ - url: url, - noCache: true, - method: 'get', - onFailure: function() { - $('error_div').set('html', '_(qBittorrent client is not reachable)'); - waiting = false; - loadData.delay(2000); - }, - onSuccess: function(data) { - $('error_div').set('html', ''); - if (data) { - var temp; - // Update Torrent data - $('save_path').set('html', data.save_path); - temp = data.creation_date; - var timestamp = "_(Unknown)"; - if (temp != -1) - timestamp = new Date(data.creation_date * 1000).toISOString(); - $('creation_date').set('html', timestamp); - $('piece_size').set('html', friendlyUnit(data.piece_size)); - $('comment').set('html', data.comment); - $('total_uploaded').set('html', friendlyUnit(data.total_uploaded) + - " (" + friendlyUnit(data.total_uploaded_session) + - " (" + "_(this session)" + ")"); - $('total_downloaded').set('html', friendlyUnit(data.total_downloaded) + - " (" + friendlyUnit(data.total_downloaded_session) + - " (" + "_(this session)" + ")"); - $('total_wasted').set('html', data.total_wasted); - temp = data.up_limit; - $('up_limit').set('html', temp == -1 ? "∞" : temp); - temp = data.dl_limit; - $('dl_limit').set('html', temp == -1 ? "∞" : temp); - temp = friendlyDuration(status.active_time); - if (status.is_seed) - temp += " (" + "_(Seeded for %1)".replace("%1", status.seeding_time) + ")"; - $('time_elapsed').set('html', temp); - temp = data.nb_connections + " (" + "_(%1 max)".replace("%1", status.nb_connections_limit) + ")"; - $('nb_connections').set('html', temp); - $('share_ratio').set('html', data.share_ratio.toFixed(2)); - } - else { - clearData(); - } - waiting = false; - loadData.delay(1500); + var request = new Request.JSON({ + url: url, + noCache: true, + method: 'get', + onFailure: function() { + $('error_div').set('html', '_(qBittorrent client is not reachable)'); + loadTorrentDataTimer = loadTorrentData.delay(2000); + }, + onSuccess: function(data) { + $('error_div').set('html', ''); + if (data) { + var temp; + // Update Torrent data + $('save_path').set('html', data.save_path); + temp = data.creation_date; + var timestamp = "_(Unknown)"; + if (temp != -1) + timestamp = new Date(data.creation_date * 1000).toISOString(); + $('creation_date').set('html', timestamp); + $('piece_size').set('html', friendlyUnit(data.piece_size)); + $('comment').set('html', data.comment); + $('total_uploaded').set('html', friendlyUnit(data.total_uploaded) + + " (" + friendlyUnit(data.total_uploaded_session) + + " (" + "_(this session)" + ")"); + $('total_downloaded').set('html', friendlyUnit(data.total_downloaded) + + " (" + friendlyUnit(data.total_downloaded_session) + + " (" + "_(this session)" + ")"); + $('total_wasted').set('html', data.total_wasted); + temp = data.up_limit; + $('up_limit').set('html', temp == -1 ? "∞" : temp); + temp = data.dl_limit; + $('dl_limit').set('html', temp == -1 ? "∞" : temp); + temp = friendlyDuration(status.active_time); + if (status.is_seed) + temp += " (" + "_(Seeded for %1)".replace("%1", status.seeding_time) + ")"; + $('time_elapsed').set('html', temp); + temp = data.nb_connections + " (" + "_(%1 max)".replace("%1", status.nb_connections_limit) + ")"; + $('nb_connections').set('html', temp); + $('share_ratio').set('html', data.share_ratio.toFixed(2)); } - }).send(); - } + else { + clearData(); + } + loadTorrentDataTimer = loadTorrentData.delay(1500); + } + }).send(); +} + +var updateTorrentData = function() { + clearTimeout(loadTorrentDataTimer); + loadTorrentData(); } \ No newline at end of file diff --git a/src/webui/www/public/scripts/prop-trackers.js b/src/webui/www/public/scripts/prop-trackers.js index 8fbd1fe04..57baa49ce 100644 --- a/src/webui/www/public/scripts/prop-trackers.js +++ b/src/webui/www/public/scripts/prop-trackers.js @@ -50,9 +50,9 @@ var trackersDynTable = new Class({ }, }); -var waitingTrackers = false; var current_hash = ""; +var loadTrackersDataTimer; var loadTrackersData = function() { if ($('prop_trackers').hasClass('invisible')) { // Tab changed, don't do anything @@ -61,7 +61,7 @@ var loadTrackersData = function() { var new_hash = myTable.getCurrentTorrentHash(); if (new_hash == "") { tTable.removeAllRows(); - loadTrackersData.delay(1500); + loadTrackersDataTimer = loadTrackersData.delay(1500); return; } if (new_hash != current_hash) { @@ -69,41 +69,41 @@ var loadTrackersData = function() { current_hash = new_hash; } var url = 'json/propertiesTrackers/' + current_hash; - if (!waitingTrackers) { - waitingTrackers = true; - var request = new Request.JSON({ - url: url, - noCache: true, - method: 'get', - onFailure: function() { - $('error_div').set('html', '_(qBittorrent client is not reachable)'); - waitingTrackers = false; - loadTrackersData.delay(2000); - }, - onSuccess: function(trackers) { - $('error_div').set('html', ''); - if (trackers) { - // Update Trackers data - trackers.each(function(tracker) { - var row = new Array(); - row.length = 4; - row[0] = tracker.url; - row[1] = tracker.status; - row[2] = tracker.num_peers; - row[3] = tracker.msg; - tTable.insertRow(row); - }); - } - else { - tTable.removeAllRows(); - } - waitingTrackers = false; - loadTrackersData.delay(1500); + var request = new Request.JSON({ + url: url, + noCache: true, + method: 'get', + onFailure: function() { + $('error_div').set('html', '_(qBittorrent client is not reachable)'); + loadTrackersDataTimer = loadTrackersData.delay(2000); + }, + onSuccess: function(trackers) { + $('error_div').set('html', ''); + if (trackers) { + // Update Trackers data + trackers.each(function(tracker) { + var row = new Array(); + row.length = 4; + row[0] = tracker.url; + row[1] = tracker.status; + row[2] = tracker.num_peers; + row[3] = tracker.msg; + tTable.insertRow(row); + }); } - }).send(); - } - + else { + tTable.removeAllRows(); + } + loadTrackersDataTimer = loadTrackersData.delay(1500); + } + }).send(); } + +var updateTrackersData = function() { + clearTimeout(loadTrackersDataTimer); + loadTrackersData(); +} + tTable = new trackersDynTable(); tTable.setup($('trackersTable'));