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);
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****
|
/****
|
||||||
|
Reference in New Issue
Block a user