diff --git a/pom.xml b/pom.xml index 9999ac91b..3b0381400 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tonikelope MegaBasterd - 7.14 + 7.15 jar diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java index 1747c31f8..5769b2137 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java @@ -55,7 +55,7 @@ import javax.swing.UIManager; */ public final class MainPanel { - public static final String VERSION = "7.14"; + public static final String VERSION = "7.15"; public static final boolean FORCE_SMART_PROXY = false; //TRUE FOR DEBUGING SMART PROXY public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; diff --git a/src/main/java/com/tonikelope/megabasterd/MegaMutableTreeNode.java b/src/main/java/com/tonikelope/megabasterd/MegaMutableTreeNode.java index b0f1b1780..0d6d9c2a3 100644 --- a/src/main/java/com/tonikelope/megabasterd/MegaMutableTreeNode.java +++ b/src/main/java/com/tonikelope/megabasterd/MegaMutableTreeNode.java @@ -18,7 +18,8 @@ public class MegaMutableTreeNode extends DefaultMutableTreeNode { protected Comparator nodeComparator = new Comparator() { @Override public int compare(Object o1, Object o2) { - return o1.toString().compareToIgnoreCase(o2.toString()); + + return MiscTools.naturalCompare(o1.toString(), o2.toString(), true); } @Override diff --git a/src/main/java/com/tonikelope/megabasterd/MiscTools.java b/src/main/java/com/tonikelope/megabasterd/MiscTools.java index d5f4a81ea..29c6ef25b 100644 --- a/src/main/java/com/tonikelope/megabasterd/MiscTools.java +++ b/src/main/java/com/tonikelope/megabasterd/MiscTools.java @@ -95,7 +95,8 @@ public class MiscTools { } else { String sa = a.getUserObject().toString(); String sb = b.getUserObject().toString(); - return sa.compareToIgnoreCase(sb); + + return MiscTools.naturalCompare(sa, sb, true); } }; private static final Logger LOG = Logger.getLogger(MiscTools.class.getName()); @@ -1134,6 +1135,69 @@ public class MiscTools { System.exit(2); } + /* + Thanks -> https://stackoverflow.com/a/26884326 + */ + public static int naturalCompare(String a, String b, boolean ignoreCase) { + if (ignoreCase) { + a = a.toLowerCase(); + b = b.toLowerCase(); + } + int aLength = a.length(); + int bLength = b.length(); + int minSize = Math.min(aLength, bLength); + char aChar, bChar; + boolean aNumber, bNumber; + boolean asNumeric = false; + int lastNumericCompare = 0; + for (int i = 0; i < minSize; i++) { + aChar = a.charAt(i); + bChar = b.charAt(i); + aNumber = aChar >= '0' && aChar <= '9'; + bNumber = bChar >= '0' && bChar <= '9'; + if (asNumeric) { + if (aNumber && bNumber) { + if (lastNumericCompare == 0) { + lastNumericCompare = aChar - bChar; + } + } else if (aNumber) { + return 1; + } else if (bNumber) { + return -1; + } else if (lastNumericCompare == 0) { + if (aChar != bChar) { + return aChar - bChar; + } + asNumeric = false; + } else { + return lastNumericCompare; + } + } else if (aNumber && bNumber) { + asNumeric = true; + if (lastNumericCompare == 0) { + lastNumericCompare = aChar - bChar; + } + } else if (aChar != bChar) { + return aChar - bChar; + } + } + if (asNumeric) { + if (aLength > bLength && a.charAt(bLength) >= '0' && a.charAt(bLength) <= '9') // as number + { + return 1; // a has bigger size, thus b is smaller + } else if (bLength > aLength && b.charAt(aLength) >= '0' && b.charAt(aLength) <= '9') // as number + { + return -1; // b has bigger size, thus a is smaller + } else if (lastNumericCompare == 0) { + return aLength - bLength; + } else { + return lastNumericCompare; + } + } else { + return aLength - bLength; + } + } + public static MegaAPI checkMegaAccountLoginAndShowMasterPassDialog(MainPanel main_panel, Container container, String email) throws Exception { boolean remember_master_pass = true; diff --git a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java index d045569c2..23cbc45b1 100644 --- a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java +++ b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java @@ -570,7 +570,7 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea ArrayList trans_list = new ArrayList(queue); - trans_list.sort((Transference o1, Transference o2) -> o1.getFile_name().compareToIgnoreCase(o2.getFile_name())); + trans_list.sort((Transference o1, Transference o2) -> MiscTools.naturalCompare(o1.getFile_name(), o2.getFile_name(), true)); queue.clear(); diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png index f1d3d4c7a..49bd4555e 100644 Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ