From bbfb8583c7ea26882df6b98faf3bff5cba2e0940 Mon Sep 17 00:00:00 2001 From: sponge Date: Fri, 26 Nov 2010 22:31:59 +0000 Subject: [PATCH] i2psnark: Add theme change and theme selection storage abilities. --- .../src/org/klomp/snark/SnarkManager.java | 52 ++++++++- .../org/klomp/snark/web/I2PSnarkServlet.java | 102 ++++++++++-------- history.txt | 3 + .../src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 110 insertions(+), 49 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 41d0f0ec23..77317aff06 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -1,6 +1,7 @@ package org.klomp.snark; import java.io.File; +import java.io.FileFilter; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; @@ -14,6 +15,7 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeMap; +import java.util.Collection; import net.i2p.I2PAppContext; import net.i2p.data.Base64; @@ -62,7 +64,9 @@ public class SnarkManager implements Snark.CompleteListener { public static final String PROP_LINK_PREFIX = "i2psnark.linkPrefix"; public static final String DEFAULT_LINK_PREFIX = "file:///"; public static final String PROP_STARTUP_DELAY = "i2psnark.startupDelay"; - + public static final String PROP_THEME = "i2psnark.theme"; + public static final String DEFAULT_THEME = "ubergine"; + public static final int MIN_UP_BW = 2; public static final int DEFAULT_MAX_UP_BW = 10; public static final int DEFAULT_STARTUP_DELAY = 3; @@ -137,7 +141,7 @@ public class SnarkManager implements Snark.CompleteListener { f = new SecureDirectory(_context.getAppDir(), dir); return f; } - + /** null to set initial defaults */ public void loadConfig(String filename) { if (_config == null) @@ -172,11 +176,44 @@ public class SnarkManager implements Snark.CompleteListener { _config.setProperty(PROP_DIR, "i2psnark"); if (!_config.containsKey(PROP_AUTO_START)) _config.setProperty(PROP_AUTO_START, DEFAULT_AUTO_START); - if (!_config.containsKey(PROP_STARTUP_DELAY)) + if (!_config.containsKey(PROP_STARTUP_DELAY)) _config.setProperty(PROP_STARTUP_DELAY, "" + DEFAULT_STARTUP_DELAY); - + if (!_config.containsKey(PROP_THEME)) + _config.setProperty(PROP_THEME, "" + DEFAULT_THEME); updateConfig(); } + /** + * Get current theme. + * @return String -- the current theme + */ + public String getTheme() { + String theme = _config.getProperty(PROP_THEME); + return theme; + } + + /** + * Get all themes + * @return String[] -- Array of all the themes found. + */ + public String[] getThemes() { + String[] themes = null; + // "docs/themes/snark/" + String fsc = new String(""+File.separatorChar); + String look = _context.getConfigDir() + fsc + "docs" + fsc +"themes" + fsc + "snark" + fsc; + FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } }; + // Walk the themes dir, collecting the theme names, and append them to the map + File dir = new File(look); + File[] dirnames = dir.listFiles(fileFilter); + if (dirnames != null) { + themes = new String[dirnames.length]; + for(int i = 0; i < dirnames.length; i++) { + themes[i] = dirnames[i].getName(); + } + } + // return the map. + return themes; + } + /** call from DirMonitor since loadConfig() is called before router I2CP is up */ private void getBWLimit() { @@ -234,7 +271,7 @@ public class SnarkManager implements Snark.CompleteListener { public void updateConfig(String dataDir, boolean autoStart, String startDelay, String seedPct, String eepHost, String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts, - String upLimit, String upBW, boolean useOpenTrackers, String openTrackers) { + String upLimit, String upBW, boolean useOpenTrackers, String openTrackers, String Theme) { boolean changed = false; //if (eepHost != null) { // // unused, we use socket eepget @@ -397,6 +434,11 @@ public class SnarkManager implements Snark.CompleteListener { changed = true; } } + if (Theme != null) { + _config.setProperty(PROP_THEME, Theme +""); + addMessage(_("Theme changed.")); + changed = true; + } if (changed) { saveConfig(); } else { diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index f49178b0f5..d696cbdf88 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -57,7 +57,7 @@ public class I2PSnarkServlet extends Default { private Resource _resourceBase; public static final String PROP_CONFIG_FILE = "i2psnark.configFile"; - + @Override public void init(ServletConfig cfg) throws ServletException { _context = I2PAppContext.getGlobalContext(); @@ -171,7 +171,7 @@ public class I2PSnarkServlet extends Default { PrintWriter out = resp.getWriter(); out.write("\n" + - "\n" + + "\n" + ""); out.write(_("I2PSnark - Anonymous BitTorrent Client")); if ("2".equals(peerParam)) @@ -181,21 +181,21 @@ public class I2PSnarkServlet extends Default { // we want it to go to the base URI so we don't refresh with some funky action= value if (!isConfigure) out.write("<meta http-equiv=\"refresh\" content=\"60;" + req.getRequestURI() + peerString + "\">\n"); - out.write(HEADER); + out.write(HEADER_A + _manager.getTheme() + HEADER_B); out.write("</head><body>"); out.write("<center>"); if (isConfigure) { out.write("<div class=\"snarknavbar\"><a href=\"/i2psnark/\" title=\""); out.write(_("Torrents")); out.write("\" class=\"snarkRefresh\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/arrow_refresh.png\"> "); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/arrow_refresh.png\"> "); out.write(_("I2PSnark")); out.write("</a>"); } else { out.write("<div class=\"snarknavbar\"><a href=\"" + req.getRequestURI() + peerString + "\" title=\""); out.write(_("Refresh page")); out.write("\" class=\"snarkRefresh\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/arrow_refresh.png\"> "); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/arrow_refresh.png\"> "); out.write(_("I2PSnark")); out.write("</a> <a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">"); out.write(_("Forum")); @@ -253,7 +253,7 @@ public class I2PSnarkServlet extends Default { out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n"); } out.write(TABLE_HEADER); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/status.png\""); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/status.png\""); out.write(" title=\""); out.write(_("Status")); out.write("\"> "); @@ -263,14 +263,14 @@ public class I2PSnarkServlet extends Default { out.write(req.getRequestURI()); if (peerParam != null) { out.write("\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/showpeers.png\" title=\""); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/showpeers.png\" title=\""); out.write(_("Hide Peers")); out.write("\" alt=\""); out.write(_("Hide Peers")); out.write("\">"); } else { out.write("?p=1\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/hidepeers.png\" title=\""); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/hidepeers.png\" title=\""); out.write(_("Show Peers")); out.write("\" alt=\""); out.write(_("Show Peers")); @@ -279,12 +279,12 @@ public class I2PSnarkServlet extends Default { out.write("</a><br>\n"); } out.write("</th>\n<th align=\"left\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/torrent.png\" title=\""); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/torrent.png\" title=\""); out.write(_("Torrent")); out.write("\">"); out.write(_("Torrent")); out.write("</th>\n<th align=\"center\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/eta.png\" title=\""); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/eta.png\" title=\""); out.write(_("Estimated Download Time")); out.write("\">"); // space here would look better but nbsp is too big and thinsp breaks out.write(_("ETA")); @@ -313,13 +313,13 @@ public class I2PSnarkServlet extends Default { if (_manager.util().connected()) { out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\""); out.write(_("Stop all torrents and the I2P tunnel")); - out.write("\" src=\"/themes/snark/ubergine/images/stop_all.png\" alt=\""); + out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stop_all.png\" alt=\""); out.write(_("Stop All")); out.write("\">"); } else if (!snarks.isEmpty()) { out.write("<input type=\"image\" name=\"action\" value=\"StartAll\" title=\""); out.write(_("Start all torrents and the I2P tunnel")); - out.write("\" src=\"/themes/snark/ubergine/images/start_all.png\" alt=\""); + out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/start_all.png\" alt=\""); out.write(_("Start All")); out.write("\">"); } else { @@ -530,7 +530,8 @@ public class I2PSnarkServlet extends Default { String startupDel = req.getParameter("startupDelay"); boolean useOpenTrackers = req.getParameter("useOpenTrackers") != null; String openTrackers = req.getParameter("openTrackers"); - _manager.updateConfig(dataDir, autoStart, startupDel, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit, upBW, useOpenTrackers, openTrackers); + String theme = req.getParameter("theme"); + _manager.updateConfig(dataDir, autoStart, startupDel, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit, upBW, useOpenTrackers, openTrackers, theme); } else if ("Create".equals(action)) { String baseData = req.getParameter("baseFile"); if (baseData != null && baseData.trim().length() > 0) { @@ -709,57 +710,57 @@ public class I2PSnarkServlet extends Default { String statusString = _("Unknown"); if (err != null) { if (isRunning && curPeers > 0 && !showPeers) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") + "\"><a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else { if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…"; - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") + "\"> " + err + "</a>"; } } else if (remaining <= 0) { if (isRunning && curPeers > 0 && !showPeers) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/seeding.png\" title=\"" + _("Seeding") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/seeding.png\" title=\"" + _("Seeding") + "\">" + "<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/seeding.png\" title=\"" + _("Seeding") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/seeding.png\" title=\"" + _("Seeding") + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/complete.png\" title=\"" + _("Complete") + "\"> " + _("Complete"); + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/complete.png\" title=\"" + _("Complete") + "\"> " + _("Complete"); } else { if (isRunning && curPeers > 0 && downBps > 0 && !showPeers) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/downloading.png\" title=\"" + _("Downloading") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/downloading.png\" title=\"" + _("Downloading") + "\">" + "<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning && curPeers > 0 && downBps > 0) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/downloading.png\" title=\"" + _("Downloading") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/downloading.png\" title=\"" + _("Downloading") + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning && curPeers > 0 && !showPeers) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stalled.png\" title=\"" + _("Stalled") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stalled.png\" title=\"" + _("Stalled") + "\">" + "<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning && curPeers > 0) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stalled.png\" title=\"" + _("Stalled") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stalled.png\" title=\"" + _("Stalled") + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning) - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/nopeers.png\" title=\"" + _("No Peers") + "\">" + + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/nopeers.png\" title=\"" + _("No Peers") + "\">" + ' ' + curPeers + " / " + ngettext("1 peer", "{0} peers", knownPeers); else - statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stopped.png\" title=\"" + _("Stopped") + "\"> " + _("Stopped"); + statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stopped.png\" title=\"" + _("Stopped") + "\"> " + _("Stopped"); } String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd"); @@ -808,7 +809,7 @@ public class I2PSnarkServlet extends Default { out.write(" <a href=\"" + baseURL + "details.php?dllist=1&filelist=1&info_hash="); out.write(TrackerClient.urlencode(snark.meta.getInfoHash())); out.write("\" title=\"" + name + ' ' + _("Tracker") + "\" target=\"_blank\">"); - out.write("<div class=\"infoz\"><img border=\"0\" src=\"/themes/snark/ubergine/images/details.png\"></div>"); + out.write("<div class=\"infoz\"><img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/details.png\"></div>"); out.write("</a>"); break; } @@ -845,7 +846,7 @@ public class I2PSnarkServlet extends Default { out.write(b64); out.write("\" title=\""); out.write(_("Stop the torrent")); - out.write("\" src=\"/themes/snark/ubergine/images/stop.png\" alt=\""); + out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stop.png\" alt=\""); out.write(_("Stop")); out.write("\">"); } else { @@ -854,7 +855,7 @@ public class I2PSnarkServlet extends Default { out.write(b64); out.write("\" title=\""); out.write(_("Start the torrent")); - out.write("\" src=\"/themes/snark/ubergine/images/start.png\" alt=\""); + out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/start.png\" alt=\""); out.write(_("Start")); out.write("\">"); } @@ -869,7 +870,7 @@ public class I2PSnarkServlet extends Default { // Then the remaining single quite must be escaped out.write(_("Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?", fullFilename)); out.write("')) { return false; }\""); - out.write(" src=\"/themes/snark/ubergine/images/remove.png\" alt=\""); + out.write(" src=\"/themes/snark/" + _manager.getTheme() + "/images/remove.png\" alt=\""); out.write(_("Remove")); out.write("\">"); @@ -883,7 +884,7 @@ public class I2PSnarkServlet extends Default { // Then the remaining single quite must be escaped out.write(_("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?", fullFilename)); out.write("')) { return false; }\""); - out.write(" src=\"/themes/snark/ubergine/images/delete.png\" alt=\""); + out.write(" src=\"/themes/snark/" + _manager.getTheme() + "/images/delete.png\" alt=\""); out.write(_("Delete")); out.write("\">"); } @@ -1010,7 +1011,7 @@ public class I2PSnarkServlet extends Default { if (peerParam != null) out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n"); out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/add.png\">"); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/add.png\">"); out.write(_("Add Torrent")); out.write("</span><hr>\n<table border=\"0\"><tr><td>"); out.write(_("From URL")); @@ -1049,7 +1050,7 @@ public class I2PSnarkServlet extends Default { if (peerParam != null) out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n"); out.write("<span class=\"snarkConfigTitle\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/create.png\">"); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/create.png\">"); out.write(_("Create Torrent")); out.write("</span><hr>\n<table border=\"0\"><tr><td>"); //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n"); @@ -1098,10 +1099,24 @@ public class I2PSnarkServlet extends Default { out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n"); out.write("<input type=\"hidden\" name=\"action\" value=\"Save\" >\n"); out.write("<span class=\"snarkConfigTitle\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/config.png\">"); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/config.png\">"); out.write(_("Configuration")); out.write("</span><hr>\n"); out.write("<table border=\"0\"><tr><td>"); + + out.write(_("Theme")); + out.write(": <td><select name='theme'>"); + String theme = _manager.getTheme(); + String[] themes = _manager.getThemes(); + for(int i = 0; i < themes.length; i++) { + if(themes[i].equals(theme)) + out.write("\n<OPTION value='" + themes[i] + "' SELECTED>" + themes[i]); + else + out.write("\n<OPTION value='" + themes[i] + "'>" + themes[i]); + } + out.write("\n</select>\n<tr><td>"); + + out.write(_("Data directory")); out.write(": <td><code>" + dataDir + "</code> ("); out.write(_("Edit i2psnark.config and restart to change")); @@ -1222,7 +1237,7 @@ public class I2PSnarkServlet extends Default { private void writeConfigLink(PrintWriter out) throws IOException { out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n"); out.write("<span class=\"snarkConfigTitle\"><a href=\"configure\">"); - out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/config.png\">"); + out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/config.png\">"); out.write(_("Configuration")); out.write("</a></span></span></div>\n"); } @@ -1298,8 +1313,9 @@ public class I2PSnarkServlet extends Default { return buf.toString(); } - private static final String HEADER = "<link href=\"/themes/snark/ubergine/snark.css\" rel=\"stylesheet\" type=\"text/css\" >"; - + private static final String HEADER_A = "<link href=\"/themes/snark/"; + private static final String HEADER_B = "/snark.css\" rel=\"stylesheet\" type=\"text/css\" >"; + private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" + "<thead>\n" + @@ -1370,8 +1386,8 @@ public class I2PSnarkServlet extends Default { title = title.substring(0, title.length() - 1); title = _("Torrent") + ": " + title; buf.append(title); - buf.append("").append(HEADER).append("\n
I2PSnark").append("
"); + buf.append("").append(HEADER_A).append(_manager.getTheme()).append(HEADER_B).append("\n
I2PSnark").append("
"); if (parent) buf.append("
"); @@ -1380,22 +1396,22 @@ public class I2PSnarkServlet extends Default { buf.append("
\n"); buf.append("" + ""); if (showPriority) buf.append(""); buf.append("\n"); buf.append("\n"); diff --git a/history.txt b/history.txt index 74ac3dbbc6..2bf947c017 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,6 @@ +2010-11-26 sponge + * i2psnark: Add theme change and theme selection storage abilities. + 2010-11-26 zzz * Console: Split initialNews.xml into a file for each language don't copy to config dir at install. diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f2522cd4ed..7ca1a3ec2c 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 9; + public final static long BUILD = 10; /** for example "-test" */ public final static String EXTRA = "";
") - .append("\"").append(_("File")).append("\" ") .append(title).append("") - .append("\"").append(_("FileSize")).append("\"").append(_("Size")); buf.append("") - .append("").append(_("Status")).append("") - .append("") + .append("") .append(_("Priority")).append("
") + buf.append("\"> ") .append(_("Up to higher level directory")).append("