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());