sort table of active browses

This commit is contained in:
Zlatin Balevsky
2019-12-11 07:42:42 +00:00
parent cd4b600ba2
commit 37ed75a3e8
4 changed files with 91 additions and 20 deletions

View File

@@ -86,5 +86,9 @@ public class BrowseManager {
public long getRevision() {
return revision;
}
public Persona getHost() {
return persona;
}
}
}

View File

@@ -3,6 +3,7 @@ package com.muwire.webui;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -45,11 +46,20 @@ public class BrowseServlet extends HttpServlet {
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
if (section.equals("status")) {
String key = req.getParameter("key");
String order = req.getParameter("order");
Comparator<Browse> comparator = BROWSE_COMPARATORS.get(key, order);
List<Browse> browses = new ArrayList<>(browseManager.getBrowses().values());
if (comparator != null)
Collections.sort(browses, comparator);
sb.append("<Status>");
browseManager.getBrowses().forEach( (persona, browse) -> {
browses.forEach( browse -> {
sb.append("<Browse>");
sb.append("<Host>").append(Util.escapeHTMLinXML(persona.getHumanReadableName())).append("</Host>");
sb.append("<HostB64>").append(persona.toBase64()).append("</HostB64>");
sb.append("<Host>").append(Util.escapeHTMLinXML(browse.getHost().getHumanReadableName())).append("</Host>");
sb.append("<HostB64>").append(browse.getHost().toBase64()).append("</HostB64>");
sb.append("<BrowseStatus>").append(browse.getStatus()).append("</BrowseStatus>");
sb.append("<TotalResults>").append(browse.getTotalResults()).append("</TotalResults>");
sb.append("<ResultsCount>").append(browse.getResults().size()).append("</ResultsCount>");
@@ -78,9 +88,7 @@ public class BrowseServlet extends HttpServlet {
String key = req.getParameter("key");
String order = req.getParameter("order");
Comparator<Result> comparator = COMPARATORS.get(key);
if (comparator != null && order.equals("ascending"))
comparator = comparator.reversed();
Comparator<Result> comparator = RESULT_COMPARATORS.get(key, order);
List<Result> wrapped = browse.getResults().stream().map(event -> {
return new Result(event, downloadManager.isDownloading(event.getInfohash()));
@@ -226,10 +234,29 @@ public class BrowseServlet extends HttpServlet {
return Boolean.compare(k.downloading, v.downloading);
};
private static final Map<String, Comparator<Result>> COMPARATORS = new HashMap<>();
private static final ColumnComparators<Result> RESULT_COMPARATORS = new ColumnComparators<>();
static {
COMPARATORS.put("Name", BY_NAME);
COMPARATORS.put("Size", BY_SIZE);
COMPARATORS.put("Download", BY_DOWNLOADING);
RESULT_COMPARATORS.add("Name", BY_NAME);
RESULT_COMPARATORS.add("Size", BY_SIZE);
RESULT_COMPARATORS.add("Download", BY_DOWNLOADING);
}
private static final Comparator<Browse> BY_HOST = (k, v) -> {
return k.getHost().getHumanReadableName().compareTo(v.getHost().getHumanReadableName());
};
private static final Comparator<Browse> BY_STATUS = (k, v) -> {
return k.getStatus().toString().compareTo(v.getStatus().toString());
};
private static final Comparator<Browse> BY_RESULTS = (k, v) -> {
return Integer.compare(k.getResults().size(), v.getResults().size());
};
private static final ColumnComparators<Browse> BROWSE_COMPARATORS = new ColumnComparators<>();
static {
BROWSE_COMPARATORS.add("Host", BY_HOST);
BROWSE_COMPARATORS.add("Status", BY_STATUS);
BROWSE_COMPARATORS.add("Results", BY_RESULTS);
}
}

View File

@@ -0,0 +1,22 @@
package com.muwire.webui;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class ColumnComparators<T> {
private final Map<String, Comparator<T>> comparators = new HashMap<>();
void add(String key, Comparator<T> comparator) {
comparators.put(key, comparator);
}
Comparator<T> get(String key, String order) {
Comparator<T> rv = comparators.get(key);
if (rv != null && order.equals("ascending"))
rv = rv.reversed();
return rv;
}
}

View File

@@ -52,6 +52,8 @@ function initBrowse() {
var currentHost = null
var browsesByHost = new Map()
var resultsByInfoHash = new Map()
var browseKey = null
var browseOrder = null
function showCertificates(hostB64, infoHash) {
var fetch = new CertificateFetch(hostB64, infoHash)
@@ -94,11 +96,14 @@ function refreshActive() {
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
browsesByHost.clear()
var currentBrowse = null
if (currentHost != null)
currentBrowse = browsesByHost.get(currentHost)
var xmlDoc = this.responseXML
var activeBrowses = []
var browses = xmlDoc.getElementsByTagName("Browse")
var i
for (i = 0;i < browses.length; i++) {
@@ -111,25 +116,31 @@ function refreshActive() {
var browse = new Browse(host, hostB64, status, totalResults, count, revision)
browsesByHost.set(host, browse)
activeBrowses.push(browse)
}
var tableHtml = "<table><thead><tr><th>" + _t("Host") + "</th><th>" + _t("Status") + "</th><th>" + _t("Results") + "</th></tr></thead></tbody>";
for (var [host, browse] of browsesByHost) {
var newBrowseOrder
if (browseOrder == "descending")
newBrowseOrder = "ascending"
else
newBrowseOrder = "descending"
var table = new Table(["Host", "Status", "Results"], "sortActive", browseKey, newBrowseOrder)
for (i = 0;i < activeBrowses.length; i++) {
var browse = activeBrowses[i]
var browseLink = browse.getBrowseLink()
tableHtml += "<tr>"
tableHtml += "<td>" + browseLink + "</td>"
tableHtml += "<td>" + browse.status + "</td>"
var mapping = new Map()
mapping.set("Host", browseLink)
mapping.set("Status", browse.status)
var percent = browse.receivedResults + "/" + browse.totalResults
tableHtml += "<td>"+percent+"</td>"
mapping.set("Results", percent)
tableHtml += "</tr>"
table.addRow(mapping)
}
tableHtml += "</tbody></table>"
var tableDiv = document.getElementById("activeBrowses")
tableDiv.innerHTML = tableHtml
tableDiv.innerHTML = table.render()
if (currentBrowse != null) {
var newBrowse = browsesByHost.get(currentHost)
@@ -138,7 +149,8 @@ function refreshActive() {
}
}
}
xmlhttp.open("GET", "/MuWire/Browse?section=status", true)
var params = "section=status&key=" + browseKey + "&order=" + browseOrder
xmlhttp.open("GET", "/MuWire/Browse?" + params, true)
xmlhttp.send()
}
@@ -221,6 +233,12 @@ function sort(key, descending) {
showResults(currentHost, key, descending)
}
function sortActive(key, order) {
browseKey = key
browseOrder = order
refreshActive()
}
function getDownloadLink(host, infoHash) {
return "<a href='#' onclick='window.download(\"" + host + "\",\"" + infoHash + "\");return false;'>" + _t("Download") + "</a>"
}