diff --git a/src/megabasterd/Download.java b/src/megabasterd/Download.java index 006dabd7e..dccae2382 100644 --- a/src/megabasterd/Download.java +++ b/src/megabasterd/Download.java @@ -19,6 +19,7 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutorService; import static java.util.concurrent.Executors.newCachedThreadPool; @@ -800,6 +801,8 @@ public final class Download implements Transference, Runnable, SecureSingleThrea if (!_provision_ok) { + _status_error = true; + getView().hideAllExceptStatus(); if (_fatal_error != null) { @@ -1192,58 +1195,66 @@ public final class Download implements Transference, Runnable, SecureSingleThrea error_code = parseInt(ex.getMessage()); - switch (error_code) { - case -2: - emergencyStopDownloader("Mega link is not valid! " + MiscTools.truncateText(link, 80)); - break; + if (Arrays.asList(FATAL_ERROR_API_CODES).contains(error_code)) { - case -14: - emergencyStopDownloader("Mega link is not valid! " + MiscTools.truncateText(link, 80)); - break; + switch (error_code) { - case 22: - emergencyStopDownloader("MegaCrypter link is not valid! " + MiscTools.truncateText(link, 80)); - break; + case -2: + emergencyStopDownloader("Mega link is not valid! " + MiscTools.truncateText(link, 80)); + break; - case 23: - emergencyStopDownloader("MegaCrypter link is blocked! " + MiscTools.truncateText(link, 80)); - break; + case -14: + emergencyStopDownloader("Mega link is not valid! " + MiscTools.truncateText(link, 80)); + break; - case 24: - emergencyStopDownloader("MegaCrypter link has expired! " + MiscTools.truncateText(link, 80)); - break; + case 22: + emergencyStopDownloader("MegaCrypter link is not valid! " + MiscTools.truncateText(link, 80)); + break; - case 25: - emergencyStopDownloader("MegaCrypter link pass error! " + MiscTools.truncateText(link, 80)); - break; + case 23: + emergencyStopDownloader("MegaCrypter link is blocked! " + MiscTools.truncateText(link, 80)); + break; - default: + case 24: + emergencyStopDownloader("MegaCrypter link has expired! " + MiscTools.truncateText(link, 80)); + break; - if (!retry_request) { + case 25: + emergencyStopDownloader("MegaCrypter link pass error! " + MiscTools.truncateText(link, 80)); + break; - throw ex; + default: + emergencyStopDownloader("MEGA/MC API FATAL ERROR: " + ex.getMessage() + " " + MiscTools.truncateText(link, 80)); + break; + } + + } else { + + if (!retry_request) { + + throw ex; + } + + _retrying_request = true; + + swingReflectionInvoke("setEnabled", getMain_panel().getView().getNew_download_menu(), true); + + swingReflectionInvoke("setVisible", getView().getStop_button(), true); + + swingReflectionInvoke("setText", getView().getStop_button(), "CANCEL RETRY"); + + for (long i = getWaitTimeExpBackOff(retry++); i > 0 && !_exit; i--) { + if (error_code == -18) { + getView().printStatusError("File temporarily unavailable! (Retrying in " + i + " secs...)"); + } else { + getView().printStatusError("Mega/MC APIException error " + ex.getMessage() + " (Retrying in " + i + " secs...)"); } - _retrying_request = true; - - swingReflectionInvoke("setEnabled", getMain_panel().getView().getNew_download_menu(), true); - - swingReflectionInvoke("setVisible", getView().getStop_button(), true); - - swingReflectionInvoke("setText", getView().getStop_button(), "CANCEL RETRY"); - - for (long i = getWaitTimeExpBackOff(retry++); i > 0 && !_exit; i--) { - if (error_code == -18) { - getView().printStatusError("File temporarily unavailable! (Retrying in " + i + " secs...)"); - } else { - getView().printStatusError("Mega/MC APIException error " + ex.getMessage() + " (Retrying in " + i + " secs...)"); - } - - try { - sleep(1000); - } catch (InterruptedException ex2) { - } + try { + sleep(1000); + } catch (InterruptedException ex2) { } + } } } catch (Exception ex) { diff --git a/src/megabasterd/DownloadManager.java b/src/megabasterd/DownloadManager.java index 8652decad..3da7bc71e 100644 --- a/src/megabasterd/DownloadManager.java +++ b/src/megabasterd/DownloadManager.java @@ -30,10 +30,10 @@ public final class DownloadManager extends TransferenceManager { getTransference_finished_queue().remove(d); - _total_transferences_size -= d.getFile_size(); - if (((Download) d).isProvision_ok()) { + _total_transferences_size -= d.getFile_size(); + delete_down.add(((Download) d).getUrl()); } } diff --git a/src/megabasterd/MainPanel.java b/src/megabasterd/MainPanel.java index 089e33ca5..80f5ba1bc 100644 --- a/src/megabasterd/MainPanel.java +++ b/src/megabasterd/MainPanel.java @@ -61,7 +61,7 @@ import org.apache.http.auth.UsernamePasswordCredentials; */ public final class MainPanel { - public static final String VERSION = "2.05"; + public static final String VERSION = "2.06"; public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int STREAMER_PORT = 1337; public static final int WATCHDOG_PORT = 1338; diff --git a/src/megabasterd/MegaAPI.java b/src/megabasterd/MegaAPI.java index 1c324db01..26a1e73c2 100644 --- a/src/megabasterd/MegaAPI.java +++ b/src/megabasterd/MegaAPI.java @@ -38,6 +38,7 @@ public final class MegaAPI { 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, -8, -9, -10, -11, -12, -13, -14, -15, -16}; public static int checkMEGAError(String data) { String error = findFirstRegex("^\\[?(\\-[0-9]+)\\]?$", data, 1); @@ -277,14 +278,12 @@ public final class MegaAPI { try (CloseableHttpClient httpclient = MiscTools.getApacheKissHttpClient()) { - boolean error; - - int conta_error = 0; + int error, conta_error = 0; HttpPost httppost; do { - error = true; + error = 0; try { @@ -318,9 +317,8 @@ public final class MegaAPI { if (response.length() > 0) { - if (checkMEGAError(response) == 0) { - error = false; - } + error = checkMEGAError(response); + } } @@ -332,9 +330,14 @@ public final class MegaAPI { Logger.getLogger(MegaAPI.class.getName()).log(Level.SEVERE, null, ex); } - if (error) { + if (error != 0) { - System.out.println("MegaAPI ERROR. Waiting for retry..."); + if (Arrays.asList(MEGA_ERROR_EXCEPTION_CODES).contains(error)) { + + throw new MegaAPIException(String.valueOf(error)); + } + + System.out.println("MegaAPI ERROR " + String.valueOf(error) + " Waiting for retry..."); try { Thread.sleep(getWaitTimeExpBackOff(conta_error++) * 1000); @@ -347,8 +350,11 @@ public final class MegaAPI { conta_error = 0; } - } while (error); + } while (error != 0); + } catch (MegaAPIException | IOException exception) { + + throw exception; } _seqno++; diff --git a/src/megabasterd/MegaCrypterAPI.java b/src/megabasterd/MegaCrypterAPI.java index 9b761d0f8..c482fb54f 100644 --- a/src/megabasterd/MegaCrypterAPI.java +++ b/src/megabasterd/MegaCrypterAPI.java @@ -13,7 +13,6 @@ import java.util.LinkedList; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import static java.util.logging.Logger.getLogger; import javax.crypto.Cipher; import javax.swing.JOptionPane; import static megabasterd.MiscTools.BASE642Bin; @@ -22,7 +21,6 @@ import static megabasterd.MiscTools.Bin2UrlBASE64; import static megabasterd.MiscTools.cleanFilePath; import static megabasterd.MiscTools.cleanFilename; import static megabasterd.MiscTools.findFirstRegex; -import static megabasterd.MiscTools.getWaitTimeExpBackOff; import org.apache.http.HttpStatus; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; @@ -44,82 +42,57 @@ public final class MegaCrypterAPI { String response = null; try (CloseableHttpClient httpclient = MiscTools.getApacheKissHttpClient()) { - boolean error; - - int conta_error = 0; HttpPost httppost; - do { + try { + httppost = new HttpPost(url_api.toURI()); - error = true; + httppost.setHeader("Content-type", "application/json"); - try { - httppost = new HttpPost(url_api.toURI()); + httppost.setHeader("Custom-User-Agent", MainPanel.DEFAULT_USER_AGENT); - httppost.setHeader("Content-type", "application/json"); + httppost.setEntity(new StringEntity(request)); - httppost.setHeader("Custom-User-Agent", MainPanel.DEFAULT_USER_AGENT); + try (CloseableHttpResponse httpresponse = httpclient.execute(httppost)) { - httppost.setEntity(new StringEntity(request)); + if (httpresponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + System.out.println("Failed : HTTP error code : " + httpresponse.getStatusLine().getStatusCode()); - try (CloseableHttpResponse httpresponse = httpclient.execute(httppost)) { + } else { - if (httpresponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { - System.out.println("Failed : HTTP error code : " + httpresponse.getStatusLine().getStatusCode()); + InputStream is = httpresponse.getEntity().getContent(); - } else { + try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { - InputStream is = httpresponse.getEntity().getContent(); + byte[] buffer = new byte[16 * 1024]; - try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { + int reads; - byte[] buffer = new byte[16 * 1024]; + while ((reads = is.read(buffer)) != -1) { - int reads; + byte_res.write(buffer, 0, reads); + } - while ((reads = is.read(buffer)) != -1) { + response = new String(byte_res.toByteArray()); - byte_res.write(buffer, 0, reads); - } + if (response.length() > 0) { - response = new String(byte_res.toByteArray()); + int mc_error; - if (response.length() > 0) { + if ((mc_error = MegaCrypterAPI.checkMCError(response)) != 0) { + throw new MegaCrypterAPIException(String.valueOf(mc_error)); - int mc_error; - - if ((mc_error = MegaCrypterAPI.checkMCError(response)) != 0) { - throw new MegaCrypterAPIException(String.valueOf(mc_error)); - - } else { - - error = false; - } } } } } - - } catch (URISyntaxException ex) { - Logger.getLogger(MegaCrypterAPI.class.getName()).log(Level.SEVERE, null, ex); } - if (error) { + } catch (URISyntaxException ex) { + Logger.getLogger(MegaCrypterAPI.class.getName()).log(Level.SEVERE, null, ex); + } - System.out.println("MegaAPI ERROR. Waiting for retry..."); - - try { - Thread.sleep(getWaitTimeExpBackOff(conta_error++) * 1000); - } catch (InterruptedException ex) { - getLogger(MegaAPI.class.getName()).log(Level.SEVERE, null, ex); - } - } else { - - conta_error = 0; - } - - } while (error); } return response; diff --git a/src/megabasterd/Transference.java b/src/megabasterd/Transference.java index 0822decd5..cd5c3c325 100644 --- a/src/megabasterd/Transference.java +++ b/src/megabasterd/Transference.java @@ -15,6 +15,7 @@ public interface Transference { boolean LIMIT_TRANSFERENCE_SPEED_DEFAULT = false; int MAX_TRANSFERENCE_SPEED_DEFAULT = 5; int MAX_WAIT_WORKERS_SHUTDOWN = 15; + Integer[] FATAL_ERROR_API_CODES = {-2, -8, -9, -10, -11, -12, -13, -14, -15, -16, 22, 23, 24, 25}; void start(); diff --git a/src/megabasterd/Upload.java b/src/megabasterd/Upload.java index b0b0a4c0a..46ae185b2 100644 --- a/src/megabasterd/Upload.java +++ b/src/megabasterd/Upload.java @@ -419,6 +419,8 @@ public final class Upload implements Transference, Runnable, SecureSingleThreadN if (!_provision_ok) { + _status_error = true; + getView().hideAllExceptStatus(); if (_fatal_error != null) { diff --git a/src/megabasterd/UploadManager.java b/src/megabasterd/UploadManager.java index 26b914d81..e950b52b9 100644 --- a/src/megabasterd/UploadManager.java +++ b/src/megabasterd/UploadManager.java @@ -73,10 +73,10 @@ public final class UploadManager extends TransferenceManager { getTransference_finished_queue().remove(u); - _total_transferences_size -= u.getFile_size(); - if (((Upload) u).isProvision_ok()) { + _total_transferences_size -= u.getFile_size(); + delete_up.add(new String[]{u.getFile_name(), ((Upload) u).getMa().getEmail()}); try {