OSDN Git Service

ファイル監視サービス起動処理実装
authoryukihane <yukihane.feather@gmail.com>
Fri, 2 Sep 2011 02:35:39 +0000 (11:35 +0900)
committeryukihane <yukihane.feather@gmail.com>
Fri, 9 Sep 2011 11:39:00 +0000 (20:39 +0900)
frontend/src/yukihane/inqubus/Config.java
frontend/src/yukihane/inqubus/Main.java
frontend/src/yukihane/inqubus/filewatch/FileWatch.java
frontend/src/yukihane/inqubus/gui/MainFrame.java

index fa84945..b2125d1 100644 (file)
@@ -439,7 +439,7 @@ public enum Config {
 
     @SuppressWarnings("unchecked")
     public List<String> getSearchVideoDirs() {
-        return config.getList(SEARCH_VIDEO, new ArrayList<String>(0));
+        return config.getList(SEARCH_VIDEO, new ArrayList<String>(1));
     }
 
     public void setSearchVideoDirs(List<String> s) {
@@ -450,7 +450,7 @@ public enum Config {
 
     @SuppressWarnings("unchecked")
     public List<String> getSearchCommentDirs() {
-        return config.getList(SEARCH_COMMENT, new ArrayList<String>(0));
+        return config.getList(SEARCH_COMMENT, new ArrayList<String>(1));
     }
 
     public void setSearchCommentDirs(List<String> s) {
index 2796dfd..481166a 100644 (file)
@@ -48,6 +48,7 @@ public class Main {
             if(showWelcome) {
                 JOptionPane.showMessageDialog(null, "<html>設定はメニューの <b>ツール > オプション</b> から行えます</html>", "いんきゅばすへようこそ", JOptionPane.INFORMATION_MESSAGE);
             }
+            frame.startWatcher();
             frame.setVisible(true);
         }
     }
index b133a1e..f302d41 100644 (file)
@@ -32,6 +32,10 @@ public final class FileWatch implements Runnable {
 
         this.files = new HashSet<>(res.files);
         this.directories = new HashSet<>(res.dirs);
+        if(logger.isLoggable(Level.FINER)) {
+            logger.log(Level.FINER, "search dirs: {0}", directories);
+            logger.log(Level.FINER, "exist files: {0}", files);
+        }
     }
 
     public Set<Path> getFiles() {
@@ -81,6 +85,7 @@ public final class FileWatch implements Runnable {
                     if (kind.equals(StandardWatchEventKinds.ENTRY_CREATE)) {
                         final Path p = (Path) event.context();
                         if (Files.isRegularFile(p)) {
+                            logger.log(Level.FINEST, "ファイル追加: {0}", p);
                             synchronized (files) {
                                 files.add(p);
                             }
@@ -88,6 +93,7 @@ public final class FileWatch implements Runnable {
                     } else if (kind.equals(StandardWatchEventKinds.ENTRY_DELETE)) {
                         final Path p = (Path) event.context();
                         if (Files.isRegularFile(p)) {
+                            logger.log(Level.FINEST, "ファイル削除: {0}", p);
                             synchronized (files) {
                                 files.remove(p);
                             }
index ef44b02..be5527f 100644 (file)
@@ -21,12 +21,15 @@ import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.net.URL;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.swing.BorderFactory;
 import javax.swing.DropMode;
@@ -55,7 +58,6 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import saccubus.FfmpegOption;
 import saccubus.MainFrame_AboutBox;
-import saccubus.OptionComboBoxModel;
 import saccubus.util.WayBackTimeParser;
 import saccubus.worker.impl.convert.ConvertProgress;
 import saccubus.worker.impl.download.DownloadProgress;
@@ -73,6 +75,7 @@ import saccubus.worker.profile.ProxyProfile;
 import saccubus.worker.profile.VideoProfile;
 import yukihane.Util;
 import yukihane.inqubus.Config;
+import yukihane.inqubus.filewatch.FileWatch;
 import yukihane.inqubus.manager.RequestProcess;
 import yukihane.inqubus.manager.TaskKind;
 import yukihane.inqubus.manager.TaskManage;
@@ -99,6 +102,7 @@ public class MainFrame extends JFrame {
             = "ファイル命名規則入力します。";
     private final TargetsTableModel targetModel = new TargetsTableModel();
     private final TaskManage taskManager;
+    private final Thread videoFileWatcher;
 
     /** Creates new form MainFrame */
     public MainFrame() {
@@ -441,10 +445,28 @@ public class MainFrame extends JFrame {
         tblDisplay.setTransferHandler(new TableTransferHandler());
 
         final Config p = Config.INSTANCE;
+
+        // ワーカスレッド生成
         final int thDownload = p.getSystemDownloadThread();
         final int secDownload = p.getSystemDownloadWait();
         final int thConvert = p.getSystemConvertThread();
         taskManager = new TaskManage(thDownload, secDownload,thConvert, new GuiTaskManageListener());
+
+        // TODO ディレクトリ監視スレッド生成
+        final List<String> videoSearchDirs = p.getSearchVideoDirs();
+        videoSearchDirs.add(p.getVideoDir());
+        final FileSystem fs = FileSystems.getDefault();
+        final Set<Path> videoPaths = new HashSet<>(videoSearchDirs.size());
+        for(String s : videoSearchDirs) {
+            videoPaths.add(fs.getPath(s));
+        }
+        final FileWatch videoFileWatch = new FileWatch(videoPaths);
+        this.videoFileWatcher = new Thread(videoFileWatch);
+        this.videoFileWatcher.setDaemon(true);
+    }
+
+    public void startWatcher() {
+        videoFileWatcher.start();
     }
 
     private class GuiTaskManageListener implements TaskManageListener {