clear finished uploads link
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user