diff --git a/src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java b/src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java index e6993bfe..ab4dead8 100644 --- a/src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java +++ b/src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java @@ -37,7 +37,10 @@ public abstract class ConversationsFileObserver { } for(File file : files) { if (file.isDirectory() && !file.getName().equals(".") && !file.getName().equals("..")) { - stack.push(file.getPath()); + final String currentPath = file.getAbsolutePath(); + if (depth(file) <= 8 && !stack.contains(currentPath) && !observing(currentPath)) { + stack.push(currentPath); + } } } } @@ -46,6 +49,23 @@ public abstract class ConversationsFileObserver { } } + private static int depth(File file) { + int depth = 0; + while((file = file.getParentFile()) != null) { + depth++; + } + return depth; + } + + private boolean observing(String path) { + for(SingleFileObserver observer : mObservers) { + if(path.equals(observer.path)) { + return true; + } + } + return false; + } + public synchronized void stopWatching() { for(FileObserver observer : mObservers) { observer.stopWatching();