Browse Source

store custom mount flags in settings.json as string instead of string array

Sebastian Stenzel 5 năm trước cách đây
mục cha
commit
ed9adab9b4

+ 4 - 4
main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java

@@ -35,7 +35,7 @@ public class VaultSettings {
 	public static final boolean DEFAULT_REAVEAL_AFTER_MOUNT = true;
 	public static final boolean DEFAULT_USES_INDIVIDUAL_MOUNTPATH = false;
 	public static final boolean DEFAULT_USES_READONLY_MODE = false;
-	public static final List<String> DEFAULT_MOUNT_FLAGS = List.of();
+	public static final String DEFAULT_MOUNT_FLAGS = "";
 
 	private final String id;
 	private final ObjectProperty<Path> path = new SimpleObjectProperty();
@@ -46,7 +46,7 @@ public class VaultSettings {
 	private final BooleanProperty usesIndividualMountPath = new SimpleBooleanProperty(DEFAULT_USES_INDIVIDUAL_MOUNTPATH);
 	private final StringProperty individualMountPath = new SimpleStringProperty();
 	private final BooleanProperty usesReadOnlyMode = new SimpleBooleanProperty(DEFAULT_USES_READONLY_MODE);
-	private final ObjectProperty<List<String>> mountFlags = new SimpleObjectProperty(DEFAULT_MOUNT_FLAGS);
+	private final StringProperty mountFlags = new SimpleStringProperty(DEFAULT_MOUNT_FLAGS);
 
 	public VaultSettings(String id) {
 		this.id = Objects.requireNonNull(id);
@@ -55,7 +55,7 @@ public class VaultSettings {
 	}
 
 	Observable[] observables() {
-		return new Observable[]{path, mountName, winDriveLetter, unlockAfterStartup, revealAfterMount, usesIndividualMountPath, individualMountPath, usesReadOnlyMode};
+		return new Observable[]{path, mountName, winDriveLetter, unlockAfterStartup, revealAfterMount, usesIndividualMountPath, individualMountPath, usesReadOnlyMode, mountFlags};
 	}
 
 	private void deriveMountNameFromPath(Path path) {
@@ -150,7 +150,7 @@ public class VaultSettings {
 		return usesReadOnlyMode;
 	}
 
-	public ObjectProperty<List<String>> mountFlags() {
+	public StringProperty mountFlags() {
 		return mountFlags;
 	}
 

+ 3 - 25
main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java

@@ -6,15 +6,12 @@
 package org.cryptomator.common.settings;
 
 import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonToken;
 import com.google.gson.stream.JsonWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
 
 class VaultSettingsJsonAdapter {
 
@@ -31,8 +28,7 @@ class VaultSettingsJsonAdapter {
 		out.name("usesIndividualMountPath").value(value.usesIndividualMountPath().get());
 		out.name("individualMountPath").value(value.individualMountPath().get());
 		out.name("usesReadOnlyMode").value(value.usesReadOnlyMode().get());
-		out.name("mountFlags");
-		writeMountFlags(out, value.mountFlags().get());
+		out.name("mountFlags").value(value.mountFlags().get());
 		out.endObject();
 	}
 
@@ -46,7 +42,7 @@ class VaultSettingsJsonAdapter {
 		boolean revealAfterMount = VaultSettings.DEFAULT_REAVEAL_AFTER_MOUNT;
 		boolean usesIndividualMountPath = VaultSettings.DEFAULT_USES_INDIVIDUAL_MOUNTPATH;
 		boolean usesReadOnlyMode = VaultSettings.DEFAULT_USES_READONLY_MODE;
-		List<String> mountFlags = VaultSettings.DEFAULT_MOUNT_FLAGS;
+		String mountFlags = VaultSettings.DEFAULT_MOUNT_FLAGS;
 
 		in.beginObject();
 		while (in.hasNext()) {
@@ -80,7 +76,7 @@ class VaultSettingsJsonAdapter {
 					usesReadOnlyMode = in.nextBoolean();
 					break;
 				case "mountFlags":
-					mountFlags = readMountFlags(in);
+					mountFlags = in.nextString();
 					break;
 				default:
 					LOG.warn("Unsupported vault setting found in JSON: " + name);
@@ -103,22 +99,4 @@ class VaultSettingsJsonAdapter {
 		return vaultSettings;
 	}
 
-	private List<String> readMountFlags(JsonReader in) throws IOException {
-		List<String> result = new ArrayList<>();
-		in.beginArray();
-		while (!JsonToken.END_ARRAY.equals(in.peek())) {
-			result.add(in.nextString());
-		}
-		in.endArray();
-		return result;
-	}
-
-	private void writeMountFlags(JsonWriter out, List<String> flags) throws IOException {
-		out.beginArray();
-		for (String flag : flags) {
-			out.value(flag);
-		}
-		out.endArray();
-	}
-
 }

+ 4 - 4
main/commons/src/test/java/org/cryptomator/common/settings/VaultSettingsJsonAdapterTest.java

@@ -24,7 +24,7 @@ public class VaultSettingsJsonAdapterTest {
 
 	@Test
 	public void testDeserialize() throws IOException {
-		String json = "{\"id\": \"foo\", \"path\": \"/foo/bar\", \"mountName\": \"test\", \"winDriveLetter\": \"X\", \"shouldBeIgnored\": true, \"individualMountPath\": \"/home/test/crypto\", \"mountFlags\":[\"--foo\", \"--bar\"]}";
+		String json = "{\"id\": \"foo\", \"path\": \"/foo/bar\", \"mountName\": \"test\", \"winDriveLetter\": \"X\", \"shouldBeIgnored\": true, \"individualMountPath\": \"/home/test/crypto\", \"mountFlags\":\"--foo --bar\"}";
 		JsonReader jsonReader = new JsonReader(new StringReader(json));
 
 		VaultSettings vaultSettings = adapter.read(jsonReader);
@@ -33,7 +33,7 @@ public class VaultSettingsJsonAdapterTest {
 		Assertions.assertEquals("test", vaultSettings.mountName().get());
 		Assertions.assertEquals("X", vaultSettings.winDriveLetter().get());
 		Assertions.assertEquals("/home/test/crypto", vaultSettings.individualMountPath().get());
-		MatcherAssert.assertThat(vaultSettings.mountFlags().get(), CoreMatchers.hasItems("--foo", "--bar"));
+		Assertions.assertEquals("--foo --bar", vaultSettings.mountFlags().get());
 
 
 	}
@@ -43,7 +43,7 @@ public class VaultSettingsJsonAdapterTest {
 		VaultSettings vaultSettings = new VaultSettings("test");
 		vaultSettings.path().set(Paths.get("/foo/bar"));
 		vaultSettings.mountName().set("mountyMcMountFace");
-		vaultSettings.mountFlags().set(Arrays.asList("--foo", "--bar"));
+		vaultSettings.mountFlags().set("--foo --bar");
 
 		StringWriter buf = new StringWriter();
 		JsonWriter jsonWriter = new JsonWriter(buf);
@@ -53,7 +53,7 @@ public class VaultSettingsJsonAdapterTest {
 		MatcherAssert.assertThat(result, CoreMatchers.containsString("\"id\":\"test\""));
 		MatcherAssert.assertThat(result, CoreMatchers.containsString("\"path\":\"/foo/bar\""));
 		MatcherAssert.assertThat(result, CoreMatchers.containsString("\"mountName\":\"mountyMcMountFace\""));
-		MatcherAssert.assertThat(result, CoreMatchers.containsString("\"mountFlags\":[\"--foo\",\"--bar\"]"));
+		MatcherAssert.assertThat(result, CoreMatchers.containsString("\"mountFlags\":\"--foo --bar\""));
 	}
 
 }