diff --git a/pom.xml b/pom.xml
index 582fa32fa..4f062054b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 6.56
+ 6.57
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 76df1e250..62de28ec6 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -90,8 +90,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
private boolean _retrying_request;
private Double _progress_bar_rate;
private OutputStream _output_stream;
- private String _status_error_message;
- private boolean _status_error;
+ private String _status_error;
private final ConcurrentLinkedQueue _rejectedChunkIds;
private long _last_chunk_id_dispatched;
private final MegaAPI _ma;
@@ -104,9 +103,8 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
_ma = ma;
_frozen = main_panel.isInit_paused();
_last_chunk_id_dispatched = 0L;
- _status_error = false;
_canceled = false;
- _status_error_message = null;
+ _status_error = null;
_retrying_request = false;
_checking_cbc = false;
_finishing_download = false;
@@ -147,9 +145,8 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
_paused_workers = 0;
_ma = download.getMa();
_last_chunk_id_dispatched = 0L;
- _status_error = false;
_canceled = false;
- _status_error_message = null;
+ _status_error = null;
_retrying_request = false;
_checking_cbc = false;
_finishing_download = false;
@@ -750,16 +747,14 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
} else if (!_exit) {
- getView().printStatusError("BAD NEWS :( File is DAMAGED!");
+ _status_error = "BAD NEWS :( File is DAMAGED!";
- _status_error = true;
+ getView().printStatusError(_status_error);
} else {
getView().printStatusOK("File successfully downloaded! (but integrity check CANCELED)");
- _status_error = true;
-
}
swingInvoke(
@@ -777,11 +772,11 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
}
- } else if (_status_error) {
+ } else if (_status_error != null) {
getView().hideAllExceptStatus();
- getView().printStatusError(_status_error_message != null ? _status_error_message : "ERROR");
+ getView().printStatusError(_status_error);
} else {
@@ -792,11 +787,11 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().printStatusNormal("Download CANCELED!");
}
- } else if (_status_error) {
+ } else if (_status_error != null) {
getView().hideAllExceptStatus();
- getView().printStatusError(_status_error_message != null ? _status_error_message : "ERROR");
+ getView().printStatusError(_status_error != null ? _status_error : "ERROR");
} else {
@@ -807,11 +802,11 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().printStatusNormal("Download CANCELED!");
}
- } else if (_status_error) {
+ } else if (_status_error != null) {
getView().hideAllExceptStatus();
- getView().printStatusError(_status_error_message != null ? _status_error_message : "ERROR");
+ getView().printStatusError(_status_error);
} else {
@@ -821,11 +816,11 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
}
- } else if (_status_error) {
+ } else if (_status_error != null) {
getView().hideAllExceptStatus();
- getView().printStatusError(_status_error_message != null ? _status_error_message : "ERROR");
+ getView().printStatusError(_status_error);
} else {
@@ -838,9 +833,9 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
} catch (IOException ex) {
- getView().printStatusError("I/O ERROR " + ex.getMessage());
+ _status_error = "I/O ERROR " + ex.getMessage();
- _status_error = true;
+ getView().printStatusError(_status_error);
LOG.log(Level.SEVERE, ex.getMessage());
@@ -869,7 +864,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
}
}
- if (!_status_error) {
+ if (_status_error == null) {
try {
deleteDownload(_url);
@@ -903,7 +898,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().getClose_button().setVisible(true);
- if (_status_error || _canceled) {
+ if (_status_error != null || _canceled) {
getView().getRestart_button().setVisible(true);
@@ -965,7 +960,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
LOG.log(SEVERE, null, ex);
- _status_error_message = "Error registering download: file is already downloading.";
+ _status_error = "Error registering download: file is already downloading.";
}
}
@@ -980,7 +975,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
} catch (SQLException ex) {
- _status_error_message = "Error registering download: file is already downloading.";
+ _status_error = "Error registering download: file is already downloading.";
}
} else {
@@ -993,12 +988,12 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
} catch (NumberFormatException ex) {
- _status_error_message = ex.getMessage();
+ _status_error = ex.getMessage();
}
if (!_provision_ok) {
- _status_error = true;
+ _status_error = "PROVISION FAILED";
if (_file_name != null) {
swingInvoke(
@@ -1021,12 +1016,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().hideAllExceptStatus();
- if (_status_error_message == null) {
-
- _status_error_message = "PROVISION FAILED";
- }
-
- getView().printStatusError(_status_error_message);
+ getView().printStatusError(_status_error);
swingInvoke(
new Runnable() {
@@ -1413,9 +1403,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
public void stopDownloader(String reason) {
- _status_error = true;
-
- _status_error_message = (reason != null ? LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! ") + reason : LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! "));
+ _status_error = (reason != null ? LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! ") + reason : LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! "));
stopDownloader();
}
@@ -1461,7 +1449,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
error = true;
- _status_error = true;
+ _status_error = ex.getMessage();
error_code = ex.getCode();
@@ -1631,10 +1619,6 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
}
- public void setStatus_error(boolean status_error) {
- _status_error = status_error;
- }
-
public void rejectChunkId(long chunk_id) {
_rejectedChunkIds.add(chunk_id);
}
@@ -1694,7 +1678,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
@Override
public boolean isStatusError() {
- return _status_error;
+ return _status_error != null;
}
@Override
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index 972b5ca10..bccc549a8 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -53,7 +53,7 @@ import javax.swing.UIManager;
*/
public class MainPanel {
- public static final String VERSION = "6.56";
+ public static final String VERSION = "6.57";
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/MegaAPI.java b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
index 5dd6c7a22..55c295449 100644
--- a/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
+++ b/src/main/java/com/tonikelope/megabasterd/MegaAPI.java
@@ -31,7 +31,7 @@ public class MegaAPI implements Serializable {
public static final String API_URL = "https://g.api.mega.co.nz";
public static final String API_KEY = null;
public static final int REQ_ID_LENGTH = 10;
- public static final Integer[] MEGA_ERROR_EXCEPTION_CODES = {-2, -5, -6, -8, -9, -10, -11, -12, -13, -14, -15, -16, -26};
+ public static final Integer[] MEGA_ERROR_EXCEPTION_CODES = {-2, -5, -6, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -26};
public static final int PBKDF2_ITERATIONS = 100000;
public static final int PBKDF2_OUTPUT_BIT_LENGTH = 256;
private static final Logger LOG = Logger.getLogger(MegaAPI.class.getName());
@@ -639,7 +639,7 @@ public class MegaAPI implements Serializable {
return res_map;
}
- public String initUploadFile(String filename) {
+ public String initUploadFile(String filename) throws MegaAPIException {
String ul_url = null;
@@ -659,6 +659,10 @@ public class MegaAPI implements Serializable {
ul_url = (String) res_map[0].get("p");
+ } catch (MegaAPIException mae) {
+
+ throw mae;
+
} catch (Exception ex) {
LOG.log(Level.SEVERE, ex.getMessage());
}
@@ -666,7 +670,7 @@ public class MegaAPI implements Serializable {
return ul_url;
}
- public HashMap finishUploadFile(String fbasename, int[] ul_key, int[] fkey, int[] meta_mac, String completion_handle, String mega_parent, byte[] master_key, String root_node, byte[] share_key) {
+ public HashMap finishUploadFile(String fbasename, int[] ul_key, int[] fkey, int[] meta_mac, String completion_handle, String mega_parent, byte[] master_key, String root_node, byte[] share_key) throws MegaAPIException {
HashMap[] res_map = null;
@@ -684,6 +688,10 @@ public class MegaAPI implements Serializable {
res_map = objectMapper.readValue(res, HashMap[].class);
+ } catch (MegaAPIException mae) {
+
+ throw mae;
+
} catch (Exception ex) {
LOG.log(Level.SEVERE, ex.getMessage());
}
diff --git a/src/main/java/com/tonikelope/megabasterd/Upload.java b/src/main/java/com/tonikelope/megabasterd/Upload.java
index 4eb662b88..3e331549e 100644
--- a/src/main/java/com/tonikelope/megabasterd/Upload.java
+++ b/src/main/java/com/tonikelope/megabasterd/Upload.java
@@ -33,7 +33,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
private volatile UploadView _view;
private volatile ProgressMeter _progress_meter;
private final Object _progress_lock;
- private String _status_error_message;
+ private String _status_error;
private volatile boolean _exit;
private volatile boolean _frozen;
private int _slots;
@@ -60,7 +60,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
private UploadMACGenerator _mac_generator;
private boolean _create_dir;
private boolean _provision_ok;
- private boolean _status_error;
+ private boolean _fatal_error;
private String _file_link;
private final MegaAPI _ma;
private final String _file_name;
@@ -80,7 +80,8 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
_notified = false;
_frozen = main_panel.isInit_paused();
_provision_ok = true;
- _status_error = false;
+ _status_error = null;
+ _fatal_error = false;
_canceled = false;
_closed = false;
_main_panel = main_panel;
@@ -114,7 +115,8 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
_notified = false;
_provision_ok = true;
- _status_error = false;
+ _status_error = null;
+ _fatal_error = false;
_canceled = false;
_closed = false;
_restart = true;
@@ -242,10 +244,6 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
return _provision_ok;
}
- public boolean isStatus_error() {
- return _status_error;
- }
-
public String getFile_link() {
return _file_link;
}
@@ -365,7 +363,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
if (!the_file.exists()) {
- _status_error_message = "ERROR: FILE NOT FOUND";
+ _status_error = "ERROR: FILE NOT FOUND";
} else {
@@ -403,7 +401,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
if (!_provision_ok) {
- _status_error = true;
+ _status_error = "PROVISION FAILED";
if (_file_name != null) {
swingInvoke(
@@ -428,12 +426,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
getView().hideAllExceptStatus();
- if (_status_error_message == null) {
-
- _status_error_message = "PROVISION FAILED";
- }
-
- getView().printStatusError(_status_error_message);
+ getView().printStatusError(_status_error);
swingInvoke(
new Runnable() {
@@ -700,7 +693,13 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
int conta_error = 0;
do {
- _ul_url = _ma.initUploadFile(_file_name);
+ try {
+ _ul_url = _ma.initUploadFile(_file_name);
+ } catch (MegaAPIException ex) {
+ Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, ex.getMessage());
+ stopUploader(ex.getMessage());
+ _fatal_error = true;
+ }
if (_ul_url == null && !_exit) {
@@ -866,7 +865,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
File f = new File(_file_name);
- HashMap upload_res;
+ HashMap upload_res = null;
int[] ul_key = _ul_key;
@@ -875,7 +874,13 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
int conta_error = 0;
do {
- upload_res = _ma.finishUploadFile(f.getName(), ul_key, node_key, _file_meta_mac, _completion_handler, _parent_node, i32a2bin(_ma.getMaster_key()), _root_node, _share_key);
+ try {
+ upload_res = _ma.finishUploadFile(f.getName(), ul_key, node_key, _file_meta_mac, _completion_handler, _parent_node, i32a2bin(_ma.getMaster_key()), _root_node, _share_key);
+ } catch (MegaAPIException ex) {
+ Logger.getLogger(Upload.class.getName()).log(Level.SEVERE, ex.getMessage());
+ stopUploader(ex.getMessage());
+ _fatal_error = true;
+ }
if (upload_res == null && !_exit) {
@@ -936,15 +941,21 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
}
}
+
+ } else if (_status_error != null) {
+ getView().hideAllExceptStatus();
+
+ getView().printStatusError(_status_error);
}
} else {
+ _status_error = "UPLOAD FAILED! (Empty completion handle!)";
+
getView().hideAllExceptStatus();
- getView().printStatusError(_status_error_message != null ? _status_error_message : "UPLOAD FAILED! (Empty completion handle!)");
+ getView().printStatusError(_status_error);
- _status_error = true;
}
} else {
@@ -956,6 +967,12 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
getView().printStatusNormal("Upload CANCELED!");
}
+ } else if (_status_error != null) {
+
+ getView().hideAllExceptStatus();
+
+ getView().printStatusError(_status_error);
+
} else {
_canceled = true;
@@ -974,7 +991,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
getView().printStatusNormal("Upload CANCELED!");
}
- if (!_status_error || _main_panel.isExit()) {
+ if (_status_error == null || _main_panel.isExit()) {
try {
DBTools.deleteUpload(_file_name, _ma.getFull_email());
@@ -1008,30 +1025,24 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
getView().getClose_button().setVisible(true);
- if (!_status_error && !_canceled) {
+ if (_status_error == null && !_canceled) {
getView().getClose_button().setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons8-ok-30.png")));
}
- if (_canceled) {
+ if (_canceled || _status_error == null) {
getView().getRestart_button().setVisible(true);
}
-
- if (_status_error) {
-
- getView().getRestart_button().setEnabled(false);
- }
}
});
- THREAD_POOL.execute(
- new Runnable() {
- @Override
- public void run() {
-
- if (_status_error) {
+ if (_status_error != null && !_fatal_error) {
+ THREAD_POOL.execute(
+ new Runnable() {
+ @Override
+ public void run() {
for (int i = 3; !_closed && i > 0; i--) {
@@ -1057,9 +1068,10 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
LOG.log(Level.INFO, "{0} Uploader {1} AUTO RESTARTING UPLOAD...", new Object[]{Thread.currentThread().getName(), getFile_name()});
restart();
}
+
}
- }
- });
+ });
+ }
getMain_panel().getUpload_manager().getFinishing_uploads_queue().remove(this);
@@ -1176,10 +1188,6 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
_exit = exit;
}
- public void setStatus_error(boolean status_error) {
- _status_error = status_error;
- }
-
public void stopUploader() {
if (!_exit) {
@@ -1201,9 +1209,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
public void stopUploader(String reason) {
- _status_error = true;
-
- _status_error_message = (reason != null ? LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! ") + reason : LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! "));
+ _status_error = (reason != null ? LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! ") + reason : LabelTranslatorSingleton.getInstance().translate("FATAL ERROR! "));
stopUploader();
}
@@ -1237,7 +1243,7 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia
@Override
public boolean isStatusError() {
- return _status_error;
+ return _status_error != null;
}
public long calculateLastUploadedChunk(long bytes_read) {
diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png
index e5761089d..e1026af8f 100644
Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ