package saccubus.converter;
+import java.util.regex.Matcher;
import saccubus.converter.profile.Profile;
import saccubus.converter.profile.FfmpegOption;
import saccubus.converter.filegetter.FileInstanciator;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.Callable;
+import java.util.regex.Pattern;
import saccubus.ConvertStopFlag;
import saccubus.net.TextProgressListener;
*/
public class Converter extends AbstractCommand implements Runnable, Callable<Boolean> {
- private static final String VIDEO_URL_PARSER = "http://www.nicovideo.jp/watch/";
private final Profile Setting;
private final String Tag;
private final String Time;
public Converter(String url, String time, Profile setting,
TextProgressListener listener, ConvertStopFlag flag) {
super(listener, flag);
- url = url.trim();
- if (url.startsWith(VIDEO_URL_PARSER)) {
- int index = url.indexOf('?', VIDEO_URL_PARSER.length());
- if (index >= 0) {
- Tag = url.substring(VIDEO_URL_PARSER.length(), index);
- } else {
- Tag = url.substring(VIDEO_URL_PARSER.length());
- }
+
+ // TODO 入力欄の値から動画IDの切り出しはGUI側でやるべきだろう
+ final int startIdIdx = url.lastIndexOf("/") + 1;
+ final String altId = url.substring(startIdIdx);
+ final Pattern idPattern = Pattern.compile("([a-z]*\\d+)");
+ final Matcher idMatcher = idPattern.matcher(altId);
+ if (idMatcher.find()) {
+ Tag = idMatcher.group(1);
} else {
- Tag = url;
+ throw new IllegalArgumentException("URL/IDの指定が不正です: " + url);
}
+
Time = time;
Setting = setting;
}