sort active searches

This commit is contained in:
Zlatin Balevsky
2019-12-11 10:55:51 +00:00
parent 37ed75a3e8
commit a59a1d3f30
4 changed files with 69 additions and 11 deletions

View File

@ -63,6 +63,13 @@ public class SearchResults {
}
}
int getResultCount() {
int total = 0;
for (Set<UIResultEvent> set : bySender.values())
total += set.size();
return total;
}
public UUID getUUID() {
return uuid;
}

View File

@ -1,6 +1,10 @@
package com.muwire.webui;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@ -55,8 +59,16 @@ public class SearchServlet extends HttpServlet {
return;
}
String key = req.getParameter("key");
String order = req.getParameter("order");
Comparator<SearchResults> comparator = SEARCH_COMPARATORS.get(key, order);
List<SearchResults> searchResults = new ArrayList<>(searchManager.getResults().values());
if (comparator != null)
Collections.sort(searchResults, comparator);
sb.append("<Searches>");
for (SearchResults results : searchManager.getResults().values()) {
for (SearchResults results : searchResults) {
sb.append("<Search>");
sb.append("<Revision>").append(results.getRevision()).append("</Revision>");
sb.append("<Query>").append(Util.escapeHTMLinXML(results.getSearch())).append("</Query>");
@ -196,5 +208,24 @@ public class SearchServlet extends HttpServlet {
browseManager = (BrowseManager) config.getServletContext().getAttribute("browseManager");
core = (Core) config.getServletContext().getAttribute("core");
}
private static final Comparator<SearchResults> SEARCH_BY_NAME = (k, v) -> {
return k.getSearch().compareTo(v.getSearch());
};
private static final Comparator<SearchResults> SEARCH_BY_SENDERS = (k, v) -> {
return Integer.compare(k.getSenderCount(), v.getSenderCount());
};
private static final Comparator<SearchResults> SEARCH_BY_RESULTS = (k, v) -> {
return Integer.compare(k.getResultCount(), v.getResultCount());
};
private static final ColumnComparators<SearchResults> SEARCH_COMPARATORS = new ColumnComparators<>();
static {
SEARCH_COMPARATORS.add("Query", SEARCH_BY_NAME);
SEARCH_COMPARATORS.add("Senders", SEARCH_BY_SENDERS);
SEARCH_COMPARATORS.add("Results", SEARCH_BY_RESULTS);
}
}

View File

@ -187,6 +187,9 @@ var senderB64 = null
var lastXML = null;
var infoHash = null;
var statusKey = null
var statusOrder = null
function showCommentBySender(divId, spanId) {
var split = divId.split("_");
var commentDiv = document.getElementById(divId);
@ -594,26 +597,35 @@ function refreshStatus() {
currentSearch = statusByUUID.get(uuid)
statusByUUID.clear()
var statuses = []
var activeSearches = this.responseXML.getElementsByTagName("Search")
var i
for(i = 0; i < activeSearches.length; i++) {
var searchStatus = new SearchStatus(activeSearches[i])
statusByUUID.set(searchStatus.uuid, searchStatus)
statuses.push(searchStatus)
}
var table = "<table><thead><tr><th>" + _t("Query") + "</th><th>" + _t("Senders") + "</th><th>" + _t("Results") + "</th></tr></thead><tbody>"
for (var [searchUUID, status] of statusByUUID) {
table += "<tr>"
table += "<td>" + "<a href='#' onclick='refreshGroupBy" + refreshType + "(\"" + searchUUID + "\");return false;'>" + status.query + "</a></td>"
table += "<td>" + status.senders + "</td>"
table += "<td>" + status.results + "</td>"
table += "</tr>"
var newOrder
if (statusOrder == "descending")
newOrder = "ascending"
else
newOrder = "descending"
var table = new Table(["Query", "Senders", "Results"], "sortStatuses", statusKey, newOrder)
for (i = 0; i < statuses.length; i++) {
var status = statuses[i]
var mappings = new Map()
var queryLink = "<a href='#' onclick='refreshGroupBy" + refreshType + "(\"" + status.uuid + "\");return false;'>" + status.query + "</a>"
mappings.set("Query", queryLink)
mappings.set("Senders", status.senders)
mappings.set("Results", status.results)
table.addRow(mappings)
}
table += "</tbody></table>"
var activeDiv = document.getElementById("activeSearches")
activeDiv.innerHTML = table
activeDiv.innerHTML = table.render()
if (uuid != null) {
var newStatus = statusByUUID.get(uuid)
@ -622,10 +634,17 @@ function refreshStatus() {
}
}
}
xmlhttp.open("GET", "/MuWire/Search?section=status", true)
var params = "section=status&key=" + statusKey + "&order=" + statusOrder
xmlhttp.open("GET", "/MuWire/Search?" + params, true)
xmlhttp.send()
}
function sortStatuses(key, order) {
statusKey = key
statusOrder = order
refreshStatus()
}
var refreshFunction = null
var refreshType = null

View File

@ -19,6 +19,7 @@
<html>
<head>
<%@include file="css.jsi"%>
<script src="js/tables.js?<%=version%>" type="text/javascript"></script>
<script src="js/certificates.js?<%=version%>" type="text/javascript"></script>
<script src="js/search.js?<%=version%>" type="text/javascript"></script>
</head>