convert download servlet to xml and page to ajax

pull/34/head
Zlatin Balevsky 2019-12-04 23:15:50 +00:00
parent b37a548771
commit 54b8628435
2 changed files with 39 additions and 40 deletions

View File

@ -42,10 +42,36 @@ public class DownloadServlet extends HttpServlet {
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
sb.append("<Downloads>");
downloadManager.getDownloaders().forEach(d -> {
sb.append("<Download>");
sb.append("<InfoHash>").append(Base64.encode(d.getInfoHash().getRoot())).append("</InfoHash>");
sb.append("<Name>").append(d.getFile().getName()).append("</Name>");
sb.append("<State>").append(d.getCurrentState().toString()).append("</State>");
sb.append("<Speed>").append(DataHelper.formatSize2Decimal(d.speed())).append("B/sec").append("</Speed>");
int speed = d.speed();
sb.append("<Speed>").append(DataHelper.formatSize2Decimal(speed)).append("B/sec").append("</Speed>");
String ETA;
if (speed == 0)
ETA = "Unknown";
else {
long remaining = (d.getNPieces() - d.donePieces()) * d.getPieceSize() / speed;
ETA = DataHelper.formatDuration(remaining * 1000);
}
sb.append("<ETA>").append(ETA).append("</ETA>");
int percent = -1;
if (d.getNPieces() != 0)
percent = (int)(d.donePieces() * 100 / d.getNPieces());
String totalSize = DataHelper.formatSize2Decimal(d.getLength(), false) + "B";
String progress = String.format("%2d", percent) + "% of "+totalSize;
sb.append("<Progress>").append(progress).append("</Progress>");
// TODO: more details for the downloader details view
sb.append("</Download>");
});
sb.append("</Downloads>");
resp.setContentType("text/xml");
resp.getWriter().write(sb.toString());
resp.getWriter().flush();
}

View File

@ -8,46 +8,19 @@
<%@ page import="net.i2p.data.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="initcode.jsi"%>
<% String pagetitle="Downloads"; %>
<%
MuWireClient client = (MuWireClient) application.getAttribute("mwClient");
String persona = client.getCore().getMe().getHumanReadableName();
String version = client.getCore().getVersion();
session.setAttribute("persona", persona);
session.setAttribute("version", version);
%>
<html>
<head>
<title>MuWire ${version}</title>
<link rel="stylesheet" href="/MuWire/muwire.css">
<%@include file="css.jsi"%>
</head>
<body>
<table width="100%">
<tr>
<td>
Welcome to MuWire ${persona}
</td>
<td>
<span id="connectionsCount">Connections : 0</span>
</td>
</tr>
</table>
<table width="100%">
<tr>
<td>
<a href="/MuWire/Home.jsp">Search</a>
</td>
</tr>
</table>
<hr/>
<p>Downloads:</p>
<%@include file="header.jsi"%>
<p>Downloads:</p>
<div id="table-wrapper">
<div id="table-scroll">
<div id="downloads"></div>
</div>
</div>
@ -88,7 +61,7 @@
var downloaders = new Map()
function updateDownloader(infoHash) {
var selected = downloader.get(infoHash);
var selected = downloaders.get(infoHash);
var downloadDetailsDiv = document.getElementById("downloadDetails");
downloadDetailsDiv.innerHTML = "<p>Details for "+selected.name+"</p>"
@ -107,9 +80,9 @@
downloaders.set(download.infoHash, download);
}
var table = "<table><thead><tr><th>Name</th><th>State</th><th>Speed</th><th>ETA</th><th>Progress</th></tr></thead></tbody>";
var table = "<table><thead><tr><th>Name</th><th>State</th><th>Speed</th><th>ETA</th><th>Progress</th><th>Cancel</th></tr></thead></tbody>";
var downloadsDiv = document.getElementById("downloads");
for (var [infoHash, download) of downloaders) {
for (var [infoHash, download] of downloaders) {
table += "<tr><td><a href='#' onclick='updateDownloader(\""+infoHash+"\");return false;'>";
table += download.name;
table += "</a></td>";
@ -118,11 +91,11 @@
table += "<td>"+download.ETA+"</td>";
table += "<td>"+download.progress+"</td>";
table += "<td><form action='/MuWire/Download' method='post'><input type='hidden' name='infoHash' value='"+
+ infoHash + "'><input type='hidden' name='action' value='cancel'><input type='submit' value='Cancel'></form></td>";
table += "<td><form action='/MuWire/Download' method='post'><input type='hidden' name='infoHash' value='" +
infoHash + "'><input type='hidden' name='action' value='cancel'><input type='submit' value='Cancel'></form></td>";
table += "</tr>";
});
}
table += "</tbody></table>";
if (downloaders.size > 0)
downloadsDiv.innerHTML = table;