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 69b220b137..902c678ace 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -1328,14 +1328,20 @@ public class I2PSnarkServlet extends BasicServlet { private List getSortedSnarks(HttpServletRequest req) { ArrayList rv = new ArrayList(_manager.getTorrents()); - int sort = 0; - String ssort = req.getParameter("sort"); - if (ssort != null) { + if (rv.size() > 1) { + int sort = 0; + String ssort = req.getParameter("sort"); + if (ssort != null) { + try { + sort = Integer.parseInt(ssort); + } catch (NumberFormatException nfe) {} + } try { - sort = Integer.parseInt(ssort); - } catch (NumberFormatException nfe) {} + Collections.sort(rv, Sorters.getComparator(sort)); + } catch (IllegalArgumentException iae) { + // Java 7 TimSort - may be unstable + } } - Collections.sort(rv, Sorters.getComparator(sort)); return rv; } @@ -2982,7 +2988,7 @@ public class I2PSnarkServlet extends BasicServlet { /** @since 0.7.14 */ private String toImg(String icon) { - return "\"\""; + return toImg(icon, ""); } /** @since 0.8.2 */ 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 c166609d2a..3391699f36 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/Sorters.java @@ -29,6 +29,7 @@ class Sorters { *
  • 8: Down rate *
  • 9: Up rate *
  • 10: Remaining (needed) + *
  • 11: Upload ratio * */ public static Comparator getComparator(int type) { @@ -90,6 +91,11 @@ class Sorters { rv = new RemainingComparator(rev); break; + case -11: + case 11: + rv = new RatioComparator(rev); + break; + } return rv; } @@ -279,4 +285,17 @@ class Sorters { return compLong(l.getUploadRate(), r.getUploadRate()); } } + + private static class RatioComparator extends Sort { + + 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 rt = r.getTotalLength(); + long rd = rt > 0 ? ((4096 * r.getUploaded()) / (4096 * rt)) : 0; + return compLong(ld, rd); + } + } }