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