diff --git a/core/src/main/groovy/com/muwire/core/Core.groovy b/core/src/main/groovy/com/muwire/core/Core.groovy index de2351d7..36c6e260 100644 --- a/core/src/main/groovy/com/muwire/core/Core.groovy +++ b/core/src/main/groovy/com/muwire/core/Core.groovy @@ -472,7 +472,7 @@ public class Core { eventBus.register(AllFilesLoadedEvent.class, watchedDirectoryConverter) log.info("initializing watched directory manager") - watchedDirectoryManager = new WatchedDirectoryManager(home, eventBus, fileManager) + watchedDirectoryManager = new WatchedDirectoryManager(home, eventBus, fileManager, props) eventBus.with { register(WatchedDirectoryConfigurationEvent.class, watchedDirectoryManager) register(WatchedDirectoryConvertedEvent.class, watchedDirectoryManager) @@ -490,7 +490,8 @@ public class Core { } log.info("initializing directory watcher") - directoryWatcher = new DirectoryWatcher(eventBus, fileManager, home, watchedDirectoryManager, negativeFiles) + directoryWatcher = new DirectoryWatcher(eventBus, fileManager, home, + watchedDirectoryManager, negativeFiles, props) eventBus.with { register(DirectoryWatchedEvent.class, directoryWatcher) register(WatchedDirectoryConvertedEvent.class, directoryWatcher) diff --git a/core/src/main/groovy/com/muwire/core/files/DirectoryWatcher.groovy b/core/src/main/groovy/com/muwire/core/files/DirectoryWatcher.groovy index f6ba849e..f9e06c29 100644 --- a/core/src/main/groovy/com/muwire/core/files/DirectoryWatcher.groovy +++ b/core/src/main/groovy/com/muwire/core/files/DirectoryWatcher.groovy @@ -37,6 +37,7 @@ class DirectoryWatcher { private final File home private final EventBus eventBus + private final MuWireSettings settings private final FileManager fileManager private final WatchedDirectoryManager watchedDirectoryManager private final NegativeFiles negativeFiles @@ -47,9 +48,11 @@ class DirectoryWatcher { private volatile boolean shutdown DirectoryWatcher(EventBus eventBus, FileManager fileManager, File home, - WatchedDirectoryManager watchedDirectoryManager, NegativeFiles negativeFiles) { + WatchedDirectoryManager watchedDirectoryManager, NegativeFiles negativeFiles, + MuWireSettings settings) { this.home = home this.eventBus = eventBus + this.settings = settings this.fileManager = fileManager this.watchedDirectoryManager = watchedDirectoryManager this.negativeFiles = negativeFiles @@ -122,7 +125,9 @@ class DirectoryWatcher { private void processCreated(Path parent, Path path) { - File f= join(parent, path) + File f = join(parent, path) + if (!settings.shareHiddenFiles && f.isHidden()) + return log.fine("created entry $f") if (f.isDirectory()) eventBus.publish(new FileSharedEvent(file : f, fromWatch : true)) @@ -133,6 +138,8 @@ class DirectoryWatcher { private void processModified(Path parent, Path path) { File f = join(parent, path) log.fine("modified entry $f") + if (!settings.shareHiddenFiles && f.isHidden()) + return if (!negativeFiles.negativeTree.get(f)) waitingFiles.put(f, System.currentTimeMillis()) } diff --git a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy index b9cf6a0d..ce1c1d75 100644 --- a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy +++ b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy @@ -1,5 +1,7 @@ package com.muwire.core.files.directories +import com.muwire.core.MuWireSettings + import java.nio.file.Files import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ExecutorService @@ -24,6 +26,7 @@ import groovy.util.logging.Log class WatchedDirectoryManager { private final File home + private final MuWireSettings settings private final EventBus eventBus private final FileManager fileManager @@ -39,11 +42,12 @@ class WatchedDirectoryManager { private boolean converting = true - WatchedDirectoryManager(File home, EventBus eventBus, FileManager fileManager) { + WatchedDirectoryManager(File home, EventBus eventBus, FileManager fileManager, MuWireSettings settings) { this.home = new File(home, "directories") this.home.mkdir() this.eventBus = eventBus this.fileManager = fileManager + this.settings = settings } public boolean isWatched(File f) { @@ -96,13 +100,15 @@ class WatchedDirectoryManager { forEach { def parsed = slurper.parse(it.toFile()) WatchedDirectory wd = WatchedDirectory.fromJson(parsed) - if (wd.directory.exists() && wd.directory.isDirectory()) // check if directory disappeared + if (wd.directory.exists() && wd.directory.isDirectory() && // check if directory disappeared or hidden + (settings.shareHiddenFiles || !wd.directory.isHidden())) watchedDirs.put(wd.directory, wd) else it.toFile().delete() } - watchedDirs.values().stream().filter({it.autoWatch}).forEach { + watchedDirs.values().stream().filter({it.autoWatch}). + forEach { eventBus.publish(new DirectoryWatchedEvent(directory : it.directory)) eventBus.publish(new FileSharedEvent(file : it.directory)) } @@ -123,6 +129,8 @@ class WatchedDirectoryManager { void onFileSharedEvent(FileSharedEvent e) { if (e.file.isFile() || watchedDirs.containsKey(e.file)) return + if (!settings.shareHiddenFiles && e.file.isHidden()) + return def wd = new WatchedDirectory(e.file) if (e.fromWatch) { @@ -137,9 +145,10 @@ class WatchedDirectoryManager { } else wd.autoWatch = true + watchedDirs.put(wd.directory, wd) persist(wd) - if (wd.autoWatch) + if (wd.autoWatch) eventBus.publish(new DirectoryWatchedEvent(directory: wd.directory)) }