diff --git a/main/commons/pom.xml b/main/commons/pom.xml index ebb78e73f..f76e413c0 100644 --- a/main/commons/pom.xml +++ b/main/commons/pom.xml @@ -11,28 +11,49 @@ Shared utilities + + org.cryptomator + cryptofs + + + org.cryptomator + fuse-nio-adapter + + + org.cryptomator + dokany-nio-adapter + + + org.cryptomator + webdav-nio-adapter + + org.openjfx javafx-base - + + + org.fxmisc.easybind + easybind + + + com.google.guava guava - - org.apache.commons - commons-lang3 - com.google.code.gson gson + + - org.fxmisc.easybind - easybind + org.apache.commons + commons-lang3 diff --git a/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java b/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java index b878d0d0d..2c2235802 100644 --- a/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java +++ b/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java @@ -5,22 +5,87 @@ *******************************************************************************/ package org.cryptomator.common; -import java.util.Comparator; +import dagger.Binds; +import dagger.Module; +import dagger.Provides; +import javafx.beans.binding.Binding; +import javafx.beans.binding.Bindings; +import javafx.collections.ObservableList; +import org.apache.commons.lang3.SystemUtils; +import org.cryptomator.common.settings.Settings; +import org.cryptomator.common.settings.SettingsProvider; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultComponent; +import org.cryptomator.common.vaults.VaultList; +import org.cryptomator.frontend.webdav.WebDavServer; +import org.fxmisc.easybind.EasyBind; import javax.inject.Named; import javax.inject.Singleton; +import java.net.InetSocketAddress; +import java.util.Comparator; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; -import dagger.Module; -import dagger.Provides; +@Module(subcomponents = {VaultComponent.class}) +public abstract class CommonsModule { -@Module -public class CommonsModule { + private static final int NUM_SCHEDULER_THREADS = 4; @Provides @Singleton @Named("SemVer") - Comparator providesSemVerComparator() { + static Comparator providesSemVerComparator() { return new SemVerComparator(); } + @Provides + @Singleton + static Settings provideSettings(SettingsProvider settingsProvider) { + return settingsProvider.get(); + } + + @Binds + @Singleton + abstract ObservableList bindVaultList(VaultList vaultList); + + @Provides + @Singleton + static ScheduledExecutorService provideScheduledExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { + final AtomicInteger threadNumber = new AtomicInteger(1); + ScheduledExecutorService executorService = Executors.newScheduledThreadPool(NUM_SCHEDULER_THREADS, r -> { + Thread t = new Thread(r); + t.setName("Background Thread " + threadNumber.getAndIncrement()); + t.setDaemon(true); + return t; + }); + shutdownTaskScheduler.accept(executorService::shutdown); + return executorService; + } + + @Binds + @Singleton + abstract ExecutorService bindExecutorService(ScheduledExecutorService executor); + + @Provides + @Singleton + static Binding provideServerSocketAddressBinding(Settings settings) { + return Bindings.createObjectBinding(() -> { + String host = SystemUtils.IS_OS_WINDOWS ? "127.0.0.1" : "localhost"; + return InetSocketAddress.createUnresolved(host, settings.port().intValue()); + }, settings.port()); + } + + @Provides + @Singleton + static WebDavServer provideWebDavServer(Binding serverSocketAddressBinding) { + WebDavServer server = WebDavServer.create(); + // no need to unsubscribe eventually, because server is a singleton + EasyBind.subscribe(serverSocketAddressBinding, server::bind); + return server; + } + } diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/SettingsProvider.java b/main/commons/src/main/java/org/cryptomator/common/settings/SettingsProvider.java index 0aae9a541..9d3510dac 100644 --- a/main/commons/src/main/java/org/cryptomator/common/settings/SettingsProvider.java +++ b/main/commons/src/main/java/org/cryptomator/common/settings/SettingsProvider.java @@ -17,7 +17,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import javax.inject.Provider; import javax.inject.Singleton; import java.io.IOException; import java.io.InputStream; @@ -38,10 +37,11 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Supplier; import java.util.stream.Stream; @Singleton -public class SettingsProvider implements Provider { +public class SettingsProvider implements Supplier { private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class); private static final long SAVE_DELAY_MS = 1000; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/DefaultMountFlags.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java similarity index 86% rename from main/ui/src/main/java/org/cryptomator/ui/model/DefaultMountFlags.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java index 50943a34f..ea2cdfa0a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/DefaultMountFlags.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import javax.inject.Qualifier; import java.lang.annotation.Documented; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java similarity index 98% rename from main/ui/src/main/java/org/cryptomator/ui/model/DokanyVolume.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java index 4efab0f07..87009dcf7 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/DokanyVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import com.google.common.base.Strings; import org.cryptomator.common.settings.VaultSettings; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/FuseVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java similarity index 99% rename from main/ui/src/main/java/org/cryptomator/ui/model/FuseVolume.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java index b740dfcbd..e5330a1ad 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/FuseVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import com.google.common.base.Splitter; import org.apache.commons.lang3.SystemUtils; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/PerVault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/PerVault.java similarity index 85% rename from main/ui/src/main/java/org/cryptomator/ui/model/PerVault.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/PerVault.java index 3172beec0..dab895b37 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/PerVault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/PerVault.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import javax.inject.Scope; import java.lang.annotation.Documented; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java similarity index 93% rename from main/ui/src/main/java/org/cryptomator/ui/model/Vault.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java index 06a42fcb3..9d6a4e145 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -6,10 +6,9 @@ * Contributors: * Sebastian Stenzel - initial API and implementation *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import com.google.common.base.Strings; -import javafx.application.Platform; import javafx.beans.Observable; import javafx.beans.binding.Binding; import javafx.beans.binding.Bindings; @@ -118,27 +117,15 @@ public class Vault { } public synchronized void unlock(CharSequence passphrase) throws CryptoException, IOException, Volume.VolumeException { - Platform.runLater(() -> state.set(State.PROCESSING)); - try { - if (vaultSettings.usesIndividualMountPath().get() && Strings.isNullOrEmpty(vaultSettings.individualMountPath().get())) { - throw new NotDirectoryException(""); - } - CryptoFileSystem fs = getCryptoFileSystem(passphrase); - volume = volumeProvider.get(); - volume.mount(fs, getMountFlags()); - Platform.runLater(() -> { - state.set(State.UNLOCKED); - }); - } catch (Exception e) { - Platform.runLater(() -> state.set(State.LOCKED)); - throw e; + if (vaultSettings.usesIndividualMountPath().get() && Strings.isNullOrEmpty(vaultSettings.individualMountPath().get())) { + throw new NotDirectoryException(""); } + CryptoFileSystem fs = getCryptoFileSystem(passphrase); + volume = volumeProvider.get(); + volume.mount(fs, getMountFlags()); } public synchronized void lock(boolean forced) throws Volume.VolumeException { - Platform.runLater(() -> { - state.set(State.PROCESSING); - }); if (forced && volume.supportsForcedUnmount()) { volume.unmountForced(); } else { @@ -152,9 +139,6 @@ public class Vault { LOG.error("Error closing file system.", e); } } - Platform.runLater(() -> { - state.set(State.LOCKED); - }); } /** @@ -190,13 +174,17 @@ public class Vault { // Observable Properties // ******************************************************************************* - public ReadOnlyObjectProperty stateProperty() { + public ObjectProperty stateProperty() { return state; } public State getState() { return state.get(); } + + public void setState(State value) { + state.setValue(value); + } public BooleanBinding lockedProperty() { return locked; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultComponent.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultComponent.java similarity index 94% rename from main/ui/src/main/java/org/cryptomator/ui/model/VaultComponent.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/VaultComponent.java index bca3dab63..763d6bb43 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultComponent.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultComponent.java @@ -3,7 +3,7 @@ * All rights reserved. This program and the accompanying materials * are made available under the terms of the accompanying LICENSE file. *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import dagger.BindsInstance; import org.cryptomator.common.settings.VaultSettings; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultFactory.java similarity index 96% rename from main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/VaultFactory.java index c01ede518..584cdd8f8 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultFactory.java @@ -6,7 +6,7 @@ * Contributors: * Sebastian Stenzel - initial API and implementation *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import org.cryptomator.common.settings.VaultSettings; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultList.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultList.java similarity index 98% rename from main/ui/src/main/java/org/cryptomator/ui/model/VaultList.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/VaultList.java index ee5fdd1b0..9386d9dc4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultList.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultList.java @@ -3,7 +3,7 @@ * All rights reserved. This program and the accompanying materials * are made available under the terms of the accompanying LICENSE file. *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import com.google.common.collect.Lists; import javafx.collections.ListChangeListener; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultModule.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultModule.java similarity index 99% rename from main/ui/src/main/java/org/cryptomator/ui/model/VaultModule.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/VaultModule.java index fdab20bec..b3d7a4497 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultModule.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultModule.java @@ -3,7 +3,7 @@ * All rights reserved. This program and the accompanying materials * are made available under the terms of the accompanying LICENSE file. *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import dagger.Module; import dagger.Provides; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/Volume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java similarity index 97% rename from main/ui/src/main/java/org/cryptomator/ui/model/Volume.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java index dc1aae0cd..6b36d6d45 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/Volume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import org.cryptomator.common.settings.VolumeImpl; import org.cryptomator.cryptofs.CryptoFileSystem; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/WebDavVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java similarity index 98% rename from main/ui/src/main/java/org/cryptomator/ui/model/WebDavVolume.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java index c46ff0ffb..ee682c9f2 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/WebDavVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import org.cryptomator.common.settings.Settings; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/WindowsDriveLetters.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java similarity index 95% rename from main/ui/src/main/java/org/cryptomator/ui/model/WindowsDriveLetters.java rename to main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java index 055c3f513..5d644ee7b 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/WindowsDriveLetters.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java @@ -3,10 +3,9 @@ * All rights reserved. This program and the accompanying materials * are made available under the terms of the accompanying LICENSE file. *******************************************************************************/ -package org.cryptomator.ui.model; +package org.cryptomator.common.vaults; import org.apache.commons.lang3.SystemUtils; -import org.cryptomator.ui.fxapp.FxApplicationScoped; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorModule.java b/main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorModule.java index 63bb66f44..4965f01d9 100644 --- a/main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorModule.java +++ b/main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorModule.java @@ -4,9 +4,7 @@ import dagger.Module; import dagger.Provides; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.SettingsProvider; -import org.cryptomator.ui.UiModule; import org.cryptomator.ui.model.AppLaunchEvent; -import org.cryptomator.ui.model.VaultComponent; import org.cryptomator.ui.traymenu.TrayMenuComponent; import javax.inject.Named; @@ -17,7 +15,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; -@Module(includes = {UiModule.class}, subcomponents = {VaultComponent.class, TrayMenuComponent.class}) +@Module(subcomponents = {TrayMenuComponent.class}) class CryptomatorModule { @Provides @@ -34,12 +32,6 @@ class CryptomatorModule { return new CountDownLatch(1); } - @Provides - @Singleton - static Settings provideSettings(SettingsProvider settingsProvider) { - return settingsProvider.get(); - } - @Provides @Singleton @Named("launchEventQueue") diff --git a/main/ui/pom.xml b/main/ui/pom.xml index bf8e89ce1..43ea42672 100644 --- a/main/ui/pom.xml +++ b/main/ui/pom.xml @@ -18,29 +18,10 @@ org.cryptomator commons - - - org.cryptomator - cryptofs - org.cryptomator jni - - org.cryptomator - fuse-nio-adapter - - - org.cryptomator - dokany-nio-adapter - - - org.cryptomator - webdav-nio-adapter - - - org.cryptomator cryptolib @@ -76,7 +57,7 @@ gson - + commons-io commons-io diff --git a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java deleted file mode 100644 index 7c0ba398f..000000000 --- a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016, 2017 Sebastian Stenzel and others. - * All rights reserved. - * This program and the accompanying materials are made available under the terms of the accompanying LICENSE file. - * - * Contributors: - * Sebastian Stenzel - initial API and implementation - *******************************************************************************/ -package org.cryptomator.ui; - -import dagger.Binds; -import dagger.Module; -import dagger.Provides; -import javafx.beans.binding.Binding; -import javafx.beans.binding.Bindings; -import javafx.collections.ObservableList; -import org.apache.commons.lang3.SystemUtils; -import org.cryptomator.common.settings.Settings; -import org.cryptomator.frontend.webdav.WebDavServer; -import org.cryptomator.keychain.KeychainModule; -import org.cryptomator.ui.fxapp.FxApplicationScoped; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.VaultList; -import org.fxmisc.easybind.EasyBind; - -import javax.inject.Named; -import javax.inject.Singleton; -import java.net.InetSocketAddress; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Consumer; - -// TODO move to common... -@Deprecated(forRemoval = true, since = "1.5.0") -@Module(includes = {KeychainModule.class}) -public abstract class UiModule { - - private static final int NUM_SCHEDULER_THREADS = 4; - - @Binds - @Singleton - abstract ObservableList bindVaultList(VaultList vaultList); - - @Provides - @Singleton - static ScheduledExecutorService provideScheduledExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { - final AtomicInteger threadNumber = new AtomicInteger(1); - ScheduledExecutorService executorService = Executors.newScheduledThreadPool(NUM_SCHEDULER_THREADS, r -> { - Thread t = new Thread(r); - t.setName("Scheduler Thread " + threadNumber.getAndIncrement()); - t.setDaemon(true); - return t; - }); - shutdownTaskScheduler.accept(executorService::shutdown); - return executorService; - } - - // TODO @Binds abstract ExecutorService bindExecutorService(ScheduledExecutorService executor); ? - @Provides - @Singleton - static ExecutorService provideExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { - final AtomicInteger threadNumber = new AtomicInteger(1); - ExecutorService executorService = Executors.newCachedThreadPool(r -> { - Thread t = new Thread(r); - t.setName("Background Thread " + threadNumber.getAndIncrement()); - t.setDaemon(true); - return t; - }); - shutdownTaskScheduler.accept(executorService::shutdown); - return executorService; - } - - @Provides - @Singleton - static Binding provideServerSocketAddressBinding(Settings settings) { - return Bindings.createObjectBinding(() -> { - String host = SystemUtils.IS_OS_WINDOWS ? "127.0.0.1" : "localhost"; - return InetSocketAddress.createUnresolved(host, settings.port().intValue()); - }, settings.port()); - } - - @Provides - @Singleton - static WebDavServer provideWebDavServer(Binding serverSocketAddressBinding) { - WebDavServer server = WebDavServer.create(); - // no need to unsubscribe eventually, because server is a singleton - EasyBind.subscribe(serverSocketAddressBinding, server::bind); - return server; - } - -} diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java index 7455e27fa..f2fac0c1f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java @@ -13,8 +13,8 @@ import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.VaultFactory; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultFactory; import javax.inject.Inject; import java.io.File; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java index c72dda3dd..62ba46424 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java @@ -27,7 +27,7 @@ import org.cryptomator.cryptolib.api.InvalidPassphraseException; import org.cryptomator.cryptolib.api.UnsupportedVaultFormatException; import org.cryptomator.ui.controls.SecPasswordField; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.util.PasswordStrengthUtil; import org.fxmisc.easybind.EasyBind; import org.slf4j.Logger; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java index 44ddcecd1..5a78d4f39 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java @@ -22,7 +22,7 @@ import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; import org.cryptomator.ui.controls.SecPasswordField; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.util.PasswordStrengthUtil; import org.fxmisc.easybind.EasyBind; import org.slf4j.Logger; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java index 8304e13ab..c401bffc4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java @@ -51,9 +51,9 @@ import org.cryptomator.ui.controls.DirectoryListCell; import org.cryptomator.ui.l10n.Localization; import org.cryptomator.ui.model.AppLaunchEvent; import org.cryptomator.ui.model.AutoUnlocker; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.VaultFactory; -import org.cryptomator.ui.model.VaultList; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultFactory; +import org.cryptomator.common.vaults.VaultList; import org.cryptomator.ui.model.upgrade.UpgradeStrategies; import org.cryptomator.ui.model.upgrade.UpgradeStrategy; import org.cryptomator.ui.util.DialogBuilderUtil; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/SettingsController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/SettingsController.java index e78fef3c8..f609a3c98 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/SettingsController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/SettingsController.java @@ -28,7 +28,7 @@ import org.cryptomator.ui.fxapp.FxApplicationScoped; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VolumeImpl; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Volume; +import org.cryptomator.common.vaults.Volume; import javax.inject.Inject; import javax.inject.Named; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java index c5cf5e7f5..272dd408a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java @@ -42,8 +42,8 @@ import org.cryptomator.cryptolib.api.UnsupportedVaultFormatException; import org.cryptomator.keychain.KeychainAccess; import org.cryptomator.ui.controls.SecPasswordField; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.WindowsDriveLetters; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.WindowsDriveLetters; import org.cryptomator.ui.util.DialogBuilderUtil; import org.cryptomator.ui.common.Tasks; import org.fxmisc.easybind.EasyBind; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockedController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockedController.java index 090fd26aa..27361f093 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockedController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockedController.java @@ -31,7 +31,7 @@ import javafx.scene.layout.VBox; import javafx.stage.PopupWindow.AnchorLocation; import javafx.util.Duration; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.util.DialogBuilderUtil; import org.cryptomator.ui.common.Tasks; import org.fxmisc.easybind.EasyBind; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java index 8cbfc95c6..dea8608f5 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java @@ -25,7 +25,7 @@ import org.cryptomator.ui.controls.SecPasswordField; import org.cryptomator.ui.model.upgrade.UpgradeStrategies; import org.cryptomator.ui.model.upgrade.UpgradeStrategy; import org.cryptomator.ui.model.upgrade.UpgradeStrategy.UpgradeFailedException; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.Tasks; import org.fxmisc.easybind.EasyBind; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java b/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java index 8f7249a16..51c5cc766 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controls/DirectoryListCell.java @@ -8,7 +8,7 @@ *******************************************************************************/ package org.cryptomator.ui.controls; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.fxmisc.easybind.EasyBind; import javafx.beans.binding.ObjectExpression; diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java index e98e41a6b..1509aaf59 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java @@ -6,22 +6,19 @@ package org.cryptomator.ui.fxapp; import dagger.Binds; -import dagger.Lazy; import dagger.Module; import dagger.Provides; import javafx.application.Application; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; -import javafx.collections.ObservableList; -import org.cryptomator.ui.UiModule; +import org.cryptomator.keychain.KeychainModule; import org.cryptomator.ui.mainwindow.MainWindowComponent; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.VaultList; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.preferences.PreferencesComponent; import java.util.ResourceBundle; -@Module(subcomponents = {MainWindowComponent.class, PreferencesComponent.class}) +@Module(includes = {KeychainModule.class}, subcomponents = {MainWindowComponent.class, PreferencesComponent.class}) abstract class FxApplicationModule { @Binds diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java index e5e539f12..3cf8bee64 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java @@ -5,7 +5,7 @@ import javafx.beans.property.ReadOnlyObjectProperty; import javafx.fxml.FXML; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.Tasks; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.unlock.UnlockComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,11 +44,14 @@ public class VaultDetailController implements FxController { @FXML public void lock() { + vault.get().setState(Vault.State.PROCESSING); Tasks.create(() -> { vault.get().lock(false); }).onSuccess(() -> { LOG.trace("Regular unmount succeeded."); + vault.get().setState(Vault.State.LOCKED); }).onError(Exception.class, e -> { + vault.get().setState(Vault.State.UNLOCKED); // TODO }).runOnce(executor); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java index 90c4e297f..c590d61ce 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java @@ -4,7 +4,7 @@ import javafx.beans.binding.Binding; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.fxmisc.easybind.EasyBind; import javax.inject.Inject; diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellFactory.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellFactory.java index 000417da9..96b63bc32 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellFactory.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellFactory.java @@ -8,7 +8,7 @@ import javafx.scene.control.ListView; import javafx.util.Callback; import org.cryptomator.ui.common.FXMLLoaderFactory; import org.cryptomator.ui.controls.DraggableListCell; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import javax.inject.Inject; import java.io.IOException; diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java index 6715d811c..9c624df21 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -7,7 +7,7 @@ import javafx.scene.control.ListView; import javafx.scene.layout.AnchorPane; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/AutoUnlocker.java b/main/ui/src/main/java/org/cryptomator/ui/model/AutoUnlocker.java index b9dafc6c0..160dec689 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/AutoUnlocker.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/AutoUnlocker.java @@ -5,6 +5,9 @@ *******************************************************************************/ package org.cryptomator.ui.model; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultList; +import org.cryptomator.common.vaults.Volume; import org.cryptomator.ui.fxapp.FxApplicationScoped; import org.cryptomator.cryptolib.api.CryptoException; import org.cryptomator.keychain.KeychainAccess; @@ -21,6 +24,7 @@ import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; +@Deprecated(forRemoval = true, since = "1.5.0") @FxApplicationScoped public class AutoUnlocker { diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategies.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategies.java index fdf106aee..5b03777f8 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategies.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategies.java @@ -6,7 +6,7 @@ package org.cryptomator.ui.model.upgrade; import org.cryptomator.ui.fxapp.FxApplicationScoped; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import javax.inject.Inject; import java.util.Arrays; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategy.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategy.java index 14c0a7109..26e4d1b04 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategy.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeStrategy.java @@ -19,7 +19,7 @@ import org.cryptomator.cryptolib.api.InvalidPassphraseException; import org.cryptomator.cryptolib.api.KeyFile; import org.cryptomator.cryptolib.api.UnsupportedVaultFormatException; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3DropBundleExtension.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3DropBundleExtension.java index 3c703ba42..5f60ffc6e 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3DropBundleExtension.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3DropBundleExtension.java @@ -11,7 +11,7 @@ import org.cryptomator.ui.fxapp.FxApplicationScoped; import org.cryptomator.cryptolib.Cryptors; import org.cryptomator.cryptolib.api.Cryptor; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4.java index 49ce1fca2..e0f3b02e6 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4.java @@ -12,7 +12,7 @@ import org.cryptomator.cryptolib.Cryptors; import org.cryptomator.cryptolib.api.Cryptor; import org.cryptomator.cryptolib.common.MessageDigestSupplier; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion4to5.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion4to5.java index f8eef5884..a1706dd8e 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion4to5.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion4to5.java @@ -10,7 +10,7 @@ import org.cryptomator.cryptolib.Cryptors; import org.cryptomator.cryptolib.api.Cryptor; import org.cryptomator.cryptolib.api.FileHeader; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion5toX.java b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion5toX.java index fabf1b9f6..9c78d91ad 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion5toX.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/upgrade/UpgradeVersion5toX.java @@ -12,7 +12,7 @@ import org.cryptomator.cryptolib.Cryptors; import org.cryptomator.cryptolib.api.Cryptor; import org.cryptomator.cryptolib.api.InvalidPassphraseException; import org.cryptomator.ui.l10n.Localization; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesController.java b/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesController.java index 5614c25bd..df5ab2749 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesController.java @@ -12,7 +12,7 @@ import org.cryptomator.common.settings.UiTheme; import org.cryptomator.common.settings.VolumeImpl; import org.cryptomator.common.settings.WebDavUrlScheme; import org.cryptomator.ui.common.FxController; -import org.cryptomator.ui.model.Volume; +import org.cryptomator.common.vaults.Volume; import javax.inject.Inject; diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java index 4970bbdde..3402ea97f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java @@ -3,7 +3,7 @@ package org.cryptomator.ui.traymenu; import javafx.beans.Observable; import javafx.collections.ObservableList; import org.cryptomator.common.settings.Settings; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import javax.inject.Inject; import javax.inject.Named; diff --git a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockComponent.java b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockComponent.java index 52e1a0c46..81ce7b4c5 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockComponent.java +++ b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockComponent.java @@ -10,10 +10,9 @@ import dagger.Lazy; import dagger.Subcomponent; import javafx.scene.Scene; import javafx.stage.Stage; -import org.cryptomator.ui.common.FXMLLoaderFactory; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; @UnlockScoped @Subcomponent(modules = {UnlockModule.class}) diff --git a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java index 434daf09d..8d6ec7fb3 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockController.java @@ -15,7 +15,7 @@ import org.cryptomator.keychain.KeychainAccess; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.Tasks; import org.cryptomator.ui.controls.SecPasswordField; -import org.cryptomator.ui.model.Vault; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.util.DialogBuilderUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,12 +69,14 @@ public class UnlockController implements FxController { @FXML public void unlock() { CharSequence password = passwordField.getCharacters(); + vault.setState(Vault.State.PROCESSING); Tasks.create(() -> { vault.unlock(password); if (keychainAccess.isPresent() && savePassword.isSelected()) { keychainAccess.get().storePassphrase(vault.getId(), password); } }).onSuccess(() -> { + vault.setState(Vault.State.UNLOCKED); passwordField.swipe(); LOG.info("Unlock of '{}' succeeded.", vault.getDisplayableName()); window.close(); @@ -92,6 +94,10 @@ public class UnlockController implements FxController { }).onError(Exception.class, e -> { // including RuntimeExceptions LOG.error("Unlock failed for technical reasons.", e); // TODO + }).andFinally(() -> { + if (!vault.isUnlocked()) { + vault.setState(Vault.State.LOCKED); + } }).runOnce(executor); } diff --git a/main/ui/src/test/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4Test.java b/main/ui/src/test/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4Test.java index 9ea352462..de41a0985 100644 --- a/main/ui/src/test/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4Test.java +++ b/main/ui/src/test/java/org/cryptomator/ui/model/upgrade/UpgradeVersion3to4Test.java @@ -4,10 +4,8 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; import org.cryptomator.ui.l10n.Localization; import org.cryptomator.ui.l10n.LocalizationMock; -import org.cryptomator.ui.model.Vault; -import org.cryptomator.ui.model.upgrade.UpgradeStrategy; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.model.upgrade.UpgradeStrategy.UpgradeFailedException; -import org.cryptomator.ui.model.upgrade.UpgradeVersion3to4; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach;