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