diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index c7272eca6..83c839fd2 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -1029,6 +1029,8 @@ public class Snark //if (debug >= INFO && t != null) // t.printStackTrace(); stopTorrent(); + if (t != null) + s += ": " + t; throw new RuntimeException(s, t); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 4c46ec6f0..f08e07c71 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -51,7 +51,7 @@ public class SnarkManager implements Snark.CompleteListener { private Properties _config; private final I2PAppContext _context; private final Log _log; - private final List _messages; + private final List _messages; private final I2PSnarkUtil _util; private PeerCoordinatorSet _peerCoordinatorSet; private ConnectionAcceptor _connectionAcceptor; @@ -156,6 +156,7 @@ public class SnarkManager implements Snark.CompleteListener { public I2PSnarkUtil util() { return _util; } private static final int MAX_MESSAGES = 5; + public void addMessage(String message) { synchronized (_messages) { _messages.add(message); @@ -167,12 +168,19 @@ public class SnarkManager implements Snark.CompleteListener { } /** newest last */ - public List getMessages() { + public List getMessages() { synchronized (_messages) { return new ArrayList(_messages); } } + /** @since 0.9 */ + public void clearMessages() { + synchronized (_messages) { + _messages.clear(); + } + } + /** * @return default false * @since 0.8.9 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 c0c370337..db4827dfc 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -160,7 +160,7 @@ public class I2PSnarkServlet extends DefaultServlet { PrintWriter out = resp.getWriter(); //if (_log.shouldLog(Log.DEBUG)) // _manager.addMessage((_context.clock().now() / 1000) + " xhr1 p=" + req.getParameter("p")); - writeMessages(out); + writeMessages(out, false); writeTorrents(out, req); return; } @@ -277,7 +277,7 @@ public class I2PSnarkServlet extends DefaultServlet { _manager.addMessage(_("Click \"Add torrent\" button to fetch torrent")); out.write("
"); - writeMessages(out); + writeMessages(out, isConfigure); if (isConfigure) { // end of mainsection div @@ -297,14 +297,20 @@ public class I2PSnarkServlet extends DefaultServlet { out.write(FOOTER); } - private void writeMessages(PrintWriter out) throws IOException { - out.write("
");
-        List msgs = _manager.getMessages();
-        for (int i = msgs.size()-1; i >= 0; i--) {
-            String msg = (String)msgs.get(i);
-            out.write(msg + "\n");
+    private void writeMessages(PrintWriter out, boolean isConfigure) throws IOException {
+        List msgs = _manager.getMessages();
+        if (!msgs.isEmpty()) {
+            out.write("
    "); + for (int i = msgs.size()-1; i >= 0; i--) { + String msg = (String)msgs.get(i); + out.write("
  • " + msg + "
  • \n"); + } + // lazy GET, lose p parameter + out.write("

" + _("clear messages") + "

"); } - out.write("
"); } private void writeTorrents(PrintWriter out, HttpServletRequest req) throws IOException { @@ -751,6 +757,8 @@ public class I2PSnarkServlet extends DefaultServlet { if (snark.isStopped()) snark.startTorrent(); } + } else if ("Clear".equals(action)) { + _manager.clearMessages(); } else { _manager.addMessage("Unknown POST action: \"" + action + '\"'); } diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css index 560a21220..2a870c83f 100644 --- a/installer/resources/themes/snark/ubergine/snark.css +++ b/installer/resources/themes/snark/ubergine/snark.css @@ -82,7 +82,7 @@ body { } .snarkMessages { - font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important; + font: bold 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important; text-align: left; margin: 0 0 10px 0; padding: 3px 5px; @@ -93,7 +93,8 @@ body { border: 1px solid #000; overflow: auto; color: #26f; - height: 70px; + max-height: 76px; + min-height: 45px; width: auto; background: #2a192a url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center; } @@ -106,6 +107,17 @@ body { color: #f90 !important; } +.snarkMessages ul { + margin: 0; + padding: 0 0 0 16px; +} + +.snarkMessages p { + font-style: italic; + margin: 0; + text-align: right; +} + .logshim { margin-top: -10px !important; } diff --git a/installer/resources/themes/snark/vanilla/snark.css b/installer/resources/themes/snark/vanilla/snark.css index efd061582..29190dca7 100644 --- a/installer/resources/themes/snark/vanilla/snark.css +++ b/installer/resources/themes/snark/vanilla/snark.css @@ -81,7 +81,7 @@ body { } .snarkMessages { - font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important; + font: bold 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important; text-align: left; margin: 0 0 10px 0; padding: 3px 5px; @@ -92,7 +92,8 @@ body { border: 1px solid #000; overflow: auto; color: #26f; - height: 70px; + max-height: 76px; + min-height: 45px; width: auto; background: #eda url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center; } @@ -108,6 +109,18 @@ body { .snarkMessages a:visited { color: #d30 !important; } + +.snarkMessages ul { + margin: 0; + padding: 0 0 0 16px; +} + +.snarkMessages p { + font-style: italic; + margin: 0; + text-align: right; +} + .logshim { margin-top: -10px !important; }