diff --git a/webui/src/main/java/com/muwire/webui/FileManager.java b/webui/src/main/java/com/muwire/webui/FileManager.java index 30ec10f4..47faa0ee 100644 --- a/webui/src/main/java/com/muwire/webui/FileManager.java +++ b/webui/src/main/java/com/muwire/webui/FileManager.java @@ -1,22 +1,32 @@ package com.muwire.webui; import java.io.File; +import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.muwire.core.Core; +import com.muwire.core.InfoHash; import com.muwire.core.SharedFile; +import com.muwire.core.files.DirectoryUnsharedEvent; import com.muwire.core.files.FileDownloadedEvent; import com.muwire.core.files.FileHashedEvent; +import com.muwire.core.files.FileHashingEvent; 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.FileUnsharedEvent; + +import net.i2p.data.Base64; public class FileManager { private final Core core; private final FileTree fileTree = new FileTree<>(); + private volatile String hashingFile; + public FileManager(Core core) { this.core = core; } @@ -26,9 +36,14 @@ public class FileManager { } public void onFileHashedEvent(FileHashedEvent e) { + hashingFile = null; fileTree.add(e.getSharedFile().getFile(), e.getSharedFile()); } + public void onFileHashingEvent(FileHashingEvent e) { + hashingFile = e.getHashingFile().getPath(); + } + public void onFileDownloadedEvent(FileDownloadedEvent e) { if (core.getMuOptions().getShareDownloadedFiles()) fileTree.add(e.getDownloadedFile().getFile(), e.getDownloadedFile()); @@ -37,4 +52,40 @@ public class FileManager { void list(File parent, FileListCallback callback) { fileTree.list(parent, callback); } + + String getHashingFile() { + return hashingFile; + } + + int numSharedFiles() { + return core.getFileManager().getFileToSharedFile().size(); + } + + void share(String filePath) { + File file = new File(filePath); + FileSharedEvent event = new FileSharedEvent(); + event.setFile(file); + 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); + 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); + 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 2be735d8..89cf358b 100644 --- a/webui/src/main/java/com/muwire/webui/FilesServlet.java +++ b/webui/src/main/java/com/muwire/webui/FilesServlet.java @@ -21,25 +21,35 @@ public class FilesServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String section = req.getParameter("section"); StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append(""); - ListCallback cb = new ListCallback(sb); - String encodedPath = req.getParameter("path"); - File current = null; - if (encodedPath != null) { - String[] split = encodedPath.split(","); - for (String element : split) { - element = Base64.decodeToString(element); - if (current == null) { - current = new File(element); - continue; + if (section.equals("status")) { + sb.append(""); + sb.append("").append(fileManager.numSharedFiles()).append(""); + String hashingFile = fileManager.getHashingFile(); + if (hashingFile != null) + sb.append("").append(Util.escapeHTMLinXML(hashingFile)).append(""); + sb.append(""); + } else if (section.equals("files")) { + sb.append(""); + ListCallback cb = new ListCallback(sb); + String encodedPath = req.getParameter("path"); + File current = null; + if (encodedPath != null) { + String[] split = encodedPath.split(","); + for (String element : split) { + element = Base64.decodeToString(element); + if (current == null) { + current = new File(element); + continue; + } + current = new File(current, element); } - current = new File(current, element); } + fileManager.list(current, cb); + sb.append(""); } - fileManager.list(current, cb); - sb.append(""); resp.setContentType("text/xml"); resp.setCharacterEncoding("UTF-8"); resp.setDateHeader("Expires", 0); @@ -72,4 +82,24 @@ public class FilesServlet extends HttpServlet { sb.append("").append(Util.escapeHTMLinXML(f.getName())).append(""); } } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String action = req.getParameter("action"); + if (action.equals("share")) { + String file = Base64.decodeToString(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)); + } + } + } + + } diff --git a/webui/src/main/java/com/muwire/webui/MuWireClient.java b/webui/src/main/java/com/muwire/webui/MuWireClient.java index 293f7f88..609ef54c 100644 --- a/webui/src/main/java/com/muwire/webui/MuWireClient.java +++ b/webui/src/main/java/com/muwire/webui/MuWireClient.java @@ -23,6 +23,7 @@ import com.muwire.core.connection.DisconnectionEvent; import com.muwire.core.download.DownloadStartedEvent; import com.muwire.core.files.FileDownloadedEvent; import com.muwire.core.files.FileHashedEvent; +import com.muwire.core.files.FileHashingEvent; import com.muwire.core.files.FileLoadedEvent; import com.muwire.core.search.UIResultBatchEvent; @@ -129,6 +130,7 @@ public class MuWireClient { core.getEventBus().register(FileLoadedEvent.class, fileManager); core.getEventBus().register(FileHashedEvent.class, fileManager); core.getEventBus().register(FileDownloadedEvent.class, fileManager); + core.getEventBus().register(FileHashingEvent.class, fileManager); servletContext.setAttribute("searchManager", searchManager); servletContext.setAttribute("downloadManager", downloadManager); diff --git a/webui/src/main/webapp/Files.jsp b/webui/src/main/webapp/Files.jsp index 330515f8..dba7c6e6 100644 --- a/webui/src/main/webapp/Files.jsp +++ b/webui/src/main/webapp/Files.jsp @@ -19,10 +19,5 @@ -
- - - -
\ No newline at end of file