diff --git a/pom.xml b/pom.xml
index d80be9755..d618a8abd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 7.77
+ 7.78
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
index 4cce36a0f..e945c3737 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
@@ -31,7 +31,6 @@ import java.util.logging.Logger;
*/
public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
- public static final double SLOW_PROXY_PERC = 0.5;
private static final Logger LOG = Logger.getLogger(ChunkDownloader.class.getName());
private final int _id;
private final Download _download;
@@ -184,6 +183,8 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
MainPanel.run_external_command();
+ } else if (http_error != 509 && MainPanel.isRun_command() && MainPanel.LAST_TIMESTAMP_EXTERNAL_COMMAND != -1) {
+ MainPanel.LAST_TIMESTAMP_EXTERNAL_COMMAND = -1;
}
if ((_current_smart_proxy != null || http_error == 509) && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 0946b13fc..0b61d56be 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -1512,6 +1512,10 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
error_code = ex.getCode();
+ if (error_code == -11) {
+ _status_error = "ERROR: MEGA LINK BLOCKED/DELETED!";
+ }
+
if (Arrays.asList(FATAL_API_ERROR_CODES).contains(error_code)) {
_auto_retry_on_error = Arrays.asList(FATAL_API_ERROR_CODES_WITH_RETRY).contains(error_code);
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index cf786d85b..8d364eb6c 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -18,13 +18,12 @@ import java.awt.Color;
import static java.awt.EventQueue.invokeLater;
import java.awt.Font;
import static java.awt.Frame.NORMAL;
-import java.awt.MenuItem;
-import java.awt.PopupMenu;
import static java.awt.SystemTray.getSystemTray;
import static java.awt.Toolkit.getDefaultToolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import static java.awt.event.WindowEvent.WINDOW_CLOSING;
import java.io.File;
@@ -53,11 +52,14 @@ import static java.util.concurrent.Executors.newCachedThreadPool;
import java.util.logging.Level;
import static java.util.logging.Level.SEVERE;
import java.util.logging.Logger;
+import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
import static javax.swing.JOptionPane.WARNING_MESSAGE;
import static javax.swing.JOptionPane.YES_NO_CANCEL_OPTION;
import static javax.swing.JOptionPane.showOptionDialog;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
@@ -67,14 +69,14 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
- public static final String VERSION = "7.77";
+ public static final String VERSION = "7.78";
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;
public static final int STREAMER_PORT = 1337;
public static final int WATCHDOG_PORT = 1338;
public static final int DEFAULT_MEGA_PROXY_PORT = 9999;
- public static final int RUN_COMMAND_TIME = 600;
+ public static final int RUN_COMMAND_TIME = 120;
public static final String DEFAULT_LANGUAGE = "EN";
public static final boolean DEFAULT_SMART_PROXY = false;
public static final double FORCE_GARBAGE_COLLECTION_MAX_MEMORY_PERCENT = 0.7;
@@ -98,7 +100,7 @@ public final class MainPanel {
private static String _new_version;
private static Boolean _resume_uploads;
private static Boolean _resume_downloads;
- private static long _last_run_command;
+ public static volatile long LAST_TIMESTAMP_EXTERNAL_COMMAND;
private static final Logger LOG = Logger.getLogger(MainPanel.class.getName());
private static volatile boolean CHECK_RUNNING = true;
@@ -225,7 +227,7 @@ public final class MainPanel {
_exit = false;
- _last_run_command = -1;
+ LAST_TIMESTAMP_EXTERNAL_COMMAND = -1;
_restart = false;
@@ -812,7 +814,7 @@ public final class MainPanel {
_run_command_path = DBTools.selectSettingValue("run_command_path");
if (_run_command && old_run_command_path != null && !old_run_command_path.equals(_run_command_path)) {
- _last_run_command = -1;
+ LAST_TIMESTAMP_EXTERNAL_COMMAND = -1;
}
String use_megacrypter_reverse = selectSettingValue("megacrypter_reverse");
@@ -866,7 +868,7 @@ public final class MainPanel {
public static synchronized void run_external_command() {
- if (_run_command && (_last_run_command == -1 || _last_run_command + RUN_COMMAND_TIME * 1000 < System.currentTimeMillis())) {
+ if (_run_command && (LAST_TIMESTAMP_EXTERNAL_COMMAND == -1 || LAST_TIMESTAMP_EXTERNAL_COMMAND + RUN_COMMAND_TIME * 1000 < System.currentTimeMillis())) {
if (_run_command_path != null && !_run_command_path.equals("")) {
try {
@@ -875,7 +877,7 @@ public final class MainPanel {
Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, ex.getMessage());
}
- _last_run_command = System.currentTimeMillis();
+ LAST_TIMESTAMP_EXTERNAL_COMMAND = System.currentTimeMillis();
}
}
}
@@ -1355,29 +1357,29 @@ public final class MainPanel {
if (java.awt.SystemTray.isSupported()) {
- PopupMenu menu = new PopupMenu();
+ JPopupMenu menu = new JPopupMenu();
Font new_font = GUI_FONT;
menu.setFont(new_font.deriveFont(Font.BOLD, Math.round(14 * ZOOM_FACTOR)));
- MenuItem messageItem = new MenuItem(LabelTranslatorSingleton.getInstance().translate("Restore window"));
+ JMenuItem messageItem = new JMenuItem(LabelTranslatorSingleton.getInstance().translate("Restore window"));
messageItem.addActionListener((ActionEvent e) -> {
- MiscTools.GUIRun(() -> {
- getView().setExtendedState(NORMAL);
- getView().setVisible(true);
+ getView().setExtendedState(NORMAL);
- getView().revalidate();
+ getView().setVisible(true);
+
+ getView().revalidate();
+
+ getView().repaint();
- getView().repaint();
- });
});
menu.add(messageItem);
- MenuItem closeItem = new MenuItem(LabelTranslatorSingleton.getInstance().translate("EXIT"));
+ JMenuItem closeItem = new JMenuItem(LabelTranslatorSingleton.getInstance().translate("EXIT"));
closeItem.addActionListener((ActionEvent e) -> {
if (!getView().isVisible()) {
@@ -1394,28 +1396,34 @@ public final class MainPanel {
menu.add(closeItem);
- ActionListener actionListener = (ActionEvent e) -> {
- MiscTools.GUIRun(() -> {
- if (!getView().isVisible()) {
- getView().setExtendedState(NORMAL);
- getView().setVisible(true);
- getView().revalidate();
- getView().repaint();
-
- } else {
-
- getView().dispatchEvent(new WindowEvent(getView(), WINDOW_CLOSING));
- }
- });
- };
-
- _trayicon = new TrayIcon(getDefaultToolkit().getImage(getClass().getResource(ICON_FILE)), "MegaBasterd", menu);
+ _trayicon = new TrayIcon(getDefaultToolkit().getImage(getClass().getResource(ICON_FILE)), "MegaBasterd", null);
_trayicon.setToolTip("MegaBasterd " + VERSION);
_trayicon.setImageAutoSize(true);
- _trayicon.addActionListener(actionListener);
+ _trayicon.addMouseListener(new MouseAdapter() {
+ public void mouseReleased(MouseEvent e) {
+
+ if (SwingUtilities.isRightMouseButton(e)) {
+ menu.setLocation(e.getX(), e.getY());
+ menu.setInvoker(menu);
+ menu.setVisible(true);
+ } else {
+ if (!getView().isVisible()) {
+ getView().setExtendedState(NORMAL);
+ getView().setVisible(true);
+ getView().revalidate();
+ getView().repaint();
+
+ } else {
+
+ getView().dispatchEvent(new WindowEvent(getView(), WINDOW_CLOSING));
+ }
+ }
+
+ }
+ });
getSystemTray().add(_trayicon);
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
index 82b4ef915..2c3be27a6 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
@@ -60,205 +60,205 @@ import javax.swing.JTabbedPane;
* @author tonikelope
*/
public final class MainPanelView extends javax.swing.JFrame {
-
+
private final MainPanel _main_panel;
-
+
public JMenuItem getMerge_file_menu() {
return merge_file_menu;
}
-
+
public JMenuItem getSplit_file_menu() {
return split_file_menu;
}
-
+
public JLabel getKiss_server_status() {
return kiss_server_status;
}
-
+
public JMenuItem getClean_all_down_menu() {
return clean_all_down_menu;
}
-
+
public JMenuItem getClean_all_up_menu() {
return clean_all_up_menu;
}
-
+
public JButton getClose_all_finished_down_button() {
return close_all_finished_down_button;
}
-
+
public JButton getClose_all_finished_up_button() {
return close_all_finished_up_button;
}
-
+
public JLabel getMemory_status() {
return memory_status;
}
-
+
public JLabel getGlobal_speed_down_label() {
return global_speed_down_label;
}
-
+
public JLabel getDown_remtime_label() {
return down_remtime_label;
}
-
+
public JLabel getUp_remtime_label() {
return up_remtime_label;
}
-
+
public JLabel getGlobal_speed_up_label() {
return global_speed_up_label;
}
-
+
public JPanel getjPanel_scroll_down() {
return jPanel_scroll_down;
}
-
+
public JPanel getjPanel_scroll_up() {
return jPanel_scroll_up;
}
-
+
public JMenuItem getNew_download_menu() {
return new_download_menu;
}
-
+
public JMenuItem getNew_upload_menu() {
return new_upload_menu;
}
-
+
public JButton getPause_all_down_button() {
return pause_all_down_button;
}
-
+
public JButton getPause_all_up_button() {
return pause_all_up_button;
}
-
+
public JLabel getStatus_down_label() {
return status_down_label;
}
-
+
public JLabel getStatus_up_label() {
return status_up_label;
}
-
+
public JButton getUnfreeze_transferences_button() {
return unfreeze_transferences_button;
}
-
+
public MainPanel getMain_panel() {
return _main_panel;
}
-
+
public JTabbedPane getjTabbedPane1() {
return jTabbedPane1;
}
-
+
public JLabel getSmart_proxy_status() {
return smart_proxy_status;
}
-
+
public JLabel getMc_reverse_status() {
return mc_reverse_status;
}
-
+
public JCheckBoxMenuItem getAuto_close_menu() {
return auto_close_menu;
}
-
+
public void updateKissStreamServerStatus(final String status) {
-
+
MiscTools.GUIRun(() -> {
String old_status = getKiss_server_status().getText();
-
+
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
-
+
getKiss_server_status().setText(status + " ");
-
+
pack();
setSize(frame_size);
-
+
}
});
}
-
+
public void updateSmartProxyStatus(final String status) {
-
+
MiscTools.GUIRun(() -> {
String old_status = getSmart_proxy_status().getText();
-
+
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
-
+
getSmart_proxy_status().setText(status + " ");
-
+
pack();
setSize(frame_size);
-
+
}
});
}
-
+
public void updateMCReverseStatus(final String status) {
-
+
MiscTools.GUIRun(() -> {
-
+
String old_status = getMc_reverse_status().getText();
-
+
if (!old_status.equals(status + " ")) {
Dimension frame_size = this.getSize();
-
+
getMc_reverse_status().setText(status + " ");
-
+
pack();
setSize(frame_size);
-
+
}
});
}
-
+
private void _new_upload_dialog(FileGrabberDialog dialog) {
-
+
try {
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
-
+
if (dialog.isUpload() && dialog.getFiles().size() > 0) {
-
+
getMain_panel().resumeUploads();
-
+
getMain_panel().getUpload_manager().getTransference_preprocess_global_queue().addAll(dialog.getFiles());
-
+
getMain_panel().getUpload_manager().secureNotify();
-
+
final String mega_account = (String) dialog.getAccount_combobox().getSelectedItem();
-
+
final String base_path = dialog.getBase_path();
-
+
final String dir_name = dialog.getDir_name_textfield().getText();
-
+
jTabbedPane1.setSelectedIndex(1);
-
+
Runnable run = () -> {
-
+
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
-
+
MegaAPI ma = getMain_panel().getMega_active_accounts().get(mega_account);
-
+
try {
-
+
byte[] parent_key = ma.genFolderKey();
-
+
byte[] share_key = ma.genShareKey();
-
+
HashMap res = ma.createDir(dir_name != null ? dir_name : dialog.getFiles().get(0).getName() + "_" + genID(10), ma.getRoot_id(), parent_key, i32a2bin(ma.getMaster_key()));
-
+
String parent_node = (String) ((Map) ((List) res.get("f")).get(0)).get("h");
-
+
LOG.log(Level.INFO, "{0} Dir {1} created", new Object[]{Thread.currentThread().getName(), parent_node});
//ma.shareFolder(parent_node, parent_key, share_key); //DE MOMENTO NO HAY OTRA
@@ -266,10 +266,10 @@ public final class MainPanelView extends javax.swing.JFrame {
String folder_link = null; //No hay otra
if (dialog.getUpload_log_checkbox().isSelected()) {
-
+
File upload_log = new File(MainPanel.MEGABASTERD_HOME_DIR + "/megabasterd_upload_" + parent_node + ".log");
upload_log.createNewFile();
-
+
FileWriter fr;
try {
fr = new FileWriter(upload_log, true);
@@ -282,133 +282,133 @@ public final class MainPanelView extends javax.swing.JFrame {
Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, ex.getMessage());
}
}
-
+
MegaDirNode file_paths = new MegaDirNode(parent_node);
-
+
for (File f : dialog.getFiles()) {
-
+
String file_path = f.getParentFile().getAbsolutePath().replace(base_path, "");
-
+
try {
-
+
LOG.log(Level.INFO, "{0} FILE_PATH -> {1}", new Object[]{Thread.currentThread().getName(), file_path});
-
+
String[] dirs = file_path.split("\\" + File.separator);
-
+
MegaDirNode current_node = file_paths;
-
+
String file_parent = current_node.getNode_id();
-
+
for (String d : dirs) {
-
+
LOG.log(Level.INFO, "{0} DIR -> {1}", new Object[]{Thread.currentThread().getName(), d});
-
+
if (!d.isEmpty()) {
-
+
if (current_node.getChildren().get(d) != null) {
-
+
current_node = current_node.getChildren().get(d);
-
+
file_parent = current_node.getNode_id();
-
+
} else {
-
+
res = ma.createDirInsideAnotherSharedDir(d, current_node.getNode_id(), ma.genFolderKey(), i32a2bin(ma.getMaster_key()), parent_node, share_key);
-
+
file_parent = (String) ((Map) ((List) res.get("f")).get(0)).get("h");
-
+
current_node.getChildren().put(d, new MegaDirNode(file_parent));
-
+
current_node = current_node.getChildren().get(d);
}
}
}
-
+
while (getMain_panel().getUpload_manager().getTransference_waitstart_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE || getMain_panel().getUpload_manager().getTransference_waitstart_aux_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE) {
-
+
synchronized (getMain_panel().getUpload_manager().getWait_queue_lock()) {
getMain_panel().getUpload_manager().getWait_queue_lock().wait(1000);
}
}
-
+
if (!getMain_panel().getUpload_manager().getTransference_preprocess_global_queue().isEmpty()) {
-
+
Upload upload = new Upload(getMain_panel(), ma, f.getAbsolutePath(), file_parent, null, null, parent_node, share_key, folder_link, dialog.getPriority_checkbox().isSelected());
-
+
getMain_panel().getUpload_manager().getTransference_provision_queue().add(upload);
-
+
getMain_panel().getUpload_manager().getTransference_preprocess_global_queue().remove(f);
-
+
getMain_panel().getUpload_manager().secureNotify();
-
+
}
-
+
} catch (Exception ex) {
-
+
if (!getMain_panel().getUpload_manager().getTransference_preprocess_global_queue().isEmpty()) {
-
+
getMain_panel().getUpload_manager().getTransference_preprocess_global_queue().remove(f);
-
+
getMain_panel().getUpload_manager().secureNotify();
-
+
}
-
+
LOG.log(SEVERE, null, ex);
}
-
+
}
-
+
} catch (Exception ex) {
-
+
LOG.log(SEVERE, null, ex);
}
-
+
};
-
+
getMain_panel().getUpload_manager().getTransference_preprocess_queue().add(run);
-
+
getMain_panel().getUpload_manager().secureNotify();
-
+
}
-
+
} catch (Exception ex) {
}
-
+
if (!dialog.isRemember_master_pass()) {
-
+
_main_panel.setMaster_pass(null);
}
-
+
dialog.dispose();
-
+
}
-
+
private void _file_drop_notify(List files) {
-
+
final MainPanelView tthis = this;
-
+
THREAD_POOL.execute(() -> {
int n;
-
+
if (files.size() > 1) {
-
+
Object[] options = {LabelTranslatorSingleton.getInstance().translate("Split content in different uploads"), LabelTranslatorSingleton.getInstance().translate("Merge content in the same upload")};
-
+
n = showOptionDialog(_main_panel.getView(),
LabelTranslatorSingleton.getInstance().translate("How do you want to proceed?"),
LabelTranslatorSingleton.getInstance().translate("File Grabber"), DEFAULT_OPTION, INFORMATION_MESSAGE,
null,
options,
null);
-
+
} else {
-
+
n = 1;
-
+
}
-
+
if (n == 0) {
-
+
files.stream().map((file) -> {
List aux = new ArrayList<>();
aux.add(file);
@@ -416,44 +416,46 @@ public final class MainPanelView extends javax.swing.JFrame {
}).map((aux) -> new FileGrabberDialog(tthis, true, aux)).forEachOrdered((dialog) -> {
_new_upload_dialog(dialog);
});
-
+
} else if (n == 1) {
-
+
final FileGrabberDialog dialog = new FileGrabberDialog(tthis, true, files);
-
+
_new_upload_dialog(dialog);
-
+
}
});
}
-
+
public MainPanelView(MainPanel main_panel) {
-
+
_main_panel = main_panel;
-
+
MiscTools.GUIRunAndWait(() -> {
-
+
initComponents();
-
+
+ unfreeze_transferences_button.setBackground(Color.WHITE);
+
updateFonts(this, GUI_FONT, _main_panel.getZoom_factor());
-
+
translateLabels(this);
-
+
for (JComponent c : new JComponent[]{unfreeze_transferences_button, global_speed_down_label, global_speed_up_label, down_remtime_label, up_remtime_label, close_all_finished_down_button, close_all_finished_up_button, pause_all_down_button, pause_all_up_button}) {
-
+
c.setVisible(false);
}
-
+
clean_all_down_menu.setEnabled(false);
clean_all_up_menu.setEnabled(false);
-
+
jScrollPane_down.getVerticalScrollBar().setUnitIncrement(20);
jScrollPane_up.getVerticalScrollBar().setUnitIncrement(20);
-
+
jTabbedPane1.setTitleAt(0, LabelTranslatorSingleton.getInstance().translate("Downloads"));
jTabbedPane1.setTitleAt(1, LabelTranslatorSingleton.getInstance().translate("Uploads"));
jTabbedPane1.setDropTarget(new DropTarget() {
-
+
public boolean canImport(DataFlavor[] flavors) {
for (DataFlavor flavor : flavors) {
if (flavor.isFlavorJavaFileListType()) {
@@ -462,62 +464,62 @@ public final class MainPanelView extends javax.swing.JFrame {
}
return false;
}
-
+
@Override
public synchronized void drop(DropTargetDropEvent dtde) {
changeToNormal();
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
-
+
List files;
-
+
try {
-
+
if (canImport(dtde.getTransferable().getTransferDataFlavors())) {
files = (List) dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
-
+
THREAD_POOL.execute(() -> {
_file_drop_notify(files);
});
}
-
+
} catch (Exception ex) {
JOptionPane.showMessageDialog(main_panel.getView(), LabelTranslatorSingleton.getInstance().translate("ERROR DOING DRAG AND DROP WITH THIS FILE (use button method)"), "Error", JOptionPane.ERROR_MESSAGE);
-
+
}
}
-
+
@Override
public synchronized void dragEnter(DropTargetDragEvent dtde) {
changeToDrop();
}
-
+
@Override
public synchronized void dragExit(DropTargetEvent dtde) {
changeToNormal();
}
-
+
private void changeToDrop() {
jTabbedPane1.setBorder(BorderFactory.createLineBorder(Color.green, 5));
-
+
}
-
+
private void changeToNormal() {
jTabbedPane1.setBorder(null);
}
}
);
-
+
String auto_close = selectSettingValue("auto_close");
-
+
if (auto_close != null) {
getAuto_close_menu().setSelected(auto_close.equals("yes"));
} else {
getAuto_close_menu().setSelected(false);
}
-
+
pack();
});
-
+
}
/**
@@ -963,178 +965,178 @@ public final class MainPanelView extends javax.swing.JFrame {
}// //GEN-END:initComponents
private void new_download_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_new_download_menuActionPerformed
-
+
new_download_menu.setEnabled(false);
-
+
final LinkGrabberDialog dialog = new LinkGrabberDialog(this, true, _main_panel.getDefault_download_path(), _main_panel.getClipboardspy());
-
+
_main_panel.getClipboardspy().attachObserver(dialog);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
-
+
_main_panel.getClipboardspy().detachObserver(dialog);
-
+
final String dl_path = dialog.getDownload_path();
-
+
final MegaAPI ma;
-
+
if (getMain_panel().isUse_mega_account_down()) {
final String mega_account = (String) dialog.getUse_mega_account_down_combobox().getSelectedItem();
-
+
if ("".equals(mega_account)) {
-
+
ma = new MegaAPI();
-
+
} else {
-
+
ma = getMain_panel().getMega_active_accounts().get(mega_account);
}
-
+
} else {
-
+
ma = new MegaAPI();
}
-
+
jTabbedPane1.setSelectedIndex(0);
-
+
if (dialog.isDownload()) {
-
+
getMain_panel().resumeDownloads();
-
+
final MainPanelView tthis = this;
-
+
Runnable run = () -> {
-
+
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
//Convert to legacy link format
String link_data = MiscTools.newMegaLinks2Legacy(dialog.getLinks_textarea().getText());
-
+
Set urls = new HashSet(findAllRegex("(?:https?|mega)://[^\r\n]+(#[^\r\n!]*?)?![^\r\n!]+![^\\?\r\n/]+", link_data, 0));
-
+
Set megadownloader = new HashSet(findAllRegex("mega://enc[^\r\n]+", link_data, 0));
-
+
megadownloader.forEach((link) -> {
try {
-
+
urls.add(decryptMegaDownloaderLink(link));
-
+
} catch (Exception ex) {
LOG.log(SEVERE, null, ex);
}
});
-
+
Set elc = new HashSet(findAllRegex("mega://elc[^\r\n]+", link_data, 0));
-
+
elc.forEach((link) -> {
try {
-
+
urls.addAll(CryptTools.decryptELC(link, getMain_panel()));
-
+
} catch (Exception ex) {
LOG.log(SEVERE, null, ex);
}
});
-
+
Set dlc = new HashSet(findAllRegex("dlc://([^\r\n]+)", link_data, 1));
-
+
dlc.stream().map((d) -> CryptTools.decryptDLC(d, _main_panel)).forEachOrdered((links) -> {
links.stream().filter((link) -> (findFirstRegex("(?:https?|mega)://[^\r\n](#[^\r\n!]*?)?![^\r\n!]+![^\\?\r\n/]+", link, 0) != null)).forEachOrdered((link) -> {
urls.add(link);
});
});
-
+
if (!urls.isEmpty()) {
-
+
Set folder_file_links = new HashSet(findAllRegex("(?:https?|mega)://[^\r\n]+#F\\*[^\r\n!]*?![^\r\n!]+![^\\?\r\n/]+", link_data, 0));
-
+
if (!folder_file_links.isEmpty()) {
ArrayList nlinks = ma.getNlinks(folder_file_links);
-
+
urls.removeAll(folder_file_links);
-
+
urls.addAll(nlinks);
}
-
+
getMain_panel().getDownload_manager().getTransference_preprocess_global_queue().addAll(urls);
-
+
getMain_panel().getDownload_manager().secureNotify();
-
+
MiscTools.GUIRun(() -> {
new_download_menu.setEnabled(true);
});
-
+
boolean link_warning;
-
+
for (String url : urls) {
-
+
try {
-
+
link_warning = false;
-
+
url = URLDecoder.decode(url, "UTF-8").replaceAll("^mega://", "https://mega.nz").trim();
-
+
Download download;
-
+
if (findFirstRegex("#F!", url, 0) != null) {
-
+
FolderLinkDialog fdialog = new FolderLinkDialog(_main_panel.getView(), true, url);
-
+
if (fdialog.isMega_error() == 0) {
-
+
fdialog.setLocationRelativeTo(_main_panel.getView());
-
+
fdialog.setVisible(true);
-
+
if (fdialog.isDownload()) {
-
+
List folder_links = fdialog.getDownload_links();
-
+
fdialog.dispose();
-
+
for (HashMap folder_link : folder_links) {
-
+
while (getMain_panel().getDownload_manager().getTransference_waitstart_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE || getMain_panel().getDownload_manager().getTransference_waitstart_aux_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE) {
-
+
if (!link_warning) {
link_warning = true;
-
+
JOptionPane.showMessageDialog(tthis, LabelTranslatorSingleton.getInstance().translate("There are a lot of files in this folder.\nNot all links will be provisioned at once to avoid saturating MegaBasterd"), "Warning", JOptionPane.WARNING_MESSAGE);
}
-
+
synchronized (getMain_panel().getDownload_manager().getWait_queue_lock()) {
getMain_panel().getDownload_manager().getWait_queue_lock().wait(1000);
}
}
-
+
if (!getMain_panel().getDownload_manager().getTransference_preprocess_global_queue().isEmpty()) {
-
+
if (!((String) folder_link.get("url")).equals("*")) {
-
+
download = new Download(getMain_panel(), ma, (String) folder_link.get("url"), dl_path, (String) folder_link.get("filename"), (String) folder_link.get("filekey"), (long) folder_link.get("filesize"), null, null, getMain_panel().isUse_slots_down(), false, getMain_panel().isUse_custom_chunks_dir() ? getMain_panel().getCustom_chunks_dir() : null, dialog.getPriority_checkbox().isSelected());
-
+
getMain_panel().getDownload_manager().getTransference_provision_queue().add(download);
-
+
getMain_panel().getDownload_manager().secureNotify();
-
+
} else {
//Directorio vacĂo
String filename = dl_path + "/" + (String) folder_link.get("filename");
-
+
File file = new File(filename);
-
+
if (file.getParent() != null) {
File path = new File(file.getParent());
-
+
path.mkdirs();
}
-
+
if (((int) folder_link.get("type")) == 1) {
-
+
file.mkdir();
-
+
} else {
try {
file.createNewFile();
@@ -1148,38 +1150,38 @@ public final class MainPanelView extends javax.swing.JFrame {
}
}
}
-
+
}
-
+
fdialog.dispose();
-
+
} else {
-
+
while (getMain_panel().getDownload_manager().getTransference_waitstart_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE || getMain_panel().getDownload_manager().getTransference_waitstart_aux_queue().size() >= TransferenceManager.MAX_WAIT_QUEUE) {
-
+
synchronized (getMain_panel().getDownload_manager().getWait_queue_lock()) {
getMain_panel().getDownload_manager().getWait_queue_lock().wait(1000);
}
}
-
+
download = new Download(getMain_panel(), ma, url, dl_path, null, null, null, null, null, getMain_panel().isUse_slots_down(), false, getMain_panel().isUse_custom_chunks_dir() ? getMain_panel().getCustom_chunks_dir() : null, dialog.getPriority_checkbox().isSelected());
-
+
getMain_panel().getDownload_manager().getTransference_provision_queue().add(download);
-
+
getMain_panel().getDownload_manager().secureNotify();
-
+
}
-
+
getMain_panel().getDownload_manager().getTransference_preprocess_global_queue().remove(url);
-
+
getMain_panel().getDownload_manager().secureNotify();
-
+
} catch (UnsupportedEncodingException ex) {
LOG.log(Level.SEVERE, ex.getMessage());
} catch (InterruptedException ex) {
Logger.getLogger(MainPanelView.class.getName()).log(Level.SEVERE, ex.getMessage());
}
-
+
}
} else {
MiscTools.GUIRun(() -> {
@@ -1187,30 +1189,30 @@ public final class MainPanelView extends javax.swing.JFrame {
});
}
};
-
+
getMain_panel().getDownload_manager().getTransference_preprocess_queue().add(run);
-
+
getMain_panel().getDownload_manager().secureNotify();
-
+
} else {
-
+
new_download_menu.setEnabled(true);
}
-
+
dialog.dispose();
-
+
}//GEN-LAST:event_new_download_menuActionPerformed
-
+
private void settings_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_settings_menuActionPerformed
-
+
SettingsDialog dialog = new SettingsDialog(this, true);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
-
+
if (dialog.isSettings_ok()) {
-
+
dialog.getDeleted_mega_accounts().stream().map((email) -> {
try {
deleteMegaAccount(email);
@@ -1234,247 +1236,247 @@ public final class MainPanelView extends javax.swing.JFrame {
}).forEachOrdered((host) -> {
_main_panel.getElc_accounts().remove(host);
});
-
+
if (_main_panel.isRestart()) {
-
+
_main_panel.byebye(true);
} else {
_main_panel.loadUserSettings();
-
+
if (_main_panel.isLimit_download_speed()) {
-
+
_main_panel.getStream_supervisor().setMaxBytesPerSecInput(_main_panel.getMax_dl_speed() * 1024);
-
+
global_speed_down_label.setForeground(new Color(255, 0, 0));
-
+
} else {
-
+
_main_panel.getStream_supervisor().setMaxBytesPerSecInput(0);
-
+
global_speed_down_label.setForeground(new Color(0, 128, 255));
-
+
}
-
+
if (_main_panel.isLimit_upload_speed()) {
-
+
_main_panel.getStream_supervisor().setMaxBytesPerSecOutput(_main_panel.getMax_up_speed() * 1024);
-
+
global_speed_up_label.setForeground(new Color(255, 0, 0));
-
+
} else {
-
+
_main_panel.getStream_supervisor().setMaxBytesPerSecOutput(0);
-
+
global_speed_up_label.setForeground(new Color(0, 128, 255));
-
+
}
-
+
_main_panel.getDownload_manager().setMax_running_trans(_main_panel.getMax_dl());
-
+
_main_panel.getUpload_manager().setMax_running_trans(_main_panel.getMax_ul());
-
+
_main_panel.getDownload_manager().secureNotify();
-
+
_main_panel.getUpload_manager().secureNotify();
-
+
if (_main_panel.isMegacrypter_reverse()) {
-
+
if (_main_panel.getMega_proxy_server() == null) {
-
+
_main_panel.setMega_proxy_server(new MegaProxyServer(_main_panel, UUID.randomUUID().toString(), _main_panel.getMegacrypter_reverse_port()));
-
+
THREAD_POOL.execute(_main_panel.getMega_proxy_server());
-
+
} else if (_main_panel.getMega_proxy_server().getPort() != _main_panel.getMegacrypter_reverse_port()) {
-
+
try {
-
+
_main_panel.getMega_proxy_server().stopServer();
_main_panel.setMega_proxy_server(new MegaProxyServer(_main_panel, UUID.randomUUID().toString(), _main_panel.getMegacrypter_reverse_port()));
THREAD_POOL.execute(_main_panel.getMega_proxy_server());
-
+
} catch (IOException ex) {
LOG.log(Level.SEVERE, ex.getMessage());
}
}
-
+
} else {
-
+
if (_main_panel.getMega_proxy_server() != null) {
-
+
try {
_main_panel.getMega_proxy_server().stopServer();
} catch (IOException ex) {
LOG.log(Level.SEVERE, ex.getMessage());
}
}
-
+
_main_panel.setMega_proxy_server(null);
}
-
+
if (MainPanel.isUse_smart_proxy()) {
-
+
if (MainPanel.getProxy_manager() == null) {
-
+
String lista_proxy = DBTools.selectSettingValue("custom_proxy_list");
-
+
String url_list = MiscTools.findFirstRegex("^#(http.+)$", lista_proxy.trim(), 1);
-
+
MainPanel.setProxy_manager(new SmartMegaProxyManager(url_list, _main_panel));
} else {
String lista_proxy = DBTools.selectSettingValue("custom_proxy_list");
-
+
String url_list = MiscTools.findFirstRegex("^#(http.+)$", lista_proxy.trim(), 1);
MainPanel.getProxy_manager().refreshProxyList(url_list);
}
-
+
} else {
-
+
updateSmartProxyStatus("SmartProxy: OFF");
}
}
-
+
if (!dialog.isRemember_master_pass()) {
-
+
_main_panel.setMaster_pass(null);
}
-
+
dialog.dispose();
-
+
}
}//GEN-LAST:event_settings_menuActionPerformed
-
+
private void hide_tray_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hide_tray_menuActionPerformed
-
+
dispatchEvent(new WindowEvent(this, WINDOW_CLOSING));
}//GEN-LAST:event_hide_tray_menuActionPerformed
-
+
private void about_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_about_menuActionPerformed
-
+
AboutDialog dialog = new AboutDialog(this, true);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
}//GEN-LAST:event_about_menuActionPerformed
-
+
private void exit_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exit_menuActionPerformed
-
+
_main_panel.byebye(false);
}//GEN-LAST:event_exit_menuActionPerformed
-
+
private void close_all_finished_down_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_close_all_finished_down_buttonActionPerformed
-
+
_main_panel.getDownload_manager().closeAllFinished();
}//GEN-LAST:event_close_all_finished_down_buttonActionPerformed
-
+
private void clean_all_down_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_all_down_menuActionPerformed
-
+
Object[] options = {"No",
LabelTranslatorSingleton.getInstance().translate("Yes")};
-
+
int n = showOptionDialog(_main_panel.getView(),
LabelTranslatorSingleton.getInstance().translate("Remove all no running downloads?"),
LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE,
null,
options,
options[0]);
-
+
if (n == 1) {
_main_panel.getDownload_manager().closeAllPreProWaiting();
}
}//GEN-LAST:event_clean_all_down_menuActionPerformed
-
+
private void pause_all_down_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pause_all_down_buttonActionPerformed
-
+
pause_all_down_button.setEnabled(false);
-
+
if (!_main_panel.getDownload_manager().isPaused_all()) {
-
+
_main_panel.getDownload_manager().pauseAll();
-
+
} else {
-
+
_main_panel.getDownload_manager().resumeAll();
}
-
+
}//GEN-LAST:event_pause_all_down_buttonActionPerformed
-
+
private void new_stream_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_new_stream_menuActionPerformed
-
+
StreamerDialog dialog = new StreamerDialog(this, true, _main_panel.getClipboardspy());
-
+
_main_panel.getClipboardspy().attachObserver(dialog);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
-
+
_main_panel.getClipboardspy().detachObserver(dialog);
}//GEN-LAST:event_new_stream_menuActionPerformed
-
+
private void new_upload_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_new_upload_menuActionPerformed
-
+
final FileGrabberDialog dialog = new FileGrabberDialog(this, true, null);
-
+
_new_upload_dialog(dialog);
}//GEN-LAST:event_new_upload_menuActionPerformed
-
+
private void close_all_finished_up_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_close_all_finished_up_buttonActionPerformed
-
+
_main_panel.getUpload_manager().closeAllFinished();
}//GEN-LAST:event_close_all_finished_up_buttonActionPerformed
-
+
private void pause_all_up_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pause_all_up_buttonActionPerformed
-
+
pause_all_up_button.setEnabled(false);
-
+
if (!_main_panel.getUpload_manager().isPaused_all()) {
-
+
_main_panel.getUpload_manager().pauseAll();
-
+
} else {
-
+
_main_panel.getUpload_manager().resumeAll();
}
}//GEN-LAST:event_pause_all_up_buttonActionPerformed
-
+
private void clean_all_up_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_all_up_menuActionPerformed
-
+
Object[] options = {"No",
LabelTranslatorSingleton.getInstance().translate("Yes")};
-
+
int n = showOptionDialog(_main_panel.getView(),
LabelTranslatorSingleton.getInstance().translate("Remove all no running uploads?"),
LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE,
null,
options,
options[0]);
-
+
if (n == 1) {
_main_panel.getUpload_manager().closeAllPreProWaiting();
}
}//GEN-LAST:event_clean_all_up_menuActionPerformed
-
+
private void split_file_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_split_file_menuActionPerformed
// TODO add your handling code here:
FileSplitterDialog dialog = new FileSplitterDialog(this, true);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
}//GEN-LAST:event_split_file_menuActionPerformed
-
+
private void merge_file_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_merge_file_menuActionPerformed
// TODO add your handling code here:
FileMergerDialog dialog = new FileMergerDialog(this, true);
-
+
dialog.setLocationRelativeTo(this);
-
+
dialog.setVisible(true);
}//GEN-LAST:event_merge_file_menuActionPerformed
-
+
private void auto_close_menuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_auto_close_menuActionPerformed
try {
DBTools.insertSettingValue("auto_close", getAuto_close_menu().isSelected() ? "yes" : "no");
@@ -1482,37 +1484,37 @@ public final class MainPanelView extends javax.swing.JFrame {
Logger.getLogger(MainPanelView.class.getName()).log(Level.SEVERE, ex.getMessage());
}
}//GEN-LAST:event_auto_close_menuActionPerformed
-
+
private void unfreeze_transferences_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unfreeze_transferences_buttonActionPerformed
// TODO add your handling code here:
unfreeze_transferences_button.setVisible(false);
-
+
THREAD_POOL.execute(_main_panel.getDownload_manager()::unfreezeTransferenceWaitStartQueue);
-
+
THREAD_POOL.execute(_main_panel.getUpload_manager()::unfreezeTransferenceWaitStartQueue);
}//GEN-LAST:event_unfreeze_transferences_buttonActionPerformed
-
+
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
_main_panel.getDownload_manager().copyAllLinksToClipboard();
-
+
JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("ALL COPIED!"));
}//GEN-LAST:event_jButton1ActionPerformed
-
+
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
// TODO add your handling code here:
Object[] options = {"No",
LabelTranslatorSingleton.getInstance().translate("Yes")};
-
+
int n = showOptionDialog(_main_panel.getView(),
LabelTranslatorSingleton.getInstance().translate("CANCEL ALL DOWNLOADS?"),
LabelTranslatorSingleton.getInstance().translate("Warning!"), YES_NO_CANCEL_OPTION, QUESTION_MESSAGE,
null,
options,
options[0]);
-
+
if (n == 1) {
_main_panel.getDownload_manager().closeAllPreProWaiting();
_main_panel.getDownload_manager().cancelAllTransferences();
@@ -1566,5 +1568,5 @@ public final class MainPanelView extends javax.swing.JFrame {
private javax.swing.JPanel uploads_panel;
// End of variables declaration//GEN-END:variables
private static final Logger LOG = Logger.getLogger(MainPanelView.class.getName());
-
+
}
diff --git a/src/main/java/com/tonikelope/megabasterd/Transference.java b/src/main/java/com/tonikelope/megabasterd/Transference.java
index 134dfd578..29ee5ae22 100644
--- a/src/main/java/com/tonikelope/megabasterd/Transference.java
+++ b/src/main/java/com/tonikelope/megabasterd/Transference.java
@@ -18,14 +18,14 @@ import java.util.concurrent.ConcurrentLinkedQueue;
public interface Transference {
int MIN_WORKERS = 1;
- int MAX_WORKERS = 20;
+ int MAX_WORKERS = 30;
int HTTP_PROXY_CONNECT_TIMEOUT = 20000;
int HTTP_PROXY_READ_TIMEOUT = 20000;
int HTTP_CONNECT_TIMEOUT = 60000;
int HTTP_READ_TIMEOUT = 60000;
int MAX_SIM_TRANSFERENCES = 50;
int SIM_TRANSFERENCES_DEFAULT = 4;
- int PROGRESS_WATCHDOG_TIMEOUT = 600;
+ int PROGRESS_WATCHDOG_TIMEOUT = 300;
boolean LIMIT_TRANSFERENCE_SPEED_DEFAULT = false;
int MAX_TRANSFERENCE_SPEED_DEFAULT = 5;
int MAX_WAIT_WORKERS_SHUTDOWN = 15;