diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java b/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java
index 0a8cff21b..56d61867d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java
@@ -198,7 +198,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {
// ignore
}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
if (_log.shouldLog(Log.INFO))
_log.info("News fetched from " + url + " with " + (alreadyTransferred+bytesTransferred));
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java
index d3d3c3078..4979f8a9e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java
@@ -144,7 +144,7 @@ public class UpdateHandler {
buf.append(" transferred
");
_status = buf.toString();
}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
_status = "Update downloaded
";
TrustedUpdate up = new TrustedUpdate(_context);
boolean ok = up.migrateVerified(RouterVersion.VERSION, SIGNED_UPDATE_FILE, "i2pupdate.zip");
diff --git a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java
index 3a5c4b37e..759c28cdb 100644
--- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java
+++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java
@@ -332,16 +332,18 @@ public class RemoteArchiveBean {
}
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
_statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful");
_fetchIndexInProgress = false;
ArchiveIndex i = new ArchiveIndex(I2PAppContext.getGlobalContext(), false);
- try {
- i.load(_archiveFile);
- _statusMessages.add("Archive fetched and loaded");
- _remoteIndex = i;
- } catch (IOException ioe) {
- _statusMessages.add("Archive is corrupt: " + ioe.getMessage());
+ if (!notModified) {
+ try {
+ i.load(_archiveFile);
+ _statusMessages.add("Archive fetched and loaded");
+ _remoteIndex = i;
+ } catch (IOException ioe) {
+ _statusMessages.add("Archive is corrupt: " + ioe.getMessage());
+ }
}
}
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) {
@@ -366,7 +368,7 @@ public class RemoteArchiveBean {
}
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
handleMetadata(url, outputFile);
}
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) {
@@ -406,7 +408,7 @@ public class RemoteArchiveBean {
}
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
if (url.endsWith(".snm")) {
handleMetadata(url, outputFile);
return;
@@ -465,7 +467,7 @@ public class RemoteArchiveBean {
}
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
_statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url.substring(0, url.indexOf('?'))) + " successful, importing the data");
File file = new File(outputFile);
ZipInputStream zi = null;
diff --git a/core/java/src/net/i2p/util/EepGet.java b/core/java/src/net/i2p/util/EepGet.java
index 5e2eaee4b..91fb68614 100644
--- a/core/java/src/net/i2p/util/EepGet.java
+++ b/core/java/src/net/i2p/util/EepGet.java
@@ -50,6 +50,7 @@ public class EepGet {
private int _currentAttempt;
private String _etag;
private boolean _encodingChunked;
+ private boolean _notModified;
public EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url) {
this(ctx, true, proxyHost, proxyPort, numRetries, outputFile, url);
@@ -173,7 +174,7 @@ public class EepGet {
public static interface StatusListener {
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url);
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile);
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified);
public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause);
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt);
public void headerReceived(String url, int currentAttempt, String key, String val);
@@ -236,12 +237,16 @@ public class EepGet {
}
}
}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
System.out.println();
System.out.println("== " + new Date());
- System.out.println("== Transfer of " + url + " completed with " + (alreadyTransferred+bytesTransferred)
- + " and " + (bytesRemaining - bytesTransferred) + " remaining");
- System.out.println("== Output saved to " + outputFile);
+ if (notModified) {
+ System.out.println("== Source not modified since last download");
+ } else {
+ System.out.println("== Transfer of " + url + " completed with " + (alreadyTransferred+bytesTransferred)
+ + " and " + (bytesRemaining - bytesTransferred) + " remaining");
+ System.out.println("== Output saved to " + outputFile);
+ }
long timeToSend = _context.clock().now() - _startedOn;
System.out.println("== Transfer time: " + DataHelper.formatDuration(timeToSend));
System.out.println("== ETag: " + _etag);
@@ -359,7 +364,7 @@ public class EepGet {
if ( (_bytesRemaining == -1) || (remaining == 0) ){
for (int i = 0; i < _listeners.size(); i++)
- ((StatusListener)_listeners.get(i)).transferComplete(_alreadyTransferred, _bytesTransferred, _bytesRemaining, _url, _outputFile);
+ ((StatusListener)_listeners.get(i)).transferComplete(_alreadyTransferred, _bytesTransferred, _bytesRemaining, _url, _outputFile, _notModified);
} else {
throw new IOException("Disconnection on attempt " + _currentAttempt + " after " + _bytesTransferred);
}
@@ -386,6 +391,7 @@ public class EepGet {
case 304: // not modified
_bytesRemaining = 0;
_keepFetching = false;
+ _notModified = true;
return;
case 416: // completed (or range out of reach)
_bytesRemaining = 0;
@@ -612,5 +618,9 @@ public class EepGet {
public String getETag() {
return _etag;
}
+
+ public boolean getNotModified() {
+ return _notModified;
+ }
}
diff --git a/core/java/src/net/i2p/util/EepGetScheduler.java b/core/java/src/net/i2p/util/EepGetScheduler.java
index 04d1f65ca..f3aa173cd 100644
--- a/core/java/src/net/i2p/util/EepGetScheduler.java
+++ b/core/java/src/net/i2p/util/EepGetScheduler.java
@@ -59,8 +59,8 @@ public class EepGetScheduler implements EepGet.StatusListener {
_listener.bytesTransferred(alreadyTransferred, currentWrite, bytesTransferred, bytesRemaining, url);
}
- public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
- _listener.transferComplete(alreadyTransferred, bytesTransferred, bytesRemaining, url, outputFile);
+ public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
+ _listener.transferComplete(alreadyTransferred, bytesTransferred, bytesRemaining, url, outputFile, notModified);
fetchNext();
}
diff --git a/history.txt b/history.txt
index ed5f3de10..832150c6e 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,7 @@
-$Id: history.txt,v 1.274 2005/09/30 15:29:19 jrandom Exp $
+$Id: history.txt,v 1.275 2005/09/30 18:12:57 jrandom Exp $
+
+2005-09-30 ragnarok
+ * Implemented conditional get for syndie remote archive imports.
2005-09-30 jrandom
* Killed three more streaming lib bugs, one of which caused excess packets