OSDN Git Service

URL/ID入力欄値のチェックを再考
authoryukihane <yukihane.feather@gmail.com>
Fri, 19 Aug 2011 17:43:13 +0000 (02:43 +0900)
committeryukihane <yukihane.feather@gmail.com>
Fri, 19 Aug 2011 17:43:13 +0000 (02:43 +0900)
frontend/src/saccubus/converter/Converter.java

index 2e83404..dc657d0 100644 (file)
@@ -1,11 +1,13 @@
 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;
 
@@ -23,7 +25,6 @@ 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;
@@ -31,17 +32,18 @@ public class Converter extends AbstractCommand implements Runnable, Callable<Boo
     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;
     }