Author: bombe
Date: 2006-08-03 13:29:04 +0000 (Thu, 03 Aug 2006)
New Revision: 9852

Modified:
   trunk/freenet/src/freenet/clients/http/QueueToadlet.java
Log:
make download priorities changeable via queue toadlet

Modified: trunk/freenet/src/freenet/clients/http/QueueToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/QueueToadlet.java    2006-08-03 
13:17:15 UTC (rev 9851)
+++ trunk/freenet/src/freenet/clients/http/QueueToadlet.java    2006-08-03 
13:29:04 UTC (rev 9852)
@@ -17,6 +17,7 @@
 import freenet.node.fcp.FCPServer;
 import freenet.node.fcp.MessageInvalidException;
 import freenet.node.Node;
+import freenet.node.RequestStarter;
 import freenet.support.HTMLDecoder;
 import freenet.support.HTMLEncoder;
 import freenet.support.Logger;
@@ -27,6 +28,8 @@

 public class QueueToadlet extends Toadlet {

+       private static final String[] priorityClasses = new String[] { 
"emergency", "very high", "high", "medium", "low", "very low", "will never 
finish" };
+
        private Node node;
        final FCPServer fcp;

@@ -99,6 +102,18 @@
                        fcp.makePersistentGlobalRequest(fetchURI, 
expectedMIMEType, persistence, returnType);
                        writePermanentRedirect(ctx, "Done", "/queue/");
                        return;
+               } else if (request.isParameterSet("change_priority")) {
+                       String identifier = 
HTMLDecoder.decode(request.getParam("identifier"));
+                       short newPriority = 
Short.parseShort(request.getParam("priority"));
+                       ClientRequest[] clientRequests = 
fcp.getGlobalRequests();
+                       for (int requestIndex = 0, requestCount = 
clientRequests.length; requestIndex < requestCount; requestIndex++) {
+                               ClientRequest clientRequest = 
clientRequests[requestIndex];
+                               if 
(identifier.equals(clientRequest.getIdentifier())) {
+                                       
clientRequest.setPriorityClass(newPriority);
+                               }
+                       }
+                       writePermanentRedirect(ctx, "Done", "/queue/");
+                       return;
                }
                this.handleGet(uri, ctx);
        }
@@ -388,7 +403,7 @@
                        writeBigHeading("Requests in progress (" + 
(uncompletedDownload.size() + uncompletedUpload.size() + 
uncompletedDirUpload.size()) + ")", buf, "requests_in_progress");
                        if(!uncompletedDownload.isEmpty()) {
                                if 
(node.getToadletContainer().isAdvancedDarknetEnabled())
-                                       writeTableHead("Downloads in progress", 
new String[] { "", "Identifier", "Filename", "Size", "MIME-Type", "Progress", 
"Persistence", "Key" }, buf);
+                                       writeTableHead("Downloads in progress", 
new String[] { "", "Identifier", "Filename", "Priority", "Size", "MIME-Type", 
"Progress", "Persistence", "Key" }, buf);
                                else
                                        writeTableHead("Downloads in progress", 
new String[] { "", "Filename", "Size", "MIME-Type", "Progress", "Persistence", 
"Key" }, buf);
                                for(Iterator i = 
uncompletedDownload.iterator();i.hasNext();) {
@@ -401,6 +416,9 @@
                                                writeDirectCell(buf);
                                        else
                                                
writeFilenameCell(p.getDestFilename(), buf);
+                                       if 
(node.getToadletContainer().isAdvancedDarknetEnabled()) {
+                                               
writePriorityCell(p.getIdentifier(), p.getPriority(), buf);
+                                       }
                                        writeSizeCell(p.getDataSize(), buf);
                                        writeTypeCell(p.getMIMEType(), buf);
                                        writeProgressFractionCell(p, buf);
@@ -552,6 +570,27 @@
                buf.append("</td>\n");
        }

+       private void writePriorityCell(String identifier, short priorityClass, 
StringBuffer buf) {
+               buf.append("<td class=\"nowrap\">");
+               buf.append("<form action=\"/queue/\" method=\"post\">");
+               buf.append("<input type=\"hidden\" name=\"formPassword\" 
value=\"").append(node.formPassword).append("\">");
+               buf.append("<input type=\"hidden\" name=\"identifier\" 
value=\"").append(HTMLEncoder.encode(identifier)).append("\">");
+               buf.append("<select name=\"priority\">");
+               for (int p = 0; p < RequestStarter.NUMBER_OF_PRIORITY_CLASSES; 
p++) {
+                       buf.append("<option name=\"priority\" 
value=\"").append(p);
+                       if (p == priorityClass) {
+                               buf.append("\" selected=\"selected");
+                       }
+                       buf.append("\">");
+                       buf.append(priorityClasses[p]);
+                       buf.append("</option>");
+               }
+               buf.append("</select>");
+               buf.append("<input type=\"submit\" name=\"change_priority\" 
value=\"Change\" />");
+               buf.append("</form>");
+               buf.append("</td>");
+       }
+
        private void writeDeleteCell(ClientRequest p, StringBuffer buf) {
                buf.append("<td>");
                buf.append("<form action=\"/queue/\" method=\"post\">");


Reply via email to