diff --git a/pom.xml b/pom.xml index b69962a9d..4b0ad26f2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.tonikelope MegaBasterd - 7.64 + 7.65 jar diff --git a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java index 9e6eb71d0..70f51b957 100644 --- a/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/FileGrabberDialog.java @@ -108,6 +108,10 @@ public class FileGrabberDialog extends javax.swing.JDialog { MiscTools.GUIRunAndWait(() -> { initComponents(); + String upload_log_string = DBTools.selectSettingValue("upload_log"); + + upload_log_checkbox.setSelected("yes".equals(upload_log_string)); + updateFonts(this, GUI_FONT, _main_panel.getZoom_factor()); updateTitledBorderFont(((javax.swing.border.TitledBorder) jPanel1.getBorder()), GUI_FONT, _main_panel.getZoom_factor()); diff --git a/src/main/java/com/tonikelope/megabasterd/MainPanel.java b/src/main/java/com/tonikelope/megabasterd/MainPanel.java index 57aba9812..3a368e071 100644 --- a/src/main/java/com/tonikelope/megabasterd/MainPanel.java +++ b/src/main/java/com/tonikelope/megabasterd/MainPanel.java @@ -67,7 +67,7 @@ import javax.swing.UIManager; */ public final class MainPanel { - public static final String VERSION = "7.64"; + public static final String VERSION = "7.65"; public static final boolean FORCE_SMART_PROXY = false; //TRUE FOR DEBUGING SMART PROXY public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form index e15fe5c9b..e20dc4009 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.form @@ -567,23 +567,30 @@ - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + @@ -612,6 +619,10 @@ + + + + @@ -689,6 +700,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java index c0fe823ac..f68c02d8c 100644 --- a/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java +++ b/src/main/java/com/tonikelope/megabasterd/SettingsDialog.java @@ -194,6 +194,26 @@ public class SettingsDialog extends javax.swing.JDialog { monitor_clipboard = monitor_clipboard_string.equals("yes"); } + boolean thumbnails = Upload.DEFAULT_THUMBNAILS; + + String thumbnails_string = DBTools.selectSettingValue("thumbnails"); + + if (thumbnails_string != null) { + thumbnails = thumbnails_string.equals("yes"); + } + + thumbnail_checkbox.setSelected(thumbnails); + + boolean upload_log = Upload.UPLOAD_LOG; + + String upload_log_string = DBTools.selectSettingValue("upload_log"); + + if (upload_log_string != null) { + upload_log = upload_log_string.equals("yes"); + } + + upload_log_checkbox.setSelected(upload_log); + clipboardspy_checkbox.setSelected(monitor_clipboard); String default_download_dir = DBTools.selectSettingValue("default_down_dir"); @@ -703,6 +723,8 @@ public class SettingsDialog extends javax.swing.JDialog { max_up_speed_spinner = new javax.swing.JSpinner(); limit_upload_speed_checkbox = new javax.swing.JCheckBox(); rec_upload_slots_label = new javax.swing.JLabel(); + thumbnail_checkbox = new javax.swing.JCheckBox(); + upload_log_checkbox = new javax.swing.JCheckBox(); accounts_panel = new javax.swing.JPanel(); mega_accounts_scrollpane = new javax.swing.JScrollPane(); mega_accounts_table = new javax.swing.JTable(); @@ -1066,6 +1088,14 @@ public class SettingsDialog extends javax.swing.JDialog { rec_upload_slots_label.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N rec_upload_slots_label.setText("Note: slots consume RAM, so use them moderately."); + thumbnail_checkbox.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N + thumbnail_checkbox.setText("Create and upload image/video thumbnails"); + thumbnail_checkbox.setDoubleBuffered(true); + + upload_log_checkbox.setFont(new java.awt.Font("Dialog", 1, 18)); // NOI18N + upload_log_checkbox.setText("Create upload logs"); + upload_log_checkbox.setDoubleBuffered(true); + javax.swing.GroupLayout uploads_panelLayout = new javax.swing.GroupLayout(uploads_panel); uploads_panel.setLayout(uploads_panelLayout); uploads_panelLayout.setHorizontalGroup( @@ -1075,19 +1105,24 @@ public class SettingsDialog extends javax.swing.JDialog { .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(rec_upload_slots_label, javax.swing.GroupLayout.DEFAULT_SIZE, 1185, Short.MAX_VALUE) .addGroup(uploads_panelLayout.createSequentialGroup() - .addGap(20, 20, 20) - .addComponent(max_up_speed_label) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(max_up_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(limit_upload_speed_checkbox) - .addGroup(uploads_panelLayout.createSequentialGroup() - .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(default_slots_up_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(max_uploads_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(default_slots_up_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(max_uploads_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGroup(uploads_panelLayout.createSequentialGroup() + .addGap(20, 20, 20) + .addComponent(max_up_speed_label) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(max_up_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(limit_upload_speed_checkbox) + .addGroup(uploads_panelLayout.createSequentialGroup() + .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(default_slots_up_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(max_uploads_label, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(default_slots_up_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(max_uploads_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(thumbnail_checkbox) + .addComponent(upload_log_checkbox)) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); uploads_panelLayout.setVerticalGroup( @@ -1109,6 +1144,10 @@ public class SettingsDialog extends javax.swing.JDialog { .addGroup(uploads_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(max_up_speed_label) .addComponent(max_up_speed_spinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(thumbnail_checkbox) + .addGap(18, 18, 18) + .addComponent(upload_log_checkbox) .addContainerGap()) ); @@ -1770,6 +1809,8 @@ public class SettingsDialog extends javax.swing.JDialog { settings.put("run_command_path", run_command_textbox.getText()); settings.put("mega_api_key", mega_api_key.getText().trim()); settings.put("clipboardspy", clipboardspy_checkbox.isSelected() ? "yes" : "no"); + settings.put("thumbnails", thumbnail_checkbox.isSelected() ? "yes" : "no"); + settings.put("upload_log", upload_log_checkbox.isSelected() ? "yes" : "no"); if (custom_proxy_textarea.getText().trim().length() == 0) { smart_proxy_checkbox.setSelected(false); @@ -3133,7 +3174,9 @@ public class SettingsDialog extends javax.swing.JDialog { private javax.swing.JCheckBox smart_proxy_checkbox; private javax.swing.JCheckBox start_frozen_checkbox; private javax.swing.JLabel status; + private javax.swing.JCheckBox thumbnail_checkbox; private javax.swing.JButton unlock_accounts_button; + private javax.swing.JCheckBox upload_log_checkbox; private javax.swing.JPanel uploads_panel; private javax.swing.JScrollPane uploads_scrollpane; private javax.swing.JCheckBox use_mega_account_down_checkbox; diff --git a/src/main/java/com/tonikelope/megabasterd/Thumbnailer.java b/src/main/java/com/tonikelope/megabasterd/Thumbnailer.java index 237ffc9dd..31cf4a432 100644 --- a/src/main/java/com/tonikelope/megabasterd/Thumbnailer.java +++ b/src/main/java/com/tonikelope/megabasterd/Thumbnailer.java @@ -14,6 +14,7 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; +import java.nio.file.Paths; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; @@ -25,17 +26,12 @@ public class Thumbnailer { public static final int IMAGE_THUMB_SIZE = 250; - /** - * The number of seconds between frames. - */ - public static final double SECONDS_BETWEEN_FRAMES = 10; - - public static final float SECONDS_BETWEEN_FRAMES_PERC = 0.03f; //0f para usar SECONDS_BETWEEN_FRAMES directamente + public static final float SECONDS_BETWEEN_FRAMES_PERC = 0.03f; //Take frame video at 3% position /** * The number of nano-seconds between frames. */ - private long nano_seconds_between_frames = (long) (Global.DEFAULT_PTS_PER_SECOND * SECONDS_BETWEEN_FRAMES); + private long nano_seconds_between_frames; /** * Time of last frame write. @@ -93,7 +89,22 @@ public class Thumbnailer { return null; } - public String createImageThumbnail(String filename) { + public String createThumbnail(String filename) { + + if (MiscTools.isVideoFile(Paths.get(filename))) { + + return createVideoThumbnail(filename); + + } else if (MiscTools.isImageFile(Paths.get(filename))) { + + return createImageThumbnail(filename); + + } + + return null; + } + + private String createImageThumbnail(String filename) { try { @@ -139,7 +150,7 @@ public class Thumbnailer { * @param args must contain one string which represents a filename */ @SuppressWarnings("deprecation") - public String createVideoThumbnail(String filename) { + private String createVideoThumbnail(String filename) { // make sure that we can actually convert video pixel formats if (!IVideoResampler.isSupported( @@ -157,9 +168,7 @@ public class Thumbnailer { throw new IllegalArgumentException("could not open file: " + filename); } - if (SECONDS_BETWEEN_FRAMES_PERC > 0) { - nano_seconds_between_frames = (long) (Global.DEFAULT_PTS_PER_SECOND * Math.round((float) SECONDS_BETWEEN_FRAMES_PERC * container.getDuration() / 1000000)); - } + nano_seconds_between_frames = (long) (Global.DEFAULT_PTS_PER_SECOND * Math.round((float) SECONDS_BETWEEN_FRAMES_PERC * container.getDuration() / 1000000)); // query how many streams the call to open found int numStreams = container.getNumStreams(); diff --git a/src/main/java/com/tonikelope/megabasterd/Upload.java b/src/main/java/com/tonikelope/megabasterd/Upload.java index 784ea2b42..92f753fd1 100644 --- a/src/main/java/com/tonikelope/megabasterd/Upload.java +++ b/src/main/java/com/tonikelope/megabasterd/Upload.java @@ -40,6 +40,8 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia public static final int WORKERS_DEFAULT = 6; public static final int CHUNK_SIZE_MULTI = 1; //Otra cosa da errores al reanudar una subida (investigar) + public static final boolean DEFAULT_THUMBNAILS = true; + public static final boolean UPLOAD_LOG = false; private static final Logger LOG = Logger.getLogger(Upload.class.getName()); private final MainPanel _main_panel; private volatile UploadView _view; @@ -461,24 +463,6 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia } else { - _thread_pool.execute(() -> { - - if (MiscTools.isVideoFile(Paths.get(_file_name))) { - - Thumbnailer thumbnailer = new Thumbnailer(); - - _thumbnail_file = thumbnailer.createVideoThumbnail(_file_name); - - } else if (MiscTools.isImageFile(Paths.get(_file_name))) { - - Thumbnailer thumbnailer = new Thumbnailer(); - - _thumbnail_file = thumbnailer.createImageThumbnail(_file_name); - - } - - }); - getView().printStatusNormal(LabelTranslatorSingleton.getInstance().translate(_frozen ? "(FROZEN) Waiting to start (" : "Waiting to start (") + _ma.getFull_email() + ") ..."); MiscTools.GUIRun(() -> { @@ -717,6 +701,21 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia if (!_exit) { + _thread_pool.execute(() -> { + + String thumbnails_string = DBTools.selectSettingValue("thumbnails"); + + if ("yes".equals(thumbnails_string)) { + + Thumbnailer thumbnailer = new Thumbnailer(); + + _thumbnail_file = thumbnailer.createThumbnail(_file_name); + } else { + _thumbnail_file = null; + } + + }); + if (_ul_url == null) { int conta_error = 0; @@ -955,39 +954,25 @@ public class Upload implements Transference, Runnable, SecureSingleThreadNotifia _fid = (String) ((Map) files.get(0)).get("h"); - if (MiscTools.isVideoFile(Paths.get(_file_name))) { + while ("".equals(_thumbnail_file)) { + MiscTools.pausar(1000); + } + + if (_thumbnail_file != null) { getView().printStatusNormal("Creating thumbnail ... ***DO NOT EXIT MEGABASTERD NOW***"); - if (_thumbnail_file != null) { + if (!Files.isReadable(Paths.get(_thumbnail_file))) { + Thumbnailer thumbnailer = new Thumbnailer(); - while ("".equals(_thumbnail_file)) { - MiscTools.pausar(1000); - } - - getView().printStatusNormal("Uploading thumbnail ... ***DO NOT EXIT MEGABASTERD NOW***"); - - _ma.uploadThumbnails(this, _fid, _thumbnail_file, _thumbnail_file); - - Files.deleteIfExists(Paths.get(_thumbnail_file)); + _thumbnail_file = thumbnailer.createThumbnail(_file_name); } - } else if (MiscTools.isImageFile(Paths.get(_file_name))) { + getView().printStatusNormal("Uploading thumbnail ... ***DO NOT EXIT MEGABASTERD NOW***"); - getView().printStatusNormal("Creating thumbnail ... ***DO NOT EXIT MEGABASTERD NOW***"); + _ma.uploadThumbnails(this, _fid, _thumbnail_file, _thumbnail_file); - if (_thumbnail_file != null) { - - while ("".equals(_thumbnail_file)) { - MiscTools.pausar(1000); - } - - getView().printStatusNormal("Uploading thumbnail ... ***DO NOT EXIT MEGABASTERD NOW***"); - - _ma.uploadThumbnails(this, _fid, _thumbnail_file, _thumbnail_file); - - Files.deleteIfExists(Paths.get(_thumbnail_file)); - } + Files.deleteIfExists(Paths.get(_thumbnail_file)); } diff --git a/src/main/resources/images/mbasterd_screen.png b/src/main/resources/images/mbasterd_screen.png index 3b7a1c72d..a3937c3b7 100644 Binary files a/src/main/resources/images/mbasterd_screen.png and b/src/main/resources/images/mbasterd_screen.png differ