diff --git a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy index 67beea02..58ecba89 100644 --- a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy +++ b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryManager.groovy @@ -50,7 +50,7 @@ class WatchedDirectoryManager { watchedDirs.containsKey(f) } - public Stream getWatchedDirs() { + public Stream getWatchedDirsStream() { watchedDirs.values().stream() } diff --git a/webui/src/main/java/com/muwire/webui/AdvancedSharingServlet.java b/webui/src/main/java/com/muwire/webui/AdvancedSharingServlet.java index 55a6e36c..b1d47d5b 100644 --- a/webui/src/main/java/com/muwire/webui/AdvancedSharingServlet.java +++ b/webui/src/main/java/com/muwire/webui/AdvancedSharingServlet.java @@ -37,7 +37,7 @@ public class AdvancedSharingServlet extends HttpServlet { if (section.equals("revision")) { sb.append("").append(advancedSharingManager.getRevision()).append(""); } else if (section.equals("dirs")) { - List dirs = core.getWatchedDirectoryManager().getWatchedDirs(). + List dirs = core.getWatchedDirectoryManager().getWatchedDirsStream(). map(WrappedDir::new). collect(Collectors.toList()); DIR_COMPARATORS.sort(dirs, req); diff --git a/webui/src/main/js/advancedSharing.js b/webui/src/main/js/advancedSharing.js index 4baf5345..3e4989ea 100644 --- a/webui/src/main/js/advancedSharing.js +++ b/webui/src/main/js/advancedSharing.js @@ -1,3 +1,83 @@ -function initAdvancedSharing() { +class Directory { + constructor(xmlNode) { + this.directory = xmlNode.getElementsByTagName("Directory")[0].childNodes[0].nodeValue + this.autoWatch = xmlNode.getElementsByTagName("AutoWatch")[0].childNodes[0].nodeValue + this.syncInterval = xmlNode.getElementsByTagName("SyncInterval")[0].childNodes[0].nodeValue + this.lastSync = xmlNode.getElementsByTagName("LastSync")[0].childNodes[0].nodeValue + } -} \ No newline at end of file + getMapping() { + var mapping = new Map() + + mapping.set("Directory", this.directory) + mapping.set("Auto Watch", this.autoWatch) + mapping.set("Last Sync", this.lastSync) + mapping.set("Sync Interval", this.syncInterval) + + return mapping + } +} + +function initAdvancedSharing() { + setInterval(fetchRevision, 3000) + setTimeout(fetchRevision, 1) +} + +function fetchRevision() { + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var newRevision = parseInt(this.responseXML.getElementsByTagName("Revision")[0].childNodes[0].nodeValue) + if (newRevision > revision) { + revision = newRevision + refreshDirs() + } + } + } + xmlhttp.open("GET", "/MuWire/AdvancedShare?section=revision", true) + xmlhttp.send() +} + +function refreshDirs() { + var xmlhttp = new XMLHttpRequest() + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + var listOfDirs = [] + var dirNodes = this.responseXML.getElementsByTagName("WatchedDir") + var i + for (i = 0; i < dirNodes.length; i ++) { + listOfDirs.push(new Directory(dirNodes[i])) + } + + var newOrder + if (sortOrder == "descending") + newOrder = "ascending" + else if (sortOrder == "ascending") + newOrder = "descending" + var table = new Table(["Directory", "Auto Watch", "Sync Interval", "Last Sync"], "sortDirs", sortKey, newOrder, null) + + for (i = 0; i < listOfDirs.length; i++) { + table.addRow(listOfDirs[i].getMapping()) + } + + var dirsDiv = document.getElementById("dirsTable") + if (listOfDirs.length > 0) + dirsDiv.innerHTML = table.render() + else + dirsDiv.innerHTML = "" + } + } + xmlhttp.open("GET", "/MuWire/AdvancedShare?section=dirs", true) + xmlhttp.send() +} + +function sortDirs(key, order) { + sortKey = key + sortOrder = order + refreshDirs() +} + +var revision = -1 + +var sortKey = "Directory" +var sortOrder = "descending" \ No newline at end of file