Browse Source

Fixes #47
References #41 (increased wait time before retrying)

Sebastian Stenzel 10 years ago
parent
commit
9aa6117fb0

+ 15 - 1
main/ui/src/main/java/org/cryptomator/ui/util/mount/LinuxGvfsWebDavMounter.java

@@ -43,6 +43,10 @@ final class LinuxGvfsWebDavMounter implements WebDavMounterStrategy {
 				"gvfs-mount \"dav:$DAV_SSP\"",
 				"xdg-open \"dav:$DAV_SSP\"")
 				.addEnv("DAV_SSP", uri.getRawSchemeSpecificPart());
+		final Script testMountStillExistsScript = Script.fromLines(
+				"set -x",
+				"test `gvfs-mount --list | grep \"$DAV_SSP\" | wc -l` -eq 1")
+				.addEnv("DAV_SSP", uri.getRawSchemeSpecificPart());
 		final Script unmountScript = Script.fromLines(
 				"set -x",
 				"gvfs-mount -u \"dav:$DAV_SSP\"")
@@ -51,7 +55,17 @@ final class LinuxGvfsWebDavMounter implements WebDavMounterStrategy {
 		return new AbstractWebDavMount() {
 			@Override
 			public void unmount() throws CommandFailedException {
-				unmountScript.execute();
+				boolean mountStillExists;
+				try {
+					testMountStillExistsScript.execute();
+					mountStillExists = true;
+				} catch(CommandFailedException e) {
+					mountStillExists = false;
+				}
+				// only attempt unmount if user didn't unmount manually:
+				if (mountStillExists) {
+					unmountScript.execute();
+				}
 			}
 		};
 	}

+ 6 - 1
main/ui/src/main/java/org/cryptomator/ui/util/mount/MacOsXWebDavMounter.java

@@ -10,6 +10,8 @@
 package org.cryptomator.ui.util.mount;
 
 import java.net.URI;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
 import java.util.UUID;
 
 import org.apache.commons.lang3.SystemUtils;
@@ -46,7 +48,10 @@ final class MacOsXWebDavMounter implements WebDavMounterStrategy {
 		return new AbstractWebDavMount() {
 			@Override
 			public void unmount() throws CommandFailedException {
-				unmountScript.execute();
+				// only attempt unmount if user didn't unmount manually:
+				if (Files.exists(FileSystems.getDefault().getPath(path))) {
+					unmountScript.execute();
+				}
 			}
 		};
 	}

+ 9 - 3
main/ui/src/main/java/org/cryptomator/ui/util/mount/WindowsWebDavMounter.java

@@ -12,6 +12,8 @@ package org.cryptomator.ui.util.mount;
 import static org.cryptomator.ui.util.command.Script.fromLines;
 
 import java.net.URI;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -65,8 +67,8 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy {
 					throw ex;
 				} else {
 					try {
-						// retry after 500ms
-						Thread.sleep(500);
+						// retry after 2s
+						Thread.sleep(2000);
 					} catch (InterruptedException e) {
 						Thread.currentThread().interrupt();
 					}
@@ -76,10 +78,14 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy {
 		final Script openExplorerScript = fromLines("start explorer.exe " + driveLetter);
 		openExplorerScript.execute();
 		final Script unmountScript = fromLines("net use " + driveLetter + " /delete").addEnv("DRIVE_LETTER", driveLetter);
+		final String finalDriveLetter = driveLetter;
 		return new AbstractWebDavMount() {
 			@Override
 			public void unmount() throws CommandFailedException {
-				unmountScript.execute();
+				// only attempt unmount if user didn't unmount manually:
+				if (Files.exists(FileSystems.getDefault().getPath(finalDriveLetter))) {
+					unmountScript.execute();
+				}
 			}
 		};
 	}