import java.awt.ItemSelectable;
import java.awt.Point;
import java.awt.Toolkit;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
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.util.List;
import java.util.Set;
import java.util.SortedSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DropMode;
import javax.swing.KeyStroke;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingUtilities;
-import javax.swing.TransferHandler;
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;
import saccubus.util.WayBackTimeParser;
import saccubus.worker.profile.CommentProfile;
-import saccubus.worker.profile.ConvertProfile;
import saccubus.worker.profile.DownloadProfile;
import saccubus.worker.profile.FfmpegProfile;
import saccubus.worker.profile.GeneralProfile;
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;
/**
*
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;
final JPanel pnlMain = new JPanel();
final JScrollPane scrDisplay = new JScrollPane();
- tblDisplay = new JTable(targetModel, new TargetsColumnModel());
+ tblDisplay = new JTable(targetModel, new TargetsColumnModel()) {
+
+ @Override
+ public String getToolTipText(MouseEvent e) {
+ int row = convertRowIndexToModel(rowAtPoint(e.getPoint()));
+ TableModel m = getModel();
+ final String videoId = (String) m.getValueAt(row, 0);
+ final Thumbnail thumbnail = thumbRepository.getThumnail(videoId);
+ if(thumbnail == null){
+ return "動画情報取得中...";
+ }
+ return "<html>" + videoId + ":" + thumbnail.getTitle() + "</html>";
+ }
+ };
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 FileChooseAction(MainFrame.this, JFileChooser.FILES_ONLY, fldVideo));
+ new FileChooseActionListener(MainFrame.this, JFileChooser.FILES_ONLY, fldVideo));
+ fldVideo.setTransferHandler(new ContentTransferHandler(fldVideo.getTransferHandler(), cbVideoLocal));
final JLabel lblComment = new JLabel();
fldBackLog.setToolTipText("YYYY/MM/DD hh:mm:ss形式、あるいは1970/01/01からの経過秒を入力します。");
cbBackLogReduce.setToolTipText("「コメントの量を減らす」場合はチェックを付けます。");
cbCommentLocal = new JCheckBox();
- cbCommentLocal.setToolTipText(FILE_LOCALBUTTON_TOOLTIP);
cbCommentLocal.addItemListener(new ItemListener() {
@Override
cbBackLog.setEnabled(!selected);
}
});
- cmbComment.setToolTipText(FILE_INPUTFIELD_TOOLTIP);
btnComment.addActionListener(
- new FileChooseAction(MainFrame.this, JFileChooser.FILES_ONLY, fldComment));
+ 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);
cmbId = new IdComboBox(videoFileWatcher);
- cmbId.setToolTipText(ID_FIELD_TOOLTIP);
cmbId.getEditorComponent().addActionListener(applyListener);
cmbId.getEditorComponent().addFocusListener(new java.awt.event.FocusAdapter() {
}
initInputPanel();
- pnlMain.setTransferHandler(new DownloadListTransferHandler());
- tblDisplay.setTransferHandler(new TableTransferHandler());
}
public void startWatcher() {
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, "キャンセル");
}
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());
+
+ thumbRepository.request(downProf.getProxyProfile(), 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);
}
}
cmbId.setText("");
cbBackLogReduce.setSelected(p.getCommentMinDisabled());
cbBackLog.setEnabled(true);
+ cbBackLog.setSelected(false);
fldBackLog.setEnabled(false);
+ fldBackLog.setText("");
final boolean videoLocal = p.getVideoUseLocal();
cbVideoLocal.setSelected(videoLocal);
return menuBar;
}
- private class DownloadListTransferHandler extends TransferHandler {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean canImport(TransferHandler.TransferSupport support) {
- Transferable transferable = support.getTransferable();
- if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
- || transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean importData(TransferHandler.TransferSupport support) {
-// try {
-// Transferable transferable = support.getTransferable();
-// if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-// @SuppressWarnings("unchecked")
-// final List<File> data = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
-// Collection<Target> targets = Target.from(data);
-// targetModel.addTarget(targets);
-// } else if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
-// String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);
-// Matcher matcher = movieIdPattern.matcher(data);
-// if (matcher.find()) {
-// String movieId = matcher.group(1);
-// Target target = Target.fromId(movieId);
-// targetModel.addTarget(target);
-// } else {
-// return false;
-// }
-//
-// }
-// return false;
-// } catch (Exception e) {
-// logger.log(Level.SEVERE, null, e);
-// return false;
-// }
- // TODO 上記実装見直し(Locationは削除された)
- return false;
- }
- }
-
- private class TableTransferHandler extends DownloadListTransferHandler {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- public boolean canImport(TransferHandler.TransferSupport support) {
- return super.canImport(support);
- }
-
- @Override
- public boolean importData(TransferHandler.TransferSupport support) {
- return super.importData(support);
- }
- }
-
private class MainFrameWindowListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
try {
p.save();
} catch (ConfigurationException ex) {
- logger.log(Level.SEVERE, "コンフィグ保存失敗", ex);
+ logger.error("コンフィグ保存失敗", ex);
}
}
}
private final boolean convert;
private InqubusConvertProfile() throws IOException {
- final Config p = Config.INSTANCE;
this.outputProfile = new InqubusOutputProfile();
this.generalProfile = new ConfigGeneralProfile();
private InqubusOutputProfile() {
- final Config p = Config.INSTANCE;
this.fileName = fldOutput.getText();
// TODO この時点でのID/Titleはどうするか…
this.videoId = "";
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();