diff --git a/pom.xml b/pom.xml
index eef29f82c..5fdecc8cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 8.14
+ 8.15
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
index 3563138ee..47ddab93e 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
@@ -431,7 +431,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
setExit(true);
}
- } else {
+ } else if (proxy_manager != null && proxy_manager.isReset_slot_proxy()) {
_current_smart_proxy = null;
}
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index ded9452f5..02f43e374 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -70,7 +70,7 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
- public static final String VERSION = "8.14";
+ public static final String VERSION = "8.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/SettingsDialog.form b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
index 46744a079..4d1e13305 100644
--- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
+++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form
@@ -131,58 +131,65 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
+
-
+
-
+
+
+
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
@@ -478,43 +485,59 @@
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
+
@@ -524,10 +547,15 @@
-
-
-
+
+
+
+
+
+
+
+
@@ -544,6 +572,11 @@
+
+
+
+
+
@@ -649,14 +682,6 @@
-
-
-
-
-
-
-
-
@@ -688,7 +713,7 @@
-
+
@@ -709,6 +734,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
index 038a90857..ae99fc6c2 100644
--- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
+++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java
@@ -361,6 +361,32 @@ public class SettingsDialog extends javax.swing.JDialog {
((JSpinner.DefaultEditor) proxy_timeout_spinner.getEditor()).getTextField().setEditable(true);
+ boolean reset_slot_proxy = SmartMegaProxyManager.RESET_SLOT_PROXY;
+
+ String sreset_slot_proxy = DBTools.selectSettingValue("reset_slot_proxy");
+
+ if (sreset_slot_proxy != null) {
+
+ reset_slot_proxy = sreset_slot_proxy.equals("yes");
+ }
+
+ proxy_reset_slot_checkbox.setSelected(reset_slot_proxy);
+
+ boolean random_select = SmartMegaProxyManager.RANDOM_SELECT;
+
+ String srandom_select = DBTools.selectSettingValue("random_proxy");
+
+ if (srandom_select != null) {
+
+ random_select = srandom_select.equals("yes");
+ }
+
+ if (random_select) {
+ proxy_random_radio.setSelected(true);
+ } else {
+ proxy_sequential_radio.setSelected(true);
+ }
+
String max_ul_speed = DBTools.selectSettingValue("max_upload_speed");
int max_upload_speed = Upload.MAX_TRANSFERENCE_SPEED_DEFAULT;
@@ -779,13 +805,18 @@ public class SettingsDialog extends javax.swing.JDialog {
custom_proxy_textarea = new javax.swing.JTextArea();
rec_smart_proxy_label1 = new javax.swing.JLabel();
custom_proxy_list_label = new javax.swing.JLabel();
- rec_smart_proxy_label2 = new javax.swing.JLabel();
rec_smart_proxy_label = new javax.swing.JLabel();
proxy_timeout_spinner = new javax.swing.JSpinner();
force_smart_proxy_checkbox = new javax.swing.JCheckBox();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
auto_refresh_proxy_time_spinner = new javax.swing.JSpinner();
+ proxy_random_radio = new javax.swing.JRadioButton();
+ proxy_sequential_radio = new javax.swing.JRadioButton();
+ jLabel9 = new javax.swing.JLabel();
+ proxy_reset_slot_checkbox = new javax.swing.JCheckBox();
+ jLabel10 = new javax.swing.JLabel();
+ jLabel11 = new javax.swing.JLabel();
uploads_scrollpane = new javax.swing.JScrollPane();
uploads_panel = new javax.swing.JPanel();
default_slots_up_label = new javax.swing.JLabel();
@@ -1035,9 +1066,6 @@ public class SettingsDialog extends javax.swing.JDialog {
custom_proxy_list_label.setText("[*]IP:PORT[@user_b64:password_b64] OR #PROXY_LIST_URL");
custom_proxy_list_label.setOpaque(true);
- rec_smart_proxy_label2.setFont(new java.awt.Font("Dialog", 2, 16)); // NOI18N
- rec_smart_proxy_label2.setText("Note2: proxies are selected RANDOMLY. ");
-
rec_smart_proxy_label.setFont(new java.awt.Font("Dialog", 2, 16)); // NOI18N
rec_smart_proxy_label.setText("Note1: enable it in order to mitigate bandwidth limit. (Multislot is required) ");
@@ -1048,7 +1076,7 @@ public class SettingsDialog extends javax.swing.JDialog {
force_smart_proxy_checkbox.setText("FORCE SMART PROXY");
jLabel7.setFont(new java.awt.Font("Noto Sans", 2, 16)); // NOI18N
- jLabel7.setText("Forces the use of smart proxy even if we still have direct bandwidth available (useful to test proxies).");
+ jLabel7.setText("Forces the use of smart proxy even if we still have direct bandwidth available (useful to test proxies)");
jLabel8.setFont(new java.awt.Font("Noto Sans", 1, 16)); // NOI18N
jLabel8.setText("Proxy list refresh (minutes):");
@@ -1056,39 +1084,79 @@ public class SettingsDialog extends javax.swing.JDialog {
auto_refresh_proxy_time_spinner.setFont(new java.awt.Font("Noto Sans", 0, 16)); // NOI18N
auto_refresh_proxy_time_spinner.setModel(new javax.swing.SpinnerNumberModel(60, 1, null, 1));
+ proxy_random_radio.setFont(new java.awt.Font("Noto Sans", 0, 16)); // NOI18N
+ proxy_random_radio.setText("RANDOM");
+ proxy_random_radio.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ proxy_random_radioActionPerformed(evt);
+ }
+ });
+
+ proxy_sequential_radio.setFont(new java.awt.Font("Noto Sans", 0, 16)); // NOI18N
+ proxy_sequential_radio.setText("SEQUENTIAL");
+ proxy_sequential_radio.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ proxy_sequential_radioActionPerformed(evt);
+ }
+ });
+
+ jLabel9.setFont(new java.awt.Font("Noto Sans", 1, 16)); // NOI18N
+ jLabel9.setText("Proxy selection order:");
+
+ proxy_reset_slot_checkbox.setFont(new java.awt.Font("Noto Sans", 1, 16)); // NOI18N
+ proxy_reset_slot_checkbox.setText("Reset slot proxy after successfully downloading a chunk");
+
+ jLabel10.setFont(new java.awt.Font("Noto Sans", 2, 16)); // NOI18N
+ jLabel10.setText("(Useful to avoid getting trapped in slow proxies)");
+
+ jLabel11.setFont(new java.awt.Font("Noto Sans", 2, 16)); // NOI18N
+ jLabel11.setText("(If you have a list of proxies sorted from best to worst, check sequential)");
+
javax.swing.GroupLayout smart_proxy_settingsLayout = new javax.swing.GroupLayout(smart_proxy_settings);
smart_proxy_settings.setLayout(smart_proxy_settingsLayout);
smart_proxy_settingsLayout.setHorizontalGroup(
smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(smart_proxy_settingsLayout.createSequentialGroup()
- .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+ .addComponent(force_smart_proxy_checkbox)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(custom_proxy_list_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(jScrollPane1)
+ .addGroup(smart_proxy_settingsLayout.createSequentialGroup()
+ .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(smart_proxy_settingsLayout.createSequentialGroup()
.addContainerGap()
.addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(rec_smart_proxy_label1)
.addComponent(rec_smart_proxy_label)
- .addComponent(rec_smart_proxy_label2)
.addGroup(smart_proxy_settingsLayout.createSequentialGroup()
- .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
- .addComponent(bad_proxy_time_spinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
- .addComponent(auto_refresh_proxy_time_spinner, javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(proxy_timeout_spinner))
+ .addGroup(smart_proxy_settingsLayout.createSequentialGroup()
+ .addComponent(jLabel9)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 49, Short.MAX_VALUE)
+ .addComponent(proxy_random_radio)
+ .addGap(18, 18, 18)
+ .addComponent(proxy_sequential_radio))
+ .addGroup(smart_proxy_settingsLayout.createSequentialGroup()
+ .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addComponent(bad_proxy_time_spinner, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
+ .addComponent(auto_refresh_proxy_time_spinner, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxy_timeout_spinner))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
- .addComponent(jLabel6)))))
+ .addComponent(jLabel6)
+ .addComponent(jLabel11)))))
.addGroup(smart_proxy_settingsLayout.createSequentialGroup()
- .addComponent(force_smart_proxy_checkbox)
+ .addComponent(proxy_reset_slot_checkbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addComponent(custom_proxy_list_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(jScrollPane1))
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(jLabel10)))
+ .addGap(0, 0, Short.MAX_VALUE))
);
smart_proxy_settingsLayout.setVerticalGroup(
smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -1096,10 +1164,14 @@ public class SettingsDialog extends javax.swing.JDialog {
.addContainerGap()
.addComponent(rec_smart_proxy_label)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(rec_smart_proxy_label2)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(rec_smart_proxy_label1)
- .addGap(18, 18, 18)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxy_random_radio)
+ .addComponent(proxy_sequential_radio)
+ .addComponent(jLabel9)
+ .addComponent(jLabel11))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(auto_refresh_proxy_time_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
@@ -1113,6 +1185,10 @@ public class SettingsDialog extends javax.swing.JDialog {
.addComponent(jLabel5)
.addComponent(proxy_timeout_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))
+ .addGap(7, 7, 7)
+ .addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxy_reset_slot_checkbox)
+ .addComponent(jLabel10))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(smart_proxy_settingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(force_smart_proxy_checkbox)
@@ -1129,48 +1205,52 @@ public class SettingsDialog extends javax.swing.JDialog {
downloads_panelLayout.setHorizontalGroup(
downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(downloads_panelLayout.createSequentialGroup()
- .addContainerGap()
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(smart_proxy_checkbox)
.addGroup(downloads_panelLayout.createSequentialGroup()
- .addComponent(max_downloads_label)
- .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)
- .addGroup(downloads_panelLayout.createSequentialGroup()
- .addComponent(change_download_dir_button)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(down_dir_label)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(default_dir_label))
- .addComponent(megacrypter_reverse_checkbox)
- .addComponent(use_mega_account_down_checkbox)
- .addComponent(verify_file_down_checkbox)
- .addComponent(limit_download_speed_checkbox)
- .addComponent(clipboardspy_checkbox)
- .addGroup(downloads_panelLayout.createSequentialGroup()
- .addGap(21, 21, 21)
+ .addContainerGap()
.addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(rec_download_slots_label)
+ .addComponent(smart_proxy_checkbox)
.addGroup(downloads_panelLayout.createSequentialGroup()
- .addComponent(default_slots_down_label)
+ .addComponent(max_downloads_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))
+ .addComponent(max_downloads_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(multi_slot_down_checkbox)
.addGroup(downloads_panelLayout.createSequentialGroup()
- .addComponent(use_mega_label)
+ .addComponent(change_download_dir_button)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(use_mega_account_down_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, 700, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addComponent(megacrypter_reverse_warning_label)
+ .addComponent(down_dir_label)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(default_dir_label))
+ .addComponent(megacrypter_reverse_checkbox)
+ .addComponent(use_mega_account_down_checkbox)
+ .addComponent(verify_file_down_checkbox)
+ .addComponent(limit_download_speed_checkbox)
+ .addComponent(clipboardspy_checkbox)
.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))
- .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))))
- .addComponent(smart_proxy_settings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addGap(0, 0, 0))
+ .addGap(21, 21, 21)
+ .addGroup(downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(rec_download_slots_label)
+ .addGroup(downloads_panelLayout.createSequentialGroup()
+ .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(use_mega_label)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(use_mega_account_down_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, 700, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(megacrypter_reverse_warning_label)
+ .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))
+ .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()
+ .addGap(12, 12, 12)
+ .addComponent(smart_proxy_settings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addContainerGap())
);
downloads_panelLayout.setVerticalGroup(
downloads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -2020,6 +2100,8 @@ public class SettingsDialog extends javax.swing.JDialog {
settings.put("thumbnails", thumbnail_checkbox.isSelected() ? "yes" : "no");
settings.put("upload_log", upload_log_checkbox.isSelected() ? "yes" : "no");
settings.put("force_smart_proxy", force_smart_proxy_checkbox.isSelected() ? "yes" : "no");
+ settings.put("reset_slot_proxy", proxy_reset_slot_checkbox.isSelected() ? "yes" : "no");
+ settings.put("random_proxy", proxy_random_radio.isSelected() ? "yes" : "no");
settings.put("upload_public_folder", upload_public_folder_checkbox.isSelected() ? "yes" : "no");
settings.put("smartproxy_ban_time", String.valueOf(bad_proxy_time_spinner.getValue()));
settings.put("smartproxy_timeout", String.valueOf(proxy_timeout_spinner.getValue()));
@@ -3304,6 +3386,20 @@ public class SettingsDialog extends javax.swing.JDialog {
}//GEN-LAST:event_upload_public_folder_checkboxActionPerformed
+ private void proxy_random_radioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_proxy_random_radioActionPerformed
+ // TODO add your handling code here:
+ proxy_random_radio.setSelected(true);
+ proxy_sequential_radio.setSelected(false);
+
+ }//GEN-LAST:event_proxy_random_radioActionPerformed
+
+ private void proxy_sequential_radioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_proxy_sequential_radioActionPerformed
+ // TODO add your handling code here:
+ proxy_sequential_radio.setSelected(true);
+ proxy_random_radio.setSelected(false);
+
+ }//GEN-LAST:event_proxy_sequential_radioActionPerformed
+
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel accounts_panel;
private javax.swing.JButton add_elc_account_button;
@@ -3343,6 +3439,8 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JButton import_settings_button;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel10;
+ private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
@@ -3350,6 +3448,7 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
+ private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JProgressBar jProgressBar1;
@@ -3382,6 +3481,9 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JPasswordField proxy_pass_textfield;
private javax.swing.JLabel proxy_port_label;
private javax.swing.JTextField proxy_port_textfield;
+ private javax.swing.JRadioButton proxy_random_radio;
+ private javax.swing.JCheckBox proxy_reset_slot_checkbox;
+ private javax.swing.JRadioButton proxy_sequential_radio;
private javax.swing.JSpinner proxy_timeout_spinner;
private javax.swing.JLabel proxy_user_label;
private javax.swing.JTextField proxy_user_textfield;
@@ -3391,7 +3493,6 @@ public class SettingsDialog extends javax.swing.JDialog {
private javax.swing.JLabel rec_download_slots_label;
private javax.swing.JLabel rec_smart_proxy_label;
private javax.swing.JLabel rec_smart_proxy_label1;
- private javax.swing.JLabel rec_smart_proxy_label2;
private javax.swing.JLabel rec_upload_slots_label;
private javax.swing.JLabel rec_zoom_label;
private javax.swing.JButton remove_elc_account_button;
diff --git a/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java b/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java
index 63e3ca5ab..8c0605d96 100644
--- a/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/SmartMegaProxyManager.java
@@ -41,6 +41,8 @@ public final class SmartMegaProxyManager {
public static final int PROXY_BLOCK_TIME = 300;
public static final int PROXY_AUTO_REFRESH_TIME = 60;
public static final int PROXY_AUTO_REFRESH_SLEEP_TIME = 30;
+ public static final boolean RESET_SLOT_PROXY = true;
+ public static final boolean RANDOM_SELECT = true;
private static final Logger LOG = Logger.getLogger(SmartMegaProxyManager.class.getName());
private volatile String _proxy_list_url;
@@ -52,6 +54,16 @@ public final class SmartMegaProxyManager {
private volatile boolean _force_smart_proxy;
private volatile int _autorefresh_time;
private volatile long _last_refresh_timestamp;
+ private volatile boolean _random_select;
+ private volatile boolean _reset_slot_proxy;
+
+ public boolean isRandom_select() {
+ return _random_select;
+ }
+
+ public boolean isReset_slot_proxy() {
+ return _reset_slot_proxy;
+ }
public int getProxy_timeout() {
return _proxy_timeout;
@@ -141,7 +153,25 @@ public final class SmartMegaProxyManager {
_autorefresh_time = PROXY_AUTO_REFRESH_TIME;
}
- LOG.log(Level.INFO, "SmartProxy BAN_TIME: " + String.valueOf(_ban_time) + " TIMEOUT: " + String.valueOf(_proxy_timeout / 1000) + " REFRESH: " + String.valueOf(_autorefresh_time) + " FORCE: " + String.valueOf(_force_smart_proxy));
+ String reset_slot_proxy = DBTools.selectSettingValue("reset_slot_proxy");
+
+ if (reset_slot_proxy != null) {
+
+ _reset_slot_proxy = reset_slot_proxy.equals("yes");
+ } else {
+ _reset_slot_proxy = RESET_SLOT_PROXY;
+ }
+
+ String random_select = DBTools.selectSettingValue("random_proxy");
+
+ if (random_select != null) {
+
+ _random_select = random_select.equals("yes");
+ } else {
+ _random_select = RANDOM_SELECT;
+ }
+
+ LOG.log(Level.INFO, "SmartProxy BAN_TIME: " + String.valueOf(_ban_time) + " TIMEOUT: " + String.valueOf(_proxy_timeout / 1000) + " REFRESH: " + String.valueOf(_autorefresh_time) + " FORCE: " + String.valueOf(_force_smart_proxy) + " RANDOM: " + String.valueOf(_random_select) + " RESET-SLOT-PROXY: " + String.valueOf(_reset_slot_proxy));
}
public synchronized int getProxyCount() {
@@ -157,7 +187,9 @@ public final class SmartMegaProxyManager {
List keysList = new ArrayList<>(keys);
- Collections.shuffle(keysList);
+ if (isRandom_select()) {
+ Collections.shuffle(keysList);
+ }
Long current_time = System.currentTimeMillis();
diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png
index a586b4b37..c5d78739f 100644
Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ