diff --git a/webui/src/main/java/com/muwire/webui/BrowseManager.java b/webui/src/main/java/com/muwire/webui/BrowseManager.java index d9d258fa..0d5fccaa 100644 --- a/webui/src/main/java/com/muwire/webui/BrowseManager.java +++ b/webui/src/main/java/com/muwire/webui/BrowseManager.java @@ -46,6 +46,14 @@ public class BrowseManager { core.getEventBus().publish(event); } + boolean isBrowsing(Persona p) { + Browse browse = browses.get(p); + if (browse == null) + return false; + return browse.status == BrowseStatus.CONNECTING || + browse.status == BrowseStatus.FETCHING; + } + Map getBrowses(){ return browses; } diff --git a/webui/src/main/java/com/muwire/webui/BrowseServlet.java b/webui/src/main/java/com/muwire/webui/BrowseServlet.java index 7ee36b7f..f32b8aa3 100644 --- a/webui/src/main/java/com/muwire/webui/BrowseServlet.java +++ b/webui/src/main/java/com/muwire/webui/BrowseServlet.java @@ -116,7 +116,6 @@ public class BrowseServlet extends HttpServlet { return; } browseManager.browse(host); - resp.sendRedirect("/MuWire/BrowseHost.jsp"); } else if (action.equals("download")) { if (core == null) { resp.sendError(403, "Not initialized"); diff --git a/webui/src/main/java/com/muwire/webui/SearchServlet.java b/webui/src/main/java/com/muwire/webui/SearchServlet.java index 03962e5b..77255551 100644 --- a/webui/src/main/java/com/muwire/webui/SearchServlet.java +++ b/webui/src/main/java/com/muwire/webui/SearchServlet.java @@ -22,6 +22,7 @@ public class SearchServlet extends HttpServlet { private SearchManager searchManager; private ConnectionCounter connectionCounter; private DownloadManager downloadManager; + private BrowseManager browseManager; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { @@ -64,6 +65,7 @@ public class SearchServlet extends HttpServlet { sb.append(""); sb.append("").append(sender.toBase64()).append(""); sb.append("").append(resultsFromSender.iterator().next().getBrowse()).append(""); + sb.append("").append(browseManager.isBrowsing(sender)).append(""); resultsFromSender.forEach(result -> { sb.append(""); sb.append(""); @@ -114,6 +116,7 @@ public class SearchServlet extends HttpServlet { sb.append("").append(Util.escapeHTMLinXML(result.getSender().getHumanReadableName())).append(""); sb.append("").append(result.getSender().toBase64()).append(""); sb.append("").append(result.getBrowse()).append(""); + sb.append("").append(browseManager.isBrowsing(result.getSender())).append(""); if (result.getComment() != null) { sb.append("") .append(Util.escapeHTMLinXML(result.getComment())) @@ -156,6 +159,7 @@ public class SearchServlet extends HttpServlet { searchManager = (SearchManager) config.getServletContext().getAttribute("searchManager"); connectionCounter = (ConnectionCounter) config.getServletContext().getAttribute("connectionCounter"); downloadManager = (DownloadManager) config.getServletContext().getAttribute("downloadManager"); + browseManager = (BrowseManager) config.getServletContext().getAttribute("browseManager"); } } diff --git a/webui/src/main/js/search.js b/webui/src/main/js/search.js index 67a6d38a..2b2831af 100644 --- a/webui/src/main/js/search.js +++ b/webui/src/main/js/search.js @@ -35,6 +35,7 @@ class ResultsBySender { this.sender = xmlNode.getElementsByTagName("Sender")[0].childNodes[0].nodeValue; this.senderB64 = xmlNode.getElementsByTagName("SenderB64")[0].childNodes[0].nodeValue; this.browse = xmlNode.getElementsByTagName("Browse")[0].childNodes[0].nodeValue; + this.browsing = xmlNode.getElementsByTagName("Browsing")[0].childNodes[0].nodeValue; this.results = new Map(); var resultNodes = xmlNode.getElementsByTagName("Result"); var i; @@ -79,6 +80,7 @@ class ResultByFile { this.sender = xmlNode.getElementsByTagName("Sender")[0].childNodes[0].nodeValue; this.senderB64 = xmlNode.getElementsByTagName("SenderB64")[0].childNodes[0].nodeValue; this.browse = xmlNode.getElementsByTagName("Browse")[0].childNodes[0].nodeValue; + this.browsing = xmlNode.getElementsByTagName("Browsing")[0].childNodes[0].nodeValue; this.comment = null; var comment = xmlNode.getElementsByTagName("Comment") if (comment.length == 1) @@ -218,7 +220,13 @@ function updateFile(fileInfoHash) { } } table += ""; - table += "" + result.browse + "" + if (result.browse == "true") { + if (result.browsing == "true") + table += "Browsing" + else { + table += "" + getBrowseLink(result.senderB64) + "" + } + } table += ""; } table += ""; @@ -239,10 +247,12 @@ function updateUUIDBySender(resultUUID) { table += "" table += senderName; table += ""; - if (senderBatch.browse) - table += "true" - else - table += "false" + if (senderBatch.browse == "true") { + if (senderBatch.browsing == "true") + table += "Browsing" + else + table += "" + getBrowseLink(senderBatch.senderB64) + "" + } table += ""; } table += ""; @@ -376,6 +386,23 @@ function refreshGroupByFile() { xmlhttp.send(); } +function getBrowseLink(host) { + return "Browse" +} + +function browse(host) { + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var linkSpan = document.getElementById("browse-link-"+host) + linkSpan.innerHTML = "Browsing" + } + } + xmlhttp.open("POST", "/MuWire/Browse", true) + xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xmlhttp.send("action=browse&host="+host) +} + function initGroupBySender() { setInterval(refreshGroupBySender, 3000); setTimeout(refreshGroupBySender, 1); @@ -384,4 +411,4 @@ function initGroupBySender() { function initGroupByFile() { setInterval(refreshGroupByFile, 3000); setTimeout(refreshGroupByFile, 1); -} \ No newline at end of file +}