From jflesch at freenetproject.org Sat Jan 5 01:04:37 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 5 Jan 2008 01:04:37 +0000 (UTC) Subject: [Thaw-dev] r16901 - in trunk/apps/Thaw/src/thaw: core fcp i18n plugins plugins/queueWatcher Message-ID: <20080105010437.9145D39208E@freenetproject.org> Author: jflesch Date: 2008-01-05 01:04:36 +0000 (Sat, 05 Jan 2008) New Revision: 16901 Modified: trunk/apps/Thaw/src/thaw/core/Main.java trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties trunk/apps/Thaw/src/thaw/i18n/thaw.properties trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java Log: Factoring of a port of the FCP implementation + improvement of the computation of the average speed and ETA of each transfer (will need testing) Modified: trunk/apps/Thaw/src/thaw/core/Main.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Main.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/core/Main.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -185,6 +185,7 @@ e.printStackTrace(); } + //Logger.warning(this, "Will try to continue anyway"); System.exit(1); } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -12,19 +12,10 @@ import thaw.core.ThawRunnable; -public class FCPClientGet extends Observable - implements Observer, FCPTransferQuery { +public class FCPClientGet extends FCPTransferQuery implements Observer { - public final static int DEFAULT_PRIORITY = 4; - public final static int DEFAULT_MAX_RETRIES = -1; - public final static int PERSISTENCE_FOREVER = 0; - public final static int PERSISTENCE_UNTIL_NODE_REBOOT = 1; - public final static int PERSISTENCE_UNTIL_DISCONNECT = 2; - - private int maxRetries = -1; private final static int PACKET_SIZE = 65536; - public final static int BLOCK_SIZE = 16384; private FCPQueueManager queueManager; private FCPQueryManager duplicatedQueryManager; @@ -33,8 +24,6 @@ private String filename = null; /* Extract from the key */ private int priority = DEFAULT_PRIORITY; private int persistence = PERSISTENCE_FOREVER; - private long startupTime = -1; - private long completionTime = -1; private boolean globalQueue = true; private String destinationDir = null; private String finalPath = null; @@ -44,24 +33,14 @@ private String identifier; - private int progress = 0; /* in pourcent */ - private long transferedBlocks = 0; private int fromTheNodeProgress = 0; - private boolean progressReliable = false; private long fileSize; private long maxSize = 0; - private boolean running = false; - private boolean successful = true; private boolean writingSuccessful = true; private boolean fatal = true; private boolean isLockOwner = false; - private long initialStart = -1; /* set at first SimpleProgress message */ - private long initialBlockNumber = -1; - private long averageSpeed = 0; /* computed at each SimpleProgress message */ - private long eta = 0; - private boolean alreadySaved = false; private boolean noDDA = false; @@ -80,10 +59,11 @@ * See setParameters(). */ public FCPClientGet(final FCPQueueManager queueManager, final HashMap parameters) { + super(false); + this.queueManager = queueManager; setParameters(parameters); - progressReliable = false; fromTheNodeProgress = 0; /* If isPersistent(), then start() won't be called, so must relisten the @@ -103,20 +83,16 @@ * (path determined only when the file is availabed ; * this file will be deleted on jvm exit) */ - public FCPClientGet(final String id, final String key, final int priority, + protected FCPClientGet(final String id, final String key, final int priority, final int persistence, final boolean globalQueue, - final String destinationDir, String status, final int progress, + final String destinationDir, String status, final int maxRetries, final FCPQueueManager queueManager) { this(key, priority, persistence, globalQueue, maxRetries, destinationDir); - progressReliable = false; - this.queueManager = queueManager; - this.progress = progress; - this.transferedBlocks = 0; this.status = status; if(status == null) { @@ -140,17 +116,7 @@ } /* /FIX */ - - successful = true; - running = true; - - if(progress < 100) { - fromTheNodeProgress = 0; - } else { - fromTheNodeProgress = 100; - progressReliable = true; - } - + setStatus(true, false, false); } @@ -177,12 +143,11 @@ final int persistence, boolean globalQueue, final int maxRetries, String destinationDir) { + super(false); - if (globalQueue && (persistence >= PERSISTENCE_UNTIL_DISCONNECT)) globalQueue = false; /* else protocol error */ - progressReliable = false; fromTheNodeProgress = 0; this.maxRetries = maxRetries; @@ -192,8 +157,6 @@ this.globalQueue = globalQueue; this.destinationDir = destinationDir; - progress = 0; - transferedBlocks = 0; fileSize = 0; attempt = 0; @@ -247,9 +210,8 @@ public boolean start(final FCPQueueManager queueManager) { attempt++; - running = true; - progress = 0; - transferedBlocks = 0; + + setStatus(true, false, false); this.queueManager = queueManager; @@ -364,16 +326,13 @@ && !(queueManager.getQueryManager().getConnection().isLocalSocket() && !noDDA) && queueManager.getQueryManager().getConnection().getAutoDownload()) { status = "Requesting file from the node"; - progress = 99; - running = true; - successful = true; + writingSuccessful = false; saveFileTo(destinationDir, false); + } else { status = "Available"; - progress = 100; - running = false; - successful = true; + setStatus(false, true, true); writingSuccessful = true; Logger.info(this, "File already existing. Not rewrited"); } @@ -384,8 +343,7 @@ } } - setChanged(); - notifyObservers(); + notifyChange(); } return; @@ -397,8 +355,7 @@ identifier = null; start(queueManager); - setChanged(); - this.notifyObservers(); + notifyChange(); return; } @@ -436,9 +393,9 @@ protocolErrorCode = Integer.parseInt(message.getValue("Code")); status = "Protocol Error ("+message.getValue("CodeDescription")+")"; - progress = 100; - running = false; - successful = false; + + setStatus(false, true, false); + fatal = true; if((message.getValue("Fatal") != null) && @@ -453,8 +410,7 @@ isLockOwner= false; } - setChanged(); - notifyObservers(); + notifyChange(); queueManager.getQueryManager().deleteObserver(this); @@ -476,9 +432,7 @@ status = "Removed"; if (!isFinished()) { - progress = 100; - running = false; - successful = false; + setStatus(false, true, false); fatal = true; } @@ -486,8 +440,7 @@ queueManager.getQueryManager().deleteObserver(this); queueManager.remove(this); - setChanged(); - notifyObservers(); + notifyChange(); return; } @@ -527,9 +480,7 @@ getFailedCode = Integer.parseInt(message.getValue("Code")); status = "Failed ("+message.getValue("CodeDescription")+")"; - progress = 100; - running = false; - successful = false; + setStatus(false, true, false); fatal = true; @@ -539,8 +490,7 @@ status = status + " (non-fatal)"; } - setChanged(); - this.notifyObservers(); + notifyChange(); return; } @@ -548,59 +498,32 @@ if ("SimpleProgress".equals(message.getMessageName())) { Logger.debug(this, "SimpleProgress !"); - progress = 0; - if (message.getValue("Total") != null && message.getValue("Required") != null && message.getValue("Succeeded") != null) { + fileSize = Long.parseLong(message.getValue("Total"))*FCPClientGet.BLOCK_SIZE; + final long total = Long.parseLong(message.getValue("Total")); final long required = Long.parseLong(message.getValue("Required")); final long succeeded = Long.parseLong(message.getValue("Succeeded")); - progress = (int) ((long)((succeeded * 98) / total)); - transferedBlocks = succeeded; - - status = "Fetching"; - + boolean progressReliable = false; + if((message.getValue("FinalizedTotal") != null) && - message.getValue("FinalizedTotal").equals("true")) { + message.getValue("FinalizedTotal").equals("true")) { progressReliable = true; } - successful = true; - running = true; - - /* computing average speed & ETA */ - long timeElapsed = 0; - long blocks = 0; - - if (initialStart < 0) { - /* first simple progress message */ - initialStart = (new java.util.Date()).getTime(); - initialBlockNumber = transferedBlocks; - } - - if (initialStart > 0) { - timeElapsed = (new java.util.Date()).getTime() - initialStart; - blocks = transferedBlocks - initialBlockNumber; - } - - if (blocks != 0 && timeElapsed != 0) { - averageSpeed = (blocks * FCPClientGet.BLOCK_SIZE * 1000) / timeElapsed; - } else { - averageSpeed = 0; /* == unknown */ - } - - if (succeeded >= required || averageSpeed <= 0) - eta = 0; /* unknown */ - else { - eta = ((required - succeeded) * BLOCK_SIZE) / averageSpeed; - } + status = "Fetching"; + setBlockNumbers(required, total, succeeded, progressReliable); + setStatus(true, false, false); + + } else { + setBlockNumbers(-1, -1, -1, false); } - setChanged(); - this.notifyObservers(); + notifyChange(); return; } @@ -610,42 +533,33 @@ fileSize = message.getAmountOfDataWaiting(); - running = true; - successful = true; - progress = 99; - startupTime = Long.valueOf(message.getValue("StartupTime")).longValue(); - completionTime = Long.valueOf(message.getValue("CompletionTime")).longValue(); + setStatus(true, false, false); + setStartupTime(Long.valueOf(message.getValue("StartupTime")).longValue()); + setCompletionTime(Long.valueOf(message.getValue("CompletionTime")).longValue()); + status = "Writing to disk"; Logger.info(this, "Receiving file ..."); - setChanged(); - this.notifyObservers(); + notifyChange(); - successful = true; - if(fetchDirectly(queryManager.getConnection(), fileSize, true)) { + Logger.info(this, "File received"); + writingSuccessful = true; - successful = true; status = "Available"; } else { Logger.warning(this, "Unable to fetch correctly the file. This may create problems on socket"); - if (writingSuccessful) { /* if we forgot to set the correct values */ - writingSuccessful = false; - successful = false; - status = "Error while receveing the file"; - } + writingSuccessful = false; + status = "Error while receveing the file"; } - Logger.info(this, "File received"); - if (duplicatedQueryManager != null) duplicatedQueryManager.getConnection().removeFromWriterQueue(); isLockOwner= false; + + setStatus(false, true, writingSuccessful); - running = false; - progress = 100; - queryManager.deleteObserver(this); if (queryManager != queueManager.getQueryManager()) { @@ -654,20 +568,11 @@ duplicatedQueryManager = null; } - setChanged(); - notifyObservers(); + notifyChange(); - return; } - if ("PersistentGet".equals(message.getMessageName())) { - Logger.debug(this, "PersistentGet !"); - setChanged(); - notifyObservers(); - return; - } - Logger.warning(this, "Unknow message : "+message.getMessageName() + " !"); } @@ -768,12 +673,12 @@ Logger.info(this, "Waiting for socket ..."); status = "Waiting for socket availability ..."; - progress = 99; - running = true; + fromTheNodeProgress = 1; /* display issue */ + + setStatus(true, false, false); - setChanged(); - this.notifyObservers(); - + notifyChange(); + UnlockWaiter uw = new UnlockWaiter(this, duplicatedQueryManager.getConnection(), dir); final Thread fork = new ThawThread(uw, @@ -793,11 +698,11 @@ destinationDir = dir; status = "Requesting file"; - progress = 99; - running = true; - setChanged(); - this.notifyObservers(); + fromTheNodeProgress = 1; /* display issue */ + setStatus(true, false, false); + notifyChange(); + if(destinationDir == null) { Logger.warning(this, "saveFileTo() : Wtf ?"); } @@ -880,7 +785,7 @@ Logger.error(this, "Socket closed, damn !"); status = "Unable to read data from the node"; writingSuccessful = false; - successful = false; + setStatus(false, true, false); try { outputStream.close(); } catch(java.io.IOException ex) { @@ -898,7 +803,7 @@ Logger.error(this, "Unable to write file on disk ... out of space ? : "+e.toString()); status = "Unable to fetch / disk probably full !"; writingSuccessful = false; - successful = false; + setStatus(false, true, false); try { outputStream.close(); } catch(java.io.IOException ex) { @@ -915,8 +820,12 @@ if( System.currentTimeMillis() >= (startTime+3000)) { status = "Writing to disk"; fromTheNodeProgress = (int) (((origSize-size) * 100) / origSize); - setChanged(); - this.notifyObservers(); + + if (fromTheNodeProgress <= 0) /* display issue */ + fromTheNodeProgress = 1; + + notifyChange(); + startTime = System.currentTimeMillis(); } @@ -969,7 +878,7 @@ queueManager.getQueryManager().writeMessage(stopMessage); - running = false; + setStatus(false, isFinished(), isSuccessful()); return true; } @@ -981,14 +890,12 @@ Logger.info(this, "Pausing fetching of the key : "+getFileKey()); removeRequest(); + + setStatus(false, false, false); - progress = 0; - running = false; - successful = false; status = "Delayed"; - setChanged(); - this.notifyObservers(); + notifyChange(); return true; @@ -1001,18 +908,14 @@ return false; boolean wasFinished = isFinished(); + + setStatus(false, true, isSuccessful()); - if (progress < 100) - successful = false; - - progress = 100; - running = false; fatal = true; status = "Stopped"; if (!restartIfFailed && !wasFinished) { - setChanged(); - this.notifyObservers(); + notifyChange(); } return true; @@ -1051,8 +954,7 @@ priority = prio; - setChanged(); - this.notifyObservers(); + notifyChange(); } public int getQueryType() { @@ -1063,26 +965,6 @@ return status; } - public int getProgression() { - return progress; - } - - - public long getAverageSpeed() { - return averageSpeed; - } - - public long getETA() { - return eta; - } - - public boolean isProgressionReliable() { - if((progress == 0) || (progress >= 99)) - return true; - - return progressReliable; - } - public String getFileKey() { // TODO : It's fix due to Frost // => to remove when it will become unneeded @@ -1096,13 +978,6 @@ return key; } - public boolean isFinished() { - if(progress >= 100) - return true; - - return false; - } - public long getFileSize() { return fileSize; } @@ -1136,7 +1011,7 @@ if(x == 0) { /* We suppose it's a restart */ - progress = 0; + setBlockNumbers(-1, -1, -1, false); } } @@ -1144,22 +1019,14 @@ return maxRetries; } - public boolean isSuccessful() { - return successful; - } - public boolean isWritingSuccessful() { return writingSuccessful; } public boolean isFatallyFailed() { - return ((!successful) && fatal); + return ((!isSuccessful()) && fatal); } - public boolean isRunning() { - return running; - } - public HashMap getParameters() { final HashMap result = new HashMap(); @@ -1174,10 +1041,9 @@ result.put("status", status); result.put("Identifier", identifier); - result.put("Progress", Integer.toString(progress)); result.put("FileSize", Long.toString(fileSize)); - result.put("Running", Boolean.toString(running)); - result.put("Successful", Boolean.toString(successful)); + result.put("Running", Boolean.toString(isRunning())); + result.put("Successful", Boolean.toString(isSuccessful())); result.put("MaxRetries", Integer.toString(maxRetries)); return result; @@ -1199,16 +1065,16 @@ identifier = (String)parameters.get("Identifier"); Logger.info(this, "Resuming id : "+identifier); - - progress = Integer.parseInt((String)parameters.get("Progress")); fileSize = Long.parseLong((String)parameters.get("FileSize")); - running = Boolean.valueOf((String)parameters.get("Running")).booleanValue(); - successful = Boolean.valueOf((String)parameters.get("Successful")).booleanValue(); + boolean running = Boolean.valueOf((String)parameters.get("Running")).booleanValue(); + boolean successful = Boolean.valueOf((String)parameters.get("Successful")).booleanValue(); maxRetries = Integer.parseInt((String)parameters.get("MaxRetries")); + + setStatus(running, !running, successful); if((persistence == PERSISTENCE_UNTIL_DISCONNECT) && !isFinished()) { - progress = 0; - running = false; + setStatus(false, false, false); + setBlockNumbers(-1, -1, -1, false); status = "Waiting"; } @@ -1236,11 +1102,6 @@ return fromTheNodeProgress; } - public void notifyChange() { - setChanged(); - notifyObservers(); - } - public int getGetFailedCode() { return getFailedCode; } @@ -1249,13 +1110,4 @@ return protocolErrorCode; } - - public long getCompletionTime() { - return completionTime; - } - - - public long getStartupTime() { - return startupTime; - } } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -16,17 +16,8 @@ /** * Allow to insert a simple file. */ -public class FCPClientPut extends Observable implements FCPTransferQuery, Observer { - public final static int DEFAULT_PRIORITY = 4; +public class FCPClientPut extends FCPTransferQuery implements Observer { - public final static int KEY_TYPE_CHK = 0; - public final static int KEY_TYPE_KSK = 1; - public final static int KEY_TYPE_SSK = 2; /* also USK */ - - public final static int PERSISTENCE_FOREVER = 0; - public final static int PERSISTENCE_UNTIL_NODE_REBOOT = 1; - public final static int PERSISTENCE_UNTIL_DISCONNECT = 2; - private FCPQueueManager queueManager; private File localFile; @@ -37,31 +28,19 @@ private String privateKey; /* must finish by '/' (cf SSKKeypair) */ private String publicKey; /* publicKey contains the filename etc */ private int priority = DEFAULT_PRIORITY; - private long startupTime = -1; - private long completionTime = -1; private boolean global = true; private int persistence = PERSISTENCE_FOREVER; private boolean getCHKOnly = false; - private int progress = 0; - private long transferedBlocks = 0; private int toTheNodeProgress = 0; private String status; private int attempt = 0; private String identifier; - private boolean running = false; - private boolean finished = false; - private boolean successful = false; private boolean fatal = true; private boolean sending = false; - private long initialStart = -1; /* set at the first SimpleProgress message */ - private long initialBlockNumber = -1; - private long averageSpeed = 0; /* recomputed at each simple progress message */ - private long eta = 0; - private FCPGenerateSSK sskGenerator; private boolean lockOwner = false; @@ -77,6 +56,8 @@ * To resume query from file. (see core.QueueKeeper) */ public FCPClientPut(final FCPQueueManager queueManager, final HashMap parameters) { + super(true); + this.queueManager = queueManager; setParameters(parameters); } @@ -104,6 +85,8 @@ final String privateKey, final int priority, final boolean global, final int persistence, final boolean getCHKOnly) { + super(true); + this.getCHKOnly = getCHKOnly; localFile = file; @@ -132,15 +115,11 @@ this.global = global; this.persistence = persistence; status = "Waiting"; - progress = 0; - transferedBlocks = 0; + setStatus(false, false, false); + setBlockNumbers(-1, -1, -1, true); attempt = 0; identifier = null; - - running = false; - finished = false; - successful = false; fatal = true; } @@ -149,12 +128,12 @@ * Used for resuming from a PersistentPut. * @param publicKey : Complete key (with filename, etc) */ - public FCPClientPut(final String identifier, final String publicKey, + protected FCPClientPut(final String identifier, final String publicKey, final int priority, final int persistence, final boolean global, final String filePath, final String fileName, final String status, final int progress, final long fileSize, final FCPQueueManager queueManager) { + super(true); - if(fileSize > 0) this.fileSize = fileSize; @@ -184,14 +163,11 @@ this.global = global; this.persistence = persistence; - - this.progress = progress; - this.transferedBlocks = 0; - + + setBlockNumbers(-1, -1, -1, true); + setStatus(true, false, false); + this.status = status; - running = true; - finished = false; - successful = false; fatal = true; } @@ -205,27 +181,22 @@ Logger.warning(this, "Empty or unreachable file:"+localFile.getPath()); status = "EMPTY OR UNREACHABLE FILE"; + + setStatus(false, true, false); - successful = false; fatal = true; - finished = true; - running = false; - setChanged(); - this.notifyObservers(); - + notifyChange(); + return false; } queueManager.getQueryManager().addObserver(this); + + setBlockNumbers(-1, -1, -1, false); + setStatus(true, false, false); - progress = 0; - transferedBlocks = 0; - finished = false; - successful = false; - running = true; - sha = null; if (queueManager.getQueryManager().getConnection().isLocalSocket() && localFile != null) { @@ -352,7 +323,8 @@ } public boolean continueInsert() { - running = true; /* Here we are really running */ + setStatus(true, false, false); + sending = true; final FCPConnection connection = queueManager.getQueryManager().getConnection(); @@ -440,34 +412,28 @@ connection.removeFromWriterQueue(); lockOwner = false; sending = false; - - progress = 0; - transferedBlocks = 0; + setBlockNumbers(-1, -1, -1, true); + if(ret == true) { - successful = false; + setStatus(true, false, false); fatal = true; - finished = false; - running = true; if (!getCHKOnly) status = "Inserting"; else status = "Computing"; - setChanged(); - this.notifyObservers(); + notifyChange(); return true; } else { - successful = false; - finished = true; - running = false; + setStatus(false, true, false); status = "Unable to send the file to the node"; - setChanged(); - this.notifyObservers(); + notifyChange(); + return false; } @@ -554,16 +520,15 @@ status = "Stopped"; - if (!finished) - successful = false; + if (wasFinished) + setStatus(false, true, false); + else + setStatus(false, true, isSuccessful()); - finished = true; fatal= true; - running = false; if (!wasFinished) { - setChanged(); - this.notifyObservers(); + notifyChange(); } return true; @@ -576,8 +541,13 @@ if (o == sha) { if(sha.isFinished()) startProcess(); - else - progress = sha.getProgression(); + else { + status = "Computing hash"; + setBlockNumbers(100, 100, sha.getProgression(), true); + } + + notifyChange(); + return; } @@ -585,8 +555,7 @@ privateKey = sskGenerator.getPrivateKey(); publicKey = sskGenerator.getPublicKey() + "/" + name; - setChanged(); - notifyObservers(); + notifyChange(); startInsert(); return; @@ -602,9 +571,7 @@ if("URIGenerated".equals( msg.getMessageName() ) || "PutFetchable".equals( msg.getMessageName() )) { - running = true; - finished = false; - successful = false; + setStatus(true, false, false); publicKey = msg.getValue("URI"); @@ -614,17 +581,14 @@ if(getCHKOnly) { status = "CHK"; + + setStatus(false, true, true); - progress = 100; toTheNodeProgress = 100; - running = false; - finished = true; - successful = true; fatal = false; sending = false; - setChanged(); - this.notifyObservers(); + notifyChange(); queueManager.getQueryManager().deleteObserver(this); return; } @@ -637,12 +601,10 @@ } if("PutSuccessful".equals(msg.getMessageName())) { - successful = true; - finished = true; - running = false; + setStatus(false, true, true); - startupTime = Long.valueOf(msg.getValue("StartupTime")).longValue(); - completionTime = Long.valueOf(msg.getValue("CompletionTime")).longValue(); + setStartupTime(Long.valueOf(msg.getValue("StartupTime")).longValue()); + setCompletionTime(Long.valueOf(msg.getValue("CompletionTime")).longValue()); publicKey = msg.getValue("URI"); if (publicKey == null) { @@ -667,8 +629,6 @@ status = "Finished"; - progress = 100; - setChanged(); this.notifyObservers(); return; @@ -685,9 +645,7 @@ if ("PersistentRequestRemoved".equals(msg.getMessageName())) { if (!isFinished()) { - successful = false; - running = false; - finished = true; + setStatus(false, true, false); fatal = true; status = "Removed"; } @@ -696,17 +654,13 @@ queueManager.getQueryManager().deleteObserver(this); queueManager.remove(this); - setChanged(); - notifyObservers(); + notifyChange(); return; } if ("PutFailed".equals( msg.getMessageName() )) { - - successful = false; - running = false; - finished = true; + setStatus(false, true, false); fatal = true; putFailedCode = Integer.parseInt(msg.getValue("Code")); @@ -725,17 +679,13 @@ Logger.warning(this, "Insertion error : collision"); Logger.notice(this, msg.toString()); - setChanged(); - this.notifyObservers(); + notifyChange(); return; } if("ProtocolError".equals( msg.getMessageName() )) { - - successful = false; - running = false; + setStatus(false, true, false); fatal = true; - finished = true; if(lockOwner) { lockOwner = false; @@ -750,111 +700,78 @@ fatal = false; } - setChanged(); - this.notifyObservers(); + notifyChange(); return; } - if(msg.getMessageName().equals("IdentifierCollision")) { + if("IdentifierCollision".equals(msg.getMessageName())) { status = "Identifier collision"; start(queueManager); /* et hop ca repart :) */ return; } - if(msg.getMessageName().equals("PersistentPut")) { + if("PersistentPut".equals(msg.getMessageName())) { status = "Inserting"; //publicKey = msg.getValue("URI"); return; } - if(msg.getMessageName().equals("StartedCompression")) { + if("StartedCompression".equals(msg.getMessageName())) { status = "Compressing"; + + notifyChange(); - setChanged(); - this.notifyObservers(); - return; } - if(msg.getMessageName().equals("FinishedCompression")) { + if("FinishedCompression".equals(msg.getMessageName())) { status = "Inserting"; if((msg.getValue("OrigSize") == null) || (msg.getValue("CompressedSize") == null)) { - setChanged(); - this.notifyObservers(); + notifyChange(); return; } final int rate = (int)( ((new Long(msg.getValue("OrigSize"))).longValue() * 100) / (new Long(msg.getValue("CompressedSize"))).longValue() ); - Logger.info(this, "Compression: "+ Integer.toString(rate)); + Logger.notice(this, "Compression rate: "+ Integer.toString(rate)+" %"); - setChanged(); - this.notifyObservers(); + notifyChange(); return; } - if(msg.getMessageName().equals("SimpleProgress")) { + if("SimpleProgress".equals(msg.getMessageName())) { if((msg.getValue("Total") != null) && (msg.getValue("Succeeded") != null)) { final long total = (new Long(msg.getValue("Total"))).longValue(); - //long required = (new Long(msg.getValue("Required"))).longValue(); + long required = (new Long(msg.getValue("Required"))).longValue(); final long succeeded = (new Long(msg.getValue("Succeeded"))).longValue(); - - progress = (int)((succeeded * 99) / total); - transferedBlocks = succeeded; - - running = true; - finished = false; - successful = false; - /* computing average speed & ETA */ - long timeElapsed = 0; - long blocks = 0; - - if (initialStart < 0) { - /* first simple progress message */ - initialStart = (new java.util.Date()).getTime(); - initialBlockNumber = transferedBlocks; - } - - if (initialStart > 0) { - timeElapsed = (new java.util.Date()).getTime() - initialStart; - blocks = transferedBlocks - initialBlockNumber; - } - - if (blocks != 0 && timeElapsed != 0) { - averageSpeed = (blocks * FCPClientGet.BLOCK_SIZE * 1000) / timeElapsed; - } else { - averageSpeed = 0; /* == unknown */ - } + setBlockNumbers(required, total, succeeded, true); + setStatus(true, false, false); - if (succeeded >= total || averageSpeed <= 0) - eta = 0; /* unknown */ - else { - eta = ((total - succeeded) * FCPClientGet.BLOCK_SIZE) / averageSpeed; - } - if (!getCHKOnly) status = "Inserting"; else status = "Computing"; - setChanged(); - this.notifyObservers(); + notifyChange(); } return; } - Logger.notice(this, "Unknow message."); + if (msg.getMessageName() == null) + Logger.notice(this, "Unknow message (name == null)"); + else + Logger.notice(this, "Unkwown message: "+msg.getMessageName()); return; } @@ -867,28 +784,26 @@ } public boolean pause(final FCPQueueManager queueManager) { - progress = 0; + /* + * TODO : lower priority ? + */ + + setStatus(false, false, false); status = "Delayed"; - running = false; - successful = false; - finished = false; fatal = true; removeRequest(); + notifyChange(); + return false; } public boolean removeRequest() { - setChanged(); - this.notifyObservers(); - if(sending) { Logger.notice(this, "Can't interrupt while sending to the node ..."); status = status + " (can't interrupt while sending to the node)"; - setChanged(); - this.notifyObservers(); return false; } @@ -904,7 +819,7 @@ queueManager.getQueryManager().writeMessage(msg); - running = false; + setStatus(false, false, false); queueManager.getQueryManager().deleteObserver(this); } else { @@ -945,8 +860,7 @@ priority = prio; - setChanged(); - this.notifyObservers(); + notifyChange(); } @@ -955,22 +869,6 @@ return status; } - public int getProgression() { - return progress; - } - - public long getAverageSpeed() { - return averageSpeed; - } - - public long getETA() { - return eta; - } - - public boolean isProgressionReliable() { - return true; - } - /** * @return public key */ @@ -1048,20 +946,8 @@ return -1; } - public boolean isRunning() { - return running; - } - - public boolean isFinished() { - return finished; - } - - public boolean isSuccessful() { - return successful; - } - public boolean isFatallyFailed() { - return ((!successful) && fatal); + return ((!isSuccessful()) && fatal); } public HashMap getParameters() { @@ -1079,16 +965,14 @@ result.put("global", Boolean.toString(global)); result.put("persistence", Integer.toString(persistence)); - result.put("progress", Integer.toString(progress)); - result.put("status", status); result.put("attempt", Integer.toString(attempt)); if(identifier != null) result.put("identifier", identifier); - result.put("running", Boolean.toString(running)); - result.put("successful", Boolean.toString(successful)); - result.put("finished", Boolean.toString(finished)); + result.put("running", Boolean.toString(isRunning())); + result.put("successful", Boolean.toString(isSuccessful())); + result.put("finished", Boolean.toString(isFinished())); return result; } @@ -1117,7 +1001,6 @@ global = Boolean.valueOf((String)parameters.get("global")).booleanValue(); persistence = Integer.parseInt((String)parameters.get("persistence")); - progress = Integer.parseInt(((String)parameters.get("progress"))); status = (String)parameters.get("status"); attempt = Integer.parseInt((String)parameters.get("attempt")); @@ -1125,12 +1008,14 @@ if((identifier == null) || identifier.equals("")) identifier = null; - running = Boolean.valueOf((String)parameters.get("running")).booleanValue(); - successful = Boolean.valueOf((String)parameters.get("successful")).booleanValue(); - finished = Boolean.valueOf((String)parameters.get("finished")).booleanValue(); + boolean running = Boolean.valueOf((String)parameters.get("running")).booleanValue(); + boolean successful = Boolean.valueOf((String)parameters.get("successful")).booleanValue(); + boolean finished = Boolean.valueOf((String)parameters.get("finished")).booleanValue(); + + setStatus(running, finished, successful); if ((persistence == PERSISTENCE_UNTIL_DISCONNECT) && !isFinished()) { - progress = 0; + setStatus(false, false, false); status = "Waiting"; } @@ -1189,12 +1074,6 @@ } - public void notifyChange() { - setChanged(); - notifyObservers(); - } - - /** * @return -1 if none */ @@ -1202,11 +1081,4 @@ return putFailedCode; } - public long getStartupTime() { - return startupTime; - } - - public long getCompletionTime() { - return completionTime; - } } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPQueryManager.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -86,7 +86,7 @@ result.loadFromRawMessage(whatsUp); - if(withData) { + if(withData && result.getValue("DataLength") != null) { final long dataWaiting = (new Long(result.getValue("DataLength"))).longValue(); connection.setRawDataWaiting(dataWaiting); Logger.info(this, "Achtung data: "+(new Long(dataWaiting)).toString()); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueLoader.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -74,7 +74,7 @@ final FCPClientGet clientGet = new FCPClientGet(msg.getValue("Identifier"), msg.getValue("URI"), // key priority, persistence, global, - destinationDir, "Fetching", 0, + destinationDir, "Fetching", -1, queueManager); if(queueManager.addQueryToTheRunningQueue(clientGet, false)) Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -385,7 +385,7 @@ } - public void schedule() { + private void schedule() { /* We count the running query to see if there is an empty slot */ int runningInsertions = 0; @@ -448,6 +448,17 @@ } } + + + private void updateStats() + { + synchronized(runningQueries) { + for (Iterator it = runningQueries.iterator(); it.hasNext(); ) { + FCPTransferQuery query = (FCPTransferQuery)it.next(); + query.updateStats(); + } + } + } public void run() { @@ -459,7 +470,7 @@ while(!stopThread) { try { - Thread.sleep(500); + Thread.sleep(1000); } catch(final java.lang.InterruptedException e) { /* We don't care */ } @@ -472,7 +483,12 @@ && !queryManager.getConnection().isWriting() && queueCompleted) schedule(); + + if(queryManager.getConnection().isConnected() + && !queryManager.getConnection().isWriting()) + updateStats(); + } catch(final Exception e) { Logger.error(this, "EXCEPTION FROM FCP SCHEDULER : "+e.toString()+ " ; "+e.getMessage()); e.printStackTrace(); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -1,6 +1,7 @@ package thaw.fcp; import java.util.HashMap; +import java.util.Observable; /** * Transfer query == fetch / insert query. These queries must be able to @@ -8,19 +9,261 @@ * Functions returning status of the request may be call frequently, so try to make them fast. * Some methods are only useful for downloads, and some for insertions, so check getQueryType() before calling them. */ -public interface FCPTransferQuery extends FCPQuery { +public abstract class FCPTransferQuery extends Observable implements FCPQuery { + public final static int BLOCK_SIZE = 16384; + public final static int KEY_TYPE_CHK = 0; + public final static int KEY_TYPE_KSK = 1; + public final static int KEY_TYPE_SSK = 2; /* also USK */ + + public final static int DEFAULT_PRIORITY = 4; + public final static int DEFAULT_MAX_RETRIES = -1; + public final static int PERSISTENCE_FOREVER = 0; + public final static int PERSISTENCE_UNTIL_NODE_REBOOT = 1; + public final static int PERSISTENCE_UNTIL_DISCONNECT = 2; + + private boolean insertion = false; + + /* last known values */ + private long requiredBlocks = -1; + private long totalBlocks = -1; + private long transferedBlocks = -1; + private boolean reliable = false; + + /* reminder to do the maths */ + public final static int NMB_REMINDERS = 60; /* one per seconde, so 1 minute here */ + private long[] requiredBlocksPast = new long[NMB_REMINDERS]; + private long[] totalBlocksPast = new long[NMB_REMINDERS]; + private long[] transferedBlocksPast = new long[NMB_REMINDERS]; + private int currentReadCursor = 0; /* read Cursor in the *past arrays */ + private int currentWriteCursor = 0; /* write Cursor in the *past arrays */ + + private boolean running = false; + private boolean finished = false; + private boolean successful = false; + + private long averageSpeed = 0; + private long ETA = 0; + + private long startupTime = -1; + private long completionTime = -1; + + + public FCPTransferQuery(boolean insertion) { + this.insertion = insertion; + reliable = insertion; + + for (int i = 0 ; i < NMB_REMINDERS ; i++) { + requiredBlocksPast[i] = -1; + totalBlocksPast[i] = -1; + transferedBlocksPast[i] = -1; + } + } + + protected void setBlockNumbers(long required, long total, long transfered, boolean reliable) { + synchronized(this) { + requiredBlocks = required; + totalBlocks = total; + transferedBlocks = transfered; + this.reliable = reliable; + } + } + + protected void setStatus(boolean running, boolean finished, boolean successful) { + this.running = running; + this.finished = ((!running) ? finished : false); + this.successful = (finished ? successful : false); + } + /** + * Called about each second by the queueManager. Used to make the average speed and the ETA + * as precise as possible + */ + protected void updateStats() + { + synchronized(this) { + /* computing average speed & ETA */ + + if (completionTime >= 0 && startupTime >= 0 && finished) + { /* wooch, final values ! :) */ + long blocks = (insertion) ? totalBlocks : requiredBlocks; + long diffTime = (completionTime - startupTime) / 1000; + + if (blocks <= 0 || diffTime <= 0) + return; + + averageSpeed = (blocks * BLOCK_SIZE) / diffTime; + ETA = diffTime; /* ok, it's a little bit icky, but it does the trick :) */ + + return; + } + + + if (!running || finished) + return; + + if (currentReadCursor != currentWriteCursor) { + /* reminder : we have one second between each slot of the *Past arrays */ + long diffTimeSec = ((currentWriteCursor < currentReadCursor) ? currentWriteCursor+NMB_REMINDERS : currentWriteCursor) - currentReadCursor; + long diffBlocks = transferedBlocks - transferedBlocksPast[currentReadCursor]; + long remainingBlocks = (insertion ? (totalBlocks - transferedBlocks) : (requiredBlocks - transferedBlocks)); + + if (diffTimeSec <= 0 /* we never know */ || diffBlocks <= 0 || remainingBlocks == 0) { + averageSpeed = 0; + ETA = 0; + } else { + double averageSpeedInBlocksPerSecond = diffBlocks / diffTimeSec; + + averageSpeed = (long)(averageSpeedInBlocksPerSecond * (double)BLOCK_SIZE); + ETA = (long)(((double)remainingBlocks) / averageSpeedInBlocksPerSecond); + } + + if (currentWriteCursor == currentReadCursor-1 + || (currentWriteCursor == NMB_REMINDERS-1 && currentReadCursor == 0)) { + /* the currentWriteCursor will push the currentReadCursor */ + currentReadCursor++; + if (currentReadCursor >= NMB_REMINDERS) + currentReadCursor = 0; + } + + notifyChange(); + } + + /* updating known values */ + + requiredBlocksPast[currentWriteCursor] = requiredBlocks; + totalBlocksPast[currentWriteCursor] = totalBlocks; + transferedBlocksPast[currentWriteCursor] = transferedBlocks; + + currentWriteCursor++; + + if (currentWriteCursor >= NMB_REMINDERS) + currentWriteCursor = 0; + } + } + + + /** + * @return in bytes / s (0 = unknown) + */ + public long getAverageSpeed() + { + return averageSpeed; + } + + /** + * @return in second + */ + public long getETA() + { + return ETA; + } + + /** + * When did the request start ? + */ + public long getStartupTime() + { + return startupTime; + } + + protected void setStartupTime(long startupTime) + { + this.startupTime = startupTime; + } + + /** + * When did the request finish ? + * @return -1 if not finished + */ + public long getCompletionTime() + { + return completionTime; + } + + protected void setCompletionTime(long time) + { + this.completionTime = time; + } + + /** + * Informal. + * Is about the transfer on the network. + * In pourcents. + */ + public int getProgression() + { + if (finished) + return 100; + + if (transferedBlocks < 0) + return 0; + + if (insertion) { + if (totalBlocks <= 0) return 0; + + return (int)(transferedBlocks * 100 / totalBlocks); + } else { + if (requiredBlocks <= 0) return 0; + + return (int)(transferedBlocks * 100 / requiredBlocks); + } + } + + public boolean isProgressionReliable() + { + if (getProgression() == 0) + return true; + + return reliable; + } + + + public boolean isRunning() + { + return running; + } + + public boolean isFinished() + { + return finished; + } + + /** + * If unknow, return false. + * Query is considered as a failure is isFinished() && !isSuccesful() + */ + public boolean isSuccessful() + { + return successful; + } + + public void notifyChange() { + setChanged(); + notifyObservers(); + } + + + /**** To implement : ****/ + + + + + /** * Stop the transfer, but don't consider it as failed. * @param queueManager QueueManager gives access to QueryManager; */ - public boolean pause(FCPQueueManager queueManager); + public abstract boolean pause(FCPQueueManager queueManager); + /** + * Should only be called if isFinished() == true && isSuccessful() == false + */ + public abstract boolean isFatallyFailed(); /** * Only if persistent. Remove it from the queue. */ - public boolean removeRequest(); + public abstract boolean removeRequest(); /** * Used by the QueueManager only. @@ -30,35 +273,25 @@ * -1 = No priority * Always between -1 and 6. */ - public int getThawPriority(); + public abstract int getThawPriority(); /** * Currently the same than Thaw priority. */ - public int getFCPPriority(); + public abstract int getFCPPriority(); - /** - * When did the request start ? - */ - public long getStartupTime(); /** - * When did the request finish ? - * @return -1 if not finished - */ - public long getCompletionTime(); - - /** * call updatePersistentRequest() after to apply the change (Please note that the change * will be visible even if you don't call it). */ - public void setFCPPriority(int prio); + public abstract void setFCPPriority(int prio); /** * you can call it after saveFileTo() to update the clientToken. * @param clientToken tell if the clientToken must be updated or just the priority */ - public void updatePersistentRequest(boolean clientToken); + public abstract void updatePersistentRequest(boolean clientToken); /** * Informal. @@ -66,102 +299,75 @@ * status of the query. * @return can be null (== "Waiting") */ - public String getStatus(); + public abstract String getStatus(); /** * For persistent request only. * @param dir Directory */ - public boolean saveFileTo(String dir); + public abstract boolean saveFileTo(String dir); - /** - * Informal. - * Is about the transfer on the network. - * In pourcents. - */ - public int getProgression(); - public boolean isProgressionReliable(); - /** * Is about the transfer between the node and thaw. */ - public int getTransferWithTheNodeProgression(); + public abstract int getTransferWithTheNodeProgression(); - /** - * @return in bytes / s (0 = unknown) - */ - public long getAverageSpeed(); - /** - * @return in second - */ - public long getETA(); /** * Informal. * Gives *public* final key only. * @return can be null */ - public String getFileKey(); + public abstract String getFileKey(); /** * Informal. In bytes. * @return can be -1 */ - public long getFileSize(); + public abstract long getFileSize(); /** * Where is the file on the disk. */ - public String getPath(); + public abstract String getPath(); /** * @return can return -1 */ - public int getAttempt(); + public abstract int getAttempt(); - public void setAttempt(int x); + public abstract void setAttempt(int x); /** * @return can return -1 */ - public int getMaxAttempt(); + public abstract int getMaxAttempt(); - public boolean isRunning(); - public boolean isFinished(); - /** - * If unknow, return false. - * Query is considered as a failure is isFinished() && !isSuccesful() - */ - public boolean isSuccessful(); - public boolean isFatallyFailed(); - - /** * 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(); + public abstract HashMap getParameters(); /** * Opposite of getParameters(). * @return true if successful (or ignored) ; false if not. */ - public boolean setParameters(HashMap parameters); + public abstract boolean setParameters(HashMap parameters); - public boolean isPersistent(); - public boolean isGlobal(); + public abstract boolean isPersistent(); + public abstract boolean isGlobal(); /** * @return can be null (if non active, or meaningless). */ - public String getIdentifier(); + public abstract String getIdentifier(); - public String getFilename(); + public abstract String getFilename(); - public void notifyChange(); } Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2008-01-05 01:04:36 UTC (rev 16901) @@ -167,6 +167,7 @@ thaw.plugin.queueWatcher.downloadFailed=Le t?l?chargement de 'X' a ?chou? thaw.plugin.queueWatcher.insertionSuccessful='X' ins?r? avec succ?s thaw.plugin.queueWatcher.insertionFailed=L'insertion de 'X' a ?chou? +thaw.plugin.queueWatcher.totalTime=Temps total: thaw.plugin.insert.fileToInsert=Fichier ? ins?rer thaw.plugin.insert.filesToInsert=Fichier(s) ? ins?rer Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2008-01-05 01:04:36 UTC (rev 16901) @@ -166,8 +166,8 @@ thaw.plugin.queueWatcher.downloadFailed=Download of 'X' has failed thaw.plugin.queueWatcher.insertionSuccessful='X' successfully inserted thaw.plugin.queueWatcher.insertionFailed=Insertion of 'X' has failed +thaw.plugin.queueWatcher.totalTime=Total time: - thaw.plugin.insert.fileToInsert=File to insert thaw.plugin.insert.filesToInsert=File(s) to insert thaw.plugin.insert.selectKey=Select the kind of key wanted Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2008-01-05 01:04:36 UTC (rev 16901) @@ -167,6 +167,7 @@ thaw.plugin.queueWatcher.downloadFailed=Le t\u00e9l\u00e9chargement de 'X' a \u00e9chou\u00e9 thaw.plugin.queueWatcher.insertionSuccessful='X' ins\u00e9r\u00e9 avec succ\u00e8s thaw.plugin.queueWatcher.insertionFailed=L'insertion de 'X' a \u00e9chou\u00e9 +thaw.plugin.queueWatcher.totalTime=Temps total: thaw.plugin.insert.fileToInsert=Fichier \u00e0 ins\u00e9rer thaw.plugin.insert.filesToInsert=Fichier(s) \u00e0 ins\u00e9rer Modified: trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/plugins/IndexBrowser.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -24,12 +24,12 @@ /* Thaw index */ "USK at p-uFAWUomLm37MCQLu3r67-B8e6yF1kS4q2v0liM1Vk,"+ "h0MWqM~lF0Bec-AIv445PLn06ams9-RFbnwO6Cm2Snc,AQACAAE"+ - "/Thaw/2/Thaw.frdx", + "/Thaw/12/Thaw.frdx", /* publicly writable index */ "USK at 61m2WMJEA9pyQQQ-hjGN8lIM2xToNJHyacJ8ZPB9JCQ,"+ "5aEPJBhwIV~HpGIG8YTpKSB39WCGgd0BUNWZ012745Y,AQACAAE"+ - "/Publicly%20writable%20index/35/Publicly writable index.frdx" + "/Publicly%20writable%20index/102/Publicly writable index.frdx" }; private Core core; Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-05 00:11:32 UTC (rev 16900) +++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-05 01:04:36 UTC (rev 16901) @@ -175,7 +175,7 @@ } else if( ((isForInsertions && (column == 6)) || (!isForInsertions && (column == 7)) ) ) { - if (query.isFinished() || !query.isProgressionReliable()) + if (!query.isProgressionReliable()) return ""; long remaining = query.getETA(); @@ -183,7 +183,10 @@ if (remaining <= 0) return ""; - return GUIHelper.getPrintableTime(remaining); + if (!query.isFinished()) + return GUIHelper.getPrintableTime(remaining); + else + return I18n.getMessage("thaw.plugin.queueWatcher.totalTime") + " "+GUIHelper.getPrintableSize(remaining); } return null; From jflesch at freenetproject.org Sat Jan 5 01:11:04 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 5 Jan 2008 01:11:04 +0000 (UTC) Subject: [Thaw-dev] r16902 - in trunk/apps/Thaw/src/thaw: fcp plugins/queueWatcher Message-ID: <20080105011104.C41A3479FBC@freenetproject.org> Author: jflesch Date: 2008-01-05 01:11:04 +0000 (Sat, 05 Jan 2008) New Revision: 16902 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java Log: First fixes related to the previous commit Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-05 01:04:36 UTC (rev 16901) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-05 01:11:04 UTC (rev 16902) @@ -231,8 +231,7 @@ startInsert(); } - setChanged(); - this.notifyObservers(); + notifyChange(); return true; } @@ -338,8 +337,7 @@ identifier = queueManager.getAnID(); } - setChanged(); - this.notifyObservers(); + notifyChange(); final FCPMessage msg = new FCPMessage(); @@ -490,8 +488,7 @@ if( System.currentTimeMillis() >= (startTime+3000) ) { toTheNodeProgress = (int) (((origSize - remaining) * 100) / origSize); - setChanged(); - this.notifyObservers(); + notifyChange(); startTime = System.currentTimeMillis(); } @@ -595,8 +592,7 @@ status = "Inserting"; - setChanged(); - this.notifyObservers(); + notifyChange(); return; } @@ -610,8 +606,7 @@ if (publicKey == null) { status = "[Warning]"; Logger.warning(this, "PutSuccessful message without URI field ?!"); - setChanged(); - this.notifyObservers(); + notifyChange(); return; } @@ -629,8 +624,7 @@ status = "Finished"; - setChanged(); - this.notifyObservers(); + notifyChange(); return; } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:04:36 UTC (rev 16901) +++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:11:04 UTC (rev 16902) @@ -95,6 +95,8 @@ averageSpeed = (blocks * BLOCK_SIZE) / diffTime; ETA = diffTime; /* ok, it's a little bit icky, but it does the trick :) */ + notifyChange(); + return; } @@ -108,14 +110,14 @@ long diffBlocks = transferedBlocks - transferedBlocksPast[currentReadCursor]; long remainingBlocks = (insertion ? (totalBlocks - transferedBlocks) : (requiredBlocks - transferedBlocks)); - if (diffTimeSec <= 0 /* we never know */ || diffBlocks <= 0 || remainingBlocks == 0) { + if (diffTimeSec <= 0 || diffBlocks <= 0 || remainingBlocks == 0) { averageSpeed = 0; ETA = 0; } else { double averageSpeedInBlocksPerSecond = diffBlocks / diffTimeSec; averageSpeed = (long)(averageSpeedInBlocksPerSecond * (double)BLOCK_SIZE); - ETA = (long)(((double)remainingBlocks) / averageSpeedInBlocksPerSecond); + ETA = (long)(remainingBlocks / averageSpeedInBlocksPerSecond); } if (currentWriteCursor == currentReadCursor-1 Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-05 01:04:36 UTC (rev 16901) +++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-05 01:11:04 UTC (rev 16902) @@ -186,7 +186,7 @@ if (!query.isFinished()) return GUIHelper.getPrintableTime(remaining); else - return I18n.getMessage("thaw.plugin.queueWatcher.totalTime") + " "+GUIHelper.getPrintableSize(remaining); + return I18n.getMessage("thaw.plugin.queueWatcher.totalTime") + " "+GUIHelper.getPrintableTime(remaining); } return null; From jflesch at freenetproject.org Sat Jan 5 01:27:40 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 5 Jan 2008 01:27:40 +0000 (UTC) Subject: [Thaw-dev] r16903 - trunk/apps/Thaw/src/thaw/fcp Message-ID: <20080105012740.9AF543A0A22@freenetproject.org> Author: jflesch Date: 2008-01-05 01:27:40 +0000 (Sat, 05 Jan 2008) New Revision: 16903 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java Log: Second fixes for the commit 16901 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-05 01:11:04 UTC (rev 16902) +++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-05 01:27:40 UTC (rev 16903) @@ -451,7 +451,7 @@ private void updateStats() - { + { synchronized(runningQueries) { for (Iterator it = runningQueries.iterator(); it.hasNext(); ) { FCPTransferQuery query = (FCPTransferQuery)it.next(); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:11:04 UTC (rev 16902) +++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:27:40 UTC (rev 16903) @@ -3,6 +3,8 @@ import java.util.HashMap; import java.util.Observable; +import thaw.core.Logger; + /** * Transfer query == fetch / insert query. These queries must be able to * give more informations than the other. @@ -31,8 +33,6 @@ /* reminder to do the maths */ public final static int NMB_REMINDERS = 60; /* one per seconde, so 1 minute here */ - private long[] requiredBlocksPast = new long[NMB_REMINDERS]; - private long[] totalBlocksPast = new long[NMB_REMINDERS]; private long[] transferedBlocksPast = new long[NMB_REMINDERS]; private int currentReadCursor = 0; /* read Cursor in the *past arrays */ private int currentWriteCursor = 0; /* write Cursor in the *past arrays */ @@ -54,8 +54,6 @@ reliable = insertion; for (int i = 0 ; i < NMB_REMINDERS ; i++) { - requiredBlocksPast[i] = -1; - totalBlocksPast[i] = -1; transferedBlocksPast[i] = -1; } } @@ -104,20 +102,34 @@ if (!running || finished) return; - if (currentReadCursor != currentWriteCursor) { + if (reliable && (currentReadCursor != currentWriteCursor)) { + if (transferedBlocksPast[currentReadCursor] < 0) + Logger.warning(this, "TransferedBlocksNumber < 0, shouldn't happen !"); + /* reminder : we have one second between each slot of the *Past arrays */ long diffTimeSec = ((currentWriteCursor < currentReadCursor) ? currentWriteCursor+NMB_REMINDERS : currentWriteCursor) - currentReadCursor; long diffBlocks = transferedBlocks - transferedBlocksPast[currentReadCursor]; long remainingBlocks = (insertion ? (totalBlocks - transferedBlocks) : (requiredBlocks - transferedBlocks)); + //Logger.notice(this, "T: "+Long.toString(diffTimeSec)+ " ; B: "+ Long.toString(diffBlocks)+" ; R: "+Long.toString(remainingBlocks)); + + if (diffTimeSec <= 0 || diffBlocks <= 0 || remainingBlocks == 0) { averageSpeed = 0; ETA = 0; } else { double averageSpeedInBlocksPerSecond = diffBlocks / diffTimeSec; - averageSpeed = (long)(averageSpeedInBlocksPerSecond * (double)BLOCK_SIZE); - ETA = (long)(remainingBlocks / averageSpeedInBlocksPerSecond); + averageSpeed = (long)(averageSpeedInBlocksPerSecond * ((double)BLOCK_SIZE)); + + if (averageSpeedInBlocksPerSecond >= 0.000001) { + ETA = (long)((double)remainingBlocks / averageSpeedInBlocksPerSecond); + /*Logger.notice(this, "R: "+Long.toString(remainingBlocks) + * + " ; AS: "+Double.toString(averageSpeedInBlocksPerSecond) + * + " ; ETA: "+Long.toString(ETA)); + */ + } else + ETA = 0; } if (currentWriteCursor == currentReadCursor-1 @@ -133,8 +145,6 @@ /* updating known values */ - requiredBlocksPast[currentWriteCursor] = requiredBlocks; - totalBlocksPast[currentWriteCursor] = totalBlocks; transferedBlocksPast[currentWriteCursor] = transferedBlocks; currentWriteCursor++; From jflesch at freenetproject.org Sat Jan 5 01:46:57 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 5 Jan 2008 01:46:57 +0000 (UTC) Subject: [Thaw-dev] r16904 - trunk/apps/Thaw/src/thaw/fcp Message-ID: <20080105014657.B175847A249@freenetproject.org> Author: jflesch Date: 2008-01-05 01:46:57 +0000 (Sat, 05 Jan 2008) New Revision: 16904 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java Log: Third (and hopefully last) fixes for the commit 16901 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:27:40 UTC (rev 16903) +++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-05 01:46:57 UTC (rev 16904) @@ -101,6 +101,9 @@ if (!running || finished) return; + + if (transferedBlocks < 0) + return; if (reliable && (currentReadCursor != currentWriteCursor)) { if (transferedBlocksPast[currentReadCursor] < 0) @@ -115,21 +118,33 @@ if (diffTimeSec <= 0 || diffBlocks <= 0 || remainingBlocks == 0) { + if (diffBlocks < 0) + Logger.warning(this, "DiffBlocks < 0, shouldn't happen !"); + if (diffTimeSec < 0) + Logger.warning(this, "DiffTimeSec < 0, shouldn't happen !"); + averageSpeed = 0; ETA = 0; } else { - double averageSpeedInBlocksPerSecond = diffBlocks / diffTimeSec; + //averageSpeed = (diffBlocks*BLOCK_SIZE) / diffTimeSec; + + double averageSpeedInBlocksPerSecond = ((double)diffBlocks) / diffTimeSec; + averageSpeed = (long)(((double)averageSpeedInBlocksPerSecond) * ((double)BLOCK_SIZE)); - averageSpeed = (long)(averageSpeedInBlocksPerSecond * ((double)BLOCK_SIZE)); - - if (averageSpeedInBlocksPerSecond >= 0.000001) { + if (averageSpeed >= 0.00000001) { ETA = (long)((double)remainingBlocks / averageSpeedInBlocksPerSecond); + /* Logger.notice(this, "R: "+Long.toString(remainingBlocks) + * + " ; AS: "+Double.toString(averageSpeedInBlocksPerSecond) + * + " ; ETA: "+Long.toString(ETA)); + */ + + } else { /*Logger.notice(this, "R: "+Long.toString(remainingBlocks) - * + " ; AS: "+Double.toString(averageSpeedInBlocksPerSecond) - * + " ; ETA: "+Long.toString(ETA)); + * + " ; AS: "+Double.toString(averageSpeedInBlocksPerSecond) + * + " ; ETA == 0"); */ - } else ETA = 0; + } } if (currentWriteCursor == currentReadCursor-1 From jflesch at freenetproject.org Sun Jan 6 16:53:09 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sun, 6 Jan 2008 16:53:09 +0000 (UTC) Subject: [Thaw-dev] r16941 - in trunk/apps/Thaw/src/thaw: fcp plugins/miniFrost/frostKSK Message-ID: <20080106165309.80E7547B37D@freenetproject.org> Author: jflesch Date: 2008-01-06 16:53:08 +0000 (Sun, 06 Jan 2008) New Revision: 16941 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java Log: MiniFrost : when a message download ends on a GetFailed code = 21 or code = 28, consider the slot as invalid (Note : I hope that considering code = 28 as invalid won't make any troubles) Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-06 13:08:43 UTC (rev 16940) +++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2008-01-06 16:53:08 UTC (rev 16941) @@ -32,7 +32,7 @@ private boolean reliable = false; /* reminder to do the maths */ - public final static int NMB_REMINDERS = 60; /* one per seconde, so 1 minute here */ + public final static int NMB_REMINDERS = 300; /* one per seconde, so 5 minutes here */ private long[] transferedBlocksPast = new long[NMB_REMINDERS]; private int currentReadCursor = 0; /* read Cursor in the *past arrays */ private int currentWriteCursor = 0; /* write Cursor in the *past arrays */ @@ -233,7 +233,7 @@ } else { if (requiredBlocks <= 0) return 0; - return (int)(transferedBlocks * 100 / requiredBlocks); + return (int)(transferedBlocks * 99 / requiredBlocks); } } Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-06 13:08:43 UTC (rev 16940) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-06 16:53:08 UTC (rev 16941) @@ -95,8 +95,16 @@ if (!get.isSuccessful()) { int code = get.getGetFailedCode(); + + if (get.getProtocolErrorCode() == 21 /* Too big */ + || get.getProtocolErrorCode() == 28 /* All data not found */) { - if (get.getProtocolErrorCode() == 4 + Logger.warning(this, "MiniFrost: Invalid key: "+key); + successfullyDownloaded = true; + + board.addInvalidSlot(date, rev); + + } else if (get.getProtocolErrorCode() == 4 || code == 20) { Logger.warning(this, "MiniFrost: Invalid key: "+key); successfullyDownloaded = true; From jflesch at freenetproject.org Sun Jan 6 21:51:17 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sun, 6 Jan 2008 21:51:17 +0000 (UTC) Subject: [Thaw-dev] r16951 - trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK Message-ID: <20080106215117.A055B479898@freenetproject.org> Author: jflesch Date: 2008-01-06 21:51:17 +0000 (Sun, 06 Jan 2008) New Revision: 16951 Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKDraft.java Log: MiniFrost : Fix message sending when colliding Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKDraft.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKDraft.java 2008-01-06 21:17:31 UTC (rev 16950) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKDraft.java 2008-01-06 21:51:17 UTC (rev 16951) @@ -345,7 +345,8 @@ put.stop(queueManager); queueManager.remove(put); - revUsed = board.getNextNonDownloadedRev(date, revUsed); + //revUsed = board.getNextNonDownloadedRev(date, revUsed); + revUsed = board.getNextNonDownloadedAndValidRev(date, revUsed); startInsertion(); } } From jflesch at freenetproject.org Tue Jan 15 20:01:34 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Tue, 15 Jan 2008 20:01:34 +0000 (UTC) Subject: [Thaw-dev] r17061 - in trunk/apps/Thaw/src/thaw: core fcp gui i18n plugins/miniFrost plugins/miniFrost/frostKSK plugins/queueWatcher Message-ID: <20080115200134.17E083A1148@freenetproject.org> Author: jflesch Date: 2008-01-15 20:01:33 +0000 (Tue, 15 Jan 2008) New Revision: 17061 Modified: trunk/apps/Thaw/src/thaw/core/Main.java trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java trunk/apps/Thaw/src/thaw/gui/TransferProgressBar.java trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties trunk/apps/Thaw/src/thaw/i18n/thaw.properties trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties trunk/apps/Thaw/src/thaw/plugins/miniFrost/KnownBoardListProvider.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java Log: Reduce the number of useless calls to I18n.getMessage() + fix non-persistent file downloading Modified: trunk/apps/Thaw/src/thaw/core/Main.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Main.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/core/Main.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -185,8 +185,8 @@ e.printStackTrace(); } - //Logger.warning(this, "Will try to continue anyway"); - System.exit(1); + Logger.warning(this, "Will try to continue anyway"); + //System.exit(1); } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -334,12 +334,17 @@ status = "Available"; setStatus(false, true, true); writingSuccessful = true; - Logger.info(this, "File already existing. Not rewrited"); + Logger.notice(this, "Download finished => File already existing. Not rewrited"); } } else { - Logger.info(this, "Don't know where to put file, so file not asked to the node"); + setStatus(false, true, true); + status = "Available but not downloaded"; + writingSuccessful = true; + Logger.notice(this, "Download finished => Don't know where to put file, so file not asked to the node"); } + } else { + /* we do nothing : the request is not persistent, so we should get a AllData */ } } @@ -454,7 +459,7 @@ status = "Redirected ..."; if (queueManager.isOur(message.getValue("Identifier"))) { restartIfFailed = true; - stop(queueManager); + stop(queueManager, false); } else { Logger.debug(this, "Not our transfer ; we don't touch"); } @@ -900,8 +905,12 @@ return true; } + + public boolean stop(final FCPQueueManager queueManager) { + return stop(queueManager, true); + } - public boolean stop(final FCPQueueManager queryManager) { + public boolean stop(final FCPQueueManager queryManager, boolean notify) { Logger.info(this, "Stop fetching of the key : "+getFileKey()); if(isPersistent() && !removeRequest()) @@ -909,12 +918,12 @@ boolean wasFinished = isFinished(); - setStatus(false, true, isSuccessful()); + setStatus(false, true, wasFinished && isSuccessful()); fatal = true; status = "Stopped"; - if (!restartIfFailed && !wasFinished) { + if (!restartIfFailed && !wasFinished && notify) { notifyChange(); } Modified: trunk/apps/Thaw/src/thaw/gui/TransferProgressBar.java =================================================================== --- trunk/apps/Thaw/src/thaw/gui/TransferProgressBar.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/gui/TransferProgressBar.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -9,20 +9,21 @@ import thaw.core.I18n; public class TransferProgressBar extends JProgressBar { - /** - * - */ private static final long serialVersionUID = -4726613087699822787L; private FCPTransferQuery query; private boolean statusInProgressBar; private boolean withBorder; + + private final static String failedStr = I18n.getMessage("thaw.common.failed"); + private final static String finishedStr = I18n.getMessage("thaw.common.finished"); + public TransferProgressBar(FCPTransferQuery q) { this(q, true); } public TransferProgressBar(FCPTransferQuery query, boolean statusInProgressBar, - boolean withBorder) { + boolean withBorder) { super(0, 100); this.query = query; this.statusInProgressBar = statusInProgressBar; @@ -58,9 +59,9 @@ setValue(progress); if(query.isFinished() && !query.isSuccessful()) - setString(I18n.getMessage("thaw.common.failed")); + setString(failedStr); else if(query.isFinished() && query.isSuccessful()) - setString(I18n.getMessage("thaw.common.finished")); + setString(finishedStr); else if(!query.isFinished()) { String txt= ""; Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2008-01-15 20:01:33 UTC (rev 17061) @@ -686,6 +686,7 @@ thaw.plugin.miniFrost.knownBoard=Board connue thaw.plugin.miniFrost.knownBoard.select=Veuillez s?lectionner une board: +thaw.plugin.miniFrost.knownBoard.none=Aucune autre board connue pour le moment ## Index web grapher thaw.plugin.indexWebGrapher=Une tentative de repr?sentation de la toile des indexes Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2008-01-15 20:01:33 UTC (rev 17061) @@ -693,6 +693,7 @@ thaw.plugin.miniFrost.knownBoard=Known board thaw.plugin.miniFrost.knownBoard.select=Please select a board: +thaw.plugin.miniFrost.knownBoard.none=No new known boards at the moment ## index web grapher Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties =================================================================== --- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2008-01-15 20:01:33 UTC (rev 17061) @@ -686,6 +686,7 @@ thaw.plugin.miniFrost.knownBoard=Board connue thaw.plugin.miniFrost.knownBoard.select=Veuillez s\u00e9lectionner une board: +thaw.plugin.miniFrost.knownBoard.none=Aucune autre board connue pour le moment ## Index web grapher thaw.plugin.indexWebGrapher=Une tentative de repr\u00e9sentation de la toile des indexes Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/KnownBoardListProvider.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/KnownBoardListProvider.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/KnownBoardListProvider.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -47,6 +47,11 @@ Object[] boardListAr = boardList.toArray(); + if (boardListAr.length <= 0) { + new thaw.gui.WarningWindow(mainWindow, I18n.getMessage("thaw.plugin.miniFrost.knownBoard.none")); + return; + } + BoardAttachment selection = (BoardAttachment)JOptionPane.showInputDialog(mainWindow.getMainFrame(), I18n.getMessage("thaw.plugin.miniFrost.knownBoard.select"), I18n.getMessage("thaw.plugin.miniFrost.knownBoard.select"), Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -30,7 +30,6 @@ "freenet-refs", "thaw", "frost", - "fuqid", "jsite", "successful", "unsuccessful", Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -36,11 +36,20 @@ private final JTextField globalQueue = new JTextField(); private FCPTransferQuery query = null; + + private final static Dimension dim = new Dimension(thaw.plugins.QueueWatcher.DIVIDER_LOCATION-10, 400); + private final static String unknownStr = I18n.getMessage("thaw.common.unknown"); + private final static String failedStr = I18n.getMessage("thaw.common.failed"); + private final static String estimationStr = I18n.getMessage("thaw.common.estimation"); + + private final static String[] prioritiesStr = new String[QueuePanel.MIN_PRIORITY+1]; + static { + for (int i = 0 ; i < prioritiesStr.length ; i++) + prioritiesStr[i] = I18n.getMessage("thaw.plugin.priority.p"+Integer.toString(i)); + }; - private final static Dimension dim = new Dimension(thaw.plugins.QueueWatcher.DIVIDER_LOCATION-10, 400); - public DetailPanel() { panel = new JPanel(); subPanel = new JPanel(); @@ -133,19 +142,19 @@ String progression = Integer.toString(query.getProgression()) + "%"; if(!query.isProgressionReliable()) - progression = progression + " ("+I18n.getMessage("thaw.common.estimation")+")"; + progression = progression + " ("+estimationStr+")"; progress.setString(progression); } else - progress.setString(I18n.getMessage("thaw.common.failed")); + progress.setString(failedStr); if(query.getFileKey() != null) key.setText(query.getFileKey()); else - key.setText(I18n.getMessage("thaw.common.unknown")); + key.setText(unknownStr); if(query.getFileSize() == 0) - size.setText(I18n.getMessage("thaw.common.unknown")); + size.setText(unknownStr); else size.setText((new Long(query.getFileSize())).toString()+" B"); @@ -156,9 +165,9 @@ identifier.setText("N/A"); if(query.getThawPriority() != -1) - priority.setText(I18n.getMessage("thaw.plugin.priority.p"+Integer.toString(query.getThawPriority()))); + priority.setText(prioritiesStr[query.getThawPriority()]); else - priority.setText(I18n.getMessage("thaw.common.unknown")); + priority.setText(unknownStr); } else { withTheNodeProgress.setValue(0); Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -77,7 +77,7 @@ private JRadioButtonMenuItem[] priorityRadioButton; private JRadioButtonMenuItem unknowPriority; private ButtonGroup priorityGroup; - private final int MIN_PRIORITY = 6; + public final static int MIN_PRIORITY = 6; private int[] selectedRows; Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-15 16:49:45 UTC (rev 17060) +++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java 2008-01-15 20:01:33 UTC (rev 17061) @@ -27,11 +27,17 @@ public class QueueTableModel extends javax.swing.table.AbstractTableModel implements Observer { - private static final long serialVersionUID = 20060708; + private static final long serialVersionUID = 20060709; + private final static String totalTimeStr = I18n.getMessage("thaw.plugin.queueWatcher.totalTime"); + private final static String downloadSuccessfulStr = I18n.getMessage("thaw.plugin.queueWatcher.downloadSuccessful"); + private final static String downloadFailedStr = I18n.getMessage("thaw.plugin.queueWatcher.downloadFailed"); + private final static String insertionSuccessfulStr = I18n.getMessage("thaw.plugin.queueWatcher.insertionSuccessful"); + private final static String insertionFailedStr = I18n.getMessage("thaw.plugin.queueWatcher.insertionFailed"); + private final static String unspecifiedStr = I18n.getMessage("thaw.common.unspecified"); private final Vector columnNames; - private Vector queries = null; + private Vector queries = null; private boolean isForInsertions = false; @@ -147,7 +153,7 @@ if(query.getPath() != null) return query.getPath(); else - return I18n.getMessage("thaw.common.unspecified"); + return unspecifiedStr; } else if( (isForInsertions && (column == 3)) || (!isForInsertions && (column == 4)) ) { @@ -186,7 +192,7 @@ if (!query.isFinished()) return GUIHelper.getPrintableTime(remaining); else - return I18n.getMessage("thaw.plugin.queueWatcher.totalTime") + " "+GUIHelper.getPrintableTime(remaining); + return totalTimeStr + " "+GUIHelper.getPrintableTime(remaining); } return null; @@ -368,12 +374,12 @@ if (o instanceof FCPClientGet) { str = (success ? - I18n.getMessage("thaw.plugin.queueWatcher.downloadSuccessful") : - I18n.getMessage("thaw.plugin.queueWatcher.downloadFailed")); + downloadSuccessfulStr : + downloadFailedStr); } else if (o instanceof FCPClientPut) { str = (success ? - I18n.getMessage("thaw.plugin.queueWatcher.insertionSuccessful") : - I18n.getMessage("thaw.plugin.queueWatcher.insertionFailed")); + insertionSuccessfulStr : + insertionFailedStr); } if (str != null) { From jflesch at freenetproject.org Wed Jan 16 08:46:02 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Wed, 16 Jan 2008 08:46:02 +0000 (UTC) Subject: [Thaw-dev] r17064 - in trunk/apps/Thaw/src/thaw/plugins: . miniFrost/frostKSK Message-ID: <20080116084602.550E247B78B@freenetproject.org> Author: jflesch Date: 2008-01-16 08:46:01 +0000 (Wed, 16 Jan 2008) New Revision: 17064 Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java Log: Should fix the memory leak : Minifrost added FCPTransferQuery objects to the FCPQueueManager and never removed them Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2008-01-15 21:17:13 UTC (rev 17063) +++ trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2008-01-16 08:46:01 UTC (rev 17064) @@ -31,6 +31,15 @@ private boolean dropNextRefresh = false; public final static Color ORANGE = new Color(240, 160, 0); + + private final static String connectingStr = I18n.getMessage("thaw.statusBar.connecting"); + private final static String disconnectedStr = I18n.getMessage("thaw.statusBar.disconnected"); + private final static String globalProgressionStr= I18n.getMessage("thaw.plugin.statistics.globalProgression"); + private final static String finishedStr = I18n.getMessage("thaw.plugin.statistics.finished"); + private final static String failedStr = I18n.getMessage("thaw.plugin.statistics.failed"); + private final static String runningStr = I18n.getMessage("thaw.plugin.statistics.running"); + private final static String pendingStr = I18n.getMessage("thaw.plugin.statistics.pending"); + public boolean run(final Core core) { this.core = core; @@ -86,13 +95,13 @@ if (core.isReconnecting()) { core.getMainWindow().setStatus(IconBox.blueBunny, - I18n.getMessage("thaw.statusBar.connecting"), java.awt.Color.RED); + connectingStr, java.awt.Color.RED); return; } if (!core.getConnectionManager().isConnected()) { core.getMainWindow().setStatus(IconBox.minDisconnectAction, - I18n.getMessage("thaw.statusBar.disconnected"), java.awt.Color.RED); + disconnectedStr, java.awt.Color.RED); return; } @@ -148,19 +157,19 @@ if(advancedMode) { status = status - + StatusBar.SEPARATOR + I18n.getMessage("thaw.plugin.statistics.globalProgression") + " " + + StatusBar.SEPARATOR + globalProgressionStr + " " + Integer.toString(progressDone) + "/" + Integer.toString(progressTotal); } status = status - + StatusBar.SEPARATOR + I18n.getMessage("thaw.plugin.statistics.finished")+ " " + + StatusBar.SEPARATOR + finishedStr+ " " + Integer.toString(finished) + "/" + Integer.toString(total) - + StatusBar.SEPARATOR + I18n.getMessage("thaw.plugin.statistics.failed") + " " + + StatusBar.SEPARATOR + failedStr + " " + Integer.toString(failed) + "/" + Integer.toString(total) - + StatusBar.SEPARATOR + I18n.getMessage("thaw.plugin.statistics.running") + " " + + StatusBar.SEPARATOR + runningStr + " " + Integer.toString(running) + "/" + Integer.toString(total) - + StatusBar.SEPARATOR + I18n.getMessage("thaw.plugin.statistics.pending") + " " + + StatusBar.SEPARATOR + pendingStr + " " + Integer.toString(pending) + "/" + Integer.toString(total); core.getMainWindow().setStatus(IconBox.minConnectAction, status); Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-15 21:17:13 UTC (rev 17063) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-16 08:46:01 UTC (rev 17064) @@ -61,11 +61,14 @@ private boolean downloading = false; /* put back to false only after parsing */ private boolean successfullyDownloaded = false; private boolean successfullyParsed = false; + private FCPQueueManager queueManager = null; private String key = null; public void download(FCPQueueManager queueManager, Hsqldb db) { this.db = db; + this.queueManager = queueManager; + downloading = true; key = board.getDownloadKey(date, rev); @@ -91,7 +94,7 @@ if (!get.isFinished()) return; - + if (!get.isSuccessful()) { int code = get.getGetFailedCode(); @@ -170,6 +173,9 @@ read = true; } } + + get.stop(queueManager); + queueManager.remove(get); setChanged(); notifyObservers(); From jflesch at freenetproject.org Thu Jan 17 16:57:44 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Thu, 17 Jan 2008 16:57:44 +0000 (UTC) Subject: [Thaw-dev] r17098 - in trunk/apps/Thaw/src/thaw: fcp plugins/index plugins/miniFrost plugins/peerMonitor Message-ID: <20080117165744.E7B2A47B34E@freenetproject.org> Author: jflesch Date: 2008-01-17 16:57:44 +0000 (Thu, 17 Jan 2008) New Revision: 17098 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/Outbox.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/SentMessages.java trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java Log: FCP : Should fix the memory leak once for all : Was due to FCPTransferQuerys staying observers of the FCPQueryManager even when they were finished Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -910,8 +910,10 @@ return stop(queueManager, true); } - public boolean stop(final FCPQueueManager queryManager, boolean notify) { + public boolean stop(final FCPQueueManager queueManager, boolean notify) { Logger.info(this, "Stop fetching of the key : "+getFileKey()); + + queueManager.getQueryManager().deleteObserver(this); if(isPersistent() && !removeRequest()) return false; Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -513,6 +513,8 @@ public boolean stop(final FCPQueueManager queueManager) { if(removeRequest()) { + queueManager.getQueryManager().deleteObserver(this); + boolean wasFinished = isFinished(); status = "Stopped"; Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/plugins/index/IndexFolder.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -1078,10 +1078,12 @@ return toString(); } + + private final static String yourIndexesStr = thaw.core.I18n.getMessage("thaw.plugin.index.yourIndexes"); public String toString() { if (id < 0) - return thaw.core.I18n.getMessage("thaw.plugin.index.yourIndexes"); + return yourIndexesStr; if (name != null) return name; Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -140,6 +140,8 @@ /** for the thread tree **/ private MessageNodeTree messageNodeTree; + + private final static String trustLevelNoneStr = I18n.getMessage("thaw.plugin.signature.trustLevel.none"); public MessageTreeTable(MiniFrostPanel mainPanel) { @@ -606,7 +608,7 @@ if (author != null && author.getIdentity() != null) value = author.getIdentity().getTrustLevelStr(); else - value = I18n.getMessage("thaw.plugin.signature.trustLevel.none"); + value = trustLevelNoneStr; } if (value instanceof java.util.Date) { Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/Outbox.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/Outbox.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/Outbox.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -181,9 +181,11 @@ return msgs; } + + private final static String outboxStr = I18n.getMessage("thaw.plugin.miniFrost.outbox"); public String getName() { - return I18n.getMessage("thaw.plugin.miniFrost.outbox"); + return outboxStr; } public int getNewMessageNumber(boolean unsigned, boolean archived, int minTrustLevel) { Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/SentMessages.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/SentMessages.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/SentMessages.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -20,9 +20,11 @@ public SentMessages(MiniFrost miniFrost) { this.miniFrost = miniFrost; } + + private final static String sentBoxStr = I18n.getMessage("thaw.plugin.miniFrost.sentBox"); public String getName() { - return I18n.getMessage("thaw.plugin.miniFrost.sentBox"); + return sentBoxStr; } /** Modified: trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java 2008-01-17 16:47:50 UTC (rev 17097) +++ trunk/apps/Thaw/src/thaw/plugins/peerMonitor/PeerMonitorPanel.java 2008-01-17 16:57:44 UTC (rev 17098) @@ -97,8 +97,13 @@ private ToolbarModifier toolbarModifier; private JButton foldButton; + + private final static String nodeMemoryStr = I18n.getMessage("thaw.plugin.peerMonitor.infos.nodeMemory"); + private final static String thawMemoryStr = I18n.getMessage("thaw.plugin.peerMonitor.infos.thawMemory"); + private final static String nodeThreadsStr = I18n.getMessage("thaw.plugin.peerMonitor.infos.nodeThreads"); + private final static String thawThreadsStr = I18n.getMessage("thaw.plugin.peerMonitor.infos.thawThreads"); + private final static String nodeStatsStr = I18n.getMessage("thaw.plugin.peerMonitor.nodeStats"); - public PeerMonitorPanel(PeerMonitor peerMonitor, FCPQueueManager queueManager, Config config, @@ -256,7 +261,7 @@ pourcent = (int)((used * 100) / max); - nodeMemBar.setString(I18n.getMessage("thaw.plugin.peerMonitor.infos.nodeMemory")+ ": " + nodeMemBar.setString(nodeMemoryStr+ ": " + GUIHelper.getPrintableSize(used) + " / " + GUIHelper.getPrintableSize(max)); @@ -276,7 +281,7 @@ pourcent = (int)((used * 100) / max); - thawMemBar.setString(I18n.getMessage("thaw.plugin.peerMonitor.infos.thawMemory")+ ": " + thawMemBar.setString(thawMemoryStr+ ": " + GUIHelper.getPrintableSize(used) + " / " + GUIHelper.getPrintableSize(max)); @@ -286,9 +291,9 @@ public void setNmbThreads(int nmbNodeThreads) { - nodeThreads.setText(I18n.getMessage("thaw.plugin.peerMonitor.infos.nodeThreads") + nodeThreads.setText(nodeThreadsStr + " : "+ Integer.toString(nmbNodeThreads)); - thawThreads.setText(I18n.getMessage("thaw.plugin.peerMonitor.infos.thawThreads") + thawThreads.setText(thawThreadsStr + " : "+ Integer.toString(Thread.activeCount())); } @@ -355,7 +360,7 @@ { peers = new Vector(); - peers.add(I18n.getMessage("thaw.plugin.peerMonitor.nodeStats")); + peers.add(nodeStatsStr); /* TODO : dirty : should use comparator, etc */ for (int i = 0 ; i < STR_STATUS.length ; i++) { @@ -398,8 +403,6 @@ } } - - /** * @return null if it must not be displayed ; else an array with two elements (key translated + value translated) */ From nextgens at freenetproject.org Fri Jan 18 14:08:13 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 14:08:13 +0000 (UTC) Subject: [Thaw-dev] r17138 - in trunk/apps/Thaw/src/thaw: core plugins/index Message-ID: <20080118140813.B54E33A14B1@freenetproject.org> Author: nextgens Date: 2008-01-18 14:08:13 +0000 (Fri, 18 Jan 2008) New Revision: 17138 Modified: trunk/apps/Thaw/src/thaw/core/Core.java trunk/apps/Thaw/src/thaw/plugins/index/Comment.java trunk/apps/Thaw/src/thaw/plugins/index/Index.java Log: Thaw: Fix a memory leak in index comment fetching system Modified: trunk/apps/Thaw/src/thaw/core/Core.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-18 14:06:32 UTC (rev 17137) +++ trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-18 14:08:13 UTC (rev 17138) @@ -143,7 +143,7 @@ "Thaw "+Main.VERSION+" : "+I18n.getMessage("thaw.statusBar.ready")); splashScreen.hide(); - + splashScreen = null; mainWindow.setVisible(true); setTheme(lookAndFeel); Modified: trunk/apps/Thaw/src/thaw/plugins/index/Comment.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/index/Comment.java 2008-01-18 14:06:32 UTC (rev 17137) +++ trunk/apps/Thaw/src/thaw/plugins/index/Comment.java 2008-01-18 14:08:13 UTC (rev 17138) @@ -796,8 +796,11 @@ public void update(Observable o, Object param) { if (o instanceof FCPTransferQuery) { - if (((FCPTransferQuery)o).isFinished()) - ((Observable)o).deleteObserver(this); + if (((FCPTransferQuery)o).isFinished()) { + o.deleteObserver(this); + ((FCPTransferQuery)o).stop(queueManager); + queueManager.remove((FCPTransferQuery)o); + } if (o instanceof FCPClientPut) { FCPClientPut put = (FCPClientPut)o; Modified: trunk/apps/Thaw/src/thaw/plugins/index/Index.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/index/Index.java 2008-01-18 14:06:32 UTC (rev 17137) +++ trunk/apps/Thaw/src/thaw/plugins/index/Index.java 2008-01-18 14:08:13 UTC (rev 17138) @@ -1038,6 +1038,8 @@ } else { nmbFailedCommentFetching++; } + + c.deleteObserver(this); if (nmbFailedCommentFetching > COMMENT_FETCHING_RUNNING_AT_THE_SAME_TIME +1) { if (indexTree != null) { From nextgens at freenetproject.org Fri Jan 18 14:41:31 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 14:41:31 +0000 (UTC) Subject: [Thaw-dev] r17139 - trunk/apps/Thaw/src/thaw/fcp Message-ID: <20080118144131.7741A479911@freenetproject.org> Author: nextgens Date: 2008-01-18 14:41:31 +0000 (Fri, 18 Jan 2008) New Revision: 17139 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java Log: Thaw: use parseLong where possible Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-18 14:08:13 UTC (rev 17138) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-18 14:41:31 UTC (rev 17139) @@ -317,7 +317,8 @@ if(!alreadySaved) { alreadySaved = true; - fileSize = (new Long(message.getValue("DataLength"))).longValue(); + fileSize = Long.parseLong(message.getValue("DataLength")); + if(isPersistent() || (queueManager.getQueryManager().getConnection().isLocalSocket() && !noDDA)) { From nextgens at freenetproject.org Fri Jan 18 17:11:00 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 17:11:00 +0000 (UTC) Subject: [Thaw-dev] r17153 - trunk/apps/Thaw/src/thaw/plugins/index Message-ID: <20080118171100.83D8B4797B4@freenetproject.org> Author: nextgens Date: 2008-01-18 17:11:00 +0000 (Fri, 18 Jan 2008) New Revision: 17153 Modified: trunk/apps/Thaw/src/thaw/plugins/index/Comment.java Log: Thaw: get rid of redundant checks Modified: trunk/apps/Thaw/src/thaw/plugins/index/Comment.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/index/Comment.java 2008-01-18 16:05:47 UTC (rev 17152) +++ trunk/apps/Thaw/src/thaw/plugins/index/Comment.java 2008-01-18 17:11:00 UTC (rev 17153) @@ -796,10 +796,12 @@ public void update(Observable o, Object param) { if (o instanceof FCPTransferQuery) { - if (((FCPTransferQuery)o).isFinished()) { - o.deleteObserver(this); - ((FCPTransferQuery)o).stop(queueManager); - queueManager.remove((FCPTransferQuery)o); + FCPTransferQuery query = (FCPTransferQuery)o; + + if (query.isFinished()) { + query.deleteObserver(this); + query.stop(queueManager); + queueManager.remove(query); } if (o instanceof FCPClientPut) { @@ -852,13 +854,6 @@ } } - - if (o instanceof FCPTransferQuery) { - FCPTransferQuery q = (FCPTransferQuery)o; - - if (q.isFinished() && q.isSuccessful() && q instanceof Observable) - ((Observable)q).deleteObserver(this); - } } From nextgens at freenetproject.org Fri Jan 18 23:10:40 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 23:10:40 +0000 (UTC) Subject: [Thaw-dev] r17158 - trunk/apps/Thaw/src/thaw/core Message-ID: <20080118231040.9A3E94789AB@freenetproject.org> Author: nextgens Date: 2008-01-18 23:10:40 +0000 (Fri, 18 Jan 2008) New Revision: 17158 Modified: trunk/apps/Thaw/src/thaw/core/I18n.java Log: Thaw: simplify the l18n api, spare some memory Modified: trunk/apps/Thaw/src/thaw/core/I18n.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/I18n.java 2008-01-18 22:55:56 UTC (rev 17157) +++ trunk/apps/Thaw/src/thaw/core/I18n.java 2008-01-18 23:10:40 UTC (rev 17158) @@ -40,33 +40,26 @@ }; private static Locale currentLocale; + private static ResourceBundle currentResourceBundle; - public I18n() { - + static { + currentResourceBundle = ResourceBundle.getBundle("thaw.i18n.thaw", I18n.getLocale()); + currentLocale = Locale.getDefault(); } public static Locale getLocale() { - if (I18n.currentLocale == null) - I18n.currentLocale = Locale.getDefault(); - return I18n.currentLocale; + return currentLocale; } public static void setLocale(final Locale locale) { - I18n.currentLocale = locale; + currentLocale = locale; Locale.setDefault(locale); + currentResourceBundle = ResourceBundle.getBundle("thaw.i18n.thaw", locale); } - public static ResourceBundle getResourceBundle() { - return I18n.getResourceBundle(I18n.getLocale()); - } - - public static ResourceBundle getResourceBundle(final Locale locale) { - return ResourceBundle.getBundle("thaw.i18n.thaw", I18n.getLocale()); - } - public static String getMessage(final String key) { try { - return I18n.getResourceBundle().getString(key); + return currentResourceBundle.getString(key); } catch(final Exception e) { Logger.warning(new I18n(), "Unable to find translation for '"+key+"'"); From nextgens at freenetproject.org Fri Jan 18 23:12:41 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 23:12:41 +0000 (UTC) Subject: [Thaw-dev] r17159 - trunk/apps/Thaw/src/thaw/plugins/index Message-ID: <20080118231241.D59AD479736@freenetproject.org> Author: nextgens Date: 2008-01-18 23:12:41 +0000 (Fri, 18 Jan 2008) New Revision: 17159 Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexParser.java Log: Thaw: leave it to the GC explicitely Modified: trunk/apps/Thaw/src/thaw/plugins/index/IndexParser.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/index/IndexParser.java 2008-01-18 23:10:40 UTC (rev 17158) +++ trunk/apps/Thaw/src/thaw/plugins/index/IndexParser.java 2008-01-18 23:12:41 UTC (rev 17159) @@ -280,6 +280,7 @@ FileInputStream stream = new FileInputStream(filePath); loadXML(stream, clean); stream.close(); + stream = null; } catch(final java.io.FileNotFoundException e) { Logger.error(this, "Unable to load XML: FileNotFoundException ('"+filePath+"') ! : "+e.toString()); } catch(java.io.IOException e) { From nextgens at freenetproject.org Fri Jan 18 23:16:54 2008 From: nextgens at freenetproject.org (nextgens at freenetproject.org) Date: Fri, 18 Jan 2008 23:16:54 +0000 (UTC) Subject: [Thaw-dev] r17160 - trunk/apps/Thaw/src/thaw/core Message-ID: <20080118231654.1DA47479934@freenetproject.org> Author: nextgens Date: 2008-01-18 23:16:53 +0000 (Fri, 18 Jan 2008) New Revision: 17160 Modified: trunk/apps/Thaw/src/thaw/core/I18n.java Log: Thaw: doh Modified: trunk/apps/Thaw/src/thaw/core/I18n.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/I18n.java 2008-01-18 23:12:41 UTC (rev 17159) +++ trunk/apps/Thaw/src/thaw/core/I18n.java 2008-01-18 23:16:53 UTC (rev 17160) @@ -35,17 +35,21 @@ */ public class I18n { public final static Locale[] supportedLocales = { - new Locale("en"), - new Locale("fr") + Locale.ENGLISH, + Locale.FRENCH }; private static Locale currentLocale; private static ResourceBundle currentResourceBundle; static { - currentResourceBundle = ResourceBundle.getBundle("thaw.i18n.thaw", I18n.getLocale()); - currentLocale = Locale.getDefault(); + currentLocale = Locale.ENGLISH; + currentResourceBundle = ResourceBundle.getBundle("thaw.i18n.thaw", currentLocale); } + + public I18n() { + I18n.setLocale(Locale.getDefault()); + } public static Locale getLocale() { return currentLocale; From jflesch at freenetproject.org Sat Jan 19 00:13:50 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 19 Jan 2008 00:13:50 +0000 (UTC) Subject: [Thaw-dev] r17162 - in trunk/apps/Thaw/src/thaw: core fcp gui plugins/miniFrost/frostKSK Message-ID: <20080119001350.0A39A47AA46@freenetproject.org> Author: jflesch Date: 2008-01-19 00:13:49 +0000 (Sat, 19 Jan 2008) New Revision: 17162 Modified: trunk/apps/Thaw/src/thaw/core/PluginManager.java trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java trunk/apps/Thaw/src/thaw/gui/GUIHelper.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java Log: Fixing NPEs in PluginManager Modified: trunk/apps/Thaw/src/thaw/core/PluginManager.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/PluginManager.java 2008-01-19 00:02:16 UTC (rev 17161) +++ trunk/apps/Thaw/src/thaw/core/PluginManager.java 2008-01-19 00:13:49 UTC (rev 17162) @@ -97,13 +97,16 @@ final Iterator pluginIt = pluginNames.iterator(); final int progressJump = (100-40) / pluginNames.size(); - core.getSplashScreen().setProgression(40); + + if (core.getSplashScreen() != null) + core.getSplashScreen().setProgression(40); while(pluginIt.hasNext()) { final String pluginName = (String)pluginIt.next(); - core.getSplashScreen().setProgressionAndStatus(core.getSplashScreen().getProgression()+progressJump, - "Loading plugin '"+pluginName.replaceFirst("thaw.plugins.", "")+"' ..."); + if (core.getSplashScreen() != null) + core.getSplashScreen().setProgressionAndStatus(core.getSplashScreen().getProgression()+progressJump, + "Loading plugin '"+pluginName.replaceFirst("thaw.plugins.", "")+"' ..."); if (loadPlugin(pluginName) == null) { Logger.notice(this, "Plugin alread loaded"); @@ -198,10 +201,12 @@ javax.swing.ImageIcon icon; - if ((icon = plugin.getIcon()) != null) - core.getSplashScreen().addIcon(icon); - else - core.getSplashScreen().addIcon(thaw.gui.IconBox.add); + if (core.getSplashScreen() != null) { + if ((icon = plugin.getIcon()) != null) + core.getSplashScreen().addIcon(icon); + else + core.getSplashScreen().addIcon(thaw.gui.IconBox.add); + } plugin.run(core); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-19 00:02:16 UTC (rev 17161) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2008-01-19 00:13:49 UTC (rev 17162) @@ -365,6 +365,11 @@ return; } + + if ("PersistentGet".equals(message.getMessageName())) { + /* not our problem */ + return; + } if("ProtocolError".equals( message.getMessageName() )) { Logger.debug(this, "ProtocolError !"); @@ -914,10 +919,10 @@ public boolean stop(final FCPQueueManager queueManager, boolean notify) { Logger.info(this, "Stop fetching of the key : "+getFileKey()); - queueManager.getQueryManager().deleteObserver(this); - if(isPersistent() && !removeRequest()) return false; + + queueManager.getQueryManager().deleteObserver(this); boolean wasFinished = isFinished(); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-19 00:02:16 UTC (rev 17161) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2008-01-19 00:13:49 UTC (rev 17162) @@ -600,6 +600,8 @@ if("PutSuccessful".equals(msg.getMessageName())) { setStatus(false, true, true); + + queueManager.getQueryManager().deleteObserver(this); setStartupTime(Long.valueOf(msg.getValue("StartupTime")).longValue()); setCompletionTime(Long.valueOf(msg.getValue("CompletionTime")).longValue()); Modified: trunk/apps/Thaw/src/thaw/gui/GUIHelper.java =================================================================== --- trunk/apps/Thaw/src/thaw/gui/GUIHelper.java 2008-01-19 00:02:16 UTC (rev 17161) +++ trunk/apps/Thaw/src/thaw/gui/GUIHelper.java 2008-01-19 00:13:49 UTC (rev 17162) @@ -15,6 +15,7 @@ import thaw.core.I18n; public class GUIHelper { + private final static String unknownStr = I18n.getMessage("thaw.common.unknown"); public GUIHelper() { @@ -73,7 +74,7 @@ public static String getPrintableTime(final long seconds) { if (seconds == 0) - return I18n.getMessage("thaw.common.unknown"); + return unknownStr; if (seconds < 60) return (new Long(seconds)).toString() + " s"; @@ -96,7 +97,7 @@ public static String getPrintableSize(final long size) { if(size == 0) - return I18n.getMessage("thaw.common.unknown"); + return unknownStr; if(size < 1024) /* < 1KB */ return ((new Long(size)).toString() + " B"); Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-19 00:02:16 UTC (rev 17161) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java 2008-01-19 00:13:49 UTC (rev 17162) @@ -136,7 +136,7 @@ if (!parser.loadFile(new File(get.getPath()), db)) { /* invalid slot */ - Logger.notice(this, "Invalid message: '"+board.getName()+"'" + Logger.notice(this, " message: '"+board.getName()+"'" +" - "+date.toString() +" - "+Integer.toString(rev)); From jflesch at freenetproject.org Sat Jan 26 11:58:34 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 26 Jan 2008 11:58:34 +0000 (UTC) Subject: [Thaw-dev] r17299 - in trunk/apps/Thaw/src/thaw: core fcp plugins plugins/miniFrost/frostKSK Message-ID: <20080126115834.1D00B3A0B45@freenetproject.org> Author: jflesch Date: 2008-01-26 11:58:33 +0000 (Sat, 26 Jan 2008) New Revision: 17299 Modified: trunk/apps/Thaw/src/thaw/core/Logger.java trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java Log: Reduce tray icon verbosity : don't display anymore warning messages Modified: trunk/apps/Thaw/src/thaw/core/Logger.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Logger.java 2008-01-25 19:32:12 UTC (rev 17298) +++ trunk/apps/Thaw/src/thaw/core/Logger.java 2008-01-26 11:58:33 UTC (rev 17299) @@ -9,6 +9,13 @@ */ public class Logger { + public final static int LOG_LEVEL_ERROR = 0; + public final static int LOG_LEVEL_WARNING = 1; + public final static int LOG_LEVEL_NOTICE = 2; + public final static int LOG_LEVEL_INFO = 3; + public final static int LOG_LEVEL_DEBUG = 4; + public final static int LOG_LEVEL_VERBOSE = 5; + private static int LOG_LEVEL = 2; @@ -59,7 +66,7 @@ } private static void log(final int level, final Object o, final String msg, - final boolean manda) { + final boolean manda) { if (Logger.LOG_LEVEL < level && !manda) return; Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-25 19:32:12 UTC (rev 17298) +++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-26 11:58:33 UTC (rev 17299) @@ -182,7 +182,7 @@ } if(!socket.isConnected()) { - Logger.warning(this, "Unable to connect, but no exception ?! WTF ?"); + Logger.warning(this, "Unable to connect, but no exception ?!"); Logger.warning(this, "Will try to continue ..."); } @@ -388,7 +388,7 @@ /* SECURITY */ if(rawBytesWaiting > 0) { - Logger.warning(this, "RAW BYTES STILL WAITING ON SOCKET. THIS IS ABNORMAL. : Will drop them."); + Logger.warning(this, "RAW BYTES STILL WAITING ON SOCKET. THIS IS ABNORMAL. -> Will drop them."); while(rawBytesWaiting > 0) { int to_read = 1024; @@ -455,7 +455,7 @@ } catch (final java.io.IOException e) { if(isConnected()) - Logger.error(this, "IOException while reading but still connected, wtf? : " + Logger.notice(this, "IOException while reading but still connected ?! : " +e.toString()+ " ; "+e.getMessage() ); else Logger.notice(this, "IOException. Disconnected. : "+e.toString() + " ; " Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2008-01-25 19:32:12 UTC (rev 17298) +++ trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2008-01-26 11:58:33 UTC (rev 17299) @@ -152,7 +152,7 @@ public void newLogLine(int level, Object src, String line) { - if (level > 1 || src == this || src == icon) + if (level > Logger.LOG_LEVEL_ERROR || src == this || src == icon) return; int msgType = ((level == 0) ? SysTrayIcon.MSG_ERROR : SysTrayIcon.MSG_WARNING); Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java 2008-01-25 19:32:12 UTC (rev 17298) +++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoardFactory.java 2008-01-26 11:58:33 UTC (rev 17299) @@ -44,7 +44,8 @@ "public", "sites", "test", - "privacy" + "privacy", + "software" }; From jflesch at freenetproject.org Sat Jan 26 12:28:57 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 26 Jan 2008 12:28:57 +0000 (UTC) Subject: [Thaw-dev] r17300 - in trunk/apps/Thaw/src/thaw: core fcp Message-ID: <20080126122857.75A003A0B76@freenetproject.org> Author: jflesch Date: 2008-01-26 12:28:57 +0000 (Sat, 26 Jan 2008) New Revision: 17300 Modified: trunk/apps/Thaw/src/thaw/core/Core.java trunk/apps/Thaw/src/thaw/core/MainWindow.java trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java Log: Fix reconnection process Modified: trunk/apps/Thaw/src/thaw/core/Core.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-26 11:58:33 UTC (rev 17299) +++ trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-26 12:28:57 UTC (rev 17300) @@ -43,7 +43,7 @@ private String lookAndFeel = null; public final static int MAX_CONNECT_TRIES = 3; - public final static int TIME_BETWEEN_EACH_TRY = 5000; + public final static int TIME_BETWEEN_EACH_TRY = 20000; private ReconnectionManager reconnectionManager = null; @@ -286,49 +286,33 @@ if((connection != null) && connection.isConnected()) { subDisconnect(); } - - if(connection == null) { - connection = new FCPConnection(config.getValue("nodeAddress"), - Integer.parseInt(config.getValue("nodePort")), - Integer.parseInt(config.getValue("maxUploadSpeed")), - Boolean.valueOf(config.getValue("multipleSockets")).booleanValue(), - Boolean.valueOf(config.getValue("sameComputer")).booleanValue(), - Boolean.valueOf(config.getValue("downloadLocally")).booleanValue()); - } else { /* connection is not recreate to avoid troubles with possible observers etc */ + + if (connection != null) connection.deleteObserver(this); - connection.setNodeAddress(config.getValue("nodeAddress")); - connection.setNodePort(Integer.parseInt(config.getValue("nodePort"))); - connection.setMaxUploadSpeed(Integer.parseInt(config.getValue("maxUploadSpeed"))); - connection.setDuplicationAllowed(Boolean.valueOf(config.getValue("multipleSockets")).booleanValue()); - connection.setLocalSocket(Boolean.valueOf(config.getValue("sameComputer")).booleanValue()); - connection.setAutoDownload(Boolean.valueOf(config.getValue("downloadLocally")).booleanValue()); - } + connection = new FCPConnection(config.getValue("nodeAddress"), + Integer.parseInt(config.getValue("nodePort")), + Integer.parseInt(config.getValue("maxUploadSpeed")), + Boolean.valueOf(config.getValue("multipleSockets")).booleanValue(), + Boolean.valueOf(config.getValue("sameComputer")).booleanValue(), + Boolean.valueOf(config.getValue("downloadLocally")).booleanValue()); + if(!connection.connect()) { Logger.warning(this, "Unable to connect !"); ret = false; } + + if (queryManager != null) + queryManager.deleteObserver(this); - if(queryManager == null) { - queryManager = new FCPQueryManager(connection); - queryManager.addObserver(this); - } + queryManager = new FCPQueryManager(connection); + queryManager.addObserver(this); - if(queueManager == null) - queueManager = new FCPQueueManager(queryManager, - config.getValue("thawId"), - Integer.parseInt(config.getValue("maxSimultaneousDownloads")), - Integer.parseInt(config.getValue("maxSimultaneousInsertions"))); - else { - queueManager.setThawId(config.getValue("thawId")); - queueManager.setMaxDownloads(Integer.parseInt(config.getValue("maxSimultaneousDownloads"))); - queueManager.setMaxInsertions(Integer.parseInt(config.getValue("maxSimultaneousInsertions"))); + queueManager = new FCPQueueManager(queryManager, + config.getValue("thawId"), + Integer.parseInt(config.getValue("maxSimultaneousDownloads")), + Integer.parseInt(config.getValue("maxSimultaneousInsertions"))); - } - - - - if(ret && connection.isConnected()) { queryManager.startListening(); @@ -604,9 +588,11 @@ protected class ReconnectionManager implements ThawRunnable { private boolean running = true; + private boolean initialWait = true; - public ReconnectionManager() { + public ReconnectionManager(boolean initialWait) { running = true; + this.initialWait = initialWait; } public void run() { @@ -623,10 +609,13 @@ while(running) { try { - Thread.sleep(Core.TIME_BETWEEN_EACH_TRY); + if (initialWait) + Thread.sleep(Core.TIME_BETWEEN_EACH_TRY); } catch(final java.lang.InterruptedException e) { // brouzouf } + + initialWait = false; Logger.notice(this, "Trying to reconnect ..."); if(initConnection()) @@ -644,9 +633,9 @@ if (running) { getPluginManager().loadAndRunPlugins(); } - + reconnectionManager = null; - + getMainWindow().connectionHasChanged(); } } @@ -660,10 +649,10 @@ /** * use Thread => will also do all the work related to the plugins */ - public void reconnect() { + public void reconnect(boolean withInitialWait) { synchronized(this) { if (reconnectionManager == null) { - reconnectionManager = new ReconnectionManager(); + reconnectionManager = new ReconnectionManager(withInitialWait); final Thread th = new ThawThread(reconnectionManager, "Reconnection manager", this); th.start(); @@ -708,7 +697,7 @@ Logger.debug(this, "Move on the connection (?)"); if ((o == connection) && !connection.isConnected()) { - reconnect(); + reconnect(true); } if ((o == queryManager) && target instanceof FCPMessage) { Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/MainWindow.java 2008-01-26 11:58:33 UTC (rev 17299) +++ trunk/apps/Thaw/src/thaw/core/MainWindow.java 2008-01-26 12:28:57 UTC (rev 17300) @@ -440,7 +440,7 @@ */ public void actionPerformed(final ActionEvent e) { if(e.getSource() == connectButton) { - core.reconnect(); + core.reconnect(false); } if(e.getSource() == disconnectButton) { @@ -470,7 +470,7 @@ return; } - core.reconnect(); + core.reconnect(false); } if(e.getSource() == optionsFileMenuItem) { Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2008-01-26 11:58:33 UTC (rev 17299) +++ trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2008-01-26 12:28:57 UTC (rev 17300) @@ -96,12 +96,14 @@ if(nodeName != null) { Logger.info(this, "Hello "+nodeName+", I'm Thaw :)"); + } else if (count >= (NODEHELLO_TIMEOUT*2)) { + Logger.warning(this, "Unable to connect, timeout ..."); + return false; } else { - Logger.warning(this, "Unable to connect, ID is probably already taken or there was a timeout"); + Logger.warning(this, "ID already used !"); return false; } - return true; } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-26 11:58:33 UTC (rev 17299) +++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-26 12:28:57 UTC (rev 17300) @@ -238,9 +238,9 @@ } /** - * Should be call by FCPBufferedStream. Not you. + * Should be call by FCPBufferedStream. */ - public synchronized boolean realRawWrite(final byte[] data) { + protected synchronized boolean realRawWrite(final byte[] data) { if((out != null) && (socket != null) && socket.isConnected()) { try { lastWrite = System.currentTimeMillis(); @@ -255,6 +255,12 @@ } } else { Logger.notice(this, "Cannot write if disconnected !"); + if (out == null) + Logger.notice(this, "^ no output stream ^"); + if (socket == null) + Logger.notice(this, "^ no socket ^"); + else if (!socket.isConnected()) + Logger.notice(this, "^ socket but not connected ^"); return false; } @@ -320,6 +326,12 @@ } } else { Logger.notice(this, "Cannot write if disconnected !"); + if (out == null) + Logger.notice(this, "^ no output stream ^"); + if (socket == null) + Logger.notice(this, "^ no socket ^"); + else if (!socket.isConnected()) + Logger.notice(this, "^ socket but not connected ^"); if (checkLock) removeFromWriterQueue(); return false; From jflesch at freenetproject.org Sat Jan 26 12:41:49 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 26 Jan 2008 12:41:49 +0000 (UTC) Subject: [Thaw-dev] r17301 - trunk/apps/Thaw/src/thaw/core Message-ID: <20080126124149.0D8984796E6@freenetproject.org> Author: jflesch Date: 2008-01-26 12:41:48 +0000 (Sat, 26 Jan 2008) New Revision: 17301 Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java Log: Make the main window remember its state when closing thaw (maximised, etc) Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/MainWindow.java 2008-01-26 12:28:57 UTC (rev 17300) +++ trunk/apps/Thaw/src/thaw/core/MainWindow.java 2008-01-26 12:41:48 UTC (rev 17301) @@ -197,7 +197,7 @@ core.getConnectionManager().addObserver(this); if (core.getConfig().getValue("mainWindowSizeX") != null - && core.getConfig().getValue("mainWindowSizeY") != null) { + && core.getConfig().getValue("mainWindowSizeY") != null) { try { mainWindow.setSize(Integer.parseInt(core.getConfig().getValue("mainWindowSizeX")), Integer.parseInt(core.getConfig().getValue("mainWindowSizeY"))); @@ -205,6 +205,10 @@ Logger.warning(this, "Exception while setting the main window size"); } } + + if (core.getConfig().getValue("mainWindowState") != null) { + mainWindow.setExtendedState(Integer.parseInt(core.getConfig().getValue("mainWindowState"))); + } } @@ -228,8 +232,9 @@ * Make the window visible or not. */ public void setVisible(final boolean v) { - if (!v || !core.isStopping()) + if (!v || !core.isStopping()) { mainWindow.setVisible(v); + } } @@ -522,6 +527,8 @@ Integer.toString((new Double(size.getWidth())).intValue())); core.getConfig().setValue("mainWindowSizeY", Integer.toString((new Double(size.getHeight())).intValue())); + core.getConfig().setValue("mainWindowState", + Integer.toString(mainWindow.getExtendedState())); } if(core == null) { From jflesch at freenetproject.org Sat Jan 26 13:04:32 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sat, 26 Jan 2008 13:04:32 +0000 (UTC) Subject: [Thaw-dev] r17302 - in trunk/apps/Thaw/src/thaw: core fcp plugins Message-ID: <20080126130432.177F93A0BC7@freenetproject.org> Author: jflesch Date: 2008-01-26 13:04:31 +0000 (Sat, 26 Jan 2008) New Revision: 17302 Modified: trunk/apps/Thaw/src/thaw/core/Core.java trunk/apps/Thaw/src/thaw/core/PluginConfigPanel.java trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java trunk/apps/Thaw/src/thaw/plugins/StatusBar.java Log: Fix a typo in the reconnection process Modified: trunk/apps/Thaw/src/thaw/core/Core.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-26 12:41:48 UTC (rev 17301) +++ trunk/apps/Thaw/src/thaw/core/Core.java 2008-01-26 13:04:31 UTC (rev 17302) @@ -615,7 +615,7 @@ // brouzouf } - initialWait = false; + initialWait = true; Logger.notice(this, "Trying to reconnect ..."); if(initConnection()) Modified: trunk/apps/Thaw/src/thaw/core/PluginConfigPanel.java =================================================================== --- trunk/apps/Thaw/src/thaw/core/PluginConfigPanel.java 2008-01-26 12:41:48 UTC (rev 17301) +++ trunk/apps/Thaw/src/thaw/core/PluginConfigPanel.java 2008-01-26 13:04:31 UTC (rev 17302) @@ -33,7 +33,10 @@ //refreshList(); mainPanel = new JPanel(new GridLayout(1, 1)); - mainPanel.add(new JScrollPane(pluginConfigPanel)); + + JScrollPane scroll = new JScrollPane(pluginConfigPanel); + scroll.getVerticalScrollBar().setUnitIncrement(10); + mainPanel.add(scroll); } Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-26 12:41:48 UTC (rev 17301) +++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2008-01-26 13:04:31 UTC (rev 17302) @@ -45,8 +45,6 @@ private int writersWaiting; private Object monitor; - private long lastWrite = 0; /* real writes ; System.currentTimeMillis() */ - private boolean duplicationAllowed = true; private boolean localSocket = false; private boolean autoDownload = true; @@ -201,7 +199,6 @@ rawBytesWaiting = 0; writersWaiting = 0; - lastWrite = 0; Logger.info(this, "Connected"); @@ -243,8 +240,6 @@ protected synchronized boolean realRawWrite(final byte[] data) { if((out != null) && (socket != null) && socket.isConnected()) { try { - lastWrite = System.currentTimeMillis(); - out.write(data); out.flush(); } catch(final java.io.IOException e) { @@ -293,12 +288,13 @@ monitor.notify(); } } - + public boolean isWriting() { - if( !isConnected() ) + if( !isConnected() ) { return false; + } - return ( (writersWaiting > 0) || ((System.currentTimeMillis() - lastWrite) < 300) ); + return (writersWaiting > 0); } public boolean write(final String toWrite) { @@ -435,7 +431,7 @@ if(c == -1) { if(isConnected()) - Logger.error(this, "Unable to read but still connected"); + Logger.warning(this, "Unable to read but still connected"); else Logger.notice(this, "Disconnected"); Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java =================================================================== --- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-26 12:41:48 UTC (rev 17301) +++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2008-01-26 13:04:31 UTC (rev 17302) @@ -480,12 +480,10 @@ try { if(queryManager.getConnection().isConnected() - && !queryManager.getConnection().isWriting() && queueCompleted) schedule(); - if(queryManager.getConnection().isConnected() - && !queryManager.getConnection().isWriting()) + if(queryManager.getConnection().isConnected()) updateStats(); Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2008-01-26 12:41:48 UTC (rev 17301) +++ trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2008-01-26 13:04:31 UTC (rev 17302) @@ -178,7 +178,7 @@ public void stop() { running = false; - + Logger.removeLogListener(this); core.getMainWindow().setStatus(IconBox.blueBunny, "Thaw "+Main.VERSION); } From jflesch at freenetproject.org Sun Jan 27 12:03:00 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sun, 27 Jan 2008 12:03:00 +0000 (UTC) Subject: [Thaw-dev] r17313 - trunk/apps/Thaw/src/thaw/plugins Message-ID: <20080127120300.2CA7148215D@freenetproject.org> Author: jflesch Date: 2008-01-27 12:02:59 +0000 (Sun, 27 Jan 2008) New Revision: 17313 Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java Log: TrayIcon : Fix the reading of the config value 'disableTrayIconPopups' Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java =================================================================== --- trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2008-01-26 20:34:57 UTC (rev 17312) +++ trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2008-01-27 12:02:59 UTC (rev 17313) @@ -142,7 +142,7 @@ String cfg; if ( (cfg = config.getValue("disableTrayIconPopups")) != null ) - if (Boolean.TRUE.equals(cfg)) + if (Boolean.TRUE.equals(Boolean.valueOf(cfg))) return false; icon.popMessage(title, message, msgType); @@ -227,7 +227,7 @@ private JPanel getTransferPanel(FCPTransferQuery q) { - JPanel p = new JPanel(new GridLayout(2, 1)); + JPanel p = new JPanel(new GridLayout(2, 1, 5, 5)); String txt = q.getFilename(); From jflesch at freenetproject.org Sun Jan 27 12:11:51 2008 From: jflesch at freenetproject.org (jflesch at freenetproject.org) Date: Sun, 27 Jan 2008 12:11:51 +0000 (UTC) Subject: [Thaw-dev] r17314 - in trunk/apps/Thaw/src/thaw: fcp plugins/queueWatcher Message-ID: <20080127121151.2E3DD4793B8@freenetproject.org> Author: jflesch Date: 2008-01-27 12:11:50 +0000 (Sun, 27 Jan 2008) New Revision: 17314 Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java trunk/apps/Thaw/src/thaw/plugins/queueWat