diff --git a/pom.xml b/pom.xml
index 961c9fb9f..fad8f6ab1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.tonikelope
MegaBasterd
- 7.5
+ 7.6
jar
diff --git a/src/main/java/com/tonikelope/megabasterd/Download.java b/src/main/java/com/tonikelope/megabasterd/Download.java
index 4427d3519..de6b73915 100644
--- a/src/main/java/com/tonikelope/megabasterd/Download.java
+++ b/src/main/java/com/tonikelope/megabasterd/Download.java
@@ -921,7 +921,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
swingInvoke(() -> {
getView().getClose_button().setVisible(true);
- if (_status_error != null || _canceled) {
+ if ((_status_error != null || _canceled) && isProvision_ok()) {
getView().getRestart_button().setVisible(true);
@@ -1001,8 +1001,6 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
} catch (SQLException ex) {
- LOG.log(SEVERE, null, ex);
-
_status_error = "Error registering download: file is already downloading.";
}
@@ -1045,7 +1043,7 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().printStatusError(_status_error);
swingInvoke(() -> {
- getView().getRestart_button().setVisible(true);
+ getView().getClose_button().setVisible(true);
});
} else {
@@ -1066,14 +1064,15 @@ public class Download implements Transference, Runnable, SecureSingleThreadNotif
getView().getFile_size_label().setText(formatBytes(_file_size));
});
+ swingInvoke(() -> {
+ getView().getClose_button().setVisible(true);
+ getView().getQueue_up_button().setVisible(true);
+ getView().getQueue_down_button().setVisible(true);
+ getView().getQueue_top_button().setVisible(true);
+ getView().getQueue_bottom_button().setVisible(true);
+ });
+
}
- swingInvoke(() -> {
- getView().getClose_button().setVisible(true);
- getView().getQueue_up_button().setVisible(true);
- getView().getQueue_down_button().setVisible(true);
- getView().getQueue_top_button().setVisible(true);
- getView().getQueue_bottom_button().setVisible(true);
- });
}
diff --git a/src/main/java/com/tonikelope/megabasterd/DownloadManager.java b/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
index ece370fcc..cd6ab2f5a 100644
--- a/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/DownloadManager.java
@@ -106,6 +106,8 @@ public class DownloadManager extends TransferenceManager {
getTransference_waitstart_aux_queue().add(download);
+ } else {
+ getTransference_finished_queue().add(download);
}
}
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
index 4a2479a58..c4ee6859a 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java
@@ -31,7 +31,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.Map;
+import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
@@ -54,7 +54,7 @@ import javax.swing.UIManager;
*/
public final class MainPanel {
- public static final String VERSION = "7.5";
+ public static final String VERSION = "7.6";
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;
@@ -1176,15 +1176,15 @@ public final class MainPanel {
ArrayList downloads_queue = DBTools.selectDownloadsQueue();
- System.out.println(downloads_queue);
-
HashMap> res = selectDownloads();
- System.out.println(res);
-
tot_downloads = res.size();
- for (String url : downloads_queue) {
+ Iterator downloads_queue_iterator = downloads_queue.iterator();
+
+ while (downloads_queue_iterator.hasNext()) {
+
+ String url = (String) downloads_queue_iterator.next();
HashMap o = res.remove(url);
@@ -1201,32 +1201,19 @@ public final class MainPanel {
getDownload_manager().getTransference_provision_queue().add(download);
conta_downloads++;
- }
+ downloads_queue_iterator.remove();
+ }
}
}
DBTools.truncateDownloadsQueue();
- for (Map.Entry> entry : res.entrySet()) {
-
- String email = (String) entry.getValue().get("email");
-
- MegaAPI ma = new MegaAPI();
-
- if (!tthis.isUse_mega_account_down() || (_mega_accounts.get(email) != null && (ma = checkMegaAccountLoginAndShowMasterPassDialog(tthis, getView(), email)) != null)) {
-
- Download download = new Download(tthis, ma, (String) entry.getKey(), (String) entry.getValue().get("path"), (String) entry.getValue().get("filename"), (String) entry.getValue().get("filekey"), (Long) entry.getValue().get("filesize"), (String) entry.getValue().get("filepass"), (String) entry.getValue().get("filenoexpire"), _use_slots_down, false, (String) entry.getValue().get("custom_chunks_dir"), false);
-
- getDownload_manager().getTransference_provision_queue().add(download);
-
- conta_downloads++;
- }
-
+ if (!downloads_queue.isEmpty()) {
+ DBTools.insertDownloadsQueue(downloads_queue);
}
} catch (SQLException ex) {
-
Logger.getLogger(MainPanel.class.getName()).log(SEVERE, null, ex);
} catch (Exception ex2) {
Logger.getLogger(MainPanel.class.getName()).log(SEVERE, null, ex2);
@@ -1243,7 +1230,11 @@ public final class MainPanel {
swingInvoke(() -> {
getView().getjTabbedPane1().setSelectedIndex(0);
});
+
+ } else {
+ setResume_downloads(true);
}
+
swingInvoke(() -> {
getView().getStatus_down_label().setText("");
});
@@ -1345,7 +1336,11 @@ public final class MainPanel {
tot_uploads = res.size();
- for (String filename : uploads_queue) {
+ Iterator uploads_queue_iterator = uploads_queue.iterator();
+
+ while (uploads_queue_iterator.hasNext()) {
+
+ String filename = (String) uploads_queue_iterator.next();
HashMap o = res.remove(filename);
@@ -1364,47 +1359,27 @@ public final class MainPanel {
getUpload_manager().getTransference_provision_queue().add(upload);
conta_uploads++;
- } else {
- throw new Exception("Mega Login Error!");
+
+ uploads_queue_iterator.remove();
+
}
} else {
deleteUpload((String) o.get("filename"), email);
+
tot_uploads--;
+
+ uploads_queue_iterator.remove();
}
}
-
}
DBTools.truncateUploadsQueue();
- for (Map.Entry> entry : res.entrySet()) {
-
- String email = (String) entry.getValue().get("email");
-
- if (_mega_accounts.get(email) != null) {
-
- MegaAPI ma;
-
- if ((ma = checkMegaAccountLoginAndShowMasterPassDialog(tthis, getView(), email)) != null) {
-
- Upload upload = new Upload(tthis, ma, (String) entry.getKey(), (String) entry.getValue().get("parent_node"), (String) entry.getValue().get("ul_key") != null ? bin2i32a(BASE642Bin((String) entry.getValue().get("ul_key"))) : null, (String) entry.getValue().get("url"), (String) entry.getValue().get("root_node"), BASE642Bin((String) entry.getValue().get("share_key")), (String) entry.getValue().get("folder_link"), false);
-
- getUpload_manager().getTransference_provision_queue().add(upload);
-
- conta_uploads++;
- } else {
- throw new Exception("Mega Login Error!");
- }
-
- } else {
-
- deleteUpload((String) entry.getValue().get("filename"), email);
- tot_uploads--;
- }
-
+ if (!uploads_queue.isEmpty()) {
+ DBTools.insertUploadsQueue(uploads_queue);
}
} catch (SQLException ex) {
@@ -1424,6 +1399,8 @@ public final class MainPanel {
swingInvoke(() -> {
getView().getjTabbedPane1().setSelectedIndex(1);
});
+ } else {
+ setResume_uploads(true);
}
swingInvoke(() -> {
diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
index 29322c9e3..a5b68e327 100644
--- a/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
+++ b/src/main/java/com/tonikelope/megabasterd/MainPanelView.java
@@ -316,8 +316,6 @@ public final class MainPanelView extends javax.swing.JFrame {
getMain_panel().getUpload_manager().secureNotify();
- } else {
- break;
}
}
@@ -1051,14 +1049,11 @@ public final class MainPanelView extends javax.swing.JFrame {
}
}
- if (!getMain_panel().getDownload_manager().getTransference_preprocess_global_queue().isEmpty()) {
+ download = new Download(getMain_panel(), ma, url, dl_path, null, null, null, null, null, getMain_panel().isUse_slots_down(), false, getMain_panel().isUse_custom_chunks_dir() ? getMain_panel().getCustom_chunks_dir() : null, dialog.getPriority_checkbox().isSelected());
- download = new Download(getMain_panel(), ma, url, dl_path, null, null, null, null, null, getMain_panel().isUse_slots_down(), false, getMain_panel().isUse_custom_chunks_dir() ? getMain_panel().getCustom_chunks_dir() : null, dialog.getPriority_checkbox().isSelected());
+ getMain_panel().getDownload_manager().getTransference_provision_queue().add(download);
- getMain_panel().getDownload_manager().getTransference_provision_queue().add(download);
-
- getMain_panel().getDownload_manager().secureNotify();
- }
+ getMain_panel().getDownload_manager().secureNotify();
}
diff --git a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
index 5ed181389..4383981f9 100644
--- a/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
+++ b/src/main/java/com/tonikelope/megabasterd/TransferenceManager.java
@@ -38,7 +38,6 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
private int _max_running_trans;
private final MainPanel _main_panel;
private final Object _secure_notify_lock;
- private final Object _wait_aux_queue_sort_lock;
private final Object _wait_queue_lock;
private boolean _notified;
private volatile boolean _removing_transferences;
@@ -52,6 +51,7 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
protected final Object _total_size_lock;
protected volatile long _total_progress;
protected final Object _total_progress_lock;
+ protected final Object _transference_queue_sort_lock;
private volatile Boolean _sort_wait_start_queue;
public TransferenceManager(MainPanel main_panel, int max_running_trans, javax.swing.JLabel status, javax.swing.JPanel scroll_panel, javax.swing.JButton close_all_button, javax.swing.JButton pause_all_button, javax.swing.MenuElement clean_all_menu) {
@@ -75,7 +75,7 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
_secure_notify_lock = new Object();
_total_size_lock = new Object();
_total_progress_lock = new Object();
- _wait_aux_queue_sort_lock = new Object();
+ _transference_queue_sort_lock = new Object();
_wait_queue_lock = new Object();
_sort_wait_start_queue = true;
_transference_preprocess_global_queue = new ConcurrentLinkedQueue<>();
@@ -179,10 +179,6 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
_starting_transferences = starting;
}
- public Object geWaitStartAuxQueue_sort_lock() {
- return _wait_aux_queue_sort_lock;
- }
-
public void setPreprocessing_transferences(boolean preprocessing) {
_preprocessing_transferences = preprocessing;
}
@@ -232,25 +228,38 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
}
public ConcurrentLinkedQueue getTransference_provision_queue() {
- return _transference_provision_queue;
+
+ synchronized (_transference_queue_sort_lock) {
+ return _transference_provision_queue;
+ }
}
public ConcurrentLinkedQueue getTransference_waitstart_queue() {
- synchronized (_wait_aux_queue_sort_lock) {
+
+ synchronized (_transference_queue_sort_lock) {
return _transference_waitstart_queue;
}
}
public ConcurrentLinkedQueue getTransference_remove_queue() {
- return _transference_remove_queue;
+
+ synchronized (_transference_queue_sort_lock) {
+ return _transference_remove_queue;
+ }
}
public ConcurrentLinkedQueue getTransference_finished_queue() {
- return _transference_finished_queue;
+
+ synchronized (_transference_queue_sort_lock) {
+ return _transference_finished_queue;
+ }
+
}
public ConcurrentLinkedQueue getTransference_running_list() {
- return _transference_running_list;
+ synchronized (_transference_queue_sort_lock) {
+ return _transference_running_list;
+ }
}
public JPanel getScroll_panel() {
@@ -485,23 +494,23 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
return _transference_waitstart_aux_queue;
}
- protected void sortTransferenceWaitStartAuxQueue() {
+ protected void sortTransferenceQueue(ConcurrentLinkedQueue queue) {
- synchronized (_wait_aux_queue_sort_lock) {
+ synchronized (_transference_queue_sort_lock) {
- ArrayList trans_list = new ArrayList(getTransference_waitstart_aux_queue());
+ ArrayList trans_list = new ArrayList(queue);
trans_list.sort((Transference o1, Transference o2) -> o1.getFile_name().compareToIgnoreCase(o2.getFile_name()));
- getTransference_waitstart_aux_queue().clear();
+ queue.clear();
- getTransference_waitstart_aux_queue().addAll(trans_list);
+ queue.addAll(trans_list);
}
}
protected void unfreezeTransferenceWaitStartQueue() {
- synchronized (_wait_aux_queue_sort_lock) {
+ synchronized (getTransference_waitstart_aux_queue()) {
getTransference_waitstart_queue().forEach((t) -> {
t.unfreeze();
@@ -672,13 +681,13 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
}
}
- synchronized (geWaitStartAuxQueue_sort_lock()) {
+ synchronized (_transference_queue_sort_lock) {
if (getSort_wait_start_queue()) {
- sortTransferenceWaitStartAuxQueue();
+ sortTransferenceQueue(getTransference_waitstart_aux_queue());
}
- if (getTransference_waitstart_aux_queue().peek().isPriority()) {
+ if (getTransference_waitstart_aux_queue().peek() != null && getTransference_waitstart_aux_queue().peek().isPriority()) {
ArrayList trans_list = new ArrayList(getTransference_waitstart_queue());
@@ -700,6 +709,9 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
getScroll_panel().add((Component) t.getView());
});
});
+
+ sortTransferenceQueue(getTransference_finished_queue());
+
getTransference_finished_queue().forEach((t) -> {
swingInvoke(() -> {
getScroll_panel().remove((Component) t.getView());