diff --git a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
index 55d45711b..4c93be790 100644
--- a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
+++ b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java
@@ -3,6 +3,7 @@ package net.i2p.syndie;
import java.io.*;
import java.text.*;
import java.util.*;
+
import net.i2p.I2PAppContext;
import net.i2p.client.naming.PetName;
import net.i2p.client.naming.PetNameDB;
@@ -277,6 +278,8 @@ public class BlogManager {
public String getDefaultProxyHost() { return _context.getProperty("syndie.defaultProxyHost", ""); }
public String getDefaultProxyPort() { return _context.getProperty("syndie.defaultProxyPort", ""); }
+ public int getUpdateDelay() { return Integer.parseInt(_context.getProperty("syndie.updateDelay", "1")); }
+ public String[] getUpdateArchives() { return _context.getProperty("syndie.updateArchives", "").split(","); }
public boolean authorizeAdmin(String pass) {
if (isSingleUser()) return true;
diff --git a/apps/syndie/java/src/net/i2p/syndie/Updater.java b/apps/syndie/java/src/net/i2p/syndie/Updater.java
new file mode 100644
index 000000000..9363acf88
--- /dev/null
+++ b/apps/syndie/java/src/net/i2p/syndie/Updater.java
@@ -0,0 +1,65 @@
+package net.i2p.syndie;
+
+import java.util.HashMap;
+
+import net.i2p.I2PAppContext;
+import net.i2p.util.Log;
+import net.i2p.syndie.web.RemoteArchiveBean;
+
+public class Updater {
+ public static final String VERSION = "1.0";
+ private static final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(Updater.class);
+ private static final Updater _instance = new Updater();
+
+ public void update() {
+ _log.debug("Update started.");
+ BlogManager bm = BlogManager.instance();
+ User user = new User();
+ RemoteArchiveBean rab = new RemoteArchiveBean();
+ String[] archives = bm.getUpdateArchives();
+ for (int i = 0; i < archives.length; i++) {
+ _log.debug("Fetching " + archives[i]);
+ rab.fetchIndex(user, "web", archives[i], bm.getDefaultProxyHost(), bm.getDefaultProxyPort());
+ if (rab.getRemoteIndex() != null) {
+ _log.debug("Index fetched, getting new entries.");
+ HashMap parameters = new HashMap();
+ parameters.put("action", "Fetch all new entries");
+ //rab.fetchSelectedBulk(user, parameters);
+ rab.fetchAllEntries(user, parameters);
+ _log.debug("Update finished.");
+ } else {
+ _log.debug("Index fetch failed.");
+ }
+ }
+ }
+
+ public static void main() {
+ _instance.run();
+ }
+
+ public void run() {
+
+ // wait
+ try {
+ Thread.currentThread().sleep(5*60*1000);
+ } catch (InterruptedException ie) {}
+
+ while (true) {
+ int delay = BlogManager.instance().getUpdateDelay();
+ update();
+ try {
+ synchronized (this) {
+ wait(delay * 60 * 60 * 1000);
+ }
+ } catch (InterruptedException exp) {
+ }
+
+ }
+ }
+
+ public static void wakeup() {
+ synchronized (_instance) {
+ _instance.notifyAll();
+ }
+ }
+}
\ No newline at end of file
diff --git a/apps/syndie/java/src/net/i2p/syndie/UpdaterServlet.java b/apps/syndie/java/src/net/i2p/syndie/UpdaterServlet.java
new file mode 100644
index 000000000..70c67181e
--- /dev/null
+++ b/apps/syndie/java/src/net/i2p/syndie/UpdaterServlet.java
@@ -0,0 +1,37 @@
+package net.i2p.syndie;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+
+/**
+ * A wrapper for syndie updater to allow it to be started as a web application.
+ *
+ * @author Ragnarok
+ *
+ */
+public class UpdaterServlet extends GenericServlet {
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
+ */
+ public void service(ServletRequest request, ServletResponse response) {
+ }
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
+ */
+ public void init(ServletConfig config) {
+ try {
+ super.init(config);
+ } catch (ServletException exp) {
+ }
+ UpdaterThread thread = new UpdaterThread();
+ thread.setDaemon(true);
+ thread.start();
+ System.out.println("INFO: Starting Syndie Updater " + Updater.VERSION);
+ }
+
+}
\ No newline at end of file
diff --git a/apps/syndie/java/src/net/i2p/syndie/UpdaterThread.java b/apps/syndie/java/src/net/i2p/syndie/UpdaterThread.java
new file mode 100644
index 000000000..fda8a09a5
--- /dev/null
+++ b/apps/syndie/java/src/net/i2p/syndie/UpdaterThread.java
@@ -0,0 +1,27 @@
+package net.i2p.syndie;
+
+/**
+ * A thread that runs the updater.
+ *
+ * @author Ragnarok
+ *
+ */
+public class UpdaterThread extends Thread {
+
+ /**
+ * Construct an UpdaterThread.
+ */
+ public UpdaterThread() {
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ //try {
+ // Thread.sleep(5 * 60 * 1000);
+ //} catch (InterruptedException exp) {
+ //}
+ Updater.main();
+ }
+}
\ No newline at end of file
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 489123276..07a3389ab 100644
--- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java
+++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java
@@ -297,18 +297,24 @@ public class RemoteArchiveBean {
_statusMessages.add("Fetching index from " + HTMLRenderer.sanitizeString(_remoteLocation) +
(_proxyHost != null ? " via " + HTMLRenderer.sanitizeString(_proxyHost) + ":" + _proxyPort : ""));
- File archiveFile = new File(BlogManager.instance().getTempDir(), user.getBlog().toBase64() + "_remoteArchive.txt");
+
+ File archiveFile;
+ if (user.getBlog() != null) {
+ archiveFile = new File(BlogManager.instance().getTempDir(), user.getBlog().toBase64() + "_remoteArchive.txt");
+ } else {
+ archiveFile = new File(BlogManager.instance().getTempDir(), "remoteArchive.txt");
+ }
archiveFile.delete();
Properties etags = new Properties();
try {
- etags.load(new FileInputStream(new File(BlogManager.instance().getRootDir(), "etags")));
- } catch (Exception exp) {
+ DataHelper.loadProps(etags, new File(BlogManager.instance().getRootDir(), "etags"));
+ } catch (IOException ioe) {
//ignore
}
EepGet eep = new EepGet(I2PAppContext.getGlobalContext(), ((_proxyHost != null) && (_proxyPort > 0)),
- _proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location, etags.getProperty(location));
+ _proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location, true, etags.getProperty(location));
eep.addStatusListener(new IndexFetcherStatusListener(archiveFile));
eep.fetch();
@@ -316,8 +322,8 @@ public class RemoteArchiveBean {
etags.setProperty(location, eep.getETag());
}
try {
- etags.store(new FileOutputStream(new File(BlogManager.instance().getRootDir(), "etags")), "etags");
- } catch (Exception exp) {
+ DataHelper.storeProps(etags, new File(BlogManager.instance().getRootDir(), "etags"));
+ } catch (IOException ioe) {
//ignore
}
}
diff --git a/apps/syndie/jsp/web.xml b/apps/syndie/jsp/web.xml
index bb86268a5..1f5798c83 100644
--- a/apps/syndie/jsp/web.xml
+++ b/apps/syndie/jsp/web.xml
@@ -14,6 +14,12 @@
net.i2p.syndie.web.RSSServlet
+
+ net.i2p.syndie.UpdaterServlet
+ net.i2p.syndie.UpdaterServlet
+ 1
+
+
diff --git a/history.txt b/history.txt
index 631e4a382..36c43f4f0 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,13 @@
-$Id: history.txt,v 1.276 2005/09/30 19:57:34 ragnarok Exp $
+$Id: history.txt,v 1.277 2005/10/01 14:20:10 jrandom Exp $
+
+2005-10-03 ragnarok
+ * Implemented a Syndie auto-updater. It will automatically pull new posts
+ from selected syndie archives. To try it out, add
+ syndie.updateArchives= to your
+ syndie.config. Archives must be specified as the full url to archive.txt
+ (e.g. http://syndiemedia.i2p/archive/archive.txt). By default, it checks
+ for new posts every hour. This can be modified by setting
+ syndie.updateDelay= also in syndie.config.
* 2005-10-01 0.6.1.1 released