diff --git a/LICENSE.txt b/LICENSE.txt index ff288844e4..6a6ba534cf 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -244,6 +244,7 @@ Applications: - All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/ Silk icons: See licenses/LICENSE-SilkIcons.txt FatCow icons: See licenses/LICENSE-FatCowIcons.txt + Fugue Icons: See licenses/LICENSE-FugueIcons.txt GeoIP Data: This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/ diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index 3ecde03938..523d9f3660 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -276,7 +276,7 @@ - diff --git a/apps/i2psnark/java/src/org/klomp/snark/Peer.java b/apps/i2psnark/java/src/org/klomp/snark/Peer.java index 1cf1d9aaae..73588d12a9 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Peer.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Peer.java @@ -173,7 +173,7 @@ public class Peer implements Comparable if (state != null) { String r = state.getRequests(); if (r != null) - return sock.toString() + "Requests: " + r; + return sock.toString() + "Requests: " + r + ""; } return sock.toString(); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index c1b70f0025..ecb6708395 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -795,14 +795,17 @@ public class SnarkManager implements CompleteListener, ClientApp { updateConfig(); } + public boolean getUniversalTheming() { + return _context.getBooleanProperty(RC_PROP_UNIVERSAL_THEMING); + } + /** * Get current theme. * @return String -- the current theme */ public String getTheme() { String theme = _config.getProperty(PROP_THEME); - boolean universalTheming = _context.getBooleanProperty(RC_PROP_UNIVERSAL_THEMING); - if (universalTheming) { + if (getUniversalTheming()) { // Fetch routerconsole theme (or use our default if it doesn't exist) theme = _context.getProperty(RC_PROP_THEME, DEFAULT_THEME); // Ensure that theme exists @@ -1246,7 +1249,7 @@ public class SnarkManager implements CompleteListener, ClientApp { if (theme != null) { if(!theme.equals(_config.getProperty(PROP_THEME))) { _config.setProperty(PROP_THEME, theme); - addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme)); + addMessage(_t("{0} theme loaded.", theme)); changed = true; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java index 8207090698..55778eea2c 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java @@ -138,7 +138,7 @@ class DHTNodes { * @since 0.9.4 */ public void renderStatusHTML(StringBuilder buf) { - buf.append(_kad.toString().replace("\n", "\n")); + buf.append(_kad.toString().replace("\n", "\n")); } /** */ diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java index 784d8e6bff..9b8fb32c52 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java @@ -140,7 +140,7 @@ class DHTTracker { * Debug info, HTML formatted */ public void renderStatusHTML(StringBuilder buf) { - buf.append("DHT tracker: ").append(_torrentCount).append(" torrents ") + buf.append("DHT tracker: ").append(_torrentCount).append(" torrents ") .append(_peerCount).append(" peers ") .append(DataHelper.formatDuration(_expireTime)).append(" expiration"); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java index 1ebf975109..46d4476dce 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java @@ -682,17 +682,17 @@ public class KRPC implements I2PSessionMuxedListener, DHT { public String renderStatusHTML() { long uptime = Math.max(1000, _context.clock().now() - _started); StringBuilder buf = new StringBuilder(256); - buf.append("DHT DEBUGTX: ").append(_txPkts.get()).append(" pkts / ") + buf.append("DHT DEBUGTX: ").append(_txPkts.get()).append(" pkts / ") .append(DataHelper.formatSize2(_txBytes.get())).append("B / ") .append(DataHelper.formatSize2(_txBytes.get() * 1000 / uptime)).append("Bps" + - "RX: ").append(_rxPkts.get()).append(" pkts / ") + "RX: ").append(_rxPkts.get()).append(" pkts / ") .append(DataHelper.formatSize2(_rxBytes.get())).append("B / ") .append(DataHelper.formatSize2(_rxBytes.get() * 1000 / uptime)).append("Bps" + - "DHT Peers: ").append( _knownNodes.size()).append("" + - "Blacklisted: ").append(_blacklist.size()).append("" + - "Sent tokens: ").append(_outgoingTokens.size()).append("" + - "Rcvd tokens: ").append(_incomingTokens.size()).append("" + - "Pending queries: ").append(_sentQueries.size()).append(""); + "DHT Peers: ").append( _knownNodes.size()).append("" + + "Blacklisted: ").append(_blacklist.size()).append("" + + "Sent tokens: ").append(_outgoingTokens.size()).append("" + + "Rcvd tokens: ").append(_incomingTokens.size()).append("" + + "Pending queries: ").append(_sentQueries.size()).append(""); _tracker.renderStatusHTML(buf); _knownNodes.renderStatusHTML(buf); return buf.toString(); 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 1612ff2fab..2584e01e55 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -62,7 +62,7 @@ public class I2PSnarkServlet extends BasicServlet { private String _themePath; private String _imgPath; private String _lastAnnounceURL; - + private static final String DEFAULT_NAME = "i2psnark"; public static final String PROP_CONFIG_FILE = "i2psnark.configFile"; private static final String WARBASE = "/.resources/"; @@ -264,7 +264,7 @@ public class I2PSnarkServlet extends BasicServlet { sendRedirect(req, resp, peerString); return; } - + setHTMLHeaders(resp); PrintWriter out = resp.getWriter(); out.write(DOCTYPE + "\n" + @@ -283,7 +283,7 @@ public class I2PSnarkServlet extends BasicServlet { if ("2".equals(peerParam)) out.write(" | Debug Mode"); out.write("\n"); - + // we want it to go to the base URI so we don't refresh with some funky action= value int delay = 0; if (!isConfigure) { @@ -291,7 +291,8 @@ public class I2PSnarkServlet extends BasicServlet { if (delay > 0) { String jsPfx = _context.isRouterContext() ? "" : ".resources"; String downMsg = _context.isRouterContext() ? _t("Router is down") : _t("I2PSnark has stopped"); - //out.write("\n"); + // fallback to metarefresh when javascript is disabled + out.write("\n"); out.write("\n" + "\n"); buf.append("\n"); - toThemeImg(buf, "arrow_refresh"); - buf.append(" "); if (_contextName.equals(DEFAULT_NAME)) buf.append(_t("I2PSnark")); else buf.append(_contextName); buf.append("\n"); - + if (parent) // always true - buf.append(""); + buf.append("\n"); // for stop/start/check if (showStopStart || showPriority) { buf.append("\n"); @@ -2936,17 +2986,17 @@ public class I2PSnarkServlet extends BasicServlet { //buf.append("").append(_t("Maggot link")).append(": ") // .append(MAGGOT).append(hex).append(':').append(hex).append(""); - buf.append(""); + buf.append(""); toThemeImg(buf, "size"); - buf.append("") + buf.append("") .append(_t("Size")) .append(": ") .append(formatSize(snark.getTotalLength())); int pieces = snark.getPieces(); double completion = (pieces - snark.getNeeded()) / (double) pieces; - buf.append(" "); + buf.append(" "); toThemeImg(buf, "head_rx"); - buf.append(" "); + buf.append(""); if (completion < 1.0) buf.append(_t("Completion")) .append(": ") @@ -2954,16 +3004,16 @@ public class I2PSnarkServlet extends BasicServlet { else buf.append(_t("Complete")).append(""); // up ratio - buf.append(" "); + buf.append(" "); toThemeImg(buf, "head_tx"); - buf.append(" ") + buf.append("") .append(_t("Upload ratio")) .append(": "); long uploaded = snark.getUploaded(); if (uploaded > 0) { double ratio = uploaded / ((double) snark.getTotalLength()); buf.append((new DecimalFormat("0.000")).format(ratio)); - buf.append(" x"); + buf.append(" x"); } else { buf.append('0'); } @@ -2974,18 +3024,18 @@ public class I2PSnarkServlet extends BasicServlet { needed = snark.getRemainingLength(); } if (needed > 0) { - buf.append(" "); + buf.append(" "); toThemeImg(buf, "head_rx"); - buf.append(" ") + buf.append("") .append(_t("Remaining")) .append(": ") .append(formatSize(needed)); } long skipped = snark.getSkippedLength(); if (skipped > 0) { - buf.append(" "); + buf.append(" "); toThemeImg(buf, "head_rx"); - buf.append(" ") + buf.append("") .append(_t("Skipped")) .append(": ") .append(formatSize(skipped)); @@ -2993,35 +3043,35 @@ public class I2PSnarkServlet extends BasicServlet { if (meta != null) { List> files = meta.getFiles(); int fileCount = files != null ? files.size() : 1; - buf.append(" "); + buf.append(" "); toThemeImg(buf, "file"); - buf.append(" ") + buf.append("") .append(_t("Files")) .append(": ") .append(fileCount); } - buf.append(" "); + buf.append(" "); toThemeImg(buf, "file"); - buf.append(" ") + buf.append("") .append(_t("Pieces")) .append(": ") .append(pieces); - buf.append(" "); + buf.append(" "); toThemeImg(buf, "file"); - buf.append(" ") + buf.append("") .append(_t("Piece size")) .append(": ") .append(formatSize(snark.getPieceLength(0))) - .append("\n"); + .append("\n"); // buttons if (showStopStart) { - buf.append(""); + buf.append(""); if (snark.isChecking()) { - buf.append("").append(_t("Checking")).append("… ") + buf.append("").append(_t("Checking")).append("… ") .append((new DecimalFormat("0.00%")).format(snark.getCheckingProgress())) - .append(" ") - .append(_t("Refresh page for results")).append(""); + .append(" ") + .append(_t("Refresh page for results")).append(""); } else if (snark.isStarting()) { buf.append("").append(_t("Starting")).append("…"); } else if (snark.isAllocating()) { @@ -3033,30 +3083,38 @@ public class I2PSnarkServlet extends BasicServlet { buf.append(_t("Stop")).append("\" name=\"stop\" class=\"stoptorrent\">\n"); else buf.append(_t("Start")).append("\" name=\"start\" class=\"starttorrent\">\n"); - buf.append(" \n"); + buf.append("\" class=\"disabled\" disabled=\"disabled\" title=\"") + .append(_t("Stop the torrent in order to check file integrity")) + .append("\">\n"); else - buf.append("\" class=\"reload\">\n"); + buf.append("\" class=\"reload\" title=\"") + .append(_t("Check integrity of the downloaded file(s)")) + .append("\">\n"); } buf.append("\n"); } } else { // snark == null // shouldn't happen - buf.append("Not foundresource=\"").append(r.toString()) - .append("\"base=\"").append(base) - .append("\"torrent=\"").append(torrentName) - .append("\"\n"); + buf.append("") + .append(_t("Resource Not found")) + .append("").append(_t("Resource")).append(":").append(r.toString()) + .append("").append(_t("Base")).append(":").append(base) + .append("").append(_t("Torrent")).append(":").append(torrentName) + .append("\n"); } buf.append("\n"); if (snark != null && !r.exists()) { // fixup TODO - buf.append("Does not existresource=\"").append(r.toString()) - .append("\"base=\"").append(base) - .append("\"torrent=\"").append(torrentName) - .append("\"
Does not existresource=\"").append(r.toString()) - .append("\"base=\"").append(base) - .append("\"torrent=\"").append(torrentName) - .append("\"