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