OSDN Git Service

コンフィグを用いた禁則文字置換を実装
authoryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Mon, 19 Apr 2010 13:58:59 +0000 (13:58 +0000)
committeryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Mon, 19 Apr 2010 13:58:59 +0000 (13:58 +0000)
git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser/branches/dev20100419_filename@311 bdf3b611-c98c-6041-8292-703d9c9adbe7

src/nicobrowser/NamePattern.java
src/nicobrowser/NicoHttpClient.java
src/nicobrowser/main/Main.java
test/nicobrowser/NamePatternTest.java

index 38a41df..83ae08a 100644 (file)
@@ -4,18 +4,18 @@
  */
 package nicobrowser;
 
-import java.util.regex.Pattern;
-
 /**
  *
  * @author yuki
  */
 public class NamePattern {
 
-    private static final String titlePattern = "\\{title\\}";
-    private static final String idPattern = "\\{id\\}";
-    private static final String lowPattern = "\\{low\\}";
+    private static final String titlePattern = "{title}";
+    private static final String idPattern = "{id}";
+    private static final String lowPattern = "{low}";
     private final String pattern;
+    private final String replaceFrom;
+    private final String replaceTo;
     private final String title;
 
     /**
@@ -23,21 +23,32 @@ public class NamePattern {
      * @param pattern 命名パターン.
      * @param title ファイル名に用いるタイトル文字列. 禁則文字が入っていてはならない.
      */
-    public NamePattern(String pattern, String title) {
+    public NamePattern(String pattern, String replaceFrom, String replaceTo, String title) {
         this.pattern = pattern;
+        this.replaceFrom = replaceFrom;
+        this.replaceTo = replaceTo;
         this.title = title;
     }
 
-    public String getTitle(){
-        return title;
-    }
-
     String createFileName(String id, boolean isNotLow) {
         String res = pattern;
-        res = res.replaceAll(titlePattern, title);
-        res = res.replaceAll(idPattern, id);
+        res = res.replace(titlePattern, title);
+        res = res.replace(idPattern, id);
         String low = isNotLow ? "" : "low";
-        res = res.replaceAll(lowPattern, low);
-        return res;
+        res = res.replace(lowPattern, low);
+        char[] replaceds = new char[replaceFrom.length()];
+        replaceFrom.getChars(0, replaceFrom.length(), replaceds, 0);
+        StringBuilder str = new StringBuilder();
+        for (int i = 0; i < res.length(); i++) {
+            char c = res.charAt(i);
+            String moji = new String("" + c);
+            for (char replaced : replaceds) {
+                if (c == replaced) {
+                    moji = replaceTo;
+                }
+            }
+            str.append(moji);
+        }
+        return str.toString();
     }
 }
index 3b1c7da..557f605 100644 (file)
@@ -649,7 +649,7 @@ public class NicoHttpClient {
             ProgressListener listener) throws IOException, URISyntaxException, HttpException, InterruptedException {
         String file = FilenameUtils.getName(fileName);
         String dir = fileName.substring(0, fileName.length() - file.length());
-        NamePattern np = new NamePattern(file, "");
+        NamePattern np = new NamePattern(file, "", "", "");
         return getFlvFile(vi, new File(dir), np, nowStatus, needLowFile, listener);
     }
 
index 2ed49de..e39c480 100644 (file)
@@ -192,7 +192,8 @@ public class Main {
                 }
                 prevDate = Calendar.getInstance().getTime();
                 File saveDir = new File(config.getSrcSaveDir());
-                NamePattern np = new NamePattern(config.getFileNamePattern(), Util.getRegularFileName(c.getTitle()));
+                NamePattern np = new NamePattern(config.getFileNamePattern(), config.getFileNameReplaceFrom(), config.
+                        getFileNameReplaceTo(), Util.getRegularFileName(c.getTitle()));
                 log.info("ファイルを取得します: " + c.getNicoId() + " " + c.getTitle());
                 try {
                     VideoInfo vi = instance.getVideoInfo(c.getNicoId());
index 0326d98..2a3e086 100644 (file)
@@ -15,26 +15,27 @@ public class NamePatternTest {
      */
     @Test
     public void testCreateFileName() {
-        final String title = "タイトル";
+        final String title = "*タ\\イ/ト\"ル";
+        System.out.println(title);
         final String id = "sm9999";
         String res;
 
         System.out.println("createFileName");
-        NamePattern np = new NamePattern("{title}", title);
+        NamePattern np = new NamePattern("{title}{title}", "*\\/\"", "_", title);
         res = np.createFileName("sm9", true);
-        assertEquals(title, res);
+        assertEquals("_タ_イ_ト_ル_タ_イ_ト_ル", res);
 
-        NamePattern np2 = new NamePattern("[{id}]{title}", title);
+        NamePattern np2 = new NamePattern("[{id}]{title}", "9タ", "-", title);
         res = np2.createFileName(id, false);
-        assertEquals("[sm9999]タイトル", res);
+        assertEquals("[sm----]*-\\イ/ト\"ル", res);
 
-        NamePattern np3 = new NamePattern("{id}{low}_{title}", title);
+        NamePattern np3 = new NamePattern("{id}{low}_{title}", "", "", title);
         res = np3.createFileName(id, false);
-        assertEquals("sm9999low_タイトル", res);
+        assertEquals("sm9999low_*タ\\イ/ト\"ル", res);
 
-        NamePattern np4 = new NamePattern("{id}{low}_{title}", title);
+        NamePattern np4 = new NamePattern("{id}{low}_{title}", "/*-", "*", title);
         res = np4.createFileName(id, true);
-        assertEquals("sm9999_タイトル", res);
+        assertEquals("sm9999_*タ\\イ*ト\"ル", res);
 
     }
 }