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