From b7cac505616745cc784808854768d4c22c951e22 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Wed, 10 Jul 2013 17:41:30 +0200 Subject: [PATCH] Sort torrents by name using natural order (Book 8 comes before Book 10). --- core/libs/transdroid-connect.jar | Bin 256885 -> 258335 bytes .../transdroid/daemon/AlphanumComparator.java | 107 ++++++++++++++++++ .../org/transdroid/daemon/DummyAdapter.java | 14 ++- .../transdroid/daemon/TorrentsComparator.java | 9 +- 4 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 lib/src/org/transdroid/daemon/AlphanumComparator.java diff --git a/core/libs/transdroid-connect.jar b/core/libs/transdroid-connect.jar index aca4486e40829b021729d17234c6ba94a646a099..13fd70e4a1d13fe3df7ff8ef9af1ef35e3a5f525 100644 GIT binary patch delta 10604 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 delta 9252 zcmY+J1z1#Fx5s6MlV)(B9aBH`8I4U!?% z9yBuH0g|*x6hPHCFdE=E2F9<249Vkwyd#n-<|LuMetI*f_oFMVzFs0CxW9sx`U3I6 z%H0Zbgi0W!=gOcONi5bXMxd%@;f0q7x{9f4b<`XG^S!d!oN~?UlOQAE3G}c<$V&s$ zB?yPX66DPcWX7bv_-Z7xHG_14=}4x-@9pJsnt*`aXr`Ee+vrbC8UOP~f#iz>Ue&y@0nxKdeBDi~Iy$&8(vn-u}(TC%d@mVC0w zl8ScIhyA)KTOU3YUF^(sngZx~QzTSH@6;X4R-0{B{n@qHc}|UDpWR%o(>-kqE4b29 z_V`wrwU??(xv4+<%AQ#zfycR4Ep?E1)D@I%Pe1mvm{0q?pU5bQ$cH*l&l4(8^&1O2QJ^e+m@Q^IN8>|bwAXMVAElOpyI%`r1Qns$!nuKjSb2U%h*tJ#XVHp z-MPLPtbT^u+1|mpQSYjmSf-j-dP+h7+45u189IxNhYK`Vs;NGf zO8p+RO+{^0c!?>;bjf;DD>C+lr1)lzbSh*sYo@dsMn?wU6|tzumm}Y+bMx;D#7x>- zVship#XK$NJsvLU!S*6z7kbWQnGxf~me*uC&nNtxAzl7climTEjZB;yl&oZ; zlF4M6taaV;@k}pmNS^C0TmD0f6Mc9h^0rpv!3!G?Ec zO6p}oMF`>Fh~P__%BFw{g6~xa54;*%WP`0%L|h_*oN?mJmo_oVdU~^(qWyF0b=5uI zRrNp~hs$?0@tcPbm^%HmCR__&+0=wEtFIlpw@+!8gYG!$%x+{tcx42w)p3ELQ)Bx2|E=X5ds`|NPzT{LW>h#OZ>8uUeh`wzl zhj5M@vphYd%{XY82i~_xho^Ox->G!9>niyv@r;{+;9D2V2_+=v2DJ4y;`%0DvAN%! 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 KP0e;NT>TFa4kMia diff --git a/lib/src/org/transdroid/daemon/AlphanumComparator.java b/lib/src/org/transdroid/daemon/AlphanumComparator.java new file mode 100644 index 00000000..d4db86dc --- /dev/null +++ b/lib/src/org/transdroid/daemon/AlphanumComparator.java @@ -0,0 +1,107 @@ +package org.transdroid.daemon; + +/* + * The Alphanum Algorithm is an improved sorting algorithm for strings + * containing numbers. Instead of sorting numbers in ASCII order like + * a standard sort, this algorithm sorts numbers in numeric order. + * + * The Alphanum Algorithm is discussed at http://www.DaveKoelle.com + * + * This is an updated version with enhancements made by Daniel Migowski, + * Andre Bogus, and David Koelle + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +import java.util.Comparator; + +public class AlphanumComparator implements Comparator { + + private final boolean isDigit(char ch) { + return ch >= 48 && ch <= 57; + } + + /** Length of string is passed in for improved efficiency (only need to calculate it once) **/ + private final String getChunk(String s, int slength, int marker) { + StringBuilder chunk = new StringBuilder(); + char c = s.charAt(marker); + chunk.append(c); + marker++; + if (isDigit(c)) { + while (marker < slength) { + c = s.charAt(marker); + if (!isDigit(c)) + break; + chunk.append(c); + marker++; + } + } else { + while (marker < slength) { + c = s.charAt(marker); + if (isDigit(c)) + break; + chunk.append(c); + marker++; + } + } + return chunk.toString(); + } + + public int compare(String o1, String o2) { + if (!(o1 instanceof String) || !(o2 instanceof String)) { + return 0; + } + String s1 = (String) o1; + String s2 = (String) o2; + + int thisMarker = 0; + int thatMarker = 0; + int s1Length = s1.length(); + int s2Length = s2.length(); + + while (thisMarker < s1Length && thatMarker < s2Length) { + String thisChunk = getChunk(s1, s1Length, thisMarker); + thisMarker += thisChunk.length(); + + String thatChunk = getChunk(s2, s2Length, thatMarker); + thatMarker += thatChunk.length(); + + // If both chunks contain numeric characters, sort them numerically + int result = 0; + if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) { + // Simple chunk comparison by length. + int thisChunkLength = thisChunk.length(); + result = thisChunkLength - thatChunk.length(); + // If equal, the first different number counts + if (result == 0) { + for (int i = 0; i < thisChunkLength; i++) { + result = thisChunk.charAt(i) - thatChunk.charAt(i); + if (result != 0) { + return result; + } + } + } + } else { + result = thisChunk.compareTo(thatChunk); + } + + if (result != 0) + return result; + } + + return s1Length - s2Length; + } + +} \ No newline at end of file diff --git a/lib/src/org/transdroid/daemon/DummyAdapter.java b/lib/src/org/transdroid/daemon/DummyAdapter.java index c70d7222..e52b133b 100644 --- a/lib/src/org/transdroid/daemon/DummyAdapter.java +++ b/lib/src/org/transdroid/daemon/DummyAdapter.java @@ -75,7 +75,9 @@ public class DummyAdapter implements IDaemonAdapter { this.dummyLabels = new ArrayList