diff --git a/main/commons/pom.xml b/main/commons/pom.xml
index 54e711559..a6d00c2db 100644
--- a/main/commons/pom.xml
+++ b/main/commons/pom.xml
@@ -44,7 +44,7 @@
- org.fxmisc.easybind
+ com.tobiasdiez
easybind
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 bac0114da..93e0d3d44 100644
--- a/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java
+++ b/main/commons/src/main/java/org/cryptomator/common/CommonsModule.java
@@ -5,6 +5,7 @@
*******************************************************************************/
package org.cryptomator.common;
+import com.tobiasdiez.easybind.EasyBind;
import dagger.Module;
import dagger.Provides;
import javafx.beans.binding.Binding;
@@ -17,7 +18,6 @@ import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultComponent;
import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.frontend.webdav.WebDavServer;
-import org.fxmisc.easybind.EasyBind;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java
index 13a0c8eed..a440b2bab 100644
--- a/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java
+++ b/main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java
@@ -7,6 +7,7 @@ package org.cryptomator.common.settings;
import com.google.common.base.Strings;
import com.google.common.io.BaseEncoding;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.Observable;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.IntegerProperty;
@@ -17,7 +18,6 @@ import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import org.apache.commons.lang3.StringUtils;
-import org.fxmisc.easybind.EasyBind;
import java.nio.file.Path;
import java.util.Objects;
diff --git a/main/pom.xml b/main/pom.xml
index 0e9dd8a26..e08f71378 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -35,7 +35,7 @@
3.11
1.1.0
3.10.3
- 1.0.3
+ 2.1.0
29.0-jre
2.22
2.8.6
@@ -178,7 +178,7 @@
- org.fxmisc.easybind
+ com.tobiasdiez
easybind
${easybind.version}
diff --git a/main/ui/pom.xml b/main/ui/pom.xml
index c27fbb1aa..0991215cc 100644
--- a/main/ui/pom.xml
+++ b/main/ui/pom.xml
@@ -35,7 +35,7 @@
- org.fxmisc.easybind
+ com.tobiasdiez
easybind
diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java
index 5b4549db1..c1f224529 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java
@@ -1,5 +1,6 @@
package org.cryptomator.ui.addvaultwizard;
+import com.tobiasdiez.easybind.EasyBind;
import dagger.Lazy;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
@@ -83,11 +84,11 @@ public class CreateNewVaultLocationController implements FxController {
public void initialize() {
predefinedLocationToggler.selectedToggleProperty().addListener(this::togglePredefinedLocation);
usePresetPath.bind(predefinedLocationToggler.selectedToggleProperty().isNotEqualTo(customRadioButton));
- vaultPath.addListener(this::vaultPathDidChange);
+ EasyBind.subscribe(vaultPath, this::vaultPathDidChange);
}
- private void vaultPathDidChange(@SuppressWarnings("unused") ObservableValue extends Path> observable, @SuppressWarnings("unused") Path oldValue, Path newValue) {
- if (!Files.notExists(newValue)) {
+ private void vaultPathDidChange(Path newValue) {
+ if ( newValue != null && !Files.notExists(newValue)) {
warningText.set(resourceBundle.getString("addvaultwizard.new.fileAlreadyExists"));
} else {
warningText.set(null);
diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java
index 2c2f3885a..87152f7b5 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java
@@ -32,7 +32,6 @@ import javax.inject.Named;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.channels.WritableByteChannel;
-import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/NewPasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/common/NewPasswordController.java
index 19e33f7c3..310a2379d 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/common/NewPasswordController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/common/NewPasswordController.java
@@ -1,5 +1,6 @@
package org.cryptomator.ui.common;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
@@ -10,7 +11,6 @@ import javafx.fxml.FXML;
import javafx.scene.control.Label;
import org.cryptomator.ui.controls.FontAwesome5IconView;
import org.cryptomator.ui.controls.NiceSecurePasswordField;
-import org.fxmisc.easybind.EasyBind;
import java.util.ResourceBundle;
diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/DraggableListCell.java b/main/ui/src/main/java/org/cryptomator/ui/controls/DraggableListCell.java
index 62f87c1f4..ca78bcac6 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/controls/DraggableListCell.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/controls/DraggableListCell.java
@@ -8,6 +8,7 @@
*******************************************************************************/
package org.cryptomator.ui.controls;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.SnapshotParameters;
@@ -18,7 +19,6 @@ import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
-import org.fxmisc.easybind.EasyBind;
import java.util.List;
diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/PasswordStrengthIndicator.java b/main/ui/src/main/java/org/cryptomator/ui/controls/PasswordStrengthIndicator.java
index a1619968b..156da3b0b 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/controls/PasswordStrengthIndicator.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/controls/PasswordStrengthIndicator.java
@@ -1,12 +1,12 @@
package org.cryptomator.ui.controls;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
-import org.fxmisc.easybind.EasyBind;
public class PasswordStrengthIndicator extends HBox {
diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java
index 4d80a3451..e862b8045 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java
@@ -1,5 +1,6 @@
package org.cryptomator.ui.fxapp;
+import com.tobiasdiez.easybind.EasyBind;
import dagger.Lazy;
import javafx.application.Application;
import javafx.application.Platform;
@@ -64,7 +65,7 @@ public class FxApplication extends Application {
LOG.trace("FxApplication.start()");
Platform.setImplicitExit(false);
- hasVisibleStages.addListener(this::hasVisibleStagesChanged);
+ EasyBind.subscribe(hasVisibleStages, this::hasVisibleStagesChanged);
settings.theme().addListener(this::themeChanged);
loadSelectedStyleSheet(settings.theme().get());
@@ -75,7 +76,7 @@ public class FxApplication extends Application {
throw new UnsupportedOperationException("Use start() instead.");
}
- private void hasVisibleStagesChanged(@SuppressWarnings("unused") ObservableValue extends Boolean> observableValue, @SuppressWarnings("unused") boolean oldValue, boolean newValue) {
+ private void hasVisibleStagesChanged(boolean newValue) {
if (newValue) {
macFunctions.map(MacFunctions::uiState).ifPresent(MacApplicationUiState::transformToForegroundApplication);
} else {
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 36a746039..e384a67bc 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
@@ -1,5 +1,6 @@
package org.cryptomator.ui.mainwindow;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.Binding;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.ObjectProperty;
@@ -10,7 +11,6 @@ import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.cryptomator.ui.fxapp.FxApplication;
-import org.fxmisc.easybind.EasyBind;
import javax.inject.Inject;
@@ -26,17 +26,23 @@ public class VaultDetailController implements FxController {
VaultDetailController(ObjectProperty vault, FxApplication application) {
this.vault = vault;
this.application = application;
- this.glyph = EasyBind.select(vault).selectObject(Vault::stateProperty).map(this::getGlyphForVaultState).orElse(FontAwesome5Icon.EXCLAMATION_TRIANGLE);
+ this.glyph = EasyBind.select(vault) //
+ .selectObject(Vault::stateProperty) //
+ .map(this::getGlyphForVaultState);
this.anyVaultSelected = vault.isNotNull();
}
private FontAwesome5Icon getGlyphForVaultState(VaultState state) {
- return switch (state) {
- case LOCKED -> FontAwesome5Icon.LOCK;
- case PROCESSING -> FontAwesome5Icon.SPINNER;
- case UNLOCKED -> FontAwesome5Icon.LOCK_OPEN;
- case NEEDS_MIGRATION, MISSING, ERROR -> FontAwesome5Icon.EXCLAMATION_TRIANGLE;
- };
+ if (state != null) {
+ return switch (state) {
+ case LOCKED -> FontAwesome5Icon.LOCK;
+ case PROCESSING -> FontAwesome5Icon.SPINNER;
+ case UNLOCKED -> FontAwesome5Icon.LOCK_OPEN;
+ case NEEDS_MIGRATION, MISSING, ERROR -> FontAwesome5Icon.EXCLAMATION_TRIANGLE;
+ };
+ } else {
+ return FontAwesome5Icon.EXCLAMATION_TRIANGLE;
+ }
}
@FXML
diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java
index 55720521b..f615d51ca 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java
@@ -1,5 +1,6 @@
package org.cryptomator.ui.mainwindow;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.BooleanExpression;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
@@ -11,7 +12,6 @@ import org.cryptomator.keychain.KeychainManager;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.fxapp.FxApplication;
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
-import org.fxmisc.easybind.EasyBind;
import javax.inject.Inject;
import java.util.Optional;
diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java
index 4c23ba4ae..b975174f8 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java
@@ -1,10 +1,10 @@
package org.cryptomator.ui.mainwindow;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.Binding;
import javafx.beans.property.ObjectProperty;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.FxController;
-import org.fxmisc.easybind.EasyBind;
import javax.inject.Inject;
import java.io.ByteArrayOutputStream;
@@ -18,14 +18,20 @@ public class VaultDetailUnknownErrorController implements FxController {
@Inject
public VaultDetailUnknownErrorController(ObjectProperty vault) {
- this.stackTrace = EasyBind.select(vault).selectObject(Vault::lastKnownExceptionProperty).map(this::provideStackTrace).orElse("");
+ this.stackTrace = EasyBind.select(vault) //
+ .selectObject(Vault::lastKnownExceptionProperty) //
+ .map(this::provideStackTrace);
}
private String provideStackTrace(Throwable cause) {
// TODO deduplicate ErrorModule.java
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- cause.printStackTrace(new PrintStream(baos));
- return baos.toString(StandardCharsets.UTF_8);
+ if (cause != null) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ cause.printStackTrace(new PrintStream(baos));
+ return baos.toString(StandardCharsets.UTF_8);
+ } else {
+ return "";
+ }
}
/* Getter/Setter */
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 6703ec674..999afaaf1 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
@@ -1,5 +1,6 @@
package org.cryptomator.ui.mainwindow;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.Binding;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
@@ -7,7 +8,6 @@ import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.controls.FontAwesome5Icon;
-import org.fxmisc.easybind.EasyBind;
import javax.inject.Inject;
@@ -19,16 +19,22 @@ public class VaultListCellController implements FxController {
@Inject
VaultListCellController() {
- this.glyph = EasyBind.select(vault).selectObject(Vault::stateProperty).map(this::getGlyphForVaultState).orElse(FontAwesome5Icon.EXCLAMATION_TRIANGLE);
+ this.glyph = EasyBind.select(vault) //
+ .selectObject(Vault::stateProperty) //
+ .map(this::getGlyphForVaultState);
}
private FontAwesome5Icon getGlyphForVaultState(VaultState state) {
- return switch (state) {
- case LOCKED -> FontAwesome5Icon.LOCK;
- case PROCESSING -> FontAwesome5Icon.SPINNER;
- case UNLOCKED -> FontAwesome5Icon.LOCK_OPEN;
- case NEEDS_MIGRATION, MISSING, ERROR -> FontAwesome5Icon.EXCLAMATION_TRIANGLE;
- };
+ if(state != null){
+ return switch (state) {
+ case LOCKED -> FontAwesome5Icon.LOCK;
+ case PROCESSING -> FontAwesome5Icon.SPINNER;
+ case UNLOCKED -> FontAwesome5Icon.LOCK_OPEN;
+ case NEEDS_MIGRATION, MISSING, ERROR -> FontAwesome5Icon.EXCLAMATION_TRIANGLE;
+ };
+ } else {
+ return FontAwesome5Icon.EXCLAMATION_TRIANGLE;
+ }
}
/* Getter/Setter */
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 c0a6c7720..d1aecb19f 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
@@ -1,16 +1,15 @@
package org.cryptomator.ui.mainwindow;
+import com.tobiasdiez.easybind.EasyBind;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.ObjectProperty;
-import javafx.beans.value.ObservableValue;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultListManager;
-import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.removevault.RemoveVaultComponent;
@@ -18,7 +17,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
-import java.io.IOException;
@MainWindowScoped
public class VaultListController implements FxController {
@@ -43,7 +41,7 @@ public class VaultListController implements FxController {
this.removeVault = removeVault;
this.noVaultSelected = selectedVault.isNull();
this.emptyVaultList = Bindings.isEmpty(vaults);
- selectedVault.addListener(this::selectedVaultDidChange);
+ EasyBind.subscribe(selectedVault, this::selectedVaultDidChange);
}
public void initialize() {
@@ -60,11 +58,10 @@ public class VaultListController implements FxController {
});
}
- private void selectedVaultDidChange(@SuppressWarnings("unused") ObservableValue extends Vault> observableValue, @SuppressWarnings("unused") Vault oldValue, Vault newValue) {
- if (newValue == null) {
- return;
+ private void selectedVaultDidChange(Vault newValue) {
+ if (newValue != null) {
+ VaultListManager.redetermineVaultState(newValue);
}
- VaultListManager.redetermineVaultState(newValue);
}
@FXML
diff --git a/main/ui/src/main/resources/license/THIRD-PARTY.txt b/main/ui/src/main/resources/license/THIRD-PARTY.txt
index 58a034c81..4fb29473b 100644
--- a/main/ui/src/main/resources/license/THIRD-PARTY.txt
+++ b/main/ui/src/main/resources/license/THIRD-PARTY.txt
@@ -84,7 +84,7 @@ Cryptomator uses 52 third-party dependencies under the following licenses:
- Checker Qual (org.checkerframework:checker-qual:2.11.1 - https://checkerframework.org)
- SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - http://www.slf4j.org)
The BSD 2-Clause License:
- - EasyBind (org.fxmisc.easybind:easybind:1.0.3 - http://www.fxmisc.org/easybind/)
+ - EasyBind (com.tobiasdiez:easybind:2.1.0 - https://github.com/tobiasdiez/EasyBind)
Cryptomator uses other third-party assets under the following licenses:
SIL OFL 1.1 License: