forked from I2P_Developers/i2p.i2p
i2psnark:
- Add ratio sorter - Catch IAE on unstable sort - Only sort if necessary - toImg() cleanup
This commit is contained in:
@ -1328,14 +1328,20 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
|
||||
private List<Snark> getSortedSnarks(HttpServletRequest req) {
|
||||
ArrayList<Snark> rv = new ArrayList<Snark>(_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 "<img alt=\"\" height=\"16\" width=\"16\" src=\"" + _contextPath + WARBASE + "icons/" + icon + ".png\">";
|
||||
return toImg(icon, "");
|
||||
}
|
||||
|
||||
/** @since 0.8.2 */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user