Author: nextgens
Date: 2008-06-08 15:04:03 +0000 (Sun, 08 Jun 2008)
New Revision: 20265
Modified:
trunk/freenet/src/freenet/clients/http/QueueToadlet.java
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
Log:
implement #2362: Bulk fetch box
Thaw has just died on me once more because of a DB corruption :<
Modified: trunk/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/QueueToadlet.java 2008-06-08
12:00:22 UTC (rev 20264)
+++ trunk/freenet/src/freenet/clients/http/QueueToadlet.java 2008-06-08
15:04:03 UTC (rev 20265)
@@ -54,6 +54,7 @@
import freenet.support.io.BucketTools;
import freenet.support.io.Closer;
import freenet.support.io.FileBucket;
+import java.util.StringTokenizer;
public class QueueToadlet extends Toadlet implements RequestCompletionCallback
{
@@ -221,6 +222,60 @@
}
writePermanentRedirect(ctx, "Done", "/queue/");
return;
+ }else if(request.isPartSet("bulkDownloads")) {
+ String bulkDownloadsAsString =
request.getPartAsString("bulkDownloads", Integer.MAX_VALUE);
+ String[] keys =
bulkDownloadsAsString.split("\n");
+ if(("".equals(bulkDownloadsAsString)) ||
(keys.length < 1)) {
+ writePermanentRedirect(ctx, "Done",
"/queue/");
+ return;
+ }
+ LinkedList success = new LinkedList(), failure
= new LinkedList();
+
+ for(int i=0; i<keys.length; i++) {
+ String currentKey = keys[i];
+ try {
+ FreenetURI fetchURI = new
FreenetURI(currentKey);
+
fcp.makePersistentGlobalRequest(fetchURI, null, "forever", "disk");
+ success.add(currentKey);
+ } catch (Exception e) {
+ failure.add(currentKey);
+ Logger.error(this, "An error
occured while attempting to download key("+i+") : "+currentKey+ " :
"+e.getMessage());
+ }
+ }
+
+ boolean displayFailureBox = failure.size() > 0;
+ boolean displaySuccessBox = success.size() > 0;
+
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(L10n.getString("QueueToadlet.downloadFiles"),
ctx);
+ HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
+ HTMLNode alertNode =
contentNode.addChild(ctx.getPageMaker().getInfobox((displayFailureBox ?
"infobox-warning" : "infobox-info"),
L10n.getString("QueueToadlet.downloadFiles")));
+ HTMLNode alertContent =
ctx.getPageMaker().getContentNode(alertNode);
+ Iterator it;
+ if(displaySuccessBox) {
+ HTMLNode successDiv =
alertContent.addChild("ul");
+ successDiv.addChild("#",
L10n.getString("QueueToadlet.enqueuedSuccessfully", "number",
String.valueOf(success.size())));
+ it = success.iterator();
+ while(it.hasNext()) {
+ HTMLNode line =
successDiv.addChild("li");
+ line.addChild("#", (String)
it.next());
+ }
+ successDiv.addChild("br");
+ }
+ if(displayFailureBox) {
+ HTMLNode failureDiv =
alertContent.addChild("ul");
+ if(displayFailureBox) {
+ failureDiv.addChild("#",
L10n.getString("QueueToadlet.enqueuedFailure", "number",
String.valueOf(failure.size())));
+ it = failure.iterator();
+ while(it.hasNext()) {
+ HTMLNode line =
failureDiv.addChild("li");
+ line.addChild("#",
(String) it.next());
+ }
+ }
+ failureDiv.addChild("br");
+ }
+ alertContent.addChild("a", "href", "/queue/",
L10n.getString("Toadlet.returnToQueuepage"));
+ writeHTMLReply(ctx, 200, "OK",
pageNode.generate());
+ return;
} else if (request.isPartSet("change_priority")) {
String identifier =
request.getPartAsString("identifier", MAX_IDENTIFIER_LENGTH);
short newPriority =
Short.parseShort(request.getPartAsString("priority", 32));
@@ -494,6 +549,7 @@
HTMLNode infoboxContent =
pageMaker.getContentNode(infobox);
infoboxContent.addChild("#",
L10n.getString("QueueToadlet.noTaskOnGlobalQueue"));
contentNode.addChild(createInsertBox(pageMaker, ctx,
core.isAdvancedModeEnabled()));
+ contentNode.addChild(createBulkDownloadForm(ctx,
pageMaker));
writeHTMLReply(ctx, 200, "OK", pageNode.generate());
return;
}
@@ -798,6 +854,8 @@
}
}
+ contentNode.addChild(createBulkDownloadForm(ctx, pageMaker));
+
MultiValueTable pageHeaders = new MultiValueTable();
writeHTMLReply(ctx, 200, "OK", pageHeaders,
pageNode.generate());
}
@@ -1006,6 +1064,18 @@
return insertBox;
}
+ private HTMLNode createBulkDownloadForm(ToadletContext ctx, PageMaker
pageMaker) {
+ HTMLNode downloadBox =
pageMaker.getInfobox(L10n.getString("QueueToadlet.downloadFiles"));
+ HTMLNode downloadBoxContent =
pageMaker.getContentNode(downloadBox);
+ HTMLNode downloadForm = ctx.addFormChild(downloadBoxContent,
"/queue/", "queueDownloadForm");
+ downloadForm.addChild("#",
L10n.getString("QueueToadlet.downloadFilesInstructions"));
+ downloadForm.addChild("br");
+ downloadForm.addChild("textarea", new String[] { "id", "name",
"cols", "rows" }, new String[] { "bulkDownloads", "bulkDownloads", "120", "8"
});
+ downloadForm.addChild("br");
+ downloadForm.addChild("input", new String[] { "type", "name",
"value" }, new String[] { "submit", "insert",
L10n.getString("QueueToadlet.download") });
+ return downloadBox;
+ }
+
private HTMLNode createRequestTable(PageMaker pageMaker, ToadletContext
ctx, List requests, int[] columns, String[] priorityClasses, boolean
advancedModeEnabled, boolean isUpload) {
HTMLNode table = new HTMLNode("table", "class", "requests");
HTMLNode headerRow = table.addChild("tr", "class",
"table-header");
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-06-08
12:00:22 UTC (rev 20264)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2008-06-08
15:04:03 UTC (rev 20265)
@@ -906,8 +906,12 @@
QueueToadlet.completedU=Completed uploads (${size})
QueueToadlet.completedUDirectory=Completed directory uploads (${size})
QueueToadlet.download=Download
+QueueToadlet.downloadFiles=Bulk downloads
+QueueToadlet.downloadFilesInstructions=You can paste a list of keys to
download in the box below (one per line)
QueueToadlet.downloadSucceededTitle=Download succeeded: ${filename}
QueueToadlet.downloadSucceeded=The file ${origlink}${filename}${/origlink} has
been downloaded successfully. ${link}Click here${/link} to open the file
(${size}).
+QueueToadlet.enqueuedSuccessfully=The following ${number} keys have been
enqueued sucessfully:
+QueueToadlet.enqueuedFailure=The following ${number} keys couldn't have been
enqueued:
QueueToadlet.errorAccessDenied=Error: Access Denied!
QueueToadlet.errorAccessDeniedFile=The current configuration of the node
prohibits you from uploading the file "${file}".
QueueToadlet.errorDToDisk=Cannot download to disk
@@ -1128,6 +1132,7 @@
Toadlet.ok=Ok
Toadlet.permRedirectWithReason=Permanent redirect: ${reason}
Toadlet.returnToNodeHomepage=Return to node homepage
+Toadlet.returnToQueuepage=Return to queue page
Toadlet.returnToPrevPage=Return to the previous page
Toadlet.tempRedirectWithReason=Temporary redirect: ${reason}
Toadlet.unauthorizedTitle=Unauthorized