forked from I2P_Developers/i2p.i2p
i2psnark: Don't use static field for sort language
This commit is contained in:
@ -1512,12 +1512,13 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
sort = Integer.parseInt(ssort);
|
||||
} catch (NumberFormatException nfe) {}
|
||||
}
|
||||
String lang;
|
||||
if (_manager.isSmartSortEnabled())
|
||||
Sorters.setPattern(Translate.getLanguage(_manager.util().getContext()));
|
||||
lang = Translate.getLanguage(_manager.util().getContext());
|
||||
else
|
||||
Sorters.setPattern(null);
|
||||
lang = null;
|
||||
// Java 7 TimSort - may be unstable
|
||||
DataHelper.sort(rv, Sorters.getComparator(sort, this));
|
||||
DataHelper.sort(rv, Sorters.getComparator(sort, lang, this));
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
@ -25,7 +25,6 @@ class Sorters {
|
||||
*/
|
||||
private static final Pattern PATTERN_DE, PATTERN_EN, PATTERN_ES, PATTERN_FR,
|
||||
PATTERN_IT, PATTERN_NL, PATTERN_PT;
|
||||
private static Pattern _pattern;
|
||||
|
||||
/**
|
||||
* Negative is reverse
|
||||
@ -47,7 +46,7 @@ class Sorters {
|
||||
*
|
||||
* @param servlet for file type callback only
|
||||
*/
|
||||
public static Comparator<Snark> getComparator(int type, I2PSnarkServlet servlet) {
|
||||
public static Comparator<Snark> getComparator(int type, String lang, I2PSnarkServlet servlet) {
|
||||
boolean rev = type < 0;
|
||||
Comparator<Snark> rv;
|
||||
switch (type) {
|
||||
@ -56,64 +55,64 @@ class Sorters {
|
||||
case 0:
|
||||
case 1:
|
||||
default:
|
||||
rv = new TorrentNameComparator();
|
||||
rv = new TorrentNameComparator(lang);
|
||||
if (rev)
|
||||
rv = Collections.reverseOrder(rv);
|
||||
break;
|
||||
|
||||
case -2:
|
||||
case 2:
|
||||
rv = new StatusComparator(rev);
|
||||
rv = new StatusComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -3:
|
||||
case 3:
|
||||
rv = new PeersComparator(rev);
|
||||
rv = new PeersComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -4:
|
||||
case 4:
|
||||
rv = new ETAComparator(rev);
|
||||
rv = new ETAComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -5:
|
||||
case 5:
|
||||
rv = new SizeComparator(rev);
|
||||
rv = new SizeComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -6:
|
||||
case 6:
|
||||
rv = new DownloadedComparator(rev);
|
||||
rv = new DownloadedComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -7:
|
||||
case 7:
|
||||
rv = new UploadedComparator(rev);
|
||||
rv = new UploadedComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -8:
|
||||
case 8:
|
||||
rv = new DownRateComparator(rev);
|
||||
rv = new DownRateComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -9:
|
||||
case 9:
|
||||
rv = new UpRateComparator(rev);
|
||||
rv = new UpRateComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -10:
|
||||
case 10:
|
||||
rv = new RemainingComparator(rev);
|
||||
rv = new RemainingComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -11:
|
||||
case 11:
|
||||
rv = new RatioComparator(rev);
|
||||
rv = new RatioComparator(rev, lang);
|
||||
break;
|
||||
|
||||
case -12:
|
||||
case 12:
|
||||
rv = new FileTypeComparator(rev, servlet);
|
||||
rv = new FileTypeComparator(rev, lang, servlet);
|
||||
break;
|
||||
|
||||
}
|
||||
@ -128,11 +127,19 @@ class Sorters {
|
||||
*/
|
||||
private static class TorrentNameComparator implements Comparator<Snark>, Serializable {
|
||||
|
||||
public int compare(Snark l, Snark r) {
|
||||
return comp(l, r);
|
||||
private final Pattern _p;
|
||||
|
||||
/** @param lang may be null */
|
||||
private TorrentNameComparator(String lang) {
|
||||
_p = getPattern(lang);
|
||||
}
|
||||
|
||||
public static int comp(Snark l, Snark r) {
|
||||
public int compare(Snark l, Snark r) {
|
||||
return comp(l, r, _p);
|
||||
}
|
||||
|
||||
/** @param p may be null */
|
||||
public static int comp(Snark l, Snark r, Pattern p) {
|
||||
// put downloads and magnets first
|
||||
if (l.getStorage() == null && r.getStorage() != null)
|
||||
return -1;
|
||||
@ -140,7 +147,6 @@ class Sorters {
|
||||
return 1;
|
||||
String ls = l.getBaseName();
|
||||
String rs = r.getBaseName();
|
||||
Pattern p = _pattern;
|
||||
if (p != null) {
|
||||
Matcher m = p.matcher(ls);
|
||||
if (m.matches())
|
||||
@ -159,16 +165,18 @@ class Sorters {
|
||||
private static abstract class Sort implements Comparator<Snark>, Serializable {
|
||||
|
||||
private final boolean _rev;
|
||||
private final Pattern _p;
|
||||
|
||||
public Sort(boolean rev) {
|
||||
public Sort(boolean rev, String lang) {
|
||||
_rev = rev;
|
||||
_p = getPattern(lang);
|
||||
}
|
||||
|
||||
public int compare(Snark l, Snark r) {
|
||||
int rv = compareIt(l, r);
|
||||
if (rv != 0)
|
||||
return _rev ? 0 - rv : rv;
|
||||
return TorrentNameComparator.comp(l, r);
|
||||
return TorrentNameComparator.comp(l, r, _p);
|
||||
}
|
||||
|
||||
protected abstract int compareIt(Snark l, Snark r);
|
||||
@ -185,7 +193,7 @@ class Sorters {
|
||||
|
||||
private static class StatusComparator extends Sort {
|
||||
|
||||
private StatusComparator(boolean rev) { super(rev); }
|
||||
private StatusComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
int rv = getStatus(l) - getStatus(r);
|
||||
@ -226,7 +234,7 @@ class Sorters {
|
||||
|
||||
private static class PeersComparator extends Sort {
|
||||
|
||||
public PeersComparator(boolean rev) { super(rev); }
|
||||
public PeersComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return l.getPeerCount() - r.getPeerCount();
|
||||
@ -235,7 +243,7 @@ class Sorters {
|
||||
|
||||
private static class RemainingComparator extends Sort {
|
||||
|
||||
public RemainingComparator(boolean rev) { super(rev); }
|
||||
public RemainingComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(l.getNeededLength(), r.getNeededLength());
|
||||
@ -244,7 +252,7 @@ class Sorters {
|
||||
|
||||
private static class ETAComparator extends Sort {
|
||||
|
||||
public ETAComparator(boolean rev) { super(rev); }
|
||||
public ETAComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(eta(l), eta(r));
|
||||
@ -266,7 +274,7 @@ class Sorters {
|
||||
|
||||
private static class SizeComparator extends Sort {
|
||||
|
||||
public SizeComparator(boolean rev) { super(rev); }
|
||||
public SizeComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(l.getTotalLength(), r.getTotalLength());
|
||||
@ -275,7 +283,7 @@ class Sorters {
|
||||
|
||||
private static class DownloadedComparator extends Sort {
|
||||
|
||||
public DownloadedComparator(boolean rev) { super(rev); }
|
||||
public DownloadedComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
long ld = l.getTotalLength() - l.getRemainingLength();
|
||||
@ -286,7 +294,7 @@ class Sorters {
|
||||
|
||||
private static class UploadedComparator extends Sort {
|
||||
|
||||
public UploadedComparator(boolean rev) { super(rev); }
|
||||
public UploadedComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(l.getUploaded(), r.getUploaded());
|
||||
@ -295,7 +303,7 @@ class Sorters {
|
||||
|
||||
private static class DownRateComparator extends Sort {
|
||||
|
||||
public DownRateComparator(boolean rev) { super(rev); }
|
||||
public DownRateComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(l.getDownloadRate(), r.getDownloadRate());
|
||||
@ -304,7 +312,7 @@ class Sorters {
|
||||
|
||||
private static class UpRateComparator extends Sort {
|
||||
|
||||
public UpRateComparator(boolean rev) { super(rev); }
|
||||
public UpRateComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
return compLong(l.getUploadRate(), r.getUploadRate());
|
||||
@ -313,7 +321,7 @@ class Sorters {
|
||||
|
||||
private static class RatioComparator extends Sort {
|
||||
|
||||
public RatioComparator(boolean rev) { super(rev); }
|
||||
public RatioComparator(boolean rev, String lang) { super(rev, lang); }
|
||||
|
||||
public int compareIt(Snark l, Snark r) {
|
||||
double lt = l.getTotalLength();
|
||||
@ -332,8 +340,8 @@ class Sorters {
|
||||
|
||||
private final I2PSnarkServlet servlet;
|
||||
|
||||
public FileTypeComparator(boolean rev, I2PSnarkServlet servlet) {
|
||||
super(rev);
|
||||
public FileTypeComparator(boolean rev, String lang, I2PSnarkServlet servlet) {
|
||||
super(rev, lang);
|
||||
this.servlet = servlet;
|
||||
}
|
||||
|
||||
@ -594,11 +602,11 @@ class Sorters {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets static field, oh well
|
||||
* @param lang null for none
|
||||
* @return null for none
|
||||
* @since 0.9.23
|
||||
*/
|
||||
public static void setPattern(String lang) {
|
||||
private static Pattern getPattern(String lang) {
|
||||
Pattern p;
|
||||
if (lang == null)
|
||||
p = null;
|
||||
@ -618,7 +626,7 @@ class Sorters {
|
||||
p = PATTERN_PT;
|
||||
else
|
||||
p = null;
|
||||
_pattern = p;
|
||||
return p;
|
||||
}
|
||||
|
||||
/****
|
||||
|
Reference in New Issue
Block a user