From cd4b600ba26b9e3e5ffeef06ec365964fbf91f72 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Tue, 10 Dec 2019 23:56:39 +0000 Subject: [PATCH] working sorting of the browse host results --- .../java/com/muwire/webui/BrowseServlet.java | 51 ++++++++++++++++++- webui/src/main/js/browse.js | 2 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/webui/src/main/java/com/muwire/webui/BrowseServlet.java b/webui/src/main/java/com/muwire/webui/BrowseServlet.java index d88ee7ea..2f1031dd 100644 --- a/webui/src/main/java/com/muwire/webui/BrowseServlet.java +++ b/webui/src/main/java/com/muwire/webui/BrowseServlet.java @@ -4,6 +4,10 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -71,8 +75,22 @@ public class BrowseServlet extends HttpServlet { if (browse == null) return; // hmm + String key = req.getParameter("key"); + String order = req.getParameter("order"); + + Comparator comparator = COMPARATORS.get(key); + if (comparator != null && order.equals("ascending")) + comparator = comparator.reversed(); + + List wrapped = browse.getResults().stream().map(event -> { + return new Result(event, downloadManager.isDownloading(event.getInfohash())); + }).collect(Collectors.toList()); + + if (comparator != null) + Collections.sort(wrapped, comparator); + sb.append(""); - browse.getResults().forEach(result -> { + wrapped.stream().map(Result::getEvent).forEach(result -> { sb.append(""); sb.append("").append(Util.escapeHTMLinXML(result.getName())).append(""); sb.append("").append(downloadManager.isDownloading(result.getInfohash())).append(""); @@ -182,5 +200,36 @@ public class BrowseServlet extends HttpServlet { downloadManager = (DownloadManager) cfg.getServletContext().getAttribute("downloadManager"); core = (Core) cfg.getServletContext().getAttribute("core"); } + + private static class Result { + private final UIResultEvent event; + private final boolean downloading; + Result(UIResultEvent event, boolean downloading) { + this.event = event; + this.downloading = downloading; + } + + UIResultEvent getEvent() { + return event; + } + } + + private static final Comparator BY_NAME = (k, v) -> { + return k.event.getName().compareTo(v.event.getName()); + }; + + private static final Comparator BY_SIZE = (k, v) -> { + return Long.compare(k.event.getSize(), v.event.getSize()); + }; + private static final Comparator BY_DOWNLOADING = (k, v) -> { + return Boolean.compare(k.downloading, v.downloading); + }; + + private static final Map> COMPARATORS = new HashMap<>(); + static { + COMPARATORS.put("Name", BY_NAME); + COMPARATORS.put("Size", BY_SIZE); + COMPARATORS.put("Download", BY_DOWNLOADING); + } } diff --git a/webui/src/main/js/browse.js b/webui/src/main/js/browse.js index 13035f9a..27ab0063 100644 --- a/webui/src/main/js/browse.js +++ b/webui/src/main/js/browse.js @@ -174,7 +174,7 @@ function showResults(host, key, descending) { if (descending == "descending") descending = "ascending" else - descending = "ascending" + descending = "descending" var table = new Table(["Name", "Size", "Download"], "sort", key, descending)