From 6e4df8830a01d4e83e6279aef93a37fadca08c28 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 23 May 2011 19:19:07 +0000
Subject: [PATCH]       - Force news refetch after URL change

---
 .../net/i2p/router/web/ConfigUpdateHandler.java    |  4 ++--
 .../java/src/net/i2p/router/web/NewsFetcher.java   | 14 ++++++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
index 47f9eb242c..d5e68965e9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
@@ -1,6 +1,5 @@
 package net.i2p.router.web;
 
-import net.i2p.I2PAppContext;
 import net.i2p.crypto.TrustedUpdate;
 import net.i2p.data.DataHelper;
 import net.i2p.util.FileUtil;
@@ -78,7 +77,7 @@ public class ConfigUpdateHandler extends FormHandler {
         if (_action == null)
             return;
         if (_action.equals(_("Check for updates"))) {
-            NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());
+            NewsFetcher fetcher = NewsFetcher.getInstance(_context);
             fetcher.fetchNews();
             if (fetcher.shouldFetchUnsigned())
                 fetcher.fetchUnsignedHead();
@@ -100,6 +99,7 @@ public class ConfigUpdateHandler extends FormHandler {
             String oldURL = ConfigUpdateHelper.getNewsURL(_context);
             if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
                 _context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
+                NewsFetcher.getInstance(_context).invalidateNews();
                 addFormNotice(_("Updating news URL to") + " " + _newsURL);
             }
         }
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 562c3e7cad..1f1cd4098d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java
@@ -33,6 +33,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
     private String _updateVersion;
     private String _unsignedUpdateVersion;
     private String _lastModified;
+    private boolean _invalidated;
     private File _newsFile;
     private File _tempFile;
     private static NewsFetcher _instance;
@@ -134,6 +135,8 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
     }
     
     private boolean shouldFetchNews() {
+        if (_invalidated)
+            return true;
         updateLastFetched();
         String freq = _context.getProperty(ConfigUpdateHandler.PROP_REFRESH_FREQUENCY,
                                            ConfigUpdateHandler.DEFAULT_REFRESH_FREQUENCY);
@@ -155,6 +158,16 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
             return false;
         }
     }
+
+    /**
+     *  Call this when changing news URLs to force an update next time the timer fires.
+     *  @since 0.8.7
+     */
+    void invalidateNews() {
+        _lastModified = null;
+        _invalidated = true;
+    }
+
     public void fetchNews() {
         String newsURL = ConfigUpdateHelper.getNewsURL(_context);
         boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
@@ -172,6 +185,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
             get.addStatusListener(this);
             if (get.fetch()) {
                 _lastModified = get.getLastModified();
+                _invalidated = false;
             } else {
                 // backup news location - always proxied
                 _tempFile.delete();
-- 
GitLab