From 1b4117de3861fbc8140c5960743136402dbf0582 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 7 Nov 2022 16:16:10 +0100 Subject: [PATCH] =?UTF-8?q?volume=20settings=20=E2=86=92=20change=20tcp=20?= =?UTF-8?q?port?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cryptomator/common/settings/Settings.java | 14 ---- .../common/settings/SettingsJsonAdapter.java | 11 --- .../common/settings/WebDavUrlScheme.java | 22 ------ .../VolumePreferencesController.java | 69 ++++++------------- .../resources/fxml/preferences_volume.fxml | 13 ++-- src/main/resources/i18n/strings.properties | 3 +- .../settings/SettingsJsonAdapterTest.java | 3 - .../common/settings/SettingsTest.java | 2 +- 8 files changed, 27 insertions(+), 110 deletions(-) delete mode 100644 src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java diff --git a/src/main/java/org/cryptomator/common/settings/Settings.java b/src/main/java/org/cryptomator/common/settings/Settings.java index 176e2c37a..46aed5ea0 100644 --- a/src/main/java/org/cryptomator/common/settings/Settings.java +++ b/src/main/java/org/cryptomator/common/settings/Settings.java @@ -36,9 +36,7 @@ public class Settings { public static final boolean DEFAULT_USE_KEYCHAIN = true; public static final int DEFAULT_PORT = 42427; public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3; - public static final WebDavUrlScheme DEFAULT_GVFS_SCHEME = WebDavUrlScheme.DAV; public static final boolean DEFAULT_DEBUG_MODE = false; - public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = VolumeImpl.FUSE; public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT; @Deprecated // to be changed to "whatever is available" eventually public static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess"; @@ -57,9 +55,7 @@ public class Settings { private final BooleanProperty useKeychain = new SimpleBooleanProperty(DEFAULT_USE_KEYCHAIN); private final IntegerProperty port = new SimpleIntegerProperty(DEFAULT_PORT); private final IntegerProperty numTrayNotifications = new SimpleIntegerProperty(DEFAULT_NUM_TRAY_NOTIFICATIONS); - private final ObjectProperty preferredGvfsScheme = new SimpleObjectProperty<>(DEFAULT_GVFS_SCHEME); private final BooleanProperty debugMode = new SimpleBooleanProperty(DEFAULT_DEBUG_MODE); - private final ObjectProperty preferredVolumeImpl = new SimpleObjectProperty<>(DEFAULT_PREFERRED_VOLUME_IMPL); private final ObjectProperty theme = new SimpleObjectProperty<>(DEFAULT_THEME); private final ObjectProperty keychainProvider = new SimpleObjectProperty<>(DEFAULT_KEYCHAIN_PROVIDER); private final ObjectProperty userInterfaceOrientation = new SimpleObjectProperty<>(DEFAULT_USER_INTERFACE_ORIENTATION); @@ -93,9 +89,7 @@ public class Settings { useKeychain.addListener(this::somethingChanged); port.addListener(this::somethingChanged); numTrayNotifications.addListener(this::somethingChanged); - preferredGvfsScheme.addListener(this::somethingChanged); debugMode.addListener(this::somethingChanged); - preferredVolumeImpl.addListener(this::somethingChanged); theme.addListener(this::somethingChanged); keychainProvider.addListener(this::somethingChanged); userInterfaceOrientation.addListener(this::somethingChanged); @@ -157,18 +151,10 @@ public class Settings { return numTrayNotifications; } - public ObjectProperty preferredGvfsScheme() { - return preferredGvfsScheme; - } - public BooleanProperty debugMode() { return debugMode; } - public ObjectProperty preferredVolumeImpl() { - return preferredVolumeImpl; - } - public StringProperty mountService() { return mountService; } diff --git a/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java b/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java index 5496d0671..91299bb2a 100644 --- a/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java +++ b/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java @@ -44,7 +44,6 @@ public class SettingsJsonAdapter extends TypeAdapter { out.name("autoCloseVaults").value(value.autoCloseVaults().get()); out.name("port").value(value.port().get()); out.name("numTrayNotifications").value(value.numTrayNotifications().get()); - out.name("preferredGvfsScheme").value(value.preferredGvfsScheme().get().name()); out.name("debugMode").value(value.debugMode().get()); out.name("theme").value(value.theme().get().name()); out.name("uiOrientation").value(value.userInterfaceOrientation().get().name()); @@ -86,7 +85,6 @@ public class SettingsJsonAdapter extends TypeAdapter { case "autoCloseVaults" -> settings.autoCloseVaults().set(in.nextBoolean()); case "port" -> settings.port().set(in.nextInt()); case "numTrayNotifications" -> settings.numTrayNotifications().set(in.nextInt()); - case "preferredGvfsScheme" -> settings.preferredGvfsScheme().set(parseWebDavUrlSchemePrefix(in.nextString())); case "debugMode" -> settings.debugMode().set(in.nextBoolean()); case "theme" -> settings.theme().set(parseUiTheme(in.nextString())); case "uiOrientation" -> settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString())); @@ -119,15 +117,6 @@ public class SettingsJsonAdapter extends TypeAdapter { return settings; } - private WebDavUrlScheme parseWebDavUrlSchemePrefix(String webDavUrlSchemeName) { - try { - return WebDavUrlScheme.valueOf(webDavUrlSchemeName.toUpperCase()); - } catch (IllegalArgumentException e) { - LOG.warn("Invalid WebDAV url scheme {}. Defaulting to {}.", webDavUrlSchemeName, Settings.DEFAULT_GVFS_SCHEME); - return Settings.DEFAULT_GVFS_SCHEME; - } - } - private UiTheme parseUiTheme(String uiThemeName) { try { return UiTheme.valueOf(uiThemeName.toUpperCase()); diff --git a/src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java b/src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java deleted file mode 100644 index a72d11968..000000000 --- a/src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.cryptomator.common.settings; - -public enum WebDavUrlScheme { - DAV("dav", "dav:// (Gnome, Nautilus, ...)"), - WEBDAV("webdav", "webdav:// (KDE, Dolphin, ...)"); - - private final String prefix; - private final String displayName; - - WebDavUrlScheme(String prefix, String displayName) { - this.prefix = prefix; - this.displayName = displayName; - } - - public String getPrefix() { - return prefix; - } - - public String getDisplayName() { - return displayName; - } -} diff --git a/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java index c8affd58f..ac4903d11 100644 --- a/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java @@ -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 selectedMountService; - private final BooleanBinding showWebDavScheme; + private final BooleanExpression loopbackPortSupported; private final List mountProviders; public ChoiceBox volumeTypeChoiceBox; - public TextField webDavPortField; - public Button changeWebDavPortButton; - public ChoiceBox webDavUrlSchemeChoiceBox; + public TextField loopbackPortField; + public Button loopbackPortApplyButton; @Inject VolumePreferencesController(Settings settings, List mountProviders, ObservableValue 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 BooleanExpression loopbackPortSupportedProperty() { + return loopbackPortSupported; } - public Boolean getShowWebDavSettings() { - return showWebDavSettings.get(); + public boolean isLoopbackPortSupported() { + return loopbackPortSupported.get(); } - public BooleanBinding showWebDavSchemeProperty() { - return showWebDavScheme; - } - - public Boolean getShowWebDavScheme() { - return showWebDavScheme.get(); - } - - /* Helper classes */ - - private static class WebDavUrlSchemeConverter extends StringConverter { - - @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 { @@ -118,4 +90,5 @@ public class VolumePreferencesController implements FxController { } } + } diff --git a/src/main/resources/fxml/preferences_volume.fxml b/src/main/resources/fxml/preferences_volume.fxml index 2c88cf5de..ec2f9db7b 100644 --- a/src/main/resources/fxml/preferences_volume.fxml +++ b/src/main/resources/fxml/preferences_volume.fxml @@ -20,15 +20,10 @@ - -