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); sort = Integer.parseInt(ssort);
} catch (NumberFormatException nfe) {} } catch (NumberFormatException nfe) {}
} }
String lang;
if (_manager.isSmartSortEnabled()) if (_manager.isSmartSortEnabled())
Sorters.setPattern(Translate.getLanguage(_manager.util().getContext())); lang = Translate.getLanguage(_manager.util().getContext());
else else
Sorters.setPattern(null); lang = null;
// Java 7 TimSort - may be unstable // Java 7 TimSort - may be unstable
DataHelper.sort(rv, Sorters.getComparator(sort, this)); DataHelper.sort(rv, Sorters.getComparator(sort, lang, this));
} }
return rv; return rv;
} }

View File

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