aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java22
1 files changed, 21 insertions, 1 deletions
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();