summaryrefslogtreecommitdiffstats
path: root/plugins/webinterface/www/coldmilk/page_update.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/webinterface/www/coldmilk/page_update.js')
-rw-r--r--plugins/webinterface/www/coldmilk/page_update.js429
1 files changed, 429 insertions, 0 deletions
diff --git a/plugins/webinterface/www/coldmilk/page_update.js b/plugins/webinterface/www/coldmilk/page_update.js
new file mode 100644
index 0000000..c004456
--- /dev/null
+++ b/plugins/webinterface/www/coldmilk/page_update.js
@@ -0,0 +1,429 @@
+ /***************************************************************************
+ * Copyright (C) 2007 by Dagur Valberg Johannsson *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+var details_of_torrent = null; //id of torrent which details are displayed
+
+function update_interval(time) {
+ update_all();
+ if (!time) {
+ return;
+ }
+ var seconds = time * 1000;
+ window.setInterval(update_all, seconds);
+}
+
+function update_all() {
+ fetch_xml("rest.php?global_status", new Array("update_status_bar", "update_title"));
+ fetch_xml("rest.php?download_status", new Array("update_torrent_table"));
+}
+
+function fetch_xml(url, callback_functions) {
+ var request = false;
+
+ if (window.XMLHttpRequest) { // most browsers
+ request = new XMLHttpRequest();
+// if (request.overrideMimeType) {
+// request.overrideMimeType('text/xml');
+// }
+ }
+
+ else if (window.ActiveXObject) { //ie
+ try {
+ request = new ActiveXObject("Msxml2.XMLHTTP");
+ }
+ catch(e) {
+ try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
+ catch(e) { }
+ }
+ }
+
+ if (!request) {
+ // Browser doesn't support XMLHttpRequest
+ return false;
+ }
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ if (request.status == 200) {
+ //overrideMimeType didn't work in Konqueror,
+ //so we'll have to parse the response into XML
+ //object ourselfs. responseXML won't work.
+ var xmlstring = request.responseText;
+ var xmldoc;
+ if (window.DOMParser) {
+ xmldoc = (new DOMParser())
+ .parseFromString(xmlstring, "text/xml");
+ }
+ else if (window.ActiveXObject) { //ie
+ xmldoc = new ActiveXObject("Microsoft.XMLDOM");
+ xmldoc.async = false;
+ xmldoc.loadXML(xmlstring);
+ }
+
+ for (var i in callback_functions) {
+ eval(callback_functions[i] + "(xmldoc)");
+ }
+
+ }
+ else {
+ // could not fetch
+ }
+ }
+ }
+
+ request.open('GET', url, true);
+ request.send(null);
+}
+
+function update_title(xmldoc) {
+ var down = _get_text(xmldoc, 'download_speed').data;
+ var up = _get_text(xmldoc, 'upload_speed').data;
+ var new_title = "(D: " + down + ") (U: " + up + ") - ktorrent web interface";
+ document.title = new_title;
+}
+
+function update_status_bar(xmldoc) {
+ var newtable = document.createElement('table');
+ newtable.setAttribute('id', 'status_bar_table');
+
+
+ //dht and encryption
+ {
+ var row = newtable.insertRow(0);
+ var cell = row.insertCell(0);
+ var dht = _get_text_from_attribute(xmldoc, 'dht', 'status').data;
+ var encryption = _get_text_from_attribute(xmldoc, 'encryption', 'status').data;
+ cell.appendChild(
+ document.createTextNode("DHT : " +dht));
+ cell = row.insertCell(1);
+ cell.appendChild(
+ document.createTextNode("Encryption : " + encryption));
+ }
+ //speed down/up
+ {
+ var row = newtable.insertRow(1);
+ var cell = row.insertCell(0);
+ cell.appendChild(
+ document.createTextNode("Speed"));
+
+ cell = row.insertCell(1);
+ var down = _get_text(xmldoc, 'download_speed').data;
+ var up = _get_text(xmldoc, 'upload_speed').data;
+ cell.appendChild(
+ document.createTextNode("down: " + down + " / up: " + up));
+ }
+ //transferred
+ {
+ var row = newtable.insertRow(2);
+ var cell = row.insertCell(0);
+ cell.appendChild(
+ document.createTextNode("Transferred"));
+
+ cell = row.insertCell(1);
+ var down = _get_text(xmldoc, 'downloaded_total').data;
+ var up = _get_text(xmldoc, 'uploaded_total').data;
+ cell.appendChild(
+ document.createTextNode("down: " + down + " / up: " + up));
+ }
+ var oldtable = document.getElementById('status_bar_table');
+ oldtable.parentNode.replaceChild(newtable, oldtable);
+}
+
+function update_torrent_table(xmldoc) {
+
+ var newtable = document.createElement('table');
+ newtable.setAttribute('id', 'torrent_list_table');
+ newtable.className='list_table';
+
+ var torrents = xmldoc.getElementsByTagName('torrent');
+ var i = 0;
+ while (torrents[i]) {
+ _torrent_table_row(torrents[i], newtable, i);
+ i++;
+ }
+ _torrent_table_header(newtable.insertRow(0));
+
+ var oldtable = document.getElementById('torrent_list_table');
+ oldtable.parentNode.replaceChild(newtable, oldtable);
+}
+
+function _torrent_table_row(torrent, table, i) {
+ var row = table.insertRow(i);
+ var row_color = (i % 2) ?
+ "#ffffff" : "#dce4f9";
+ row.setAttribute("style", "background-color : " + row_color);
+
+ //actions
+ {
+ var cell = row.insertCell(0);
+ var can_start = (_get_text(torrent, 'running').data) ? 0 : 1; //if torrent is running we can't start it
+ var can_stop = (can_start==1) ? 0 : 1; //opposite of can_start
+ var start_button = _create_action_button('Start', 'start.png', (can_start==1) ? 'start='+i : '');
+ var stop_button = _create_action_button('Stop', 'stop.png', (can_stop==1) ? 'stop='+i : '');
+ var remove_button = _create_action_button('Remove', 'remove.png', 'remove='+i);
+ remove_button.setAttribute("onclick", "return validate('remove_torrent')");
+
+ cell.appendChild(start_button);
+ cell.appendChild(stop_button);
+ cell.appendChild(remove_button);
+ }
+
+ //file
+ {
+ var cell = row.insertCell(1);
+ var file = document.createElement('a');
+ file.setAttribute('href', '#');
+ file.appendChild(_get_text(torrent, 'name'));
+ file.onclick = function()
+ {
+ show('torrents_details');
+ fetch_xml("rest.php?torrents_details="+i, new Array("get_torrents_details"));
+ details_of_torrent = i;
+ };
+ cell.appendChild(file);
+ }
+
+ //status
+ {
+ var cell = row.insertCell(2);
+ cell.appendChild(
+ _get_text(torrent, 'status'));
+ }
+
+ //speed
+ {
+ var cell = row.insertCell(3);
+
+ cell.appendChild(
+ _get_text(torrent, 'download_rate'));
+ cell.appendChild(document.createElement('br'));
+ cell.appendChild(
+ _get_text(torrent, 'upload_rate'));
+ }
+
+ //size
+ {
+ var cell = row.insertCell(4);
+ cell.appendChild(
+ _get_text(torrent, 'size'));
+ }
+
+ //peers
+ {
+ var cell = row.insertCell(5);
+ cell.appendChild(
+ _get_text(torrent, 'peers'));
+ }
+
+ //transferred
+ {
+ var cell = row.insertCell(6);
+
+ cell.appendChild(
+ _get_text(torrent, 'downloaded'));
+ cell.appendChild(document.createElement('br'));
+ cell.appendChild(
+ _get_text(torrent, 'uploaded'));
+ }
+
+ //done
+ {
+ var cell = row.insertCell(7);
+ cell.setAttribute("style", "padding-right : 2px;");
+
+ var percent_done
+ = _get_text_from_attribute(torrent, 'downloaded', 'percent').data;
+
+ var bar = document.createElement('div');
+ bar.setAttribute("class", "percent_bar");
+ bar.setAttribute("style", "width : " + percent_done + "%;");
+ cell.appendChild(bar);
+
+ var bar_text = document.createElement('div');
+ bar_text.appendChild(
+ document.createTextNode(percent_done + "%"));
+
+ bar.appendChild(bar_text);
+ }
+}
+
+//function called after changing file priority to refresh list of files (and priorities)
+function just_refresh_details(xmldoc) {
+ if (details_of_torrent!=null)
+ fetch_xml("rest.php?torrents_details="+details_of_torrent, new Array("get_torrents_details"));
+}
+
+function get_torrents_details(xmldoc) {
+ var newtable = document.createElement('table');
+ newtable.setAttribute('id', 'torrents_details_files');
+ newtable.className='list_table';
+
+ var id = xmldoc.getElementsByTagName('torrents_details')[0].getAttribute('id');
+ var files = xmldoc.getElementsByTagName('file');
+ for(var i=0; i<files.length; i++)
+ {
+ var row = newtable.insertRow(i);
+ row.style.backgroundColor=(i % 2) ? '#ffffff' : '#dce4f9';
+ var cell = row.insertCell(-1);
+
+ var file_status = _get_text(files[i], 'status').data;
+ var command; //we call ?file_xx - this call is detected by server and priority is being changed
+
+ command = (file_status==50)?'':'rest.php?file_hp='+id+'-'+i;
+ var high_prior = _create_file_action_button('/icons/16x16/high_priority.png', 'High Priority', command);
+ cell.appendChild(high_prior);
+
+ command = (file_status==40)?'':'rest.php?file_np='+id+'-'+i;
+ var normal_prior = _create_file_action_button('/icons/16x16/normal_priority.png', 'Normal Priority', command);
+ cell.appendChild(normal_prior);
+
+ command = (file_status==30)?'':'rest.php?file_lp='+id+'-'+i;
+ var low_prior = _create_file_action_button('/icons/16x16/low_priority.png', 'Low Priority', command);
+ cell.appendChild(low_prior);
+
+ command = (file_status==20 || file_status==10)?'':'rest.php?file_stop='+id+'-'+i;
+ var dnd = _create_file_action_button('/icons/16x16/only_seed.png', 'Stop downloading (Only Seed Priority)', command);
+ cell.appendChild(dnd);
+
+ var cell = row.insertCell(-1);
+ cell.appendChild(_get_text(files[i], 'name'));
+ var cell = row.insertCell(-1);
+ cell.appendChild(_get_text(files[i], 'size'));
+ var cell = row.insertCell(-1);
+
+ if (_get_text(files[i], 'perc_done').data!='')
+ cell.appendChild(_get_text(files[i], 'perc_done'));
+ else
+ cell.appendChild(document.createTextNode("0"));
+ cell.appendChild(document.createTextNode("%"));
+ var cell = row.insertCell(-1);
+
+ cell.appendChild(document.createTextNode(_get_file_status_name(file_status)));
+ }
+
+ _torrents_details_header(newtable.insertRow(0));
+
+ /*var torrents = xmldoc.getElementsByTagName('torrent');
+ var i = 0;
+ while (torrents[i]) {
+ _torrent_table_row(torrents[i], newtable, i);
+ i++;
+ }
+ _torrent_table_header(newtable.insertRow(0));*/
+
+ var oldtable = document.getElementById('torrents_details_files');
+ oldtable.parentNode.replaceChild(newtable, oldtable);
+}
+
+function _create_action_button(button_name, image_src, command) {
+ var image = document.createElement("img");
+ image.setAttribute("src", "icons/22x22/" + image_src);
+ image.setAttribute("alt", button_name);
+ image.setAttribute("title", button_name);
+ if (command != '')
+ {
+ var a = document.createElement("a");
+ a.setAttribute("href", "interface.php?" + command);
+ a.appendChild(image);
+ return a;
+ }
+ else
+ return image;
+}
+
+function _create_file_action_button(img_src, img_alt, command) {
+ var image = document.createElement("img");
+ image.setAttribute("src", img_src);
+ image.setAttribute("alt", img_alt);
+ image.setAttribute("title", img_alt);
+ if (command != '')
+ {
+ var a = document.createElement("a");
+ a.setAttribute("href", "#");
+ a.onclick = function()
+ {
+ fetch_xml(command, new Array("just_refresh_details"));
+ };
+ a.appendChild(image);
+ return a;
+ }
+ else
+ return image;
+}
+
+// gets element with given tag and crates text node from it
+function _get_text(element, tag) {
+ var text_node;
+ try {
+ text_node = document.createTextNode(
+ element.getElementsByTagName(tag)[0].firstChild.data);
+ }
+ catch (e) {
+ text_node = document.createTextNode('');
+ }
+ return text_node;
+}
+
+function _get_text_from_attribute(element, tag, attribute) {
+ var text_node;
+ try {
+ text_node = document.createTextNode(
+ element.getElementsByTagName(tag)[0].getAttribute(attribute));
+ }
+ catch (e) {
+ text_node = document.createTextNode('');
+ }
+ return text_node;
+}
+
+function _get_file_status_name(status_id)
+{
+ if (status_id==60) return 'PREVIEW_PRIORITY';
+ else if (status_id==50) return 'Download First';
+ else if (status_id==40) return 'Download Normally';
+ else if (status_id==30) return 'Download Last';
+ else if (status_id==20) return 'Only Seed';
+ else if (status_id==10) return 'Do Not Download';
+ else return 'Not supported file status';
+}
+
+function _torrents_details_header(row) {
+ headers = new Array("Actions", "File", "Size", "Perc done", "Status");
+ for (var i in headers) {
+ var header = document.createElement("th");
+ header.appendChild(document.createTextNode(headers[i]));
+ row.appendChild(header);
+ }
+ return row;
+}
+
+function _torrent_table_header(row) {
+ headers = new Array(
+ "Actions", "File", "Status",
+ "Speed", "Size", "Peers",
+ "Transferred", "% done"
+ );
+
+ for (var i in headers) {
+ var header = document.createElement("th");
+ header.appendChild(
+ document.createTextNode(headers[i]));
+ row.appendChild(header);
+ }
+ return row;
+}