diff --git a/pom.xml b/pom.xml
index 016d004c1..575735c51 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 7.96
+ 7.97
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
index 48cfa237d..b7c0eb272 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkDownloader.java
@@ -39,7 +39,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
private final Object _secure_notify_lock;
private volatile boolean _error_wait;
private volatile boolean _chunk_exception;
- private boolean _notified;
+ private volatile boolean _notified;
private final ArrayList _excluded_proxy_list;
private volatile boolean _reset_current_chunk;
private volatile InputStream _chunk_inputstream = null;
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java b/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
index 339c70b29..b95b9896d 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkUploader.java
@@ -41,7 +41,7 @@ public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable {
private volatile boolean _exit;
private final Object _secure_notify_lock;
private volatile boolean _error_wait;
- private boolean _notified;
+ private volatile boolean _notified;
private volatile boolean _chunk_exception;
public ChunkUploader(int id, Upload upload) {
diff --git a/src/main/java/com/tonikelope/megabasterd/ChunkWriterManager.java b/src/main/java/com/tonikelope/megabasterd/ChunkWriterManager.java
index ec9d2120e..b71a2bc60 100644
--- a/src/main/java/com/tonikelope/megabasterd/ChunkWriterManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/ChunkWriterManager.java
@@ -75,7 +75,7 @@ public class ChunkWriterManager implements Runnable, SecureSingleThreadNotifiabl
private final byte[] _byte_iv;
private volatile boolean _exit;
private final Object _secure_notify_lock;
- private boolean _notified;
+ private volatile boolean _notified;
private final String _chunks_dir;
public ChunkWriterManager(Download downloader) throws Exception {
@@ -240,13 +240,7 @@ public class ChunkWriterManager implements Runnable, SecureSingleThreadNotifiabl
LOG.log(Level.INFO, "{0} ChunkWriterManager waiting for chunk [{1}] {2}...", new Object[]{Thread.currentThread().getName(), _last_chunk_id_written + 1, _download.getFile_name()});
- try {
- synchronized (_secure_notify_lock) {
- _secure_notify_lock.wait(1000);
- }
- } catch (InterruptedException ex) {
- Logger.getLogger(ChunkWriterManager.class.getName()).log(Level.SEVERE, null, ex);
- }
+ secureWait();
}
diff --git a/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java b/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
index 90e407cc9..998a15882 100644
--- a/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
+++ b/src/main/java/com/tonikelope/megabasterd/ClipboardSpy.java
@@ -30,7 +30,7 @@ public class ClipboardSpy implements Runnable, ClipboardOwner, SecureSingleThrea
private final Clipboard _sysClip;
- private boolean _notified;
+ private volatile boolean _notified;
private final ConcurrentLinkedQueue _observers;
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 02848808a..dee11f0be 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -72,7 +72,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
private final Object _chunkid_lock;
private final Object _dl_url_lock;
private final Object _turbo_proxy_lock;
- private boolean _notified;
+ private volatile boolean _notified;
private final String _url;
private final String _download_path;
private final String _custom_chunks_dir;
@@ -1526,7 +1526,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
_auto_retry_on_error = Arrays.asList(FATAL_API_ERROR_CODES_WITH_RETRY).contains(error_code);
- stopDownloader(ex.getMessage() + " " + truncateText(link, 80));
+ stopDownloader(error_code == -16 ? _status_error : ex.getMessage() + " " + truncateText(link, 80));
} else {
diff --git a/src/main/java/com/tonikelope/megabasterd/KissVideoStreamServer.java b/src/main/java/com/tonikelope/megabasterd/KissVideoStreamServer.java
index 4fc84f3e5..73e3c16ab 100644
--- a/src/main/java/com/tonikelope/megabasterd/KissVideoStreamServer.java
+++ b/src/main/java/com/tonikelope/megabasterd/KissVideoStreamServer.java
@@ -50,7 +50,7 @@ public class KissVideoStreamServer implements HttpHandler, SecureSingleThreadNot
private final ConcurrentHashMap> _link_cache;
private final ConcurrentLinkedQueue _working_threads;
private final ContentType _ctype;
- private boolean _notified;
+ private volatile boolean _notified;
private final Object _secure_notify_lock;
public KissVideoStreamServer(MainPanel panel) {
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index 09e9569c4..e25413a6f 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 = "7.96";
+ public static final String VERSION = "7.97";
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/ProgressMeter.java b/src/main/java/com/tonikelope/megabasterd/ProgressMeter.java
index c3ec00980..8517669b2 100644
--- a/src/main/java/com/tonikelope/megabasterd/ProgressMeter.java
+++ b/src/main/java/com/tonikelope/megabasterd/ProgressMeter.java
@@ -24,7 +24,7 @@ public class ProgressMeter implements Runnable, SecureSingleThreadNotifiable {
private final Transference _transference;
private volatile boolean _exit;
private final Object _secure_notify_lock;
- private boolean _notified;
+ private volatile boolean _notified;
private long _progress;
ProgressMeter(Transference transference) {
diff --git a/src/main/java/com/tonikelope/megabasterd/Transference.java b/src/main/java/com/tonikelope/megabasterd/Transference.java
index 4b69a6306..0a7abb90d 100644
--- a/src/main/java/com/tonikelope/megabasterd/Transference.java
+++ b/src/main/java/com/tonikelope/megabasterd/Transference.java
@@ -28,7 +28,7 @@ public interface Transference {
boolean LIMIT_TRANSFERENCE_SPEED_DEFAULT = false;
int MAX_TRANSFERENCE_SPEED_DEFAULT = 5;
int MAX_WAIT_WORKERS_SHUTDOWN = 15;
- Integer[] FATAL_API_ERROR_CODES = {-2, -4, -8, -14, -15, -17, 22, 23, 24};
+ Integer[] FATAL_API_ERROR_CODES = {-2, -4, -8, -14, -15, -16, -17, 22, 23, 24};
Integer[] FATAL_API_ERROR_CODES_WITH_RETRY = {-4};
void start();
diff --git a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
index 3509485be..664c14cb7 100644
--- a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
@@ -51,7 +51,7 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
private final Object _secure_notify_lock;
private final Object _wait_queue_lock;
private final Object _pause_all_lock;
- private boolean _notified;
+ private volatile boolean _notified;
private volatile boolean _removing_transferences;
private volatile boolean _provisioning_transferences;
private volatile boolean _starting_transferences;
diff --git a/src/main/java/com/tonikelope/megabasterd/Upload.java b/src/main/java/com/tonikelope/megabasterd/Upload.java
index 12050cfa5..8f7b956eb 100644
--- a/src/main/java/com/tonikelope/megabasterd/Upload.java
+++ b/src/main/java/com/tonikelope/megabasterd/Upload.java
@@ -64,7 +64,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
private final ExecutorService _thread_pool;
private volatile int[] _file_meta_mac;
private String _fid;
- private boolean _notified;
+ private volatile boolean _notified;
private volatile String _completion_handler;
private int _paused_workers;
private Double _progress_bar_rate;
diff --git a/src/main/java/com/tonikelope/megabasterd/UploadMACGenerator.java b/src/main/java/com/tonikelope/megabasterd/UploadMACGenerator.java
index 599cc1c3c..ba8615356 100644
--- a/src/main/java/com/tonikelope/megabasterd/UploadMACGenerator.java
+++ b/src/main/java/com/tonikelope/megabasterd/UploadMACGenerator.java
@@ -31,7 +31,7 @@ public class UploadMACGenerator implements Runnable, SecureSingleThreadNotifiabl
private final Upload _upload;
private final Object _secure_notify_lock;
- private boolean _notified;
+ private volatile boolean _notified;
private volatile boolean _exit;
public final ConcurrentHashMap CHUNK_QUEUE = new ConcurrentHashMap<>();
diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png
index 2f9c39fcb..3c8acb405 100644
Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ