Use the “default” manifest putter because it’s actually not the default.
[jSite.git] / src / de / todesbaum / jsite / application / ProjectInserter.java
index 9373fa4..6b21697 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * jSite - a tool for uploading websites into Freenet
- * Copyright (C) 2006 David Roden
+ * jSite - ProjectInserter.java - Copyright © 2006–2011 David Roden
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,6 +43,7 @@ import de.todesbaum.jsite.gui.FileScanner;
 import de.todesbaum.jsite.gui.FileScannerListener;
 import de.todesbaum.util.freenet.fcp2.Client;
 import de.todesbaum.util.freenet.fcp2.ClientPutComplexDir;
+import de.todesbaum.util.freenet.fcp2.ClientPutDir.ManifestPutter;
 import de.todesbaum.util.freenet.fcp2.Connection;
 import de.todesbaum.util.freenet.fcp2.DirectFileEntry;
 import de.todesbaum.util.freenet.fcp2.FileEntry;
@@ -53,6 +53,7 @@ import de.todesbaum.util.freenet.fcp2.Verbosity;
 import de.todesbaum.util.io.Closer;
 import de.todesbaum.util.io.ReplacingOutputStream;
 import de.todesbaum.util.io.StreamCopier;
+import de.todesbaum.util.io.StreamCopier.ProgressListener;
 
 /**
  * Manages project inserts.
@@ -94,6 +95,9 @@ public class ProjectInserter implements FileScannerListener, Runnable {
        /** Whether the insert is cancelled. */
        private volatile boolean cancelled = false;
 
+       /** Progress listener for payload transfers. */
+       private ProgressListener progressListener;
+
        /**
         * Adds a listener to the list of registered listeners.
         *
@@ -221,9 +225,13 @@ public class ProjectInserter implements FileScannerListener, Runnable {
 
        /**
         * Starts the insert.
+        *
+        * @param progressListener
+        *            Listener to notify on progress events
         */
-       public void start() {
+       public void start(ProgressListener progressListener) {
                cancelled = false;
+               this.progressListener = progressListener;
                fileScanner = new FileScanner(project);
                fileScanner.addFileScannerListener(this);
                new Thread(fileScanner).start();
@@ -429,7 +437,7 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                        }
                }
                String indexFile = project.getIndexFile();
-               boolean hasIndexFile = (indexFile != null);
+               boolean hasIndexFile = (indexFile != null) && (indexFile.length() > 0);
                if (hasIndexFile && !project.getFileOption(indexFile).getContainer().equals("")) {
                        checkReport.addIssue("warning.container-index", false);
                }
@@ -515,6 +523,7 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                putDir.setVerbosity(Verbosity.ALL);
                putDir.setMaxRetries(-1);
                putDir.setEarlyEncode(false);
+               putDir.setManifestPutter(ManifestPutter.DEFAULT);
                for (String filename : files) {
                        FileEntry fileEntry = createFileEntry(filename, edition, containerFiles);
                        if (fileEntry != null) {
@@ -529,7 +538,8 @@ public class ProjectInserter implements FileScannerListener, Runnable {
 
                /* start request */
                try {
-                       client.execute(putDir);
+                       client.execute(putDir, progressListener);
+                       fireProjectUploadFinished();
                } catch (IOException ioe1) {
                        fireProjectInsertFinished(false, ioe1);
                        return;
@@ -537,17 +547,12 @@ public class ProjectInserter implements FileScannerListener, Runnable {
 
                /* parse progress and success messages */
                String finalURI = null;
-               boolean firstMessage = true;
                boolean success = false;
                boolean finished = false;
                boolean disconnected = false;
                while (!finished && !cancelled) {
                        Message message = client.readMessage();
                        finished = (message == null) || (disconnected = client.isDisconnected());
-                       if (firstMessage) {
-                               fireProjectUploadFinished();
-                               firstMessage = false;
-                       }
                        logger.log(Level.FINE, "Received message: " + message);
                        if (!finished) {
                                @SuppressWarnings("null")
@@ -564,8 +569,8 @@ public class ProjectInserter implements FileScannerListener, Runnable {
                                        boolean finalized = Boolean.parseBoolean(message.get("FinalizedTotal"));
                                        fireProjectInsertProgress(succeeded, failed, fatal, total, finalized);
                                }
-                               success = "PutSuccessful".equals(messageName);
-                               finished = success || "PutFailed".equals(messageName) || messageName.endsWith("Error");
+                               success |= "PutSuccessful".equals(messageName);
+                               finished = (success && (finalURI != null)) || "PutFailed".equals(messageName) || messageName.endsWith("Error");
                        }
                }