diff --git a/core/src/main/groovy/com/muwire/core/files/FileTree.groovy b/core/src/main/groovy/com/muwire/core/files/FileTree.groovy index 88c756ba..cc6b0db5 100644 --- a/core/src/main/groovy/com/muwire/core/files/FileTree.groovy +++ b/core/src/main/groovy/com/muwire/core/files/FileTree.groovy @@ -49,9 +49,15 @@ class FileTree { synchronized void traverse(FileTreeCallback callback) { doTraverse(root, callback); } - + + synchronized void traverse(File from, FileTreeCallback callback) { + TreeNode node = fileToNode.get(from); + if (node == null) + return + doTraverse(node, callback); + } + private void doTraverse(TreeNode node, FileTreeCallback callback) { - println "traversing $node" boolean leave = false if (node.file != null) { println "file is $node.file" diff --git a/webui/src/main/java/com/muwire/webui/FileManager.java b/webui/src/main/java/com/muwire/webui/FileManager.java index d3dba615..6e8ecbf7 100644 --- a/webui/src/main/java/com/muwire/webui/FileManager.java +++ b/webui/src/main/java/com/muwire/webui/FileManager.java @@ -1,8 +1,10 @@ package com.muwire.webui; import java.io.File; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import com.muwire.core.Core; @@ -16,6 +18,7 @@ import com.muwire.core.files.FileListCallback; import com.muwire.core.files.FileLoadedEvent; import com.muwire.core.files.FileSharedEvent; import com.muwire.core.files.FileTree; +import com.muwire.core.files.FileTreeCallback; import com.muwire.core.files.FileUnsharedEvent; import net.i2p.data.Base64; @@ -89,6 +92,19 @@ public class FileManager { event.setUnsharedFile(sf); core.getEventBus().publish(event); } else { + + TraverseCallback cb = new TraverseCallback(); + fileTree.traverse(file, cb); + + fileTree.remove(file); + revision++; + + for (SharedFile found : cb.found) { + FileUnsharedEvent e = new FileUnsharedEvent(); + e.setUnsharedFile(found); + core.getEventBus().publish(e); + } + if (core.getMuOptions().getWatchedDirectories().contains(file.getAbsolutePath())) { DirectoryUnsharedEvent event = new DirectoryUnsharedEvent(); event.setDirectory(file); @@ -96,4 +112,21 @@ public class FileManager { } } } + + private static class TraverseCallback implements FileTreeCallback { + private final List found = new ArrayList<>(); + + @Override + public void onDirectoryEnter(File file) { + } + + @Override + public void onDirectoryLeave() { + } + + @Override + public void onFile(File file, SharedFile value) { + found.add(value); + } + } } diff --git a/webui/src/main/js/files.js b/webui/src/main/js/files.js index 09e58642..243d925b 100644 --- a/webui/src/main/js/files.js +++ b/webui/src/main/js/files.js @@ -12,14 +12,15 @@ class Node { updateDiv() { var div = document.getElementById(this.nodeId) + var unshareLink = "Unshare" if (this.leaf) { - div.innerHTML = "
  • "+this.path+"
    Unshare
  • " + div.innerHTML = "
  • "+this.path+"
    "+ unshareLink + "
  • " } else { if (this.children.length == 0) { div.innerHTML = "
  • " + - this.path + "
  • " + this.path + " " + unshareLink + "" } else { - var l = "
  • "+this.path+"
      " + var l = "
    • "+this.path+" " + unshareLink + "
        " var i for (i = 0; i < this.children.length; i++) { l += "
      • "