clear finished uploads link

This commit is contained in:
Zlatin Balevsky
2019-12-15 08:57:14 +00:00
parent 2b9e722165
commit 62ab957892
4 changed files with 71 additions and 20 deletions

View File

@ -1,5 +1,8 @@
package com.muwire.webui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@ -11,7 +14,7 @@ import com.muwire.core.upload.Uploader;
public class UploadManager {
private final Core core;
private final List<UploaderWrapper> uploads = new CopyOnWriteArrayList<>();
private final List<UploaderWrapper> uploads = Collections.synchronizedList(new ArrayList<>());
public UploadManager(Core core) {
this.core = core;
@ -23,10 +26,12 @@ public class UploadManager {
public void onUploadEvent(UploadEvent e) {
UploaderWrapper wrapper = null;
for(UploaderWrapper uw : uploads) {
if (uw.uploader == e.getUploader()) {
wrapper = uw;
break;
synchronized(uploads) {
for(UploaderWrapper uw : uploads) {
if (uw.uploader == e.getUploader()) {
wrapper = uw;
break;
}
}
}
if (wrapper != null) {
@ -42,15 +47,27 @@ public class UploadManager {
public void onUploadFinishedEvent(UploadFinishedEvent e) {
UploaderWrapper wrapper = null;
for(UploaderWrapper uw : uploads) {
if (uw.uploader == e.getUploader()) {
wrapper = uw;
break;
synchronized(uploads) {
for(UploaderWrapper uw : uploads) {
if (uw.uploader == e.getUploader()) {
wrapper = uw;
break;
}
}
}
wrapper.finished = true;
}
public void clearFinished() {
synchronized(uploads) {
for(Iterator<UploaderWrapper> iter = uploads.iterator(); iter.hasNext();) {
UploaderWrapper wrapper = iter.next();
if (wrapper.finished)
iter.remove();
}
}
}
public static class UploaderWrapper {
private volatile Uploader uploader;
private volatile int requests;

View File

@ -21,16 +21,18 @@ public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<UploadEntry> entries = new ArrayList<>();
for(UploadManager.UploaderWrapper wrapper : uploadManager.getUploads()) {
UploadEntry entry = new UploadEntry(
wrapper.getUploader().getName(),
wrapper.getUploader().getProgress(),
wrapper.getUploader().getDownloader(),
wrapper.getUploader().getDonePieces(),
wrapper.getUploader().getTotalPieces(),
wrapper.getUploader().speed()
);
entries.add(entry);
synchronized(uploadManager.getUploads()) {
for(UploadManager.UploaderWrapper wrapper : uploadManager.getUploads()) {
UploadEntry entry = new UploadEntry(
wrapper.getUploader().getName(),
wrapper.getUploader().getProgress(),
wrapper.getUploader().getDownloader(),
wrapper.getUploader().getDonePieces(),
wrapper.getUploader().getTotalPieces(),
wrapper.getUploader().speed()
);
entries.add(entry);
}
}
COMPARATORS.sort(entries, req);
@ -55,6 +57,18 @@ public class UploadServlet extends HttpServlet {
uploadManager = (UploadManager) config.getServletContext().getAttribute("uploadManager");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
if (action.equals("clear")) {
uploadManager.clearFinished();
}
}
private static class UploadEntry {
private final String name;
private final int progress;

View File

@ -44,8 +44,15 @@ function refreshUploads() {
}
var uploadsDiv = document.getElementById("uploads");
if (uploaderList.length > 0)
var clearDiv = document.getElementById("clearFinished")
if (uploaderList.length > 0) {
uploadsDiv.innerHTML = table.render();
var clearLink = new Link(_t("Clear Finished"), "clear", ["ignored"])
clearDiv.innerHTML = clearLink.render()
} else {
uploadsDiv.innerHTML = ""
clearDiv.innerHTML = ""
}
}
}
var sortParam = "key=" + uploadsSortKey + "&order=" + uploadsSortOrder
@ -53,6 +60,18 @@ function refreshUploads() {
xmlhttp.send();
}
function clear(ignored) {
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
refreshUploads()
}
}
xmlhttp.open("POST", "/MuWire/Upload")
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(encodeURI("action=clear"));
}
var uploadsSortKey
var uploadsSortOrder

View File

@ -30,6 +30,7 @@
<section class="main foldermain">
<div id="table-wrapper">
<div id="uploads"></div>
<center><span id="clearFinished"></span></center>
</div>
</section>
</body>