diff --git a/pom.xml b/pom.xml index efeed36a5..69cefa7bb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tonikelope MegaBasterd - 6.97 + 6.98 jar diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java index 9c9c33aa9..fdb3ea040 100644 --- a/src/main/java/com/tonikelope/megabasterd/Download.java +++ b/src/main/java/com/tonikelope/megabasterd/Download.java @@ -97,6 +97,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif private volatile boolean _canceled; private volatile boolean _turbo; private volatile boolean _closed; + private volatile boolean _finalizing; private final Object _progress_watchdog_lock; private final boolean _priority; @@ -112,6 +113,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif _status_error = null; _retrying_request = false; _checking_cbc = false; + _finalizing = false; _closed = false; _pause = false; _exit = false; @@ -154,6 +156,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif _last_chunk_id_dispatched = 0L; _canceled = false; _status_error = null; + _finalizing = false; _retrying_request = false; _auto_retry_on_error = true; _closed = false; @@ -235,33 +238,34 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif _turbo = true; - Download tthis = this; + if (!_finalizing) { + Download tthis = this; - swingInvoke(() -> { - getView().getSlots_label().setForeground(Color.BLUE); + swingInvoke(() -> { + getView().getSlots_label().setForeground(Color.BLUE); - getView().getSlots_spinner().setEnabled(false); - }); + getView().getSlots_spinner().setEnabled(false); + }); - synchronized (_workers_lock) { + synchronized (_workers_lock) { - for (int t = getChunkworkers().size(); t <= Transference.MAX_WORKERS; t++) { + for (int t = getChunkworkers().size(); t <= Transference.MAX_WORKERS; t++) { - ChunkDownloader c = new ChunkDownloader(t, tthis); + ChunkDownloader c = new ChunkDownloader(t, tthis); - _chunkworkers.add(c); + _chunkworkers.add(c); + + _thread_pool.execute(c); + } - _thread_pool.execute(c); } + swingInvoke(() -> { + getView().getSlots_spinner().setValue(Transference.MAX_WORKERS); + + getView().getSlots_spinner().setEnabled(true); + }); } - - swingInvoke(() -> { - getView().getSlots_spinner().setValue(Transference.MAX_WORKERS); - - getView().getSlots_spinner().setEnabled(true); - }); - } } @@ -1235,39 +1239,44 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif synchronized (_workers_lock) { - if (_chunkworkers.remove(chunkdownloader) && !_exit && _use_slots) { + if (_chunkworkers.remove(chunkdownloader) && !_exit) { - if (chunkdownloader.isChunk_exception()) { + if (_use_slots) { - swingInvoke(() -> { - getView().getSlots_spinner().setEnabled(false); + if (chunkdownloader.isChunk_exception()) { - getView().getSlots_spinner().setValue((int) getView().getSlots_spinner().getValue() - 1); - }); + _finalizing = true; - } else { + swingInvokeAndWait(() -> { + getView().getSlots_spinner().setEnabled(false); - swingInvoke(() -> { + getView().getSlots_spinner().setValue(Math.max((int) getView().getSlots_spinner().getValue() - 1, 0)); + }); - getView().getSlots_spinner().setValue((int) getView().getSlots_spinner().getValue() - 1); - }); + } else { + + swingInvokeAndWait(() -> { + + getView().getSlots_spinner().setValue(Math.max((int) getView().getSlots_spinner().getValue() - 1, 0)); + }); + } + + getView().updateSlotsStatus(); + + _turbo = false; } if (!_exit && isPause() && _paused_workers == _chunkworkers.size()) { getView().printStatusNormal("Download paused!"); - swingInvoke(() -> { + swingInvokeAndWait(() -> { getView().getPause_button().setText(LabelTranslatorSingleton.getInstance().translate("RESUME DOWNLOAD")); getView().getPause_button().setEnabled(true); }); } - - if (_use_slots) { - getView().updateSlotsStatus(); - } } } diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java index 601c5d0df..4248709b6 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java @@ -54,7 +54,7 @@ import javax.swing.UIManager; */ public final class MainPanel { - public static final String VERSION = "6.97"; + public static final String VERSION = "6.98"; 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/Upload.java b/src/main/java/com/tonikelope/megabasterd/Upload.java index 48b89f7eb..71fa43d6c 100644 --- a/src/main/java/com/tonikelope/megabasterd/Upload.java +++ b/src/main/java/com/tonikelope/megabasterd/Upload.java @@ -1129,26 +1129,26 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia if (chunkuploader.isChunk_exception()) { - swingInvoke(() -> { + swingInvokeAndWait(() -> { getView().getSlots_spinner().setEnabled(false); - getView().getSlots_spinner().setValue((int) getView().getSlots_spinner().getValue() - 1); + getView().getSlots_spinner().setValue(Math.max((int) getView().getSlots_spinner().getValue() - 1, 0)); }); } else { - swingInvoke(() -> { + swingInvokeAndWait(() -> { - getView().getSlots_spinner().setValue((int) getView().getSlots_spinner().getValue() - 1); + getView().getSlots_spinner().setValue(Math.max((int) getView().getSlots_spinner().getValue() - 1, 0)); }); } - if (!_exit && _pause && _paused_workers == _chunkworkers.size()) { + if (!_exit && isPause() && _paused_workers == _chunkworkers.size()) { getView().printStatusNormal("Upload paused!"); - swingInvoke(() -> { + swingInvokeAndWait(() -> { getView().getPause_button().setText(LabelTranslatorSingleton.getInstance().translate("RESUME UPLOAD")); getView().getPause_button().setEnabled(true); }); diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png index 13c512296..9dd394235 100644 Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ