i2psnark:

- Add ratio sorter
 - Catch IAE on unstable sort
 - Only sort if necessary
 - toImg() cleanup
This commit is contained in:
zzz
2014-09-11 14:42:08 +00:00
parent cce0d94fbb
commit ef81a575cd
2 changed files with 32 additions and 7 deletions

View File

@ -1328,6 +1328,7 @@ public class I2PSnarkServlet extends BasicServlet {
private List<Snark> getSortedSnarks(HttpServletRequest req) {
ArrayList<Snark> rv = new ArrayList<Snark>(_manager.getTorrents());
if (rv.size() > 1) {
int sort = 0;
String ssort = req.getParameter("sort");
if (ssort != null) {
@ -1335,7 +1336,12 @@ public class I2PSnarkServlet extends BasicServlet {
sort = Integer.parseInt(ssort);
} catch (NumberFormatException nfe) {}
}
try {
Collections.sort(rv, Sorters.getComparator(sort));
} catch (IllegalArgumentException iae) {
// Java 7 TimSort - may be unstable
}
}
return rv;
}
@ -2982,7 +2988,7 @@ public class I2PSnarkServlet extends BasicServlet {
/** @since 0.7.14 */
private String toImg(String icon) {
return "<img alt=\"\" height=\"16\" width=\"16\" src=\"" + _contextPath + WARBASE + "icons/" + icon + ".png\">";
return toImg(icon, "");
}
/** @since 0.8.2 */

View File

@ -29,6 +29,7 @@ class Sorters {
*<li>8: Down rate
*<li>9: Up rate
*<li>10: Remaining (needed)
*<li>11: Upload ratio
*</ul>
*/
public static Comparator<Snark> 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);
}
}
}