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