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 902c678ace..255002dd24 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -503,15 +503,26 @@ public class I2PSnarkServlet extends BasicServlet { out.write(""); } out.write("\n"); - // sort by size, not downloaded + // cycle through sort by size or downloaded + boolean isDlSort = false; if (showSort) { - sort = ("5".equals(currentSort)) ? "-5" : "5"; + if ("5".equals(currentSort)) { + sort = "-5"; + } else if ("-5".equals(currentSort)) { + sort = "6"; + isDlSort = true; + } else if ("6".equals(currentSort)) { + sort = "-6"; + isDlSort = true; + } else { + sort = "5"; + } out.write(""); } out.write("\"");"); out.write("\n"); + boolean isRatSort = false; if (!snarks.isEmpty()) { + // cycle through sort by uploaded or ratio + boolean nextRatSort = false; if (showSort) { - sort = ("7".equals(currentSort)) ? "-7" : "7"; + if ("7".equals(currentSort)) { + sort = "-7"; + } else if ("-7".equals(currentSort)) { + sort = "11"; + nextRatSort = true; + } else if ("11".equals(currentSort)) { + sort = "-11"; + nextRatSort = true; + isRatSort = true; + } else if ("-11".equals(currentSort)) { + sort = "7"; + isRatSort = true; + } else { + sort = "7"; + } out.write(""); } out.write("\"");= start + pageSize; - displaySnark(out, req, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide); + displaySnark(out, req, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide, isRatSort); } if (total == 0) { @@ -1356,8 +1384,8 @@ public class I2PSnarkServlet extends BasicServlet { */ private void displaySnark(PrintWriter out, HttpServletRequest req, Snark snark, String uri, int row, long stats[], boolean showPeers, - boolean isDegraded, boolean noThinsp, boolean showDebug, boolean statsOnly) - throws IOException { + boolean isDegraded, boolean noThinsp, boolean showDebug, boolean statsOnly, + boolean showRatios) throws IOException { // stats long uploaded = snark.getUploaded(); stats[0] += snark.getDownloaded(); @@ -1590,8 +1618,17 @@ public class I2PSnarkServlet extends BasicServlet { // out.write("??"); // no meta size yet out.write("\n\t"); out.write(""); - if (isValid && uploaded > 0) - out.write(formatSize(uploaded)); + if (isValid) { + if (showRatios) { + if (total > 0) { + double ratio = uploaded / ((double) total); + out.write((new DecimalFormat("0.000")).format(ratio)); + out.write(" x"); + } + } else if (uploaded > 0) { + out.write(formatSize(uploaded)); + } + } out.write("\n\t"); out.write(""); if (isRunning && needed > 0) @@ -2702,9 +2739,20 @@ public class I2PSnarkServlet extends BasicServlet { .append(": ") .append((new DecimalFormat("0.00%")).format(completion)); else - buf.append(" \"\" ") - .append(_("Complete")); - // else unknown + buf.append(" \"\" ") + .append(_("Complete")).append(""); + // up ratio + buf.append(" \"\" ") + .append(_("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"); + } else { + buf.append('0'); + } long needed = snark.getNeededLength(); if (needed > 0) buf.append(" \"\" ") diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java b/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java index 3391699f36..2c2005381b 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java @@ -288,13 +288,15 @@ class Sorters { private static class RatioComparator extends Sort { + private static final long M = 128 * 1024 * 1024; + public RatioComparator(boolean rev) { super(rev); } public int compareIt(Snark l, Snark r) { long lt = l.getTotalLength(); - long ld = lt > 0 ? ((4096 * l.getUploaded()) / (4096 * lt)) : 0; + long ld = lt > 0 ? ((M * l.getUploaded()) / lt) : 0; long rt = r.getTotalLength(); - long rd = rt > 0 ? ((4096 * r.getUploaded()) / (4096 * rt)) : 0; + long rd = rt > 0 ? ((M * r.getUploaded()) / rt) : 0; return compLong(ld, rd); } }