Author: jflesch
Date: 2006-07-10 01:21:28 +0000 (Mon, 10 Jul 2006)
New Revision: 9538

Added:
   trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
Modified:
   trunk/apps/Thaw/src/thaw/core/Config.java
   trunk/apps/Thaw/src/thaw/core/Core.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
   trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
   trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
   trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
   trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java
   trunk/apps/Thaw/src/thaw/i18n/thaw.properties
Log:
Thaw can now resume downloads (but still not cancel them)

Modified: trunk/apps/Thaw/src/thaw/core/Config.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Config.java   2006-07-10 00:57:45 UTC (rev 
9537)
+++ trunk/apps/Thaw/src/thaw/core/Config.java   2006-07-10 01:21:28 UTC (rev 
9538)
@@ -269,7 +269,7 @@
                        return false;
                }

-               serializer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-15");
+               serializer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
                serializer.setOutputProperty(OutputKeys.INDENT,"yes");

                /* final step */
@@ -295,9 +295,9 @@
        public void setDefaultValues() {
                setValue("nodeAddress", "127.0.0.1");   
                setValue("nodePort", "9481");
-               setValue("maxSimultaneousDownloads", "5");
+               setValue("maxSimultaneousDownloads", "10");
                setValue("maxSimultaneousInsertions", "2");
-               setValue("thawId", "thaw-"+(new Integer((new 
Random()).nextInt(1000))).toString());
+               setValue("thawId", "thaw_"+(new Integer((new 
Random()).nextInt(1000))).toString());
        }

 }

Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-10 00:57:45 UTC (rev 
9537)
+++ trunk/apps/Thaw/src/thaw/core/Core.java     2006-07-10 01:21:28 UTC (rev 
9538)
@@ -82,6 +82,9 @@
                if(!initPluginManager())
                        return false;

+               if(!restorePreviousState())
+                       return false;
+
                mainWindow.setStatus(I18n.getMessage("thaw.statusBar.ready"));

                mainWindow.setVisible(true);
@@ -147,23 +150,22 @@

                                clientHello = new FCPClientHello(queryManager, 
config.getValue("thawId"));

+                               queueManager = new FCPQueueManager(queryManager,
+                                                                  
config.getValue("thawId"),
+                                                                  (new 
Integer(config.getValue("maxSimultaneousDownloads"))).intValue(),
+                                                                  (new 
Integer(config.getValue("maxSimultaneousInsertions"))).intValue());
+                               
                                if(!clientHello.start(null)) {
                                        new WarningWindow(this, 
I18n.getMessage("thaw.error.idAlreadyUsed"));
+                                       connection.disconnect();
                                } else {
                                        Logger.debug(this, "Hello successful");
                                        Logger.debug(this, "Node name    : 
"+clientHello.getNodeName());
                                        Logger.debug(this, "FCP  version : 
"+clientHello.getNodeFCPVersion());
                                        Logger.debug(this, "Node version : 
"+clientHello.getNodeVersion());

-                                       queueManager = new 
FCPQueueManager(queryManager,
-                                                                          
config.getValue("thawId"),
-                                                                          (new 
Integer(config.getValue("maxSimultaneousDownloads"))).intValue(),
-                                                                          (new 
Integer(config.getValue("maxSimultaneousInsertions"))).intValue());
                                        queueManager.startScheduler();

-                                       FCPWatchGlobal watchGlobal = new 
FCPWatchGlobal(true);
-                                       watchGlobal.start(queueManager);        
                                
-
                                }

                        }
@@ -183,6 +185,17 @@
                return true;
        }

+
+       public boolean restorePreviousState() {
+               if(connection.isConnected()) {
+                       QueueKeeper.loadQueue(queueManager, "thaw.queue.xml");
+
+                       FCPWatchGlobal watchGlobal = new FCPWatchGlobal(true);
+                       watchGlobal.start(queueManager);
+               }
+
+               return true;
+       }

        public FCPConnection getConnectionManager() {
                return connection;
@@ -243,6 +256,9 @@
                connection.deleteObserver(this);
                connection.disconnect();

+               Logger.info(this, "Saving queue state ...");
+               QueueKeeper.saveQueue(queueManager, "thaw.queue.xml");
+
                Logger.info(this, "Saving configuration ...");
                if(!config.saveConfig()) {
                        Logger.error(this, "Config was not saved correctly !");

Added: trunk/apps/Thaw/src/thaw/core/QueueKeeper.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/core/QueueKeeper.java      2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -0,0 +1,288 @@
+package thaw.core;
+
+
+import java.util.HashMap;
+import java.io.File;
+import java.util.Iterator;
+import java.util.Vector;
+import java.util.Observer;
+
+
+/* XML */
+import org.w3c.dom.Document;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import org.w3c.dom.DOMImplementation;
+import javax.xml.transform.stream.StreamResult;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.OutputKeys;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+
+
+import thaw.fcp.*;
+
+/**
+ * Used when Thaw start and stop: Save the queue state.
+ */
+public class QueueKeeper {
+       private final static int MIN_PRIORITY = 6;
+
+       /**
+        * Used to be able to call Logger functions.
+        */
+       public QueueKeeper() {
+
+       }
+
+
+       private static void loadQuery(FCPQueueManager queueManager, Element 
queryEl, boolean runningQueue) {
+               FCPQuery newQuery = null;
+               HashMap params = new HashMap();
+
+               NodeList paramList = queryEl.getElementsByTagName("param");
+
+               for(int i = 0;i < paramList.getLength(); i++) {
+                       Node param = paramList.item(i);
+
+                       if(param != null && param.getNodeType() == 
Node.ELEMENT_NODE) {
+                               Element paramEl = (Element)param;
+
+                               Logger.verbose(new QueueKeeper(), 
paramEl.getAttribute("name") + "=>" + paramEl.getAttribute("value"));
+
+                               params.put(paramEl.getAttribute("name"),
+                                          paramEl.getAttribute("value"));
+                       }
+               }
+
+               if(queryEl.getAttribute("type") == null
+                  || queryEl.getAttribute("type").equals("1")) {
+                       newQuery = new FCPClientGet(queueManager, params);
+               } else {
+                       Logger.error(new QueueKeeper(), "Insert resuming TODO");
+                       /* TODO */ /* FCPClientPut */
+               }
+
+               if(runningQueue)
+                       queueManager.addQueryToTheRunningQueue(newQuery, false);
+               else
+                       queueManager.addQueryToThePendingQueue(newQuery);
+
+               if(runningQueue && !newQuery.isPersistent() && 
!newQuery.isFinished()) /* We restart */
+                       newQuery.start(queueManager);
+
+       }
+
+
+       private static void loadQueries(FCPQueueManager queueManager, Element 
queriesEl, boolean runningQueue) {
+               NodeList queries = queriesEl.getElementsByTagName("query");
+
+               for(int i = 0;i < queries.getLength(); i++) {
+                       Node queryNode = queries.item(i);
+
+                       if(queryNode != null && queryNode.getNodeType() == 
Node.ELEMENT_NODE) {
+                               loadQuery(queueManager, (Element)queryNode, 
runningQueue);
+                       }
+               }
+       }
+
+
+       public static boolean loadQueue(FCPQueueManager queueManager, String 
fileName) {
+               File file = new File(fileName);
+
+               if(!file.exists() || !file.canRead()) {
+                       Logger.notice(new QueueKeeper(), "Unable to find 
previous queue state file '"+file.getPath()+"'");
+                       return false;
+               }
+
+               
+               Document xmlDoc = null;
+               DocumentBuilderFactory xmlFactory = null;
+               DocumentBuilder xmlBuilder = null;
+               
+               Element rootEl = null;
+                               
+               xmlFactory = DocumentBuilderFactory.newInstance();
+
+               try {
+                       xmlBuilder = xmlFactory.newDocumentBuilder();
+               } catch(javax.xml.parsers.ParserConfigurationException e) {
+                       Logger.warning(new QueueKeeper(), "Unable to load queue 
because: "+e);
+                       return false;
+               }
+               
+               try {
+                       xmlDoc = xmlBuilder.parse(file);
+               } catch(org.xml.sax.SAXException e) {
+                       Logger.warning(new QueueKeeper(), "Unable to load queue 
because: "+e);
+                       return false;
+               } catch(java.io.IOException e) {
+                       Logger.warning(new QueueKeeper(), "Unable to load queue 
because: "+e);
+                       return false;
+               }
+
+               rootEl = xmlDoc.getDocumentElement();
+               
+
+               NodeList runningQueues = 
rootEl.getElementsByTagName("runningQueue");
+
+               for(int i = 0;i < runningQueues.getLength(); i++) {
+
+                       Node runningQueueNode = runningQueues.item(i);
+
+                       if(runningQueueNode != null && 
runningQueueNode.getNodeType() == Node.ELEMENT_NODE) {
+                               loadQueries(queueManager, 
(Element)runningQueueNode, true);
+                       }
+               }
+
+               NodeList pendingQueues = 
rootEl.getElementsByTagName("pendingQueue");
+
+               for(int i = 0;i < pendingQueues.getLength(); i++) {
+
+                       Node pendingQueueNode = pendingQueues.item(i);
+
+                       if(pendingQueueNode != null && 
pendingQueueNode.getNodeType() == Node.ELEMENT_NODE) {
+                               loadQueries(queueManager, 
(Element)pendingQueueNode, false);
+                       }
+               }
+               
+
+
+               return true;
+       }
+       
+
+       private static Element saveQuery(FCPQuery query, Document xmlDoc) {
+               HashMap params = query.getParameters();
+
+               Element queryEl = xmlDoc.createElement("query");
+
+               queryEl.setAttribute("type", ((new 
Integer(query.getQueryType())).toString()));
+               
+               for(Iterator keys = params.keySet().iterator();
+                   keys.hasNext();) {
+
+                       String key = (String)keys.next();
+                      
+                       Element paramEl = xmlDoc.createElement("param");
+
+                       paramEl.setAttribute("name", key);
+                       paramEl.setAttribute("value", ((String)params.get(key)) 
);
+                       
+                       queryEl.appendChild(paramEl);
+               }
+
+               return queryEl;
+       }
+       
+       public static boolean saveQueue(FCPQueueManager queueManager, String 
fileName) {
+               Vector runningQueue = queueManager.getRunningQueue();
+               Vector[] pendingQueue = queueManager.getPendingQueues();
+
+               File file = new File(fileName);
+               StreamResult fileOut;
+
+               try {
+                       if( (!file.exists() && !file.createNewFile())
+                           || !file.canWrite()) {
+                               Logger.warning(new QueueKeeper(), "Unable to 
write config file '"+file.getPath()+"' (can't write)");
+                               return false;
+                       }
+               } catch(java.io.IOException e) {
+                       Logger.warning(new QueueKeeper(), "Error while checking 
perms to save config: "+e);
+               }
+                       
+               
+               
+               fileOut = new StreamResult(file);
+               
+               Document xmlDoc = null;
+               DocumentBuilderFactory xmlFactory = null;
+               DocumentBuilder xmlBuilder = null;
+               DOMImplementation impl = null;
+               
+               Element rootEl = null;
+
+               xmlFactory = DocumentBuilderFactory.newInstance();
+
+               try {
+                       xmlBuilder = xmlFactory.newDocumentBuilder();
+               } catch(javax.xml.parsers.ParserConfigurationException e) {
+                       Logger.error(new QueueKeeper(), "Unable to save queue 
because: "+e.toString());
+                       return false;
+               }
+
+
+               impl = xmlBuilder.getDOMImplementation();
+               
+               xmlDoc = impl.createDocument(null, "queue", null);
+               
+               rootEl = xmlDoc.getDocumentElement();
+
+
+               
+               Element runningQueueEl = xmlDoc.createElement("runningQueue");
+
+               for(Iterator runIt = runningQueue.iterator() ;
+                   runIt.hasNext(); ) {
+                       FCPQuery query = (FCPQuery)runIt.next();
+
+                       runningQueueEl.appendChild(saveQuery(query, xmlDoc));
+
+               }
+
+               rootEl.appendChild(runningQueueEl);
+
+               Element pendingQueueEl = xmlDoc.createElement("pendingQueue");
+               
+               for(int i = 0 ; i <= MIN_PRIORITY ; i++) {
+                       
+                       for(Iterator runIt = pendingQueue[i].iterator() ;
+                           runIt.hasNext(); ) {
+
+                               FCPQuery query = (FCPQuery)runIt.next();
+                               
+                               Element toSave = saveQuery(query, xmlDoc);
+
+                               if(toSave != null)
+                                       pendingQueueEl.appendChild(toSave);
+                               
+                       }
+                       
+               }
+
+               rootEl.appendChild(pendingQueueEl);
+
+               /* Serialization */
+               DOMSource domSource = new DOMSource(xmlDoc);
+               TransformerFactory transformFactory = 
TransformerFactory.newInstance();
+
+               Transformer serializer;
+
+               try {
+                       serializer = transformFactory.newTransformer();
+               } catch(javax.xml.transform.TransformerConfigurationException 
e) {
+                       Logger.error(new QueueKeeper(), "Unable to save queue 
because: "+e.toString());
+                       return false;
+               }
+
+               serializer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
+               serializer.setOutputProperty(OutputKeys.INDENT,"yes");
+               
+               /* final step */
+               try {
+                       serializer.transform(domSource, fileOut);
+               } catch(javax.xml.transform.TransformerException e) {
+                       Logger.error(new QueueKeeper(), "Unable to save queue 
because: "+e.toString());
+                       return false;   
+               }
+
+               return true;
+       }
+
+}

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java      2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -5,6 +5,8 @@
 import java.util.Observer;
 import java.util.Observable;

+import java.util.HashMap;
+
 import thaw.core.Logger;

 /**
@@ -27,7 +29,7 @@
        private int attempt = 0;
        private String status;

-       private String id;
+       private String identifier;

        private int progress; /* in pourcent */
        private long fileSize;
@@ -36,6 +38,20 @@
        private boolean successful = false;

        /**
+        * See setParameters().
+        */
+       public FCPClientGet(FCPQueueManager queueManager, HashMap parameters) {
+               this.queueManager = queueManager;
+               setParameters(parameters);
+
+               if(progress != 100 && identifier != null && 
!identifier.equals("")) {
+                       
this.queueManager.getQueryManager().deleteObserver(this);
+                       this.queueManager.getQueryManager().addObserver(this);
+               }
+       }
+
+
+       /**
         * @param persistence 0 = Forever ; 1 = Until node reboot ; 2 = Until 
the app disconnect
         */
        public FCPClientGet(String key, int priority,
@@ -76,7 +92,8 @@

                status = "Requesting";

-               this.id = queueManager.getAnID();
+               if(this.identifier == null || this.identifier.equals(""))
+                       this.identifier = queueManager.getAnID();

                Logger.info(this, "Requesting key : "+getFileKey());

@@ -84,7 +101,7 @@

                queryMessage.setMessageName("ClientGet");
                queryMessage.setValue("URI", getFileKey());
-               queryMessage.setValue("Identifier", id);
+               queryMessage.setValue("Identifier", identifier);
                queryMessage.setValue("Verbosity", "1");
                queryMessage.setValue("MaxRetries", "0");
                queryMessage.setValue("PriorityClass", (new 
Integer(priority)).toString());
@@ -103,6 +120,7 @@

                queryMessage.setValue("ReturnType", "direct");

+               queueManager.getQueryManager().deleteObserver(this);
                queueManager.getQueryManager().addObserver(this);

                queueManager.getQueryManager().writeMessage(queryMessage);
@@ -115,7 +133,7 @@
                FCPMessage message = (FCPMessage)arg;

                if(message.getValue("Identifier") == null
-                  || !message.getValue("Identifier").equals(id))
+                  || !message.getValue("Identifier").equals(identifier))
                        return;


@@ -130,7 +148,7 @@
                                FCPMessage getRequestStatus = new FCPMessage();

                                
getRequestStatus.setMessageName("GetRequestStatus");
-                               getRequestStatus.setValue("Identifier", id);
+                               getRequestStatus.setValue("Identifier", 
identifier);
                                if(globalQueue)
                                        getRequestStatus.setValue("Global", 
"true");
                                else
@@ -150,6 +168,7 @@
                if(message.getMessageName().equals("IdentifierCollision")) {
                        Logger.notice(this, "IdentifierCollision ! Resending 
with another id");

+                       identifier = null;
                        start(queueManager);

                        setChanged();
@@ -176,15 +195,18 @@
                if(message.getMessageName().equals("GetFailed")) {
                        Logger.debug(this, "GetFailed !");

+                       int code = ((new 
Integer(message.getValue("Code"))).intValue());
+
                        attempt++;

-                       if(attempt >= MAX_RETRIES) {
+                       if(attempt >= MAX_RETRIES || code == 25) {
                            status = "Failed";
                            progress = 100;
                            running = false;
                            queueManager.getQueryManager().deleteObserver(this);
                        } else {
                            status = "Retrying";
+                           start(queueManager);
                        }

                        setChanged();
@@ -218,6 +240,8 @@
                if(message.getMessageName().equals("AllData")) {
                        Logger.debug(this, "AllData !");

+                       progress = 98;
+
                        status = "Loading";

                        fileSize = message.getAmountOfDataWaiting();
@@ -360,4 +384,60 @@
        public boolean isRunning() {
                return running;
        }
+
+       public HashMap getParameters() {
+               HashMap result = new HashMap();
+
+               result.put("key", key);
+               result.put("filename", filename);
+               result.put("priority", ((new Integer(priority)).toString()));
+               result.put("persistence", ((new 
Integer(persistence)).toString()));
+               result.put("globalQueue", ((new 
Boolean(globalQueue)).toString()));
+               result.put("destinationDir", destinationDir);
+               result.put("attempt", ((new Integer(attempt)).toString()));
+               result.put("status", status);
+               result.put("identifier", identifier);
+               result.put("progress", ((new Integer(progress)).toString()));
+               result.put("fileSize", ((new Long(fileSize)).toString()));
+               result.put("running", ((new Boolean(running)).toString()));
+               result.put("successful", ((new 
Boolean(successful)).toString()));
+
+               return result;
+       }
+
+       public boolean setParameters(HashMap parameters) {
+               
+               key            = (String)parameters.get("key");
+
+               Logger.debug(this, "Resuming key : "+key);
+
+               filename       = (String)parameters.get("filename");
+               priority       = ((new 
Integer((String)parameters.get("priority"))).intValue());
+               persistence    = ((new 
Integer((String)parameters.get("persistence"))).intValue());
+               globalQueue    = ((new 
Boolean((String)parameters.get("globalQueue"))).booleanValue());
+               destinationDir = (String)parameters.get("destinationDir");
+               attempt        = ((new 
Integer((String)parameters.get("attempt"))).intValue());
+               status         = (String)parameters.get("status");
+               identifier     = (String)parameters.get("identifier");
+
+               Logger.info(this, "Resuming id : "+identifier);
+
+               progress       = ((new 
Integer((String)parameters.get("progress"))).intValue());
+               fileSize       = ((new 
Long((String)parameters.get("fileSize"))).longValue());
+               running        = ((new 
Boolean((String)parameters.get("running"))).booleanValue());
+               successful     = ((new 
Boolean((String)parameters.get("successful"))).booleanValue());
+
+               if(persistence == 2) {
+                       progress = 0;
+                       status = "Waiting";
+               }
+
+               return true;
+       }
+
+
+       public boolean isPersistent() {
+               return (persistence < 2);
+       }
+
 }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java    2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java    2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -2,6 +2,7 @@

 import java.util.Observer;
 import java.util.Observable;
+import java.util.HashMap;

 import thaw.core.Logger;

@@ -188,5 +189,17 @@
                return successful;
        }

+
+       public HashMap getParameters() {
+               return null;
+       }
+
+       public boolean setParameters(HashMap parameters) {
+               return true;
+       }
+
+       public boolean isPersistent() {
+               return false;
+       }
 }


Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java     2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java     2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -185,8 +185,6 @@
                        try {
                                result = "";

-                               /* result = reader.readLine(); */
-                               
                                int c = 0;

                                while(c != '\n') {

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-10 00:57:45 UTC (rev 
9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQuery.java  2006-07-10 01:21:28 UTC (rev 
9538)
@@ -1,5 +1,7 @@
 package thaw.fcp;

+import java.util.HashMap;
+
 /**
  * This interface was designed for file query (insertions / downloads)
  * but it's used sometimes for other things.
@@ -81,4 +83,19 @@
         * Query is considered as a failure is isFinished() && !isSuccesful()
         */
        public boolean isSuccessful();
+
+       /**
+        * Use to save the query in an XML file / a database / whatever.
+        * @return A HashMap : String (parameter name) -> String (parameter 
value) or null.
+        */
+       public HashMap getParameters();
+
+       /**
+        * Opposite of getParameters().
+        * @return true if successful (or ignored) ; false if not.
+        */
+       public boolean setParameters(HashMap parameters);
+
+
+       public boolean isPersistent();
 }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java   2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -105,8 +105,14 @@
                Logger.debug(this, "Adding done");
        }

+       /**
+        * will call start() function of the query.
+        */
+       public void addQueryToTheRunningQueue(FCPQuery query) {
+               addQueryToTheRunningQueue(query, true);
+       }

-       public void addQueryToTheRunningQueue(FCPQuery query) {
+       public void addQueryToTheRunningQueue(FCPQuery query, boolean 
callStart) {
                Logger.debug(this, "Adding query to the running queue ...");

                runningQueries.add(query);
@@ -114,12 +120,22 @@
                setChanged();
                notifyObservers(query);

-               query.start(this);
+               if(callStart)
+                       query.start(this);

                Logger.debug(this, "Adding done");
        }

+

+       /**
+        * *Doesn't* call stop() from the query.
+        */
+       public void moveFromRunningToPendingQueue(FCPQuery query) {
+               /* TODO */
+       }
+
+       
        public void remove(FCPQuery query) {
                runningQueries.remove(query);

@@ -274,7 +290,7 @@
                        lastId = 0;
                }

-               return (thawId+"-"+(new Integer(lastId)).toString());
+               return (thawId+"_"+(new Integer(lastId)).toString());
        }

 }

Modified: trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java    2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPWatchGlobal.java    2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -1,5 +1,7 @@
 package thaw.fcp;

+import java.util.HashMap;
+
 public class FCPWatchGlobal implements FCPQuery {
        private boolean watch;

@@ -12,6 +14,7 @@
                FCPMessage message = new FCPMessage();

                message.setMessageName("WatchGlobal");
+
                if(watch)
                        message.setValue("Enabled", "true");
                else
@@ -41,7 +44,7 @@
        }

        public int getProgression() {
-               return 0;
+               return 100;
        }

        public String getFileKey() {
@@ -71,4 +74,19 @@
        public boolean isRunning() {
                return false;
        }
+
+       public HashMap getParameters() {
+               return null;
+       }
+
+       public boolean setParameters(HashMap parameters) {
+               return true;
+       }
+
+
+       public boolean isPersistent() {
+               return false;
+       }
+
+       
 }

Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-10 00:57:45 UTC 
(rev 9537)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties       2006-07-10 01:21:28 UTC 
(rev 9538)
@@ -27,7 +27,7 @@

 thaw.common.selectFiles=Select file(s)

-thaw.common.persistence=Keep inserting
+thaw.common.persistence=Continue
 thaw.common.persistenceForever=Until the transfer completes
 thaw.common.persistenceReboot=Until the freenode reboots
 thaw.common.persistenceConnection=Until Thaw is closed


Reply via email to