diff --git a/pom.xml b/pom.xml
index d080ced12..34aca254f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 8.6
+ 8.7
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java
index 82e876582..f170a0924 100644
--- a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java
+++ b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java
@@ -56,6 +56,12 @@ public class FileGrabberDialog extends javax.swing.JDialog {
private int _last_selected_index;
private List _drag_drop_files;
+ @Override
+ public void dispose() {
+ file_tree.setModel(null);
+ super.dispose();
+ }
+
public JCheckBox getPriority_checkbox() {
return priority_checkbox;
}
diff --git a/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java b/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java
index 94940a912..340599893 100644
--- a/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java
+++ b/src/main/java/com/tonikelope/megabasterd/FolderLinkDialog.java
@@ -47,6 +47,12 @@ public class FolderLinkDialog extends javax.swing.JDialog {
private volatile boolean exit = false;
+ @Override
+ public void dispose() {
+ file_tree.setModel(null);
+ super.dispose();
+ }
+
public List getDownload_links() {
return Collections.unmodifiableList(_download_links);
}
@@ -430,6 +436,17 @@ private int _loadMegaDirTree() {
String folder_id = findFirstRegex("#F!([^!]+)", _link, 1);
+ String subfolder_id = null;
+
+ if (folder_id.contains("@")) {
+
+ String[] fids = folder_id.split("@");
+
+ folder_id = fids[0];
+
+ subfolder_id = fids[1];
+ }
+
int r = -1;
if (ma.existsCachedFolderNodes(folder_id)) {
@@ -443,17 +460,6 @@ private int _loadMegaDirTree() {
});
}
- String subfolder_id = null;
-
- if (folder_id.contains("@")) {
-
- String[] fids = folder_id.split("@");
-
- folder_id = fids[0];
-
- subfolder_id = fids[1];
- }
-
String folder_key = findFirstRegex("#F![^!]+!(.+)", _link, 1);
folder_nodes = ma.getFolderNodes(folder_id, folder_key, node_bar, (r == 0));
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index ce41d0f71..aa1098d8a 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -70,7 +70,7 @@
*/
public final class MainPanel {
- public static final String VERSION = "8.6";
+ public static final String VERSION = "8.7";
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;
@@ -393,11 +393,6 @@ public MainPanel() {
resumeUploads();
- /* NOT REQUIRED
- if (MegaAPI.API_KEY == null && JOptionPane.showConfirmDialog(this._view, LabelTranslatorSingleton.getInstance().translate("WARNING: USING MEGA API WITHOUT API KEY MAY VIOLATE ITS TERM OF USE.\n\nYOU SHOULD GET A KEY -> https://mega.nz/sdk (and set it in MegaBasterd ADVANCED SETTINGS).\n\nCREATE API KEY NOW?"), "MEGA API KEY ERROR", JOptionPane.ERROR_MESSAGE) == 0) {
- openBrowserURL("https://mega.nz/sdk");
-
- }*/
}
public static Boolean getResume_uploads() {
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
index 1ae6722ee..ad574baa9 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
@@ -62,6 +62,12 @@ public final class MainPanelView extends javax.swing.JFrame {
private final MainPanel _main_panel;
+ private static volatile MainPanelView INSTANCE = null;
+
+ public static MainPanelView getINSTANCE() {
+ return INSTANCE;
+ }
+
public JMenuItem getMerge_file_menu() {
return merge_file_menu;
}
@@ -539,6 +545,7 @@ private void changeToNormal() {
pack();
});
+ INSTANCE = this;
}
/**
diff --git a/src/main/java/com/tonikelope/megabasterd/MegaAPI.java b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
index 6d5cec899..456f5d48a 100644
--- a/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
+++ b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
@@ -39,6 +39,7 @@
import java.util.zip.GZIPInputStream;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLException;
+import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
/**
@@ -1232,8 +1233,14 @@ public ArrayList GENERATE_N_LINKS(Set links) {
String[] folder_parts = entry.getKey().split(":");
+ int r = -1;
+
+ if (existsCachedFolderNodes(folder_parts[0])) {
+ r = JOptionPane.showConfirmDialog(MainPanelView.getINSTANCE(), "Do you want to use FOLDER [" + folder_parts[0] + "] CACHED VERSION?\n\n(It could speed up the loading of very large folders)", "FOLDER CACHE", JOptionPane.YES_NO_OPTION);
+ }
+
try {
- nlinks.addAll(getNLinksFromFolder(folder_parts[0], folder_parts[1], entry.getValue()));
+ nlinks.addAll(getNLinksFromFolder(folder_parts[0], folder_parts[1], entry.getValue(), (r == 0)));
} catch (Exception ex) {
Logger.getLogger(MegaAPI.class.getName()).log(Level.SEVERE, null, ex);
}
@@ -1244,15 +1251,30 @@ public ArrayList GENERATE_N_LINKS(Set links) {
}
- public ArrayList getNLinksFromFolder(String folder_id, String folder_key, ArrayList file_ids) throws Exception {
+ public ArrayList getNLinksFromFolder(String folder_id, String folder_key, ArrayList file_ids, boolean cache) throws Exception {
ArrayList nlinks = new ArrayList<>();
- String request = "[{\"a\":\"f\", \"c\":\"1\", \"r\":\"1\", \"ca\":\"1\"}]";
+ String res = null;
- URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&n=" + folder_id);
+ if (cache) {
+ res = getCachedFolderNodes(folder_id);
+ }
- String res = RAW_REQUEST(request, url_api);
+ if (res == null) {
+
+ String request = "[{\"a\":\"f\", \"c\":\"1\", \"r\":\"1\", \"ca\":\"1\"}]";
+
+ URL url_api = new URL(API_URL + "/cs?id=" + String.valueOf(_seqno) + "&n=" + folder_id);
+
+ res = RAW_REQUEST(request, url_api);
+
+ if (res != null) {
+ writeCachedFolderNodes(folder_id, res);
+ }
+ }
+
+ LOG.log(Level.INFO, "MEGA FOLDER {0} JSON FILE TREE SIZE -> {1}", new Object[]{folder_id, MiscTools.formatBytes((long) res.length())});
if (res != null) {
diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png
index 68ccb6197..23e0931aa 100644
Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ