From c59e038c2ae3d9b31841a56b6fca83df423cd9c8 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 8 Dec 2019 07:48:59 +0000 Subject: [PATCH] wip on browse host --- .../java/com/muwire/webui/BrowseServlet.java | 1 + webui/src/main/js/browse.js | 122 ++++++++++++++++++ webui/src/main/webapp/BrowseHost.jsp | 48 +++++++ 3 files changed, 171 insertions(+) create mode 100644 webui/src/main/js/browse.js create mode 100644 webui/src/main/webapp/BrowseHost.jsp diff --git a/webui/src/main/java/com/muwire/webui/BrowseServlet.java b/webui/src/main/java/com/muwire/webui/BrowseServlet.java index 39b683af..e78a02d2 100644 --- a/webui/src/main/java/com/muwire/webui/BrowseServlet.java +++ b/webui/src/main/java/com/muwire/webui/BrowseServlet.java @@ -65,6 +65,7 @@ public class BrowseServlet extends HttpServlet { sb.append(""); sb.append("").append(Util.escapeHTMLinXML(result.getName())).append(""); sb.append("").append(DataHelper.formatSize2Decimal(result.getSize(), false)).append("B").append(""); + sb.append("").append(Base64.encode(result.getInfohash().getRoot())).append(""); if (result.getComment() != null) { sb.append("").append(Util.escapeHTMLinXML(result.getComment())).append(""); } diff --git a/webui/src/main/js/browse.js b/webui/src/main/js/browse.js new file mode 100644 index 00000000..cc4c6ec5 --- /dev/null +++ b/webui/src/main/js/browse.js @@ -0,0 +1,122 @@ +class Result { + constructor(name, size, comment, infoHash) { + this.name = name + this.size = size + this.infoHash = infoHash + this.comment = comment + } +} + +class Browse { + constructor(host, hostB64, status, totalResults, receivedResults) { + this.host = host + this.hostB64 = hostB64 + this.totalResults = totalResults + this.receivedResults = receivedResults + this.status = status + } +} + +function initBrowse() { + setTimeout(refreshActive, 1) + setInterval(refreshActive, 3000) +} + +var browsesByHost = new Map() +var resultsByInfoHash = new Map() + +function refreshActive() { + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var xmlDoc = this.responseXML + var browses = xmlDoc.getElementsByTagName("Browse") + var i + for (i = 0;i < browses.length; i++) { + var host = browses[i].getElementsByTagName("Host")[0].childNodes[0].nodeValue; + var hostB64 = browses[i].getElementsByTagName("HostB64")[0].childNodes[0].nodeValue; + var status = browses[i].getElementsByTagName("BrowseStatus")[0].childNodes[0].nodeValue; + var totalResults = browses[i].getElementsByTagName("TotalResults")[0].childNodes[0].nodeValue; + var count = browses[i].getElementsByTagName("ResultsCount")[0].childNodes[0].nodeValue; + + var browse = new Browse(host, hostB64, status, totalResults, count) + browsesByHost.set(host, browse) + } + + var tableHtml = ""; + for (var [host, browse] of browsesByHost) { + var browseLink = getBrowseLink(host, host) + + tableHtml += "" + tableHtml += "" + tableHtml += "" + + var percent = browse.receivedResults + "/" + browse.totalResults + tableHtml += "" + + tableHtml += "" + } + tableHtml += "
HostStatusResults
" + browseLink + "" + browse.status + ""+percent+"
" + + var tableDiv = document.getElementById("activeBrowses") + tableDiv.innerHTML = tableHtml + } + } + xmlhttp.open("GET", "/MuWire/Browse?section=status", true) + xmlhttp.send() +} + +function getBrowseLink(host, text) { + return "" + text + "" +} + +function showResults(host) { + + var refreshLink = getBrowseLink(host, "Refresh") + var linkDiv = document.getElementById("refresh-link") + linkDiv.innerHTML = refreshLink + + var browse = browsesByHost.get(host) + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var xmlDoc = this.responseXML + + resultsByInfoHash.clear() + + var results = xmlDoc.getElementsByTagName("Result") + var i + for (i = 0; i < results.length; i++) { + var name = results[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue + var size = results[i].getElementsByTagName("Size")[0].childNodes[0].nodeValue + var infoHash = results[i].getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue + var comment = results[i].getElementsByTagName("Comment") + if (comment != null && comment.length == 1) + comment = comment[0].childNodes[0].nodeValue + else + comment = null + + var result = new Result(name, size, comment, infoHash) + resultsByInfoHash.set(infoHash, result) + } + + var tableHtml = "" + + for (var [infoHash, result] of resultsByInfoHash) { + + tableHtml += "" + tableHtml += "" + tableHtml += "" + // TODO: download and show comment link + tableHtml += "" + } + + tableHtml += "
NameSize
" + result.name + "" + result.size + "
" + + var tableDiv = document.getElementById("resultsTable") + tableDiv.innerHTML = tableHtml + } + } + xmlhttp.open("GET", "/MuWire/Browse?section=results&host="+browse.hostB64, true) + xmlhttp.send() +} \ No newline at end of file diff --git a/webui/src/main/webapp/BrowseHost.jsp b/webui/src/main/webapp/BrowseHost.jsp new file mode 100644 index 00000000..aa345aec --- /dev/null +++ b/webui/src/main/webapp/BrowseHost.jsp @@ -0,0 +1,48 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@include file="initcode.jsi"%> + +<% + +String pagetitle="Browse Host"; + +%> + + + +<%@ include file="css.jsi"%> + + + + + +<%@ include file="header.jsi"%> + +
+ +
+
+
+
+
+
+
+ +