sort table of active browses
This commit is contained in:
@@ -86,5 +86,9 @@ public class BrowseManager {
|
||||
public long getRevision() {
|
||||
return revision;
|
||||
}
|
||||
|
||||
public Persona getHost() {
|
||||
return persona;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
22
webui/src/main/java/com/muwire/webui/ColumnComparators.java
Normal file
22
webui/src/main/java/com/muwire/webui/ColumnComparators.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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>"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user