be more careful in recursive file observer. limit depth

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/utils/ConversationsFileObserver.java | 22 
1 file changed, 21 insertions(+), 1 deletion(-)

Detailed changes

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();