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


Reply via email to