sort active searches
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user