From 244ce4379423940ff6996cf39e3da072f71f6d6f Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Thu, 26 Mar 2020 05:31:39 +0000 Subject: [PATCH] persistence of WatchedDirectory object --- .../files/directories/WatchedDirectory.groovy | 30 ++++++++++++++++++- .../WatchedDirectoryConfigurationEvent.groovy | 4 ++- .../WatchedDirectoryConverter.groovy | 3 +- .../WatchedDirectoryManager.groovy | 12 ++++++-- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectory.groovy b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectory.groovy index e9a3b867..2303f07e 100644 --- a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectory.groovy +++ b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectory.groovy @@ -1,9 +1,37 @@ package com.muwire.core.files.directories +import com.muwire.core.util.DataUtil + +import net.i2p.data.Base64 class WatchedDirectory { - File directory + final File directory + final String encodedName boolean autoWatch int syncInterval long lastSync + + WatchedDirectory(File directory) { + this.directory = directory.getCanonicalFile() + this.encodedName = Base64.encode(DataUtil.encodei18nString(directory.getAbsolutePath())) + } + + def toJson() { + def rv = [:] + rv.directory = encodedName + rv.autoWatch = autoWatch + rv.syncInterval = syncInterval + rv.lastSync = lastSync + rv + } + + static WatchedDirectory fromJson(def json) { + String dirName = DataUtil.readi18nString(Base64.decode(json.directory)) + File dir = new File(dirName) + def rv = new WatchedDirectory(dir) + rv.autoWatch = json.autoWatch + rv.syncInterval = json.syncInterval + rv.lastSync = json.lastSync + rv + } } diff --git a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConfigurationEvent.groovy b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConfigurationEvent.groovy index 34d0a4f0..3cf34c15 100644 --- a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConfigurationEvent.groovy +++ b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConfigurationEvent.groovy @@ -3,5 +3,7 @@ package com.muwire.core.files.directories import com.muwire.core.Event class WatchedDirectoryConfigurationEvent extends Event { - WatchedDirectory directory + File directory + boolean autoWatch + int syncInterval } diff --git a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConverter.groovy b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConverter.groovy index ffd69268..4a507a19 100644 --- a/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConverter.groovy +++ b/core/src/main/groovy/com/muwire/core/files/directories/WatchedDirectoryConverter.groovy @@ -18,8 +18,7 @@ class WatchedDirectoryConverter { core.getMuOptions().getWatchedDirectories().each { File directory = new File(it) directory = directory.getCanonicalFile() - WatchedDirectory watched = new WatchedDirectory(directory : directory, autoWatch : true) - core.eventBus.publish(new WatchedDirectoryConfigurationEvent(directory : watched)) + core.eventBus.publish(new WatchedDirectoryConfigurationEvent(directory : directory, autoWatch: true)) } core.getMuOptions().getWatchedDirectories().clear() core.saveMuSettings() 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 135be384..7db3ca09 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 @@ -13,7 +13,6 @@ class WatchedDirectoryManager { private final EventBus eventBus private final FileManager fileManager - private final ExecutorService diskIO = Executors.newSingleThreadExecutor({r -> Thread t = new Thread(r, "disk-io") t.setDaemon(true) @@ -22,8 +21,10 @@ class WatchedDirectoryManager { private final Timer timer = new Timer("directory-timer", true) + private boolean converting = true + WatchedDirectoryManager(File home, EventBus eventBus, FileManager fileManager) { - this.home = home + this.home = new File(home, "directories") this.eventBus = eventBus this.fileManager = fileManager } @@ -34,10 +35,15 @@ class WatchedDirectoryManager { } void onWatchedDirectoryConfigurationEvent(WatchedDirectoryConfigurationEvent e) { - // persist + if (!converting) { + // update state + } + + // always persist } void onWatchedDirectoryConvertedEvent(WatchedDirectoryConvertedEvent e) { + converting = false // load } }