News: connect it all together (ticket #1425):

- Enable new NewsManager to load/store feed items on disk by UUID
 - News items are stored forever, not lost when they are removed from feed
 - News read in once at startup, not at every summary bar refresh
 - Convert old initialNews.xml and news.xml to NewsEntry format
 - Limit display to 2 news items in summary bar, /home and /console
 - New /news page to show all news
This commit is contained in:
zzz
2015-09-15 13:33:29 +00:00
parent a2e38503fe
commit addc9c5ca3
11 changed files with 130 additions and 81 deletions

View File

@@ -21,12 +21,14 @@ import java.util.Map;
import java.util.StringTokenizer;
import java.util.TimeZone;
import net.i2p.app.ClientAppManager;
import net.i2p.crypto.SU3File;
import net.i2p.crypto.TrustedUpdate;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterVersion;
import net.i2p.router.news.NewsEntry;
import net.i2p.router.news.NewsManager;
import net.i2p.router.news.NewsMetadata;
import net.i2p.router.news.NewsXMLParser;
import net.i2p.router.util.RFC822Date;
@@ -45,6 +47,8 @@ import net.i2p.util.SSLEepGet;
import net.i2p.util.Translate;
import net.i2p.util.VersionComparator;
import org.cybergarage.xml.Node;
/**
* Task to fetch updates to the news.xml, and to keep
* track of whether that has an announcement for a new version.
@@ -475,10 +479,21 @@ class NewsFetcher extends UpdateRunner {
xml = to1;
}
NewsXMLParser parser = new NewsXMLParser(_context);
parser.parse(xml);
Node root = parser.parse(xml);
xml.delete();
NewsMetadata data = parser.getMetadata();
List<NewsEntry> entries = parser.getEntries();
// add entries to the news manager
ClientAppManager cmgr = _context.clientAppManager();
if (cmgr != null) {
NewsManager nmgr = (NewsManager) cmgr.getRegisteredApp(NewsManager.APP_NAME);
if (nmgr != null) {
nmgr.addEntries(entries);
List<Node> nodes = NewsXMLParser.getNodes(root, "entry");
nmgr.storeEntries(nodes);
}
}
// store entries and metadata in old news.xml format
String sudVersion = su3.getVersionString();
String signingKeyName = su3.getSignerString();
File to3 = new File(_context.getTempDir(), "tmp3-" + _context.random().nextInt() + ".xml");