OSDN Git Service

add Override annotation
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / MainFrame.java
index 50e9fcf..1749f7a 100644 (file)
@@ -15,12 +15,14 @@ import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
@@ -30,8 +32,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import javax.swing.BorderFactory;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.DropMode;
@@ -56,6 +58,7 @@ import javax.swing.LayoutStyle.ComponentPlacement;
 import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
 import javax.swing.border.BevelBorder;
+import javax.swing.table.TableModel;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import saccubus.MainFrame_AboutBox;
@@ -86,6 +89,8 @@ import yukihane.inqubus.manager.TaskManageListener;
 import yukihane.inqubus.manager.TaskStatus;
 import yukihane.inqubus.model.Target;
 import yukihane.inqubus.model.TargetsTableModel;
+import yukihane.inqubus.thumbnail.Repository;
+import yukihane.inqubus.thumbnail.Thumbnail;
 
 /**
  *
@@ -94,15 +99,8 @@ import yukihane.inqubus.model.TargetsTableModel;
 public class MainFrame extends JFrame {
 
     private static final long serialVersionUID = 1L;
-    private static final Logger logger = Logger.getLogger(MainFrame.class.getName());
-    private static final String ID_FIELD_TOOLTIP = "動画のIDまたはURLを入力します。";
-    private static final String FILE_LOCALBUTTON_TOOLTIP
-            = "<html>ダウンロードする場合はチェックを外します。<br/>ローカルファイルを使用する場合はチェックを入れます。</html>";
-    private static final String FILE_INPUTFIELD_TOOLTIP
-            = "<html>ダウンロードする場合はファイル命名規則を入力します。<br/>"
-            + "ローカルファイルを使用する場合はパスを含むファイル名を入力します。</html>";
-    private static final String FILE_OUTPUTFIELD_TOOLTIP
-            = "ファイル命名規則入力します。";
+    private static final Logger logger = LoggerFactory.getLogger(MainFrame.class);
+    private final Repository thumbRepository = new Repository();
     private final TargetsTableModel targetModel = new TargetsTableModel();
     private final TaskManage taskManager;
     private final Thread videoFileWatcherThread;
@@ -115,6 +113,7 @@ public class MainFrame extends JFrame {
     public MainFrame() {
         super();
         addWindowListener(new MainFrameWindowListener());
+        setTitle(MainFrame_AboutBox.VERSION);
 
         final Config p = Config.INSTANCE;
 
@@ -158,15 +157,38 @@ public class MainFrame extends JFrame {
 
         final JPanel pnlMain = new JPanel();
         final JScrollPane scrDisplay = new JScrollPane();
-        tblDisplay = new JTable(targetModel, new TargetsColumnModel());
+        tblDisplay = new JTable(targetModel, new TargetsColumnModel()) {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public String getToolTipText(MouseEvent e) {
+                int row = convertRowIndexToModel(rowAtPoint(e.getPoint()));
+                TableModel m = getModel();
+                final String videoId = (String) m.getValueAt(row, 0);
+                try {
+                    final Thumbnail thumbnail = thumbRepository.getThumnail(videoId);
+                    if (thumbnail == null) {
+                        return videoId + ": 動画情報未取得";
+                    }
+
+                    final URL imageUrl = thumbnail.getImageFile().toURI().toURL();
+
+                    return "<html>" + videoId + ": " + thumbnail.getTitle()
+                            + " (" + thumbnail.getLength() + ")" + "<br/>"
+                            + "<img src=\"" + imageUrl + "\"/>"
+                            + "</html>";
+                } catch (Throwable ex) {
+                    logger.warn(null, ex);
+                    return videoId + ": 情報取得できません";
+                }
+            }
+        };
         tblDisplay.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         final JPanel pnlButton = new JPanel();
         final JPanel pnlInputMain = new JPanel();
         final JLabel lblId = new JLabel();
         final JLabel lblVideo = new JLabel();
         cbVideoLocal = new JCheckBox();
-        cbVideoLocal.setToolTipText(FILE_LOCALBUTTON_TOOLTIP);
-        cmbVideo.setToolTipText(FILE_INPUTFIELD_TOOLTIP);
         btnVideo.addActionListener(
                 new FileChooseActionListener(MainFrame.this, JFileChooser.FILES_ONLY, fldVideo));
         fldVideo.setTransferHandler(new ContentTransferHandler(fldVideo.getTransferHandler(), cbVideoLocal));
@@ -193,7 +215,6 @@ public class MainFrame extends JFrame {
         cbBackLogReduce.setToolTipText("「コメントの量を減らす」場合はチェックを付けます。");
 
         cbCommentLocal = new JCheckBox();
-        cbCommentLocal.setToolTipText(FILE_LOCALBUTTON_TOOLTIP);
         cbCommentLocal.addItemListener(new ItemListener() {
 
             @Override
@@ -203,14 +224,12 @@ public class MainFrame extends JFrame {
                 cbBackLog.setEnabled(!selected);
             }
         });
-        cmbComment.setToolTipText(FILE_INPUTFIELD_TOOLTIP);
         btnComment.addActionListener(
                 new FileChooseActionListener(MainFrame.this, JFileChooser.FILES_ONLY, fldComment));
         fldComment.setTransferHandler(new ContentTransferHandler(fldComment.getTransferHandler(), cbCommentLocal));
         final JLabel lblOutput = new JLabel();
         cbOutputEnable = new JCheckBox();
         fldOutput = new JTextField();
-        fldOutput.setToolTipText(FILE_OUTPUTFIELD_TOOLTIP);
 
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
@@ -258,10 +277,10 @@ public class MainFrame extends JFrame {
 
 
         cmbId = new IdComboBox(videoFileWatcher);
-        cmbId.setToolTipText(ID_FIELD_TOOLTIP);
         cmbId.getEditorComponent().addActionListener(applyListener);
         cmbId.getEditorComponent().addFocusListener(new java.awt.event.FocusAdapter() {
 
+            @Override
             public void focusLost(java.awt.event.FocusEvent evt) {
                 idFieldFocusLost(evt);
             }
@@ -272,6 +291,7 @@ public class MainFrame extends JFrame {
         cbVideoLocal.setText("local");
         cbVideoLocal.addItemListener(new java.awt.event.ItemListener() {
 
+            @Override
             public void itemStateChanged(java.awt.event.ItemEvent evt) {
                 useMovieLocalCheckBoxItemStateChanged(evt);
             }
@@ -282,6 +302,7 @@ public class MainFrame extends JFrame {
         cbCommentLocal.setText("local");
         cbCommentLocal.addItemListener(new java.awt.event.ItemListener() {
 
+            @Override
             public void itemStateChanged(java.awt.event.ItemEvent evt) {
                 useMovieLocalCheckBoxItemStateChanged(evt);
             }
@@ -292,6 +313,7 @@ public class MainFrame extends JFrame {
         cbOutputEnable.setText("変換");
         cbOutputEnable.addItemListener(new java.awt.event.ItemListener() {
 
+            @Override
             public void itemStateChanged(java.awt.event.ItemEvent evt) {
                 outputConvertCheckBoxItemStateChanged(evt);
             }
@@ -573,7 +595,7 @@ public class MainFrame extends JFrame {
             final int row = tblDisplay.getSelectedRow();
             final Target t = targetModel.getTarget(row);
             final boolean res = taskManager.cancel(t.getRowId());
-            logger.log(Level.FINE, "停止: {0} {1}", new Object[]{t.getVideoId(), res});
+            logger.debug("停止: {} {}", t.getVideoId(), res);
             if (res) {
                 targetModel.setStatus(t.getRowId(), null, TaskStatus.CANCELLED, -1.0, "キャンセル");
             }
@@ -588,14 +610,18 @@ public class MainFrame extends JFrame {
                 final DownloadProfile downProf = new InqubusDownloadProfile();
                 final String id = Util.getVideoId(cmbId.getText());
                 final InqubusConvertProfile convProf = new InqubusConvertProfile();
-                logger.log(Level.INFO, downProf.toString());
-                logger.log(Level.INFO, convProf.toString());
+                logger.debug(downProf.toString());
+                logger.debug(convProf.toString());
+
+                final File tempDir = new File(Config.INSTANCE.getSystemTempDir());
+                thumbRepository.request(downProf.getProxyProfile(), tempDir, id);
+
                 final RequestProcess rp = new RequestProcess(downProf, id, convProf);
                 taskManager.add(rp);
                 targetModel.addTarget(new Target(rp));
                 initInputPanel();
             } catch (Throwable th) {
-                logger.log(Level.SEVERE, null, th);
+                logger.error(null, th);
                 JOptionPane.showMessageDialog(MainFrame.this, th.getMessage(), "中断しました", JOptionPane.ERROR_MESSAGE);
             }
         }
@@ -792,7 +818,7 @@ public class MainFrame extends JFrame {
             try {
                 p.save();
             } catch (ConfigurationException ex) {
-                logger.log(Level.SEVERE, "コンフィグ保存失敗", ex);
+                logger.error("コンフィグ保存失敗", ex);
             }
         }
     }
@@ -975,7 +1001,6 @@ public class MainFrame extends JFrame {
         private final boolean convert;
 
         private InqubusConvertProfile() throws IOException {
-            final Config p = Config.INSTANCE;
             this.outputProfile = new InqubusOutputProfile();
             this.generalProfile = new ConfigGeneralProfile();
 
@@ -1022,7 +1047,6 @@ public class MainFrame extends JFrame {
 
 
         private InqubusOutputProfile() {
-            final Config p = Config.INSTANCE;
             this.fileName = fldOutput.getText();
             // TODO この時点でのID/Titleはどうするか…
             this.videoId = "";
@@ -1062,7 +1086,11 @@ public class MainFrame extends JFrame {
         private final boolean adjustRatio;
 
         private InqubusFfmpegProfile() throws IOException {
-            this.extOption = pnlInputFfmpeg.fldFfmpegOptionExtension.getText();
+            String ext = pnlInputFfmpeg.fldFfmpegOptionExtension.getText();
+            if (!ext.startsWith(".")) {
+                ext = "." + ext;
+            }
+            this.extOption = ext;
             this.inOption = pnlInputFfmpeg.fldFfmpegOptionIn.getText();
             this.mainOption = pnlInputFfmpeg.fldFfmpegOptionMain.getText();
             this.outOption = pnlInputFfmpeg.fldFfmpegOptionOut.getText();