|
@@ -1,16 +1,13 @@
|
|
|
package org.cryptomator.ui.preferences;
|
|
|
|
|
|
-import org.apache.commons.lang3.SystemUtils;
|
|
|
import org.cryptomator.common.settings.Settings;
|
|
|
-import org.cryptomator.common.settings.VolumeImpl;
|
|
|
-import org.cryptomator.common.settings.WebDavUrlScheme;
|
|
|
+import org.cryptomator.integrations.mount.MountCapability;
|
|
|
import org.cryptomator.integrations.mount.MountService;
|
|
|
import org.cryptomator.ui.common.FxController;
|
|
|
|
|
|
import javax.inject.Inject;
|
|
|
import javafx.beans.binding.Bindings;
|
|
|
-import javafx.beans.binding.BooleanBinding;
|
|
|
-import javafx.beans.property.SimpleBooleanProperty;
|
|
|
+import javafx.beans.binding.BooleanExpression;
|
|
|
import javafx.beans.value.ObservableValue;
|
|
|
import javafx.scene.control.Button;
|
|
|
import javafx.scene.control.ChoiceBox;
|
|
@@ -25,22 +22,19 @@ import java.util.List;
|
|
|
public class VolumePreferencesController implements FxController {
|
|
|
|
|
|
private final Settings settings;
|
|
|
- private final BooleanBinding showWebDavSettings;
|
|
|
private final ObservableValue<MountService> selectedMountService;
|
|
|
- private final BooleanBinding showWebDavScheme;
|
|
|
+ private final BooleanExpression loopbackPortSupported;
|
|
|
private final List<MountService> mountProviders;
|
|
|
public ChoiceBox<MountService> volumeTypeChoiceBox;
|
|
|
- public TextField webDavPortField;
|
|
|
- public Button changeWebDavPortButton;
|
|
|
- public ChoiceBox<WebDavUrlScheme> webDavUrlSchemeChoiceBox;
|
|
|
+ public TextField loopbackPortField;
|
|
|
+ public Button loopbackPortApplyButton;
|
|
|
|
|
|
@Inject
|
|
|
VolumePreferencesController(Settings settings, List<MountService> mountProviders, ObservableValue<MountService> selectedMountService) {
|
|
|
this.settings = settings;
|
|
|
this.mountProviders = mountProviders;
|
|
|
- this.showWebDavSettings = Bindings.equal(settings.preferredVolumeImpl(), VolumeImpl.WEBDAV);
|
|
|
this.selectedMountService = selectedMountService;
|
|
|
- this.showWebDavScheme = showWebDavSettings.and(new SimpleBooleanProperty(SystemUtils.IS_OS_LINUX)); //TODO: remove SystemUtils
|
|
|
+ this.loopbackPortSupported = BooleanExpression.booleanExpression(selectedMountService.map(s -> s.hasCapability(MountCapability.LOOPBACK_PORT)));
|
|
|
}
|
|
|
|
|
|
public void initialize() {
|
|
@@ -49,18 +43,15 @@ public class VolumePreferencesController implements FxController {
|
|
|
volumeTypeChoiceBox.getSelectionModel().select(selectedMountService.getValue());
|
|
|
volumeTypeChoiceBox.valueProperty().addListener((observableValue, oldProvide, newProvider) -> settings.mountService().set(newProvider.getClass().getName()));
|
|
|
|
|
|
- webDavPortField.setText(String.valueOf(settings.port().get()));
|
|
|
- changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
|
|
|
- changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
|
|
|
+ loopbackPortField.setText(String.valueOf(settings.port().get()));
|
|
|
+ loopbackPortApplyButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(loopbackPortField.textProperty()));
|
|
|
+ loopbackPortApplyButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateLoopbackPort, loopbackPortField.textProperty()).not());
|
|
|
|
|
|
- webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
|
|
|
- webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
|
|
|
- webDavUrlSchemeChoiceBox.setConverter(new WebDavUrlSchemeConverter());
|
|
|
}
|
|
|
|
|
|
- private boolean validateWebDavPort() {
|
|
|
+ private boolean validateLoopbackPort() {
|
|
|
try {
|
|
|
- int port = Integer.parseInt(webDavPortField.getText());
|
|
|
+ int port = Integer.parseInt(loopbackPortField.getText());
|
|
|
return port == 0 // choose port automatically
|
|
|
|| port >= Settings.MIN_PORT && port <= Settings.MAX_PORT; // port within range
|
|
|
} catch (NumberFormatException e) {
|
|
@@ -68,42 +59,23 @@ public class VolumePreferencesController implements FxController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void doChangeWebDavPort() {
|
|
|
- settings.port().set(Integer.parseInt(webDavPortField.getText()));
|
|
|
+ public void doChangeLoopbackPort() {
|
|
|
+ if (validateLoopbackPort()) {
|
|
|
+ settings.port().set(Integer.parseInt(loopbackPortField.getText()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Property Getters */
|
|
|
|
|
|
- public BooleanBinding showWebDavSettingsProperty() {
|
|
|
- return showWebDavSettings;
|
|
|
- }
|
|
|
-
|
|
|
- public Boolean getShowWebDavSettings() {
|
|
|
- return showWebDavSettings.get();
|
|
|
- }
|
|
|
-
|
|
|
- public BooleanBinding showWebDavSchemeProperty() {
|
|
|
- return showWebDavScheme;
|
|
|
+ public BooleanExpression loopbackPortSupportedProperty() {
|
|
|
+ return loopbackPortSupported;
|
|
|
}
|
|
|
|
|
|
- public Boolean getShowWebDavScheme() {
|
|
|
- return showWebDavScheme.get();
|
|
|
+ public boolean isLoopbackPortSupported() {
|
|
|
+ return loopbackPortSupported.get();
|
|
|
}
|
|
|
|
|
|
- /* Helper classes */
|
|
|
-
|
|
|
- private static class WebDavUrlSchemeConverter extends StringConverter<WebDavUrlScheme> {
|
|
|
-
|
|
|
- @Override
|
|
|
- public String toString(WebDavUrlScheme scheme) {
|
|
|
- return scheme.getDisplayName();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public WebDavUrlScheme fromString(String string) {
|
|
|
- throw new UnsupportedOperationException();
|
|
|
- }
|
|
|
- }
|
|
|
+ /* Helpers */
|
|
|
|
|
|
private static class MountServiceConverter extends StringConverter<MountService> {
|
|
|
|
|
@@ -118,4 +90,5 @@ public class VolumePreferencesController implements FxController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|