1 package saccubus.prompt;
4 import java.io.IOException;
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ExecutorService;
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
9 import org.apache.commons.cli.BasicParser;
10 import org.apache.commons.cli.CommandLine;
11 import org.apache.commons.cli.CommandLineParser;
12 import org.apache.commons.cli.HelpFormatter;
13 import org.apache.commons.cli.Option;
14 import org.apache.commons.cli.OptionBuilder;
15 import org.apache.commons.cli.Options;
16 import saccubus.ConvertStopFlag;
17 import saccubus.ConvertStopFlag.State;
18 import saccubus.converter.Converter;
19 import saccubus.converter.classic.profile.LoginInfo;
20 import saccubus.converter.classic.profile.CommentGetInfo;
21 import saccubus.converter.classic.profile.Ffmpeg;
22 import saccubus.converter.classic.profile.FfmpegOption;
23 import saccubus.converter.classic.profile.GeneralSetting;
24 import saccubus.converter.classic.profile.InputFileSetting;
25 import saccubus.converter.classic.profile.OutputFileSetting;
26 import saccubus.converter.classic.profile.Profile;
27 import saccubus.net.TextProgressListener;
35 * 説明: ニコニコ動画の動画をコメントつきで保存
39 * 著作権: Copyright (c) 2007 PSI
51 public static void main(String[] args) throws IOException {
52 // 第1引数がメールアドレスと思しき時は昔の引数であるとみなしてパース、実行する.
53 if (args.length > 0 && args[0].contains("@")) {
54 doWithOldArguments(args);
58 new Prompt().execute(args);
61 public void execute(String[] args) throws IOException {
62 execute(args, TextProgressListener.EMPTY_LISTENER, ConvertStopFlag.StateChangeListener.EMPTY_LISTENER);
65 public void execute(String[] args, TextProgressListener tpl, ConvertStopFlag.StateChangeListener scl) throws
67 Options options = createOptions(args);
70 CommandLineParser parser = new BasicParser();
71 CommandLine cmd = parser.parse(options, args);
72 profile = createExecuteOption(cmd);
73 } catch (Exception e) {
74 HelpFormatter hf = new HelpFormatter();
75 hf.printHelp("java -jar Saccubus.jar [opts]", options);
77 throw new IOException(e);
80 Converter conv = new Converter("dummy0", profile, tpl, new ConvertStopFlag(scl));
81 ExecutorService es = Executors.newSingleThreadExecutor();
82 Future<Boolean> future = es.submit((Callable<Boolean>) conv);
84 boolean res = future.get().booleanValue();
86 throw new IOException("ffmpeg変換処理が正常に終了しませんでした。");
88 } catch (Exception ex) {
89 throw new IOException("取得失敗", ex);
91 System.out.println("Finished.");
94 private Options createOptions(String[] args) {
95 Options options = new Options();
96 // Option id = OptionBuilder.withArgName("mail").hasArg().withDescription("ニコニコ動画ログインID(メールアドレス)").create("id");
97 // Option password = OptionBuilder.withArgName("password").hasArg().withDescription("ニコニコ動画ログインパスワード").
98 // create("password");
99 // Option video = OptionBuilder.withArgName("id").hasArg().withDescription("ニコニコ動画ビデオID").create("video");
100 Option videoFile = OptionBuilder.withArgName("file").hasArg().withDescription("動画ファイル").create("file_video");
101 Option commentFile = OptionBuilder.withArgName("file").hasArg().withDescription("コメントファイル").
102 create("file_comment");
103 Option tcommentFile = OptionBuilder.withArgName("file").hasArg().withDescription("投稿者コメントファイル").
104 create("file_tcomment");
105 Option outputFile = OptionBuilder.withArgName("file").hasArg().withDescription("出力ファイル").create("file_output");
106 Option ffmpeg = OptionBuilder.withArgName("option").hasArg().withDescription("ffmpeg変換オプション").create("ffmpeg");
107 // options.addOption(id);
108 // options.addOption(password);
109 // options.addOption(video);
110 options.addOption(videoFile);
111 options.addOption(commentFile);
112 options.addOption(tcommentFile);
113 options.addOption(outputFile);
114 options.addOption(ffmpeg);
118 private Profile createExecuteOption(CommandLine cmd) throws IOException {
119 // final String mail = "dmy";
120 // final String pass = "dmy";
121 // final String video = cmd.getOptionValue("file_video");
122 // final String comm = cmd.getOptionValue("file_comment");
123 // final String tcomm = cmd.getOptionValue("file_tcomment");
124 // final String output = cmd.getOptionValue("file_output");
125 // final String ff = cmd.getOptionValue("ffmpeg");
128 //// SProperties setting = SProperties.loadSetting(mail, pass);
129 //// Profile p = setting.toProfile();
131 // GeneralSetting general = p.getGeneralSetting();
132 // LoginInfo loginInfo = p.getLoginInfo();
133 //// InputFileSetting videoSetting = p.getVideoSetting();
134 //// InputFileSetting commentSetting = p.getCommentSetting();
135 // CommentGetInfo commentGetInfo = p.getCommentGetInfo();
136 //// InputFileSetting tcommentSetting = p.getTcommentSetting();
137 //// OutputFileSetting outputFileSetting = p.getOutputFileSetting();
138 // Ffmpeg ffmpeg = p.getFfmpeg();
140 // FfmpegOption newFfmpegOption = new FfmpegOption(ffmpeg.getFfmpegOption().getExtOption(), "", "", ff, "", false,
142 // InputFileSetting newVideoSetting = new InputFileSetting(new SFile(true, new File(video)), false, false, commentGetInfo, -1);
143 // InputFileSetting newCommentSetting = new InputFileSetting(new SFile(true, new File(comm)), false, false, commentGetInfo, -1);
144 // InputFileSetting newTcommentSetting = new InputFileSetting(new SFile(true, new File(tcomm)), false, false, commentGetInfo, -1);
145 // OutputFileSetting newOutputFileSetting = new OutputFileSetting(new SFile(true, new File(output)), true, false,
147 // Ffmpeg newFfmpeg = new Ffmpeg(ffmpeg.getFfmpeg(), ffmpeg.getVhook(), newFfmpegOption, ffmpeg.isVhookDisabled(), ffmpeg.
148 // getMaxNumOfComment(), ffmpeg.getFont(), ffmpeg.getFontIndex(), ffmpeg.getShadowIndex(), ffmpeg.
149 // isShowConverting(), ffmpeg.isSelfAdjustFontSize(), ffmpeg.isCommentOpaque(), ffmpeg.getNgSetting());
151 // p = new Profile(general, loginInfo, newVideoSetting, newCommentSetting, commentGetInfo, newTcommentSetting,
152 // newOutputFileSetting, newFfmpeg);
161 private static void doWithOldArguments(String[] args) throws IOException {
162 String mail = args[0];
163 String pass = args[1];
164 String tag = args[2];
165 String time = args.length < 4 ? "" : args[3];
167 // SProperties setting = SProperties.loadSetting(mail, pass);
168 // Converter conv = new Converter(tag, setting.toProfile(), TextProgressListener.EMPTY_LISTENER, new ConvertStopFlag(
169 // ConvertStopFlag.StateChangeListener.EMPTY_LISTENER));
170 Converter conv = new Converter(tag, null/*この部分*/, TextProgressListener.EMPTY_LISTENER, new ConvertStopFlag(
171 ConvertStopFlag.StateChangeListener.EMPTY_LISTENER));
172 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
173 System.out.println("Saccubus on CUI");
174 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
175 System.out.println("Mailaddr: " + mail);
176 System.out.println("Password: hidden");
177 System.out.println("VideoID: " + tag);
178 System.out.println("WaybackTime: " + time);
179 System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
181 System.out.println("Finished.");