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.beans.PropertyChangeListener;
import java.io.File;
-import java.io.FilenameFilter;
import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
+import java.util.SortedSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.DropMode;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
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.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
-import saccubus.FfmpegOption;
import saccubus.MainFrame_AboutBox;
import saccubus.util.WayBackTimeParser;
-import saccubus.worker.impl.convert.ConvertProgress;
-import saccubus.worker.impl.download.DownloadProgress;
-import saccubus.worker.WorkerListener;
-import saccubus.worker.impl.convert.ConvertResult;
-import saccubus.worker.impl.download.DownloadResult;
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 saccubus.worker.profile.ProxyProfile;
import saccubus.worker.profile.VideoProfile;
import yukihane.Util;
-import yukihane.inqubus.Config;
+import yukihane.inqubus.config.Config;
+import yukihane.inqubus.config.ConfigCommentProfile;
+import yukihane.inqubus.config.ConfigConvertProfile;
+import yukihane.inqubus.config.ConfigFfmpegProfile;
+import yukihane.inqubus.config.ConfigGeneralProfile;
+import yukihane.inqubus.config.ConfigLoginProfile;
+import yukihane.inqubus.config.ConfigOutputProfile;
+import yukihane.inqubus.config.ConfigProxyProfile;
import yukihane.inqubus.filewatch.FileWatch;
+import yukihane.inqubus.filewatch.FileWatchUtil;
import yukihane.inqubus.manager.RequestProcess;
import yukihane.inqubus.manager.TaskKind;
import yukihane.inqubus.manager.TaskManage;
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;
private final FileWatch videoFileWatcher;
+ private final Thread commentFileWatcherThread;
+ private final FileWatch commentFileWatcher;
+
/** Creates new form MainFrame */
public MainFrame() {
final int thConvert = p.getSystemConvertThread();
taskManager = new TaskManage(thDownload, secDownload, thConvert, new GuiTaskManageListener());
- // TODO ディレクトリ監視スレッド生成
+ // ディレクトリ監視スレッド生成
+ final FileSystem fs = FileSystems.getDefault();
+
final List<String> videoSearchDirs = p.getSearchVideoDirs();
videoSearchDirs.add(p.getVideoDir());
- final FileSystem fs = FileSystems.getDefault();
final Set<Path> videoPaths = new HashSet<>(videoSearchDirs.size());
for (String s : videoSearchDirs) {
videoPaths.add(fs.getPath(s));
this.videoFileWatcherThread = new Thread(videoFileWatcher);
this.videoFileWatcherThread.setDaemon(true);
+ final List<String> commentSearchDirs = p.getSearchCommentDirs();
+ commentSearchDirs.add(p.getCommentDir());
+ final Set<Path> commentPaths = new HashSet<>(commentSearchDirs.size());
+ for(String s : commentSearchDirs) {
+ commentPaths.add(fs.getPath(s));
+ }
+ commentFileWatcher = new FileWatch(commentPaths);
+ this.commentFileWatcherThread = new Thread(commentFileWatcher);
+ this.commentFileWatcherThread.setDaemon(true);
+
final URL url = MainFrame_AboutBox.class.getResource("icon.png");
final Image icon1 = Toolkit.getDefaultToolkit().createImage(url);
final URL url32 = MainFrame_AboutBox.class.getResource("icon32.png");
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 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);
lblId.setText("ID");
- fldId = new IdComboBox(videoFileWatcher);
- fldId.setToolTipText(ID_FIELD_TOOLTIP);
- fldId.getEditorComponent().addActionListener(applyListener);
- fldId.addFocusListener(new java.awt.event.FocusAdapter() {
+ cmbId = new IdComboBox(videoFileWatcher);
+ cmbId.getEditorComponent().addActionListener(applyListener);
+ cmbId.getEditorComponent().addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
idFieldFocusLost(evt);
.addContainerGap()
.addComponent(lblId)
.addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(fldId, GroupLayout.PREFERRED_SIZE, 100, Short.MAX_VALUE)
+ .addComponent(cmbId, GroupLayout.PREFERRED_SIZE, 100, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(cbBackLogReduce)
.addPreferredGap(ComponentPlacement.UNRELATED)
)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(glInputMain.createParallelGroup(Alignment.LEADING)
- .addComponent(cmbVideo, GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
- .addComponent(cmbComment, GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
- .addComponent(fldOutput, GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
+ .addComponent(cmbVideo, 300, 300, Short.MAX_VALUE)
+ .addComponent(cmbComment, 300, 300, Short.MAX_VALUE)
+ .addComponent(fldOutput, 300, 300, Short.MAX_VALUE)
)
.addGroup(glInputMain.createParallelGroup()
.addComponent(btnVideo)
.addGroup(glInputMain.createSequentialGroup()
.addContainerGap()
.addGroup(glInputMain.createParallelGroup(Alignment.BASELINE)
- .addComponent(fldId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addComponent(cmbId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblId)
.addComponent(cbBackLogReduce)
.addComponent(cbBackLog)
setSize(windowWidth, windowHeight);
}
- // TODO 最大化した状態で終了した場合の考慮
final int windowPosX = p.getSystemWindowPosX();
final int windowPosY = p.getSystemWindowPosY();
- if (windowPosX > 1024 && windowPosY > 1024) {
+ final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ if (windowPosX + windowWidth > 0 && windowPosX < screenSize.width
+ && windowPosY + windowHeight > 0 && windowPosY < screenSize.height) {
setLocation(windowPosX, windowPosY);
} else {
setLocationByPlatform(true);
}
initInputPanel();
- pnlMain.setTransferHandler(new DownloadListTransferHandler());
- tblDisplay.setTransferHandler(new TableTransferHandler());
}
public void startWatcher() {
videoFileWatcherThread.start();
+ commentFileWatcherThread.start();
+ }
+
+ private static void createFieldInfo( FileComboBox combo, boolean useLocal, String text, String pattern, Set<Path> allFiles) {
+ if (useLocal) {
+ final SortedSet<String> matchFiles = FileWatchUtil.getFileNamesContain(allFiles, text);
+ DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(matchFiles.toArray(new String[0]));
+ combo.setModel(model);
+ } else {
+ combo.setModel(new DefaultComboBoxModel<String>());
+ combo.getEditorComponent().setText(pattern);
+ }
}
private class GuiTaskManageListener implements TaskManageListener {
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, "キャンセル");
}
public void actionPerformed(ActionEvent e) {
try {
final DownloadProfile downProf = new InqubusDownloadProfile();
- final String id = Util.getVideoId(fldId.getText());
+ 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);
}
}
}
- private File searchFileMatchId(final File dir, final String id) {
- // TODO 候補は複数返すようにして、その後の対処は呼び出しもとで行ってもらった方が良いかも
- if (id.isEmpty()) {
- return null;
- }
-
- final File[] lists = dir.listFiles(new FilenameFilter() {
-
- final Pattern pattern = Pattern.compile(id + "\\D");
-
- @Override
- public boolean accept(File dir, String name) {
- return pattern.matcher(name).find();
- }
- });
-
- if (lists.length == 1) {
- return lists[0];
- } else if (lists.length > 1) {
- throw new UnsupportedOperationException();
- } else {
- return null;
- }
- }
-
/**
* 動画, コメントの"local"チェックボックス更新時の処理.
*/
final ItemSelectable source = evt.getItemSelectable();
JButton button;
- JTextField field;
- File dir;
+ FileComboBox combo;
+ Set<Path> allFiles;
+ String pattern;
if (source == cbVideoLocal) {
button = btnVideo;
- field = fldVideo;
- dir = new File(p.getVideoDir());
+ combo = cmbVideo;
+ allFiles = videoFileWatcher.getFiles();
+ pattern = p.getVideoFileNamePattern();
} else {
button = btnComment;
- field = fldComment;
- dir = new File(p.getCommentDir());
+ combo = cmbComment;
+ allFiles = commentFileWatcher.getFiles();
+ pattern = p.getCommentFileNamePattern();
}
final boolean useLocal = (evt.getStateChange() == ItemEvent.SELECTED);
button.setEnabled(useLocal);
+ createFieldInfo(combo, useLocal, cmbId.getText(), pattern, allFiles);
- String text;
- if (useLocal) {
- final File f = searchFileMatchId(dir, fldId.getText());
- if (f != null) {
- text = f.getPath();
- } else {
- text = "";
- }
- } else {
- text = p.getVideoFileNamePattern();
- }
- field.setText(text);
-
- }//GEN-LAST:event_useMovieLocalCheckBoxItemStateChanged
+ }
private void outputConvertCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_outputConvertCheckBoxItemStateChanged
final boolean convert = (evt.getStateChange() == ItemEvent.SELECTED);
private void idFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_idFieldFocusLost
final Config p = Config.INSTANCE;
- final String id = fldId.getText();
- if (id.isEmpty()) {
- return;
- }
-
- if (cbVideoLocal.isSelected() && fldVideo.getText().isEmpty()) {
- final File dir = new File(p.getVideoDir());
- final File file = searchFileMatchId(dir, id);
- if (file != null) {
- fldVideo.setText(file.getPath());
- }
- }
-
- if (cbCommentLocal.isSelected() && fldComment.getText().isEmpty()) {
- final File dir = new File(p.getCommentDir());
- final File file = searchFileMatchId(dir, id);
- if (file != null) {
- fldComment.setText(file.getPath());
- }
- }
+ final String id = cmbId.getText();
+ createFieldInfo(cmbVideo, cbVideoLocal.isSelected(), id, p.getVideoFileNamePattern(), videoFileWatcher.getFiles());
+ createFieldInfo(cmbComment, cbCommentLocal.isSelected(), id, p.getCommentFileNamePattern(), commentFileWatcher.getFiles());
}//GEN-LAST:event_idFieldFocusLost
// Variables declaration - do not modify//GEN-BEGIN:variables
private final JTable tblDisplay;
// 入力領域
private final JTabbedPane tbpInput = new JTabbedPane(JTabbedPane.BOTTOM);
// 入力領域 - メイン
- private final IdComboBox fldId;
+ private final IdComboBox cmbId;
private final JCheckBox cbBackLogReduce = new JCheckBox("少コメ");
private final JCheckBox cbBackLog = new JCheckBox("過去ログ");
private final JTextField fldBackLog = new JTextField();
initMainTab();
initFfmpegTab();
tbpInput.setSelectedIndex(0);
- fldId.requestFocus();
+ cmbId.requestFocus();
}
private void initMainTab() {
final Config p = Config.INSTANCE;
- fldId.setText("");
- fldBackLog.setEnabled(false);
+ 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);
final JMenuItem itExit = new JMenuItem("終了(X)", KeyEvent.VK_X);
itExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK));
- itExit.addActionListener(new ActionListener() {
+ final ActionListener exitActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- throw new UnsupportedOperationException("Not supported yet.");
+ processWindowEvent(new WindowEvent(MainFrame.this, WindowEvent.WINDOW_CLOSING));
}
- });
+ };
+ itExit.addActionListener(exitActionListener);
mnFile.add(itExit);
final JMenu mnTool = new JMenu("ツール(T)");
menuBar.add(mnTool);
final JMenuItem itOption = new JMenuItem("オプション(O)...", KeyEvent.VK_O);
- // TODO ショートカットキー
itOption.addActionListener(new ActionListener() {
@Override
return menuBar;
}
- private class DownloadProgressListener implements WorkerListener<DownloadResult, DownloadProgress> {
-
- @Override
- public void process(DownloadProgress progress) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void cancelled() {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void done(DownloadResult result) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void error(Throwable th) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
- }
-
- private class ConvertProgressListener implements WorkerListener<ConvertResult, ConvertProgress> {
-
- @Override
- public void process(ConvertProgress progress) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void cancelled() {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void done(ConvertResult result) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void error(Throwable th) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
- }
-
-
-
- private class DownloadListTransferHandler extends TransferHandler {
-
- private static final long serialVersionUID = 1L;
- private final Pattern movieIdPattern = Pattern.compile("(\\w\\w\\d+)");
-
- @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) {
final Config p = Config.INSTANCE;
- final Dimension size = getSize();
- p.setSystemWindowWidth(size.width);
- p.setSystemWindowHeight(size.height);
+ // 保存するのは最大化していない場合だけ
+ if (JFrame.NORMAL == getExtendedState()) {
+ final Dimension size = getSize();
+ p.setSystemWindowWidth(size.width);
+ p.setSystemWindowHeight(size.height);
- final Point pos = getLocation();
- p.setSystemWindowPosX(pos.x);
- p.setSystemWindowPosY(pos.y);
+ final Point pos = getLocation();
+ p.setSystemWindowPosX(pos.x);
+ p.setSystemWindowPosY(pos.y);
+ }
p.setSystemColumnId(tblDisplay.getColumnModel().getColumn(0).getWidth());
p.setSystemColumnVideo(tblDisplay.getColumnModel().getColumn(1).getWidth());
try {
p.save();
} catch (ConfigurationException ex) {
- logger.log(Level.SEVERE, "コンフィグ保存失敗", ex);
+ logger.error("コンフィグ保存失敗", ex);
}
}
}
/*
* ここからDownloadProfile作成用クラスの定義
*/
-
private class InqubusDownloadProfile implements DownloadProfile {
private final LoginProfile loginProfile;
private final GeneralProfile generalProfile;
private InqubusDownloadProfile() {
- this.loginProfile = new InqubusLoginProfile();
- this.proxyProfile = new InqubusProxyProfile();
+ this.loginProfile = new ConfigLoginProfile();
+ this.proxyProfile = new ConfigProxyProfile();
this.videoProfile = new InqubusVideoProfile();
this.commentProfile = new InqubusCommentProfile();
- this.generalProfile = new InqubusGeneralProfile();
+ this.generalProfile = new ConfigGeneralProfile();
}
@Override
- public LoginProfile getLoginInfo() {
+ public LoginProfile getLoginProfile() {
return this.loginProfile;
}
}
}
- private class InqubusLoginProfile implements LoginProfile {
- private final String mail;
- private final String password;
-
- private InqubusLoginProfile(){
- final Config p = Config.INSTANCE;
- this.mail = p.getId();
- this.password = p.getPassword();
- }
-
- @Override
- public String getMail() {
- return this.mail;
- }
-
- @Override
- public String getPassword() {
- return this.password;
- }
-
- @Override
- public String toString(){
- return ToStringBuilder.reflectionToString(this);
- }
- }
-
- private class InqubusProxyProfile implements ProxyProfile {
- private final boolean use;
- private final String host;
- private final int port;
-
- private InqubusProxyProfile(){
- final Config p = Config.INSTANCE;
- this.use = p.getProxyUse();
- this.host = p.getProxyHost();
- final String pp = p.getProxyPort();
- this.port = StringUtils.isBlank(pp) ? -1 : Integer.parseInt(pp);
- }
-
- @Override
- public boolean use() {
- return this.use;
- }
-
- @Override
- public String getHost() {
- return this.host;
- }
-
- @Override
- public int getPort() {
- return this.port;
- }
-
- @Override
- public String toString(){
- return ToStringBuilder.reflectionToString(this);
- }
- }
-
private class InqubusVideoProfile implements VideoProfile {
private final boolean download;
private final File dir;
}
}
- private class InqubusCommentProfile implements CommentProfile {
+ private class InqubusCommentProfile extends ConfigCommentProfile {
private final boolean download;
private final File dir;
private final String fileName;
private final File localFile;
- private final int lengthRelatedCommentSize;
private final boolean disablePerMinComment;
- private final int perMinCommentSize;
private final long backLogPoint;
private InqubusCommentProfile() {
+ super();
+
final Config p = Config.INSTANCE;
this.download = !cbCommentLocal.isSelected();
if (this.download) {
}
this.disablePerMinComment = cbBackLogReduce.isSelected();
- this.lengthRelatedCommentSize
- = (p.getCommentSizeAutosize()) ? -1 : Integer.parseInt(p.getCommentSizeManual());
- this.perMinCommentSize
- = (p.getCommentMinSizeAutosize()) ? -1 : Integer.parseInt(p.getCommentMinSizeManual());
}
@Override
}
@Override
- public int getLengthRelatedCommentSize() {
- return this.lengthRelatedCommentSize;
- }
-
- @Override
public boolean isDisablePerMinComment() {
return this.disablePerMinComment;
}
@Override
- public int getPerMinCommentSize() {
- return this.perMinCommentSize;
- }
-
- @Override
public long getBackLogPoint() {
return this.backLogPoint;
}
}
}
- private class InqubusGeneralProfile implements GeneralProfile {
- private final String replaceFrom;
- private final String replaceTo;
- private InqubusGeneralProfile() {
- final Config p = Config.INSTANCE;
- this.replaceFrom = p.getReplaceFrom();
- this.replaceTo = p.getReplaceTo();
- }
-
- @Override
- public String getReplaceFrom() {
- return this.replaceFrom;
- }
-
- @Override
- public String getReplaceTo() {
- return this.replaceTo;
- }
-
- @Override
- public String toString(){
- return ToStringBuilder.reflectionToString(this);
- }
- }
-
/*
* ここからConvertProfile作成用クラスの定義
*/
- private class InqubusConvertProfile implements ConvertProfile {
+ private class InqubusConvertProfile extends ConfigConvertProfile {
private final OutputProfile outputProfile;
private final GeneralProfile generalProfile;
private final FfmpegProfile ffmpegProfile;
private final boolean convert;
- private final File ffmpeg;
- private final boolean vhookDisabled;
- private final boolean commentOverlay;
- private final File vhook;
- private final File tmpDir;
- private final File font;
- private final int fontIndex;
- private final boolean commentOpaque;
- private final boolean disableFontSizeArrange;
- private final int shadowIndex;
- private final boolean showConvrting;
- private final int maxNumOfComment;
- private final HideCondition ngSetting;
private InqubusConvertProfile() throws IOException {
- final Config p = Config.INSTANCE;
this.outputProfile = new InqubusOutputProfile();
- this.generalProfile = new InqubusGeneralProfile();
- this.ffmpegProfile = new InqubusFfmpegProfile();
+ this.generalProfile = new ConfigGeneralProfile();
+
+ final File file = pnlInputFfmpeg.mdlFfmpegOption.getSelectedFile();
+ if (file != null) {
+ this.ffmpegProfile = new ConfigFfmpegProfile();
+ } else {
+ this.ffmpegProfile = new InqubusFfmpegProfile();
+ }
+
this.convert = cbOutputEnable.isSelected();
- this.ffmpeg = new File(p.getFfmpegPath());
- // TODO コンフィグに設定なし
- this.vhookDisabled = false;
- this.commentOverlay = p.getOutputCommentOverlay();
- this.vhook = new File(p.getFfmpegDllPath());
- this.tmpDir = new File(p.getSystemTempDir());
- this.font = new File(p.getFontPath());
- this.fontIndex = Integer.parseInt(p.getFontIndex());
- this.commentOpaque = p.getCommentOpaque();
- this.disableFontSizeArrange = p.getFontSizeArrangeDisable();
- this.shadowIndex = p.getFontShadow();
- // TODO コンフィグに設定なし
- this.showConvrting = true;
- this.maxNumOfComment = (p.getCommentDisplaySizeDefault()) ? -1 : Integer.parseInt(p.
- getCommentDisplaySizeManual());
- this.ngSetting = new InqubusHideCondition();
}
@Override
}
@Override
- public File getFfmpeg() {
- return this.ffmpeg;
- }
-
- @Override
- public boolean isVhookDisabled() {
- return this.vhookDisabled;
- }
-
- @Override
- public boolean isCommentOverlay() {
- return this.commentOverlay;
- }
-
- @Override
- public File getVhook() {
- return this.vhook;
- }
-
- @Override
- public File getTempDir() {
- return this.tmpDir;
- }
-
- @Override
- public File getFont() {
- return this.font;
- }
-
- @Override
- public int getFontIndex() {
- return this.fontIndex;
- }
-
- @Override
- public boolean isCommentOpaque() {
- return this.commentOpaque;
- }
-
- @Override
- public boolean isDisableFontSizeArrange() {
- return this.disableFontSizeArrange;
- }
-
- @Override
- public int getShadowIndex() {
- return this.shadowIndex;
- }
-
- @Override
- public boolean isShowConverting() {
- return this.showConvrting;
- }
-
- @Override
- public int getMaxNumOfComment() {
- return this.maxNumOfComment;
- }
-
- @Override
- public HideCondition getNgSetting() {
- return this.ngSetting;
- }
-
- @Override
public String toString(){
return ToStringBuilder.reflectionToString(this);
}
}
- private class InqubusOutputProfile implements OutputProfile {
- private final File dir;
+ private class InqubusOutputProfile extends ConfigOutputProfile {
private final String fileName;
private final String videoId;
private final String title;
- private InqubusOutputProfile(){
- final Config p = Config.INSTANCE;
- this.dir = new File(p.getOutputDir());
+ private InqubusOutputProfile() {
this.fileName = fldOutput.getText();
// TODO この時点でのID/Titleはどうするか…
this.videoId = "";
}
@Override
- public File getDir() {
- return this.dir;
- }
-
- @Override
public String getFileName() {
return this.fileName;
}
private final boolean adjustRatio;
private InqubusFfmpegProfile() throws IOException {
- final File file = pnlInputFfmpeg.mdlFfmpegOption.getSelectedFile();
- if (file != null) {
- final FfmpegOption ffop = FfmpegOption.load(file);
- this.extOption = ffop.getExtOption();
- this.inOption = ffop.getInOption();
- this.mainOption = ffop.getMainOption();
- this.outOption = ffop.getMainOption();
- this.avOption = ffop.getAvfilterOption();
- this.resize = ffop.isResize();
- this.resizeWidth = ffop.getResizeWidth();
- this.resizeHeight = ffop.getResizeHeight();
- this.adjustRatio = ffop.isAdjustRatio();
- } else {
- this.extOption = pnlInputFfmpeg.fldFfmpegOptionExtension.getText();
- this.inOption = pnlInputFfmpeg.fldFfmpegOptionIn.getText();
- this.mainOption = pnlInputFfmpeg.fldFfmpegOptionMain.getText();
- this.outOption = pnlInputFfmpeg.fldFfmpegOptionOut.getText();
- this.avOption = pnlInputFfmpeg.fldFfmpegOptionAv.getText();
- this.resize = pnlInputFfmpeg.cbFfmpegOptionResize.isSelected();
- this.resizeWidth = Integer.parseInt(pnlInputFfmpeg.fldFfmpegOptionResizeWidth.getText());
- this.resizeHeight = Integer.parseInt(pnlInputFfmpeg.fldFfmpegOptionResizeHeight.getText());
- this.adjustRatio = pnlInputFfmpeg.cbFfmpegOptionKeepAspect.isSelected();
+ 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();
+ this.avOption = pnlInputFfmpeg.fldFfmpegOptionAv.getText();
+ this.resize = pnlInputFfmpeg.cbFfmpegOptionResize.isSelected();
+ this.resizeWidth = Integer.parseInt(pnlInputFfmpeg.fldFfmpegOptionResizeWidth.getText());
+ this.resizeHeight = Integer.parseInt(pnlInputFfmpeg.fldFfmpegOptionResizeHeight.getText());
+ this.adjustRatio = pnlInputFfmpeg.cbFfmpegOptionKeepAspect.isSelected();
}
@Override
return ToStringBuilder.reflectionToString(this);
}
}
-
- private class InqubusHideCondition implements ConvertProfile.HideCondition{
-
- @Override
- public String getWord() {
- // TODO
- return "";
- }
-
- @Override
- public String getId() {
- // TODO
- return "";
- }
-
- @Override
- public String toString(){
- return ToStringBuilder.reflectionToString(this);
- }
- }
}