i2psnark: Don't use static field for sort language

This commit is contained in:
zzz
2018-03-17 12:34:37 +00:00
parent e7e5ee1abe
commit ef692efc83
2 changed files with 47 additions and 38 deletions

View File

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

View File

@ -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;
}
/****