diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index bd8e25d14..bded42a27 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -98,10 +98,14 @@ + + + + @@ -113,7 +117,7 @@ - + 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 beebc226a..e5db6f6cb 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -102,7 +102,8 @@ public class I2PSnarkServlet extends Default { protected Resource getResource(String pathInContext) throws IOException { if (pathInContext == null || pathInContext.equals("/") || pathInContext.equals("/index.jsp") || - pathInContext.equals("/index.html") || pathInContext.startsWith("/.icons/")) + pathInContext.equals("/index.html") || pathInContext.startsWith("/.icons/") || + pathInContext.startsWith("/.js/") || pathInContext.startsWith("/.ajax/")) return super.getResource(pathInContext); // files in the i2psnark/ directory return _resourceBase.addPath(pathInContext); @@ -151,6 +152,17 @@ public class I2PSnarkServlet extends Default { _imgPath = _themePath + "images/"; // this is the part after /i2psnark String path = req.getServletPath(); + + // AJAX for mainsection + if ("/.ajax/xhr1.html".equals(path)) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html; charset=UTF-8"); + PrintWriter out = resp.getWriter(); + writeMessages(out); + writeTorrents(out, req); + return; + } + boolean isConfigure = "/configure".equals(path); // index.jsp doesn't work, it is grabbed by the war handler before here if (!(path == null || path.equals("/") || path.equals("/index.jsp") || path.equals("/index.html") || path.equals("/_post") || isConfigure)) { @@ -208,13 +220,18 @@ public class I2PSnarkServlet extends Default { 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) { - int delay = _manager.getRefreshDelaySeconds(); + delay = _manager.getRefreshDelaySeconds(); if (delay > 0) - out.write("\n"); + //out.write("\n"); + out.write("\n"); } - out.write(HEADER_A + _themePath + HEADER_B); - out.write(""); + out.write(HEADER_A + _themePath + HEADER_B + "\n"); + if (isConfigure || delay <= 0) + out.write(""); + else + out.write(""); out.write("
"); if (isConfigure) { out.write("
0 && req.getMethod().equals("GET")) _manager.addMessage(_("Click \"Add torrent\" button to fetch torrent")); - out.write("
");
+        out.write("
"); + + writeMessages(out); + + if (isConfigure) { + // end of mainsection div + out.write("
\n"); + writeConfigForm(out, req); + writeTrackerForm(out, req); + } else { + writeTorrents(out, req); + // end of mainsection div + out.write("
\n"); + writeAddForm(out, req); + writeSeedForm(out, req); + writeConfigLink(out); + // end of lowersection div + out.write("
\n"); + } + 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");
         }
         out.write("
"); - - if (isConfigure) { - out.write("
\n"); - writeConfigForm(out, req); - writeTrackerForm(out, req); - } else { - writeTorrents(out, req); - out.write("\n"); - writeAddForm(out, req); - writeSeedForm(out, req); - writeConfigLink(out); - } - out.write(FOOTER); } private void writeTorrents(PrintWriter out, HttpServletRequest req) throws IOException { @@ -1356,7 +1383,7 @@ public class I2PSnarkServlet extends Default { ""); } - private static final int[] times = { 30, 60, 2*60, 5*60, 10*60, 30*60, -1 }; + private static final int[] times = { 5, 15, 30, 60, 2*60, 5*60, 10*60, 30*60, -1 }; private void writeConfigForm(PrintWriter out, HttpServletRequest req) throws IOException { String dataDir = _manager.getDataDir().getAbsolutePath(); diff --git a/apps/i2psnark/js/i2psnark.js b/apps/i2psnark/js/i2psnark.js new file mode 100644 index 000000000..ba0e3f911 --- /dev/null +++ b/apps/i2psnark/js/i2psnark.js @@ -0,0 +1,37 @@ +//var page = "home"; +function ajax(url,target) { + // native XMLHttpRequest object + if (window.XMLHttpRequest) { + req = new XMLHttpRequest(); + req.onreadystatechange = function() {ajaxDone(target);}; + req.open("GET", url, true); + req.send(null); + // IE/Windows ActiveX version + } else if (window.ActiveXObject) { + req = new ActiveXObject("Microsoft.XMLDOM"); + if (req) { + req.onreadystatechange = function() {ajaxDone(target);}; + req.open("GET", url, true); + req.send(null); + } + } + //setTimeout("ajax(page,'scriptoutput')", 5000); +} + +function ajaxDone(target) { + // only if req is "loaded" + if (req.readyState == 4) { + // only if "OK" + if (req.status == 200) { + results = req.responseText; + document.getElementById(target).innerHTML = results; + document.getElementById("lowersection").style.display="block"; + } else { + document.getElementById(target).innerHTML="Router is down"; + document.getElementById("lowersection").style.display="none"; + } + } +} + +function requestAjax1() { ajax("/i2psnark/.ajax/xhr1.html", "mainsection"); } +function initAjax(delayMs) { setInterval(requestAjax1, delayMs); }