From 6f8157b739348542f36ceda3cd9819301248e6b0 Mon Sep 17 00:00:00 2001 From: tonikelope Date: Mon, 3 Oct 2016 21:21:43 +0200 Subject: [PATCH] 1.11 Pre process transferences don't block --- src/megabasterd/MainPanel.java | 2 +- src/megabasterd/MainPanelView.java | 88 ++++++++++-------------- src/megabasterd/TransferenceManager.java | 56 ++++++++++++--- 3 files changed, 83 insertions(+), 63 deletions(-) diff --git a/src/megabasterd/MainPanel.java b/src/megabasterd/MainPanel.java index 7067bf819..d989c671c 100644 --- a/src/megabasterd/MainPanel.java +++ b/src/megabasterd/MainPanel.java @@ -57,7 +57,7 @@ import static megabasterd.Transference.MAX_TRANSFERENCE_SPEED_DEFAULT; */ public final class MainPanel { - public static final String VERSION="1.10"; + public static final String VERSION="1.11"; public static final int CONNECTION_TIMEOUT = 30000; public static final int THROTTLE_SLICE_SIZE=16*1024; public static final int STREAMER_PORT = 1337; diff --git a/src/megabasterd/MainPanelView.java b/src/megabasterd/MainPanelView.java index 7e5481be5..2aa6e4a62 100644 --- a/src/megabasterd/MainPanelView.java +++ b/src/megabasterd/MainPanelView.java @@ -8,7 +8,6 @@ import java.awt.event.WindowEvent; import static java.awt.event.WindowEvent.WINDOW_CLOSING; import java.io.File; import java.sql.SQLException; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -29,7 +28,6 @@ import static megabasterd.CryptTools.decryptMegaDownloaderLink; import static megabasterd.DBTools.deleteMegaAccount; import static megabasterd.MainPanel.FONT_DEFAULT; import static megabasterd.MainPanel.ICON_FILE; -import static megabasterd.MainPanel.THREAD_POOL; import static megabasterd.MainPanel.VERSION; import static megabasterd.MiscTools.BASE642Bin; import static megabasterd.MiscTools.bin2i32a; @@ -502,16 +500,12 @@ public final class MainPanelView extends javax.swing.JFrame { if(dialog.isDownload()) { - getMain_panel().getDownload_manager().setPreprocessing_transferences(true); - final MainPanelView tthis = this; - THREAD_POOL.execute(new Runnable(){ + Runnable run = new Runnable(){ @Override public void run() { - swingReflectionInvoke("setText", status_down_label, "Pre-processing downloads, please wait..."); - Set urls = new HashSet(findAllRegex("(?:https?|mega)://[^/]*/(#.*?)?!.+![^\r\n]+", dialog.getLinks_textarea().getText(), 0)); Set megadownloader = new HashSet(findAllRegex("mega://enc.*?[^\r\n]+", dialog.getLinks_textarea().getText(), 0)); @@ -528,8 +522,10 @@ public final class MainPanelView extends javax.swing.JFrame { } if(!urls.isEmpty()) { - - int conta_downloads = 0; + + getMain_panel().getDownload_manager().addPre_count(urls.size()); + + getMain_panel().getDownload_manager().secureNotify(); for (String url : urls ) { @@ -558,8 +554,6 @@ public final class MainPanelView extends javax.swing.JFrame { download = new Download(getMain_panel(), (String)folder_link.get("url"), dl_path, (String)folder_link.get("filename"), (String)folder_link.get("filekey"), (long)folder_link.get("filesize"), null, null, getMain_panel().isUse_slots_down(), getMain_panel().getDefault_slots_down(), true); getMain_panel().getDownload_manager().getTransference_provision_queue().add(download); - - conta_downloads++; } } @@ -567,39 +561,32 @@ public final class MainPanelView extends javax.swing.JFrame { fdialog.dispose(); - } else { download = new Download(getMain_panel(), url, dl_path, null, null, null, null, null, getMain_panel().isUse_slots_down(), getMain_panel().getDefault_slots_down(), false); getMain_panel().getDownload_manager().getTransference_provision_queue().add(download); - - conta_downloads++; } - } - - if(conta_downloads > 0) { - swingReflectionInvoke("setText", status_down_label, "Starting downloads provisioning, please wait..."); - + getMain_panel().getDownload_manager().addPre_count(-1); + getMain_panel().getDownload_manager().secureNotify(); - + } } - swingReflectionInvoke("setText", status_down_label, ""); + }}; + + getMain_panel().getDownload_manager().getTransference_preprocess_queue().add(run); + + getMain_panel().getDownload_manager().secureNotify(); swingReflectionInvoke("setEnabled", new_download_menu, true); - - getMain_panel().getDownload_manager().setPreprocessing_transferences(false); - - }}); + } else { swingReflectionInvoke("setEnabled", new_download_menu, true); } - - dialog.dispose(); }//GEN-LAST:event_new_download_menuActionPerformed @@ -721,10 +708,10 @@ public final class MainPanelView extends javax.swing.JFrame { swingReflectionInvokeAndWait("setVisible", dialog, true); if(dialog.isUpload() && dialog.getFiles().size() > 0) { - - getMain_panel().getUpload_manager().setPreprocessing_transferences(true); + + getMain_panel().getUpload_manager().addPre_count(dialog.getFiles().size()); - swingReflectionInvoke("setText", status_up_label, "Pre-processing uploads, please wait..."); + getMain_panel().getUpload_manager().secureNotify(); final String mega_account = (String)dialog.getAccount_combobox().getSelectedItem(); @@ -733,18 +720,14 @@ public final class MainPanelView extends javax.swing.JFrame { final String base_path = dialog.getBase_path(); final String dir_name=dialog.getDir_name_textfield().getText(); - - final int[] mega_aes_pass = bin2i32a(BASE642Bin((String)data_account.get("password_aes"))); + final int[] mega_aes_pass = bin2i32a(BASE642Bin((String)data_account.get("password_aes"))); - final String mega_user_hash = (String)data_account.get("user_hash"); - - final ArrayList files = dialog.getFiles(); - + jTabbedPane1.setSelectedIndex(1); - THREAD_POOL.execute(new Runnable(){ + Runnable run = new Runnable(){ @Override public void run() { @@ -760,7 +743,7 @@ public final class MainPanelView extends javax.swing.JFrame { byte[] share_key = ma.genShareKey(); - HashMap res = ma.createDir(dir_name!=null?dir_name:files.get(0).getName()+"_"+genID(10), ma.getRoot_id(), parent_key, i32a2bin(ma.getMaster_key())); + HashMap res = ma.createDir(dir_name!=null?dir_name:dialog.getFiles().get(0).getName()+"_"+genID(10), ma.getRoot_id(), parent_key, i32a2bin(ma.getMaster_key())); String parent_node = (String)((Map)((List)res.get("f")).get(0)).get("h"); @@ -771,12 +754,8 @@ public final class MainPanelView extends javax.swing.JFrame { String folder_link = ma.getPublicFolderLink(parent_node, share_key); MegaDirNode file_paths = new MegaDirNode(parent_node); - - int conta = 1; - - for(File f:files) { - - swingReflectionInvoke("setText", status_up_label, "Pre-processing ("+(conta++)+"/"+files.size()+") uploads, please wait..."); + + for(File f:dialog.getFiles()) { String file_path = f.getParentFile().getAbsolutePath().replace(base_path, ""); @@ -814,24 +793,27 @@ public final class MainPanelView extends javax.swing.JFrame { Upload upload = new Upload(getMain_panel(), ma, f.getAbsolutePath(), file_parent, null, null, parent_node, share_key, folder_link, getMain_panel().isUse_slots_up(), getMain_panel().getDefault_slots_up(), false); getMain_panel().getUpload_manager().getTransference_provision_queue().add(upload); + + getMain_panel().getUpload_manager().addPre_count(-1); + + getMain_panel().getUpload_manager().secureNotify(); } - - swingReflectionInvoke("setText", status_up_label, "Starting uploads provisioning, please wait..."); - - getMain_panel().getUpload_manager().secureNotify(); } catch (Exception ex) { getLogger(MainPanelView.class.getName()).log(SEVERE, null, ex); } - - swingReflectionInvoke("setEnabled", new_upload_menu, true); - - getMain_panel().getUpload_manager().setPreprocessing_transferences(false); } - }); + }; + + getMain_panel().getUpload_manager().getTransference_preprocess_queue().add(run); + + getMain_panel().getUpload_manager().secureNotify(); + + swingReflectionInvoke("setEnabled", new_upload_menu, true); + } else { swingReflectionInvoke("setEnabled", new_upload_menu, true); diff --git a/src/megabasterd/TransferenceManager.java b/src/megabasterd/TransferenceManager.java index 2ef354d2a..40a77c96b 100644 --- a/src/megabasterd/TransferenceManager.java +++ b/src/megabasterd/TransferenceManager.java @@ -21,6 +21,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable private final ConcurrentLinkedQueue _transference_remove_queue; private final ConcurrentLinkedQueue _transference_finished_queue; private final ConcurrentLinkedQueue _transference_running_list; + private final ConcurrentLinkedQueue _transference_preprocess_queue; private final javax.swing.JPanel _scroll_panel; private final javax.swing.JLabel _status; private final javax.swing.JButton _close_all_button; @@ -34,6 +35,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable private volatile boolean _provisioning_transferences; private volatile boolean _starting_transferences; private volatile boolean _preprocessing_transferences; + private volatile int _pre_count; abstract public void provision(Transference transference); @@ -66,6 +68,14 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable public void setPreprocessing_transferences(boolean preprocessing) { _preprocessing_transferences = preprocessing; } + + public ConcurrentLinkedQueue getTransference_preprocess_queue() { + return _transference_preprocess_queue; + } + + public synchronized void addPre_count(int pre_count) { + _pre_count+=pre_count; + } 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) { _notified = false; @@ -73,6 +83,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable _provisioning_transferences = false; _starting_transferences=false; _preprocessing_transferences=false; + _pre_count=0; _main_panel = main_panel; _max_running_trans = max_running_trans; _scroll_panel = scroll_panel; @@ -86,6 +97,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable _transference_remove_queue = new ConcurrentLinkedQueue(); _transference_finished_queue = new ConcurrentLinkedQueue(); _transference_running_list = new ConcurrentLinkedQueue(); + _transference_preprocess_queue = new ConcurrentLinkedQueue(); } @Override @@ -131,6 +143,10 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable public MainPanel getMain_panel() { return _main_panel; } + + public boolean isPreprocessing_transferences() { + return _preprocessing_transferences; + } public ConcurrentLinkedQueue getTransference_provision_queue() { return _transference_provision_queue; @@ -249,10 +265,8 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable swingReflectionInvoke("setVisible", _close_all_button, false); } - - if(!_preprocessing_transferences) { - swingReflectionInvoke("setText", _status, genStatus()); - } + + swingReflectionInvoke("setText", _status, genStatus()); } private String genStatus() { @@ -267,7 +281,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable int finish = _transference_finished_queue.size(); - return (prov+rem+wait+run+finish > 0)?"Prov: "+prov+" / Rem: "+rem+" / Wait: "+wait+" / Run: "+run+" / Finish: "+finish:""; + return (_pre_count+prov+rem+wait+run+finish > 0)?"Pre: "+_pre_count+" / Prov: "+prov+" / Rem: "+rem+" / Wait: "+wait+" / Run: "+run+" / Finish: "+finish:""; } @Override @@ -275,8 +289,33 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable while(true) { - if(!isProvisioning_transferences() && !getTransference_provision_queue().isEmpty()) - { + if(!isPreprocessing_transferences() && !getTransference_preprocess_queue().isEmpty()) { + + this.setPreprocessing_transferences(true); + + THREAD_POOL.execute(new Runnable(){ + @Override + public void run(){ + + while(!getTransference_preprocess_queue().isEmpty()) + { + final Runnable run = getTransference_preprocess_queue().poll(); + + if(run != null) { + + run.run(); + } + } + + setPreprocessing_transferences(false); + + secureNotify(); + + }}); + } + + if(!isProvisioning_transferences() && !getTransference_provision_queue().isEmpty()) { + setProvisioning_transferences(true); THREAD_POOL.execute(new Runnable(){ @@ -327,8 +366,7 @@ abstract public class TransferenceManager implements Runnable, SecureNotifiable }}); } - if(!isStarting_transferences() && !getTransference_start_queue().isEmpty() && getTransference_running_list().size() < _max_running_trans) - { + if(!isStarting_transferences() && !getTransference_start_queue().isEmpty() && getTransference_running_list().size() < _max_running_trans) { setStarting_transferences(true); THREAD_POOL.execute(new Runnable(){