diff --git a/pom.xml b/pom.xml
index 15e8ea137..83afd4cca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 7.56
+ 7.57
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java b/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
index 4fe36f77a..68e0b9500 100644
--- a/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
+++ b/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
@@ -49,7 +49,15 @@ public class ClipboardSpy implements Runnable, ClipboardOwner, SecureSingleThrea
_enabled = enabled;
- if (_enabled) {
+ boolean monitor_clipboard = true;
+
+ String monitor_clipboard_string = DBTools.selectSettingValue("clipboardspy");
+
+ if (monitor_clipboard_string != null) {
+ monitor_clipboard = monitor_clipboard_string.equals("yes");
+ }
+
+ if (_enabled && monitor_clipboard) {
_contents = getClipboardContents();
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 3810e3387..726527cf2 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -50,6 +50,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
public static final boolean USE_SLOTS_DEFAULT = true;
public static final int WORKERS_DEFAULT = 6;
public static final boolean USE_MEGA_ACCOUNT_DOWN = false;
+ public static final boolean DEFAULT_CLIPBOARD_LINK_MONITOR = true;
public static final int CHUNK_SIZE_MULTI = 20;
private static final Logger LOG = Logger.getLogger(Download.class.getName());
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index 1bdc0a942..9af4b4168 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -58,7 +58,7 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
- public static final String VERSION = "7.56";
+ public static final String VERSION = "7.57";
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/SettingsDialog.form b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
index 97cbe6bfd..e15fe5c9b 100644
--- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
+++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
@@ -33,7 +33,7 @@
-
+
@@ -48,7 +48,7 @@
-
+
@@ -134,6 +134,7 @@
+
@@ -143,7 +144,6 @@
-
@@ -153,11 +153,6 @@
-
-
-
-
-
@@ -194,10 +189,17 @@
+
+
+
+
+
+
+
+
-
@@ -226,14 +228,16 @@
-
+
+
+
-
+
@@ -519,6 +523,14 @@
+
+
+
+
+
+
+
+
@@ -719,6 +731,8 @@
+
+
@@ -734,7 +748,7 @@
-
+
@@ -754,16 +768,17 @@
-
+
+
-
+
@@ -972,6 +987,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
index c4ad6a1e2..448967199 100644
--- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
+++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@@ -25,10 +26,13 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
@@ -42,6 +46,7 @@ import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.SpinnerNumberModel;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;
+import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
/**
@@ -172,6 +177,16 @@ public class SettingsDialog extends javax.swing.JDialog {
custom_chunks_dir_current_label.setEnabled(false);
}
+ boolean monitor_clipboard = Download.DEFAULT_CLIPBOARD_LINK_MONITOR;
+
+ String monitor_clipboard_string = DBTools.selectSettingValue("clipboardspy");
+
+ if (monitor_clipboard_string != null) {
+ monitor_clipboard = monitor_clipboard_string.equals("yes");
+ }
+
+ clipboardspy_checkbox.setSelected(monitor_clipboard);
+
String default_download_dir = DBTools.selectSettingValue("default_down_dir");
default_download_dir = Paths.get(default_download_dir == null ? MainPanel.MEGABASTERD_HOME_DIR : default_download_dir).toAbsolutePath().normalize().toString();
@@ -668,6 +683,7 @@ public class SettingsDialog extends javax.swing.JDialog {
custom_proxy_textarea = new javax.swing.JTextArea();
custom_proxy_list_label = new javax.swing.JLabel();
rec_smart_proxy_label1 = new javax.swing.JLabel();
+ clipboardspy_checkbox = new javax.swing.JCheckBox();
uploads_scrollpane = new javax.swing.JScrollPane();
uploads_panel = new javax.swing.JPanel();
default_slots_up_label = new javax.swing.JLabel();
@@ -693,6 +709,7 @@ public class SettingsDialog extends javax.swing.JDialog {
remove_elc_account_button = new javax.swing.JButton();
add_elc_account_button = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
+ import_mega_button = new javax.swing.JButton();
advanced_scrollpane = new javax.swing.JScrollPane();
advanced_panel = new javax.swing.JPanel();
proxy_panel = new javax.swing.JPanel();
@@ -882,6 +899,9 @@ public class SettingsDialog extends javax.swing.JDialog {
rec_smart_proxy_label1.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
rec_smart_proxy_label1.setText("WARNING: Using proxies or VPN to bypass MEGA's daily download limitation may violate its Terms of Use. USE THIS OPTION AT YOUR OWN RISK.");
+ clipboardspy_checkbox.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N
+ clipboardspy_checkbox.setText("Monitor clipboard looking for new links");
+
javax.swing.GroupLayout downloads_panelLayout = new javax.swing.GroupLayout(downloads_panel);
downloads_panel.setLayout(downloads_panelLayout);
downloads_panelLayout.setHorizontalGroup(
@@ -889,6 +909,7 @@ public class SettingsDialog extends javax.swing.JDialog {
.addGroup(downloads_panelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(downloads_panelLayout.createSequentialGroup()
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(smart_proxy_checkbox)
@@ -897,7 +918,6 @@ public class SettingsDialog extends javax.swing.JDialog {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(max_downloads_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(multi_slot_down_checkbox)
- .addComponent(limit_download_speed_checkbox)
.addGroup(downloads_panelLayout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -906,10 +926,6 @@ public class SettingsDialog extends javax.swing.JDialog {
.addComponent(default_slots_down_label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(default_slots_down_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addGroup(downloads_panelLayout.createSequentialGroup()
- .addComponent(max_down_speed_label)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(max_down_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(downloads_panelLayout.createSequentialGroup()
.addComponent(use_mega_label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@@ -936,9 +952,15 @@ public class SettingsDialog extends javax.swing.JDialog {
.addGroup(downloads_panelLayout.createSequentialGroup()
.addComponent(megacrypter_reverse_port_label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(megacrypter_reverse_port_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
- .addGap(0, 132, Short.MAX_VALUE))
- .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addComponent(megacrypter_reverse_port_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+ .addComponent(limit_download_speed_checkbox)
+ .addGroup(downloads_panelLayout.createSequentialGroup()
+ .addGap(21, 21, 21)
+ .addComponent(max_down_speed_label)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(max_down_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(clipboardspy_checkbox))
+ .addGap(0, 132, Short.MAX_VALUE)))
.addContainerGap())
);
downloads_panelLayout.setVerticalGroup(
@@ -961,13 +983,15 @@ public class SettingsDialog extends javax.swing.JDialog {
.addComponent(default_slots_down_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(rec_download_slots_label)
- .addGap(18, 18, 18)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(clipboardspy_checkbox)
+ .addGap(10, 10, 10)
.addComponent(limit_download_speed_checkbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(max_down_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(max_down_speed_label))
- .addGap(18, 18, 18)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(verify_file_down_checkbox)
.addGap(18, 18, 18)
.addComponent(use_mega_account_down_checkbox)
@@ -1215,6 +1239,15 @@ public class SettingsDialog extends javax.swing.JDialog {
jLabel1.setText("Note: you can use a (optional) alias for your email addresses -> bob@supermail.com#bob_mail (don't forget to save after entering your accounts).");
jLabel1.setDoubleBuffered(true);
+ import_mega_button.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N
+ import_mega_button.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons8-import-30.png"))); // NOI18N
+ import_mega_button.setText("IMPORT ACCOUNTS (FILE)");
+ import_mega_button.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ import_mega_buttonActionPerformed(evt);
+ }
+ });
+
javax.swing.GroupLayout accounts_panelLayout = new javax.swing.GroupLayout(accounts_panel);
accounts_panel.setLayout(accounts_panelLayout);
accounts_panelLayout.setHorizontalGroup(
@@ -1232,6 +1265,8 @@ public class SettingsDialog extends javax.swing.JDialog {
.addGroup(accounts_panelLayout.createSequentialGroup()
.addComponent(remove_mega_account_button)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(import_mega_button)
+ .addGap(18, 18, 18)
.addComponent(add_mega_account_button))
.addComponent(elc_accounts_scrollpane)
.addGroup(accounts_panelLayout.createSequentialGroup()
@@ -1243,7 +1278,7 @@ public class SettingsDialog extends javax.swing.JDialog {
.addComponent(mega_accounts_label)
.addComponent(elc_accounts_label))
.addGap(0, 0, Short.MAX_VALUE))
- .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 1072, Short.MAX_VALUE))
.addContainerGap())
);
accounts_panelLayout.setVerticalGroup(
@@ -1259,15 +1294,16 @@ public class SettingsDialog extends javax.swing.JDialog {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(mega_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 26, Short.MAX_VALUE)
+ .addComponent(mega_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(accounts_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(remove_mega_account_button)
- .addComponent(add_mega_account_button))
+ .addComponent(add_mega_account_button)
+ .addComponent(import_mega_button))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(elc_accounts_label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(elc_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 26, Short.MAX_VALUE)
+ .addComponent(elc_accounts_scrollpane, javax.swing.GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(accounts_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(remove_elc_account_button)
@@ -1659,7 +1695,7 @@ public class SettingsDialog extends javax.swing.JDialog {
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel_tabs, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
- .addComponent(status, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)
+ .addComponent(status, javax.swing.GroupLayout.DEFAULT_SIZE, 809, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(save_button)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
@@ -1670,7 +1706,7 @@ public class SettingsDialog extends javax.swing.JDialog {
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
- .addComponent(panel_tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
+ .addComponent(panel_tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 600, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
@@ -1724,6 +1760,7 @@ public class SettingsDialog extends javax.swing.JDialog {
settings.put("run_command", run_command_checkbox.isSelected() ? "yes" : "no");
settings.put("run_command_path", run_command_textbox.getText());
settings.put("mega_api_key", mega_api_key.getText().trim());
+ settings.put("clipboardspy", clipboardspy_checkbox.isSelected() ? "yes" : "no");
if (custom_proxy_textarea.getText().trim().length() == 0) {
smart_proxy_checkbox.setSelected(false);
@@ -2934,6 +2971,55 @@ public class SettingsDialog extends javax.swing.JDialog {
mega_api_key_warningMouseClicked(evt);
}//GEN-LAST:event_mega_api_key_labelMouseClicked
+ private void import_mega_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_import_mega_buttonActionPerformed
+ // TODO add your handling code here:
+
+ if (!unlock_accounts_button.isVisible() || !unlock_accounts_button.isEnabled()) {
+
+ JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("EMAIL1\nPASS1\nEMAIL2\nPASS2\nEMAIL3\nPASS3\n"), "TXT FILE FORMAT", JOptionPane.INFORMATION_MESSAGE);
+
+ javax.swing.JFileChooser filechooser = new javax.swing.JFileChooser();
+
+ updateFonts(filechooser, GUI_FONT, (float) (_main_panel.getZoom_factor() * 1.25));
+
+ filechooser.setDialogTitle("Select MEGA ACCOUNTS FILE");
+
+ filechooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_ONLY);
+
+ filechooser.addChoosableFileFilter(new FileNameExtensionFilter("TXT", "txt"));
+
+ filechooser.setAcceptAllFileFilterUsed(false);
+
+ if (filechooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
+
+ try {
+ final File file = filechooser.getSelectedFile();
+
+ Stream filter = Files.lines(file.toPath()).map(s -> s.trim()).filter(s -> !s.isEmpty());
+
+ List result = filter.collect(Collectors.toList());
+
+ DefaultTableModel model = (DefaultTableModel) mega_accounts_table.getModel();
+
+ for (int i = 0; i < result.size() - 1; i += 2) {
+ System.out.println(result.get(i) + " " + result.get(i + 1));
+
+ model.addRow(new Object[]{result.get(i), result.get(i + 1)});
+ }
+
+ mega_accounts_table.setModel(model);
+
+ } catch (IOException ex) {
+ Logger.getLogger(SettingsDialog.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+ } else {
+ JOptionPane.showMessageDialog(this, LabelTranslatorSingleton.getInstance().translate("MEGA ACCOUNTS ARE LOCKED"), "Mega Accounts Locked", JOptionPane.ERROR_MESSAGE);
+
+ }
+ }//GEN-LAST:event_import_mega_buttonActionPerformed
+
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel accounts_panel;
private javax.swing.JButton add_elc_account_button;
@@ -2942,6 +3028,7 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JScrollPane advanced_scrollpane;
private javax.swing.JButton cancel_button;
private javax.swing.JButton change_download_dir_button;
+ private javax.swing.JCheckBox clipboardspy_checkbox;
private javax.swing.JButton custom_chunks_dir_button;
private javax.swing.JCheckBox custom_chunks_dir_checkbox;
private javax.swing.JLabel custom_chunks_dir_current_label;
@@ -2964,6 +3051,7 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JButton export_settings_button;
private javax.swing.JComboBox font_combo;
private javax.swing.JLabel font_label;
+ private javax.swing.JButton import_mega_button;
private javax.swing.JButton import_settings_button;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;