OSDN Git Service

過去ログ取得時点をConverterコンストラクタ引数からProfileに移動
[coroid/inqubus.git] / frontend / src / saccubus / prompt / Prompt.java
1 package saccubus.prompt;
2
3 import java.io.File;
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.converter.classic.profile.SFile;
28 import saccubus.properties.SProperties;
29 import saccubus.net.TextProgressListener;
30
31 /**
32  * <p>
33  * タイトル: さきゅばす
34  * </p>
35  *
36  * <p>
37  * 説明: ニコニコ動画の動画をコメントつきで保存
38  * </p>
39  *
40  * <p>
41  * 著作権: Copyright (c) 2007 PSI
42  * </p>
43  *
44  * <p>
45  * 会社名:
46  * </p>
47  *
48  * @author 未入力
49  * @version 1.0
50  */
51 public class Prompt {
52
53     public static void main(String[] args) throws IOException {
54         // 第1引数がメールアドレスと思しき時は昔の引数であるとみなしてパース、実行する.
55         if (args.length > 0 && args[0].contains("@")) {
56             doWithOldArguments(args);
57             return;
58         }
59
60         new Prompt().execute(args);
61     }
62
63     public void execute(String[] args) throws IOException {
64         execute(args, TextProgressListener.EMPTY_LISTENER, ConvertStopFlag.StateChangeListener.EMPTY_LISTENER);
65     }
66
67     public void execute(String[] args, TextProgressListener tpl, ConvertStopFlag.StateChangeListener scl) throws
68             IOException {
69         Options options = createOptions(args);
70         Profile profile;
71         try {
72             CommandLineParser parser = new BasicParser();
73             CommandLine cmd = parser.parse(options, args);
74             profile = createExecuteOption(cmd);
75         } catch (Exception e) {
76             HelpFormatter hf = new HelpFormatter();
77             hf.printHelp("java -jar Saccubus.jar [opts]", options);
78             System.out.flush();
79             throw new IOException(e);
80         }
81
82         Converter conv = new Converter("dummy", profile, tpl, new ConvertStopFlag(scl));
83         ExecutorService es = Executors.newSingleThreadExecutor();
84         Future<Boolean> future = es.submit((Callable<Boolean>) conv);
85         try {
86             boolean res = future.get().booleanValue();
87             if (!res) {
88                 throw new IOException("ffmpeg変換処理が正常に終了しませんでした。");
89             }
90         } catch (Exception ex) {
91             throw new IOException("取得失敗", ex);
92         }
93         System.out.println("Finished.");
94     }
95
96     private Options createOptions(String[] args) {
97         Options options = new Options();
98 //        Option id = OptionBuilder.withArgName("mail").hasArg().withDescription("ニコニコ動画ログインID(メールアドレス)").create("id");
99 //        Option password = OptionBuilder.withArgName("password").hasArg().withDescription("ニコニコ動画ログインパスワード").
100 //                create("password");
101 //        Option video = OptionBuilder.withArgName("id").hasArg().withDescription("ニコニコ動画ビデオID").create("video");
102         Option videoFile = OptionBuilder.withArgName("file").hasArg().withDescription("動画ファイル").create("file_video");
103         Option commentFile = OptionBuilder.withArgName("file").hasArg().withDescription("コメントファイル").
104                 create("file_comment");
105         Option tcommentFile = OptionBuilder.withArgName("file").hasArg().withDescription("投稿者コメントファイル").
106                 create("file_tcomment");
107         Option outputFile = OptionBuilder.withArgName("file").hasArg().withDescription("出力ファイル").create("file_output");
108         Option ffmpeg = OptionBuilder.withArgName("option").hasArg().withDescription("ffmpeg変換オプション").create("ffmpeg");
109 //        options.addOption(id);
110 //        options.addOption(password);
111 //        options.addOption(video);
112         options.addOption(videoFile);
113         options.addOption(commentFile);
114         options.addOption(tcommentFile);
115         options.addOption(outputFile);
116         options.addOption(ffmpeg);
117         return options;
118     }
119
120     private Profile createExecuteOption(CommandLine cmd) throws IOException {
121         final String mail = "dmy";
122         final String pass = "dmy";
123         final String video = cmd.getOptionValue("file_video");
124         final String comm = cmd.getOptionValue("file_comment");
125         final String tcomm = cmd.getOptionValue("file_tcomment");
126         final String output = cmd.getOptionValue("file_output");
127         final String ff = cmd.getOptionValue("ffmpeg");
128
129         SProperties setting = SProperties.loadSetting(mail, pass);
130         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();
139
140         FfmpegOption newFfmpegOption = new FfmpegOption(ffmpeg.getFfmpegOption().getExtOption(), "", "", ff, "", false,
141                 "", "", false);
142         InputFileSetting newVideoSetting = new InputFileSetting(new SFile(true, new File(video)), false, false, commentGetInfo, "");
143         InputFileSetting newCommentSetting = new InputFileSetting(new SFile(true, new File(comm)), false, false, commentGetInfo, "");
144         InputFileSetting newTcommentSetting = new InputFileSetting(new SFile(true, new File(tcomm)), false, false, commentGetInfo, "");
145         OutputFileSetting newOutputFileSetting = new OutputFileSetting(new SFile(true, new File(output)), true, false,
146                 true, true);
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());
150
151         p = new Profile(general, loginInfo, newVideoSetting, newCommentSetting, commentGetInfo, newTcommentSetting,
152                 newOutputFileSetting, newFfmpeg);
153
154         return p;
155     }
156
157     /**
158      * 昔の引数形式でプログラムを実行する.
159      */
160     private static void doWithOldArguments(String[] args) throws IOException {
161         String mail = args[0];
162         String pass = args[1];
163         String tag = args[2];
164         String time = args.length < 4 ? "" : args[3];
165         SProperties setting = SProperties.loadSetting(mail, pass);
166         Converter conv = new Converter(tag, setting.toProfile(), TextProgressListener.EMPTY_LISTENER, new ConvertStopFlag(
167                 ConvertStopFlag.StateChangeListener.EMPTY_LISTENER));
168         System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
169         System.out.println("Saccubus on CUI");
170         System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
171         System.out.println("Mailaddr: " + mail);
172         System.out.println("Password: hidden");
173         System.out.println("VideoID: " + tag);
174         System.out.println("WaybackTime: " + time);
175         System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
176         conv.run();
177         System.out.println("Finished.");
178     }
179 }