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);
}
}
|