package net.i2p.router.web;
import java.text.DateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientAppManager;
import net.i2p.data.DataHelper;
import net.i2p.router.news.NewsEntry;
import net.i2p.router.news.NewsManager;
import net.i2p.util.SystemVersion;
/**
* HTML-formatted full news entries
*
* @since 0.9.23
*/
public class NewsFeedHelper extends HelperBase {
private int _start;
private int _limit = 2;
/**
* @param limit less than or equal to zero means all
*/
public void setLimit(int limit) {
_limit = limit;
}
public void setStart(int start) {
_start = start;
}
public String getEntries() {
return getEntries(_context, _start, _limit, 0);
}
/**
* @param max less than or equal to zero means all
* @param ageLimit time before now, less than or equal to zero means all (after the first)
* @return non-null, "" if none
*/
static String getEntries(I2PAppContext ctx, int start, int max, long ageLimit) {
if (max <= 0)
max = Integer.MAX_VALUE;
StringBuilder buf = new StringBuilder(512);
List<NewsEntry> entries = Collections.emptyList();
ClientAppManager cmgr = ctx.clientAppManager();
if (cmgr != null) {
NewsManager nmgr = (NewsManager) cmgr.getRegisteredApp(NewsManager.APP_NAME);
if (nmgr != null) {
entries = nmgr.getEntries();
NewsEntry init = nmgr.getInitialNews();
if (init != null) {
// crude check to see if it's already in there
if (entries.size() != 1 || !DataHelper.eq(entries.get(0).title, init.title))
if (entries.isEmpty())
entries = Collections.singletonList(init); // in case it was an emtpyList
else
entries.add(init);
}
}
}
if (!entries.isEmpty()) {
DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT);
// the router sets the JVM time zone to UTC but saves the original here so we can get it
fmt.setTimeZone(SystemVersion.getSystemTimeZone(ctx));
int i = 0;
for (NewsEntry entry : entries) {
if (i < start)
continue;
if (i > start && entry.updated > 0 && ageLimit > 0 &&
entry.updated < ctx.clock().now() - ageLimit)
break;
buf.append("<div class=\"newsentry\"><h3>");
if (entry.updated > 0) {
Date date = new Date(entry.updated);
buf.append("<font size=\"-1\">")
.append(fmt.format(date))
.append(":</font> ");
}
if (entry.link != null)
buf.append("<a href=\"").append(DataHelper.escapeHTML(entry.link)).append("\">");
buf.append(entry.title);
if (entry.link != null)
buf.append("</a>");
if (entry.authorName != null) {
buf.append(" <font size=\"-2\">(<i>")
.append(Messages.getString("by {0}", DataHelper.escapeHTML(entry.authorName), ctx))
.append("</i>)</font>\n");
}
buf.append("</h3>\n<div class=\"newscontent\">\n")
.append(entry.content)
.append("\n</div></div>\n");
if (++i >= start + max)
break;
}
}
return buf.toString();
}
}