From 8536353c2676ff0a7d0e72d96dd82a34ec3e4d41 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sat, 7 Dec 2019 11:20:56 +0000 Subject: [PATCH] unshare individual files --- .../java/com/muwire/webui/FileManager.java | 34 +++++++++---------- .../java/com/muwire/webui/FilesServlet.java | 23 ++++++++----- webui/src/main/js/files.js | 28 ++++++++++++--- 3 files changed, 54 insertions(+), 31 deletions(-) diff --git a/webui/src/main/java/com/muwire/webui/FileManager.java b/webui/src/main/java/com/muwire/webui/FileManager.java index 18d1a6c1..d3dba615 100644 --- a/webui/src/main/java/com/muwire/webui/FileManager.java +++ b/webui/src/main/java/com/muwire/webui/FileManager.java @@ -77,25 +77,23 @@ public class FileManager { core.getEventBus().publish(event); } - void unshareDirectory(String filePath) { - File directory = new File(filePath); - if (core.getMuOptions().getWatchedDirectories().contains(directory)) { - DirectoryUnsharedEvent event = new DirectoryUnsharedEvent(); - event.setDirectory(directory); + void unshareFile(File file) { + if (file.isFile()) { + SharedFile sf = core.getFileManager().getFileToSharedFile().get(file); + if (sf == null) + return; + + fileTree.remove(file); + revision++; + FileUnsharedEvent event = new FileUnsharedEvent(); + event.setUnsharedFile(sf); core.getEventBus().publish(event); + } else { + if (core.getMuOptions().getWatchedDirectories().contains(file.getAbsolutePath())) { + DirectoryUnsharedEvent event = new DirectoryUnsharedEvent(); + event.setDirectory(file); + core.getEventBus().publish(event); + } } } - - void unshareFile(String filePath) { - File file = new File(filePath); - SharedFile sf = core.getFileManager().getFileToSharedFile().get(file); - if (sf == null) - return; - - fileTree.remove(file); - revision++; - FileUnsharedEvent event = new FileUnsharedEvent(); - event.setUnsharedFile(sf); - core.getEventBus().publish(event); - } } diff --git a/webui/src/main/java/com/muwire/webui/FilesServlet.java b/webui/src/main/java/com/muwire/webui/FilesServlet.java index b824da18..7ce3574e 100644 --- a/webui/src/main/java/com/muwire/webui/FilesServlet.java +++ b/webui/src/main/java/com/muwire/webui/FilesServlet.java @@ -2,6 +2,9 @@ package com.muwire.webui; import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -102,16 +105,18 @@ public class FilesServlet extends HttpServlet { if (action.equals("share")) { String file = req.getParameter("file"); fileManager.share(file); - } else if (action.equals("unshareFile")) { - String files = req.getParameter("files"); - for (String file : files.split(",")) - fileManager.unshareFile(Base64.decodeToString(file)); - String directories = req.getParameter("directories"); - if (directories != null) { - for (String directory : directories.split(",")) - fileManager.unshareDirectory(Base64.decodeToString(directory)); + resp.sendRedirect("/MuWire/Files.jsp"); + } else if (action.equals("unshare")) { + String pathElements = req.getParameter("path"); + File current = null; + for (String element : pathElements.split(",")) { + element = Base64.decodeToString(element); + if (current == null) + current = new File(element); + else + current = new File(current, element); } + fileManager.unshareFile(current); } - resp.sendRedirect("/MuWire/Files.jsp"); } } diff --git a/webui/src/main/js/files.js b/webui/src/main/js/files.js index c7a0ab49..09e58642 100644 --- a/webui/src/main/js/files.js +++ b/webui/src/main/js/files.js @@ -13,7 +13,7 @@ class Node { updateDiv() { var div = document.getElementById(this.nodeId) if (this.leaf) { - div.innerHTML = "
  • "+this.path+"
  • " + div.innerHTML = "
  • "+this.path+"
    Unshare
  • " } else { if (this.children.length == 0) { div.innerHTML = "
  • " + @@ -215,8 +215,7 @@ function initFiles() { root.updateDiv() } -function expand(nodeId) { - var node = nodesById.get(nodeId) +function encodedPathToRoot(node) { var pathElements = [] var tmpNode = node while(tmpNode.parent != null) { @@ -227,7 +226,12 @@ function expand(nodeId) { while(pathElements.length > 0) reversedPath.push(pathElements.pop()) var encodedPath = reversedPath.join(",") - + return encodedPath +} + +function expand(nodeId) { + var node = nodesById.get(nodeId) + var encodedPath = encodedPathToRoot(node) var xmlhttp = new XMLHttpRequest() xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { @@ -267,4 +271,20 @@ function collapse(nodeId) { var node = nodesById.get(nodeId) node.children = [] node.updateDiv() +} + +function unshare(nodeId) { + var node = nodesById.get(nodeId) + var encodedPath = encodedPathToRoot(node) + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var parent = node.parent + collapse(parent.nodeId) + expand(parent.nodeId) + } + } + xmlhttp.open("POST", "/MuWire/Files", true) + xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xmlhttp.send("action=unshare&path="+encodedPath) } \ No newline at end of file