mirror of https://github.com/zlatinb/muwire
add a positive tree so that deleting of shared directories can be detected
parent
83bdf76c08
commit
bd9315954a
|
@ -4,8 +4,9 @@ import com.muwire.core.Event
|
||||||
|
|
||||||
class DirectoryUnsharedEvent extends Event {
|
class DirectoryUnsharedEvent extends Event {
|
||||||
File directory
|
File directory
|
||||||
|
boolean deleted
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
super.toString() + " unshared directory "+ directory.toString()
|
super.toString() + " unshared directory "+ directory.toString() + " deleted $deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,10 @@ class DirectoryWatcher {
|
||||||
SharedFile sf = fileManager.fileToSharedFile.get(f)
|
SharedFile sf = fileManager.fileToSharedFile.get(f)
|
||||||
if (sf != null)
|
if (sf != null)
|
||||||
eventBus.publish(new FileUnsharedEvent(unsharedFile : sf, deleted : true))
|
eventBus.publish(new FileUnsharedEvent(unsharedFile : sf, deleted : true))
|
||||||
|
else if (muOptions.watchedDirectories.contains(f.toString()))
|
||||||
|
eventBus.publish(new DirectoryUnsharedEvent(directory : f, deleted : true))
|
||||||
|
else
|
||||||
|
log.fine("Entry was not relevant");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static File join(Path parent, Path path) {
|
private static File join(Path parent, Path path) {
|
||||||
|
|
|
@ -28,6 +28,7 @@ class FileManager {
|
||||||
final Map<String, Set<File>> commentToFile = new HashMap<>()
|
final Map<String, Set<File>> commentToFile = new HashMap<>()
|
||||||
final SearchIndex index = new SearchIndex()
|
final SearchIndex index = new SearchIndex()
|
||||||
final FileTree<Void> negativeTree = new FileTree<>()
|
final FileTree<Void> negativeTree = new FileTree<>()
|
||||||
|
final FileTree<SharedFile> positiveTree = new FileTree<>()
|
||||||
final Set<File> sideCarFiles = new HashSet<>()
|
final Set<File> sideCarFiles = new HashSet<>()
|
||||||
|
|
||||||
FileManager(EventBus eventBus, MuWireSettings settings) {
|
FileManager(EventBus eventBus, MuWireSettings settings) {
|
||||||
|
@ -87,6 +88,7 @@ class FileManager {
|
||||||
}
|
}
|
||||||
existing.add(sf)
|
existing.add(sf)
|
||||||
fileToSharedFile.put(sf.file, sf)
|
fileToSharedFile.put(sf.file, sf)
|
||||||
|
positiveTree.add(sf.file, sf);
|
||||||
|
|
||||||
negativeTree.remove(sf.file)
|
negativeTree.remove(sf.file)
|
||||||
String parent = sf.getFile().getParent()
|
String parent = sf.getFile().getParent()
|
||||||
|
@ -130,6 +132,7 @@ class FileManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
fileToSharedFile.remove(sf.file)
|
fileToSharedFile.remove(sf.file)
|
||||||
|
positiveTree.remove(sf.file)
|
||||||
if (!e.deleted && negativeTree.fileToNode.containsKey(sf.file.getParentFile())) {
|
if (!e.deleted && negativeTree.fileToNode.containsKey(sf.file.getParentFile())) {
|
||||||
negativeTree.add(sf.file,null)
|
negativeTree.add(sf.file,null)
|
||||||
saveNegativeTree()
|
saveNegativeTree()
|
||||||
|
@ -246,6 +249,7 @@ class FileManager {
|
||||||
void onDirectoryUnsharedEvent(DirectoryUnsharedEvent e) {
|
void onDirectoryUnsharedEvent(DirectoryUnsharedEvent e) {
|
||||||
negativeTree.remove(e.directory)
|
negativeTree.remove(e.directory)
|
||||||
saveNegativeTree()
|
saveNegativeTree()
|
||||||
|
if (!e.deleted) {
|
||||||
e.directory.listFiles().each {
|
e.directory.listFiles().each {
|
||||||
if (it.isDirectory())
|
if (it.isDirectory())
|
||||||
eventBus.publish(new DirectoryUnsharedEvent(directory : it))
|
eventBus.publish(new DirectoryUnsharedEvent(directory : it))
|
||||||
|
@ -255,6 +259,17 @@ class FileManager {
|
||||||
eventBus.publish(new FileUnsharedEvent(unsharedFile : sf))
|
eventBus.publish(new FileUnsharedEvent(unsharedFile : sf))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
def cb = new DirDeletionCallback()
|
||||||
|
positiveTree.traverse(e.directory, cb)
|
||||||
|
positiveTree.remove(e.directory)
|
||||||
|
cb.unsharedFiles.each {
|
||||||
|
eventBus.publish(new FileUnsharedEvent(unsharedFile : it, deleted: true))
|
||||||
|
}
|
||||||
|
cb.subDirs.each {
|
||||||
|
eventBus.publish(new DirectoryUnsharedEvent(directory : it, deleted : true))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveNegativeTree() {
|
private void saveNegativeTree() {
|
||||||
|
@ -270,4 +285,25 @@ class FileManager {
|
||||||
collect(Collectors.toList())
|
collect(Collectors.toList())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class DirDeletionCallback implements FileTreeCallback<SharedFile> {
|
||||||
|
|
||||||
|
final List<File> subDirs = new ArrayList<>()
|
||||||
|
final List<SharedFile> unsharedFiles = new ArrayList<>()
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDirectoryEnter(File file) {
|
||||||
|
subDirs.add(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDirectoryLeave() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFile(File file, SharedFile value) {
|
||||||
|
unsharedFiles << value
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue