sorting downloads table

pull/34/head
Zlatin Balevsky 2019-12-12 17:26:56 +00:00
parent ca56363438
commit 3a738f8f62
2 changed files with 51 additions and 19 deletions

View File

@ -7,6 +7,30 @@ class Downloader {
this.progress = xmlNode.getElementsByTagName("Progress")[0].childNodes[0].nodeValue; this.progress = xmlNode.getElementsByTagName("Progress")[0].childNodes[0].nodeValue;
this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue; this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue;
} }
getMapping() {
var mapping = new Map()
mapping.set("Name", this.getNameBlock())
mapping.set("State", this.state)
mapping.set("Speed", this.speed)
mapping.set("ETA", this.ETA)
mapping.set("Progress", this.progress)
mapping.set("Cancel", this.getCancelBlock())
return mapping
}
getNameBlock() {
return "<a href='#' onclick='window.updateDownloader(\"" + this.infoHash + "\");return false'>" + this.name + "</a>"
}
getCancelBlock() {
if (this.state == "CANCELLED" || this.state == "FINISHED")
return ""
var linkText = _t("Cancel")
var link = "<a href='#' onclick='window.cancelDownload(\"" + this.infoHash + "\");return false;'>" + linkText + "</a>"
var block = "<span id='download-" + this.infoHash + "'>" + link + "</span>"
return block
}
} }
var downloader = null; var downloader = null;
@ -38,42 +62,49 @@ function refreshDownloader() {
xmlhttp.onreadystatechange = function() { xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) { if (this.readyState == 4 && this.status == 200) {
var xmlDoc = this.responseXML; var xmlDoc = this.responseXML;
var downloaderList = []
downloaders.clear(); downloaders.clear();
var i; var i;
var x = xmlDoc.getElementsByTagName("Download"); var x = xmlDoc.getElementsByTagName("Download");
for (i = 0; i < x.length; i ++) { for (i = 0; i < x.length; i ++) {
var download = new Downloader(x[i]); var download = new Downloader(x[i]);
downloaderList.push(download)
downloaders.set(download.infoHash, download); downloaders.set(download.infoHash, download);
} }
var table = "<table><thead><tr><th>" + _t("Name") + "</th><th>" + _t("State") + "</th><th>" + _t("Speed") + "</th><th>" + _t("ETA") + "</th><th>" + _t("Progress") + "</th><th>" + _t("Cancel") + "</th></tr></thead></tbody>"; var newOrder
var downloadsDiv = document.getElementById("downloads"); if (downloadsSortOrder == "descending")
for (var [infoHash, download] of downloaders) { newOrder = "ascending"
table += "<tr><td><a href='#' onclick='updateDownloader(\""+infoHash+"\");return false;'>"; else if (downloadsSortOrder == "ascending")
table += download.name; newOrder = "descending"
table += "</a></td>"; var table = new Table(["Name","State","Speed","ETA","Progress","Cancel"], "sortDownloads", downloadsSortKey, newOrder)
table += "<td>"+download.state+"</td>";
table += "<td>"+download.speed+"</td>"; for(i = 0; i < downloaderList.length; i++) {
table += "<td>"+download.ETA+"</td>"; table.addRow(downloaderList[i].getMapping())
table += "<td>"+download.progress+"</td>";
if (download.state != "CANCELLED")
table += "<td><span id='download-"+infoHash+"'><a href='#' onclick='window.cancelDownload(\""+infoHash+"\");return false;'>" + _t("Cancel") + "</a></span></td>";
else
table += "<td></td>";
table += "</tr>";
} }
table += "</tbody></table>";
var downloadsDiv = document.getElementById("downloads");
if (downloaders.size > 0) if (downloaders.size > 0)
downloadsDiv.innerHTML = table; downloadsDiv.innerHTML = table.render();
if (downloader != null) if (downloader != null)
updateDownloader(downloader); updateDownloader(downloader);
} }
} }
xmlhttp.open("GET", "/MuWire/Download", true); var sortParam = "key=" + downloadsSortKey + "&order=" + downloadsSortOrder
xmlhttp.open("GET", "/MuWire/Download?" + sortParam, true);
xmlhttp.send(); xmlhttp.send();
} }
var downloadsSortKey
var downloadsSortOrder
function sortDownloads(key, order) {
downloadsSortKey = key
downloadsSortOrder = order
refreshDownloader()
}
function initDownloads() { function initDownloads() {
setInterval(refreshDownloader, 3000) setInterval(refreshDownloader, 3000)
setTimeout(refreshDownloader,1); setTimeout(refreshDownloader,1);

View File

@ -15,6 +15,7 @@
<html> <html>
<head> <head>
<%@include file="css.jsi"%> <%@include file="css.jsi"%>
<script src="js/tables.js?<%=version%>" type="text/javascript"></script>
<script src="js/download.js?<%=version%>" type="text/javascript"></script> <script src="js/download.js?<%=version%>" type="text/javascript"></script>
</head> </head>
<body onload="initTranslate(jsTranslations); initConnectionsCount(); initDownloads();"> <body onload="initTranslate(jsTranslations); initConnectionsCount(); initDownloads();">