diff --git a/pom.xml b/pom.xml
index 922862a37..e64895f48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 6.19
+ 6.20
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
index c5f4f408e..3274fc002 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
@@ -27,6 +27,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
private final Object _secure_notify_lock;
private volatile boolean _error_wait;
private boolean _notified;
+ private boolean _force_smartproxy;
private String _current_smart_proxy;
public ChunkDownloader(int id, Download download) {
@@ -37,6 +38,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
_download = download;
_current_smart_proxy = null;
_error_wait = false;
+ _force_smartproxy = true;
}
@@ -115,6 +117,13 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
SmartMegaProxyManager proxy_manager = MainPanel.getProxy_manager();
+ if (_force_smartproxy) {
+
+ _current_smart_proxy = proxy_manager.getFastestProxy();
+
+ getDownload().enableProxyTurboMode();
+ }
+
while (!_exit && !_download.isStopped()) {
if (worker_url == null || http_error == 403) {
@@ -132,18 +141,18 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
String chunk_url = ChunkManager.genChunkUrl(worker_url, _download.getFile_size(), chunk_offset, chunk_size);
- if ((http_error == 509 || slow_proxy || (chunk_error && _current_smart_proxy != null)) && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
+ if ((_current_smart_proxy != null || http_error == 509) && MainPanel.isUse_smart_proxy() && !MainPanel.isUse_proxy()) {
- if (_current_smart_proxy != null) {
+ if (slow_proxy || chunk_error) {
proxy_manager.blockProxy(_current_smart_proxy);
+ _current_smart_proxy = proxy_manager.getFastestProxy();
+
Logger.getLogger(MiscTools.class.getName()).log(Level.WARNING, "{0}: worker {1} excluding proxy -> {2}", new Object[]{Thread.currentThread().getName(), _id, _current_smart_proxy});
}
- _current_smart_proxy = proxy_manager.getFastestProxy();
-
if (_current_smart_proxy != null) {
String[] proxy_info = _current_smart_proxy.split(":");
@@ -154,10 +163,10 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
con = (HttpURLConnection) url.openConnection(proxy);
- getDownload().enableProxyTurboMode();
-
} else {
+ Logger.getLogger(getClass().getName()).log(Level.INFO, "{0} Worker [{1}] SmartProxy getFastestProxy returned NULL!", new Object[]{Thread.currentThread().getName(), _id});
+
URL url = new URL(chunk_url);
con = (HttpURLConnection) url.openConnection();
@@ -180,18 +189,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
} else {
- if (_current_smart_proxy != null) {
-
- String[] proxy_info = _current_smart_proxy.split(":");
-
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_info[0], Integer.parseInt(proxy_info[1])));
-
- con = (HttpURLConnection) url.openConnection(proxy);
-
- } else {
- con = (HttpURLConnection) url.openConnection();
- }
-
+ con = (HttpURLConnection) url.openConnection();
}
}
@@ -308,7 +306,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
http_error = 0;
- if (_current_smart_proxy != null) {
+ if (_current_smart_proxy != null && finish_chunk_time != -1) {
//Update average chunk download speed using SmartProxy
long chunk_speed = Math.round(chunk_size / (((double) (finish_chunk_time - init_chunk_time - paused)) / 1000));
@@ -339,7 +337,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
timeout = true;
}
- Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+ Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex.getMessage());
} finally {
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloaderMono.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloaderMono.java
index 2abb24c27..56d77d861 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloaderMono.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloaderMono.java
@@ -113,6 +113,7 @@ public class ChunkDownloaderMono extends ChunkDownloader {
try {
Thread.sleep(1000);
} catch (InterruptedException excep) {
+
}
setError_wait(false);
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java b/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
index 1e5a522ff..d06a6f735 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
@@ -1,7 +1,6 @@
package com.tonikelope.megabasterd;
import static com.tonikelope.megabasterd.CryptTools.*;
-import static com.tonikelope.megabasterd.MiscTools.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -239,7 +238,7 @@ public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable {
} catch (IOException ex) {
- Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
+ Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex.getMessage());
} finally {
@@ -270,7 +269,11 @@ public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable {
_upload.getView().updateSlotsStatus();
- Thread.sleep(getWaitTimeExpBackOff(conta_error) * 1000);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException excep) {
+
+ }
_error_wait = false;
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 0d261d093..296f99865 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -93,6 +93,7 @@ public final class Download implements Transference, Runnable, SecureSingleThrea
private long _last_chunk_id_dispatched;
private final MegaAPI _ma;
private volatile boolean _canceled;
+ private volatile boolean _turbo;
public Download(MainPanel main_panel, MegaAPI ma, String url, String download_path, String file_name, String file_key, Long file_size, String file_pass, String file_noexpire, boolean use_slots, boolean restart, String custom_chunks_dir) {
@@ -133,6 +134,7 @@ public final class Download implements Transference, Runnable, SecureSingleThrea
_view = new DownloadView(this);
_progress_meter = new ProgressMeter(this);
_custom_chunks_dir = custom_chunks_dir;
+ _turbo = false;
}
public Download(Download download) {
@@ -174,6 +176,7 @@ public final class Download implements Transference, Runnable, SecureSingleThrea
_view = new DownloadView(this);
_progress_meter = new ProgressMeter(this);
_custom_chunks_dir = download.getCustom_chunks_dir();
+ _turbo = false;
}
@@ -204,7 +207,9 @@ public final class Download implements Transference, Runnable, SecureSingleThrea
synchronized (_turbo_proxy_lock) {
- if (getChunkworkers().size() < Transference.MAX_WORKERS) {
+ if (!_turbo) {
+
+ _turbo = true;
Download tthis = this;
@@ -213,29 +218,40 @@ public final class Download implements Transference, Runnable, SecureSingleThrea
@Override
public void run() {
- synchronized (_workers_lock) {
+ getView().getSpeed_label().setForeground(Color.BLACK);
- getView().getSpeed_label().setForeground(Color.BLACK);
-
- getView().getSlots_spinner().setEnabled(false);
-
- for (int t = getChunkworkers().size(); t <= Transference.MAX_WORKERS; t++) {
-
- ChunkDownloader c = new ChunkDownloader(t, tthis);
-
- _chunkworkers.add(c);
-
- _thread_pool.execute(c);
- }
-
- getView().getSlots_spinner().setValue(Transference.MAX_WORKERS);
-
- getView().getSlots_spinner().setEnabled(true);
- }
+ getView().getSlots_spinner().setEnabled(false);
}
});
+
+ synchronized (_workers_lock) {
+
+ for (int t = getChunkworkers().size(); t <= Transference.MAX_WORKERS; t++) {
+
+ ChunkDownloader c = new ChunkDownloader(t, tthis);
+
+ _chunkworkers.add(c);
+
+ _thread_pool.execute(c);
+ }
+
+ }
+
+ swingInvoke(
+ new Runnable() {
+ @Override
+ public void run() {
+
+ getView().getSlots_spinner().setValue(Transference.MAX_WORKERS);
+
+ getView().getSlots_spinner().setEnabled(true);
+ }
+ });
+
}
+
}
+
}
public ConcurrentLinkedQueue getRejectedChunkIds() {
diff --git a/src/main/java/com/tonikelope/megabasterd/DownloadManager.java b/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
index bd9bcf10a..dd27665ce 100644
--- a/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
@@ -28,13 +28,11 @@ public final class DownloadManager extends TransferenceManager {
for (final Transference d : downloads) {
- swingInvokeAndWait(
+ swingInvoke(
new Runnable() {
@Override
public void run() {
getScroll_panel().remove(((Download) d).getView());
- ((Download) d).getView().revalidate();
- ((Download) d).getView().repaint();
}
});
@@ -63,13 +61,11 @@ public final class DownloadManager extends TransferenceManager {
@Override
public void provision(final Transference download) {
- swingInvokeAndWait(
+ swingInvoke(
new Runnable() {
@Override
public void run() {
getScroll_panel().add(((Download) download).getView());
- ((Download) download).getView().revalidate();
- ((Download) download).getView().repaint();
}
});
@@ -129,16 +125,12 @@ public final class DownloadManager extends TransferenceManager {
getScroll_panel().remove((Component) down.getView());
getScroll_panel().add((Component) down.getView());
- ((Download) down).getView().revalidate();
- ((Download) down).getView().repaint();
}
for (final Transference down : getTransference_finished_queue()) {
getScroll_panel().remove((Component) down.getView());
getScroll_panel().add((Component) down.getView());
- ((Download) down).getView().revalidate();
- ((Download) down).getView().repaint();
}
}
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index 0664e70ff..8218e752e 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -50,7 +50,7 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
- public static final String VERSION = "6.19";
+ public static final String VERSION = "6.20";
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;
diff --git a/src/main/java/com/tonikelope/megabasterd/SpeedMeter.java b/src/main/java/com/tonikelope/megabasterd/SpeedMeter.java
index 94f6543e9..60454f2df 100644
--- a/src/main/java/com/tonikelope/megabasterd/SpeedMeter.java
+++ b/src/main/java/com/tonikelope/megabasterd/SpeedMeter.java
@@ -18,7 +18,7 @@ import org.apache.commons.collections4.queue.CircularFifoQueue;
public final class SpeedMeter implements Runnable {
public static final int SLEEP = 3000;
- public static final int CHUNK_SPEED_QUEUE_MAX_SIZE = 5;
+ public static final int CHUNK_SPEED_QUEUE_MAX_SIZE = 10;
private final JLabel _speed_label;
private final JLabel _rem_label;
private final TransferenceManager _trans_manager;
diff --git a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
index 752d343f7..b4e57d97f 100644
--- a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
@@ -297,13 +297,11 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
_transference_running_list.add(transference);
- swingInvokeAndWait(
+ swingInvoke(
new Runnable() {
@Override
public void run() {
getScroll_panel().add((Component) transference.getView(), 0);
- _main_panel.getView().revalidate();
- _main_panel.getView().repaint();
}
});
diff --git a/src/main/java/com/tonikelope/megabasterd/UploadManager.java b/src/main/java/com/tonikelope/megabasterd/UploadManager.java
index 4ecfa503d..44e108e57 100644
--- a/src/main/java/com/tonikelope/megabasterd/UploadManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/UploadManager.java
@@ -41,8 +41,6 @@ public final class UploadManager extends TransferenceManager {
@Override
public void run() {
getScroll_panel().add(((Upload) upload).getView());
- ((Upload) upload).getView().revalidate();
- ((Upload) upload).getView().repaint();
}
});
@@ -69,16 +67,12 @@ public final class UploadManager extends TransferenceManager {
getScroll_panel().remove((Component) up.getView());
getScroll_panel().add((Component) up.getView());
- ((Upload) up).getView().revalidate();
- ((Upload) up).getView().repaint();
}
for (Transference up : getTransference_finished_queue()) {
getScroll_panel().remove((Component) up.getView());
getScroll_panel().add((Component) up.getView());
- ((Upload) up).getView().revalidate();
- ((Upload) up).getView().repaint();
}
}
});
@@ -107,8 +101,6 @@ public final class UploadManager extends TransferenceManager {
@Override
public void run() {
getScroll_panel().remove(((Upload) u).getView());
- ((Upload) u).getView().revalidate();
- ((Upload) u).getView().repaint();
}
});
diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png
index 9effc3d50..c2bd457bd 100644
Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ