فهرست منبع

moved reveal() to VaultService

Sebastian Stenzel 5 سال پیش
والد
کامیت
d870ecbcdb

+ 52 - 2
main/ui/src/main/java/org/cryptomator/ui/common/VaultService.java

@@ -29,6 +29,22 @@ public class VaultService {
 		this.executorService = executorService;
 	}
 
+	public void reveal(Vault vault) {
+		executorService.execute(createRevealTask(vault));
+	}
+
+	/**
+	 * Creates but doesn't start a reveal task.
+	 *
+	 * @param vault The vault to reveal
+	 */
+	public Task<Vault> createRevealTask(Vault vault) {
+		Task<Vault> task = new RevealVaultTask(vault);
+		task.setOnSucceeded(evt -> LOG.info("Revealed {}", vault.getDisplayableName()));
+		task.setOnFailed(evt -> LOG.error("Failed to reveal " + vault.getDisplayableName(), evt.getSource().getException()));
+		return task;
+	}
+
 	/**
 	 * Locks a vault in a background thread.
 	 *
@@ -36,12 +52,28 @@ public class VaultService {
 	 * @param forced Whether to attempt a forced lock
 	 */
 	public void lock(Vault vault, boolean forced) {
+		executorService.execute(createLockTask(vault, forced));
+	}
+
+	/**
+	 * Creates but doesn't start a lock task.
+	 *
+	 * @param vault The vault to lock
+	 * @param forced Whether to attempt a forced lock
+	 */
+	public Task<Vault> createLockTask(Vault vault, boolean forced) {
 		Task<Vault> task = new LockVaultTask(vault, forced);
 		task.setOnSucceeded(evt -> LOG.info("Locked {}", vault.getDisplayableName()));
-		task.setOnFailed(evt -> LOG.error("Failed to lock ", evt.getSource().getException()));
-		executorService.execute(task);
+		task.setOnFailed(evt -> LOG.error("Failed to lock " + vault.getDisplayableName(), evt.getSource().getException()));
+		return task;
 	}
 
+	/**
+	 * Locks all given vaults in a background thread.
+	 *
+	 * @param vaults The vaults to lock
+	 * @param forced Whether to attempt a forced lock
+	 */
 	public void lockAll(Collection<Vault> vaults, boolean forced) {
 		Service<Vault> service = createLockAllService(vaults, forced);
 		service.setOnSucceeded(evt -> LOG.info("Locked {}", service.getValue().getDisplayableName()));
@@ -75,6 +107,24 @@ public class VaultService {
 		return service;
 	}
 
+	private static class RevealVaultTask extends Task<Vault> {
+
+		private final Vault vault;
+
+		/**
+		 * @param vault The vault to lock
+		 */
+		public RevealVaultTask(Vault vault) {
+			this.vault = vault;
+		}
+
+		@Override
+		protected Vault call() throws Volume.VolumeException {
+			vault.reveal();
+			return vault;
+		}
+	}
+
 	/**
 	 * A task that locks a vault
 	 */

+ 1 - 13
main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnlockedController.java

@@ -4,22 +4,14 @@ import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.ReadOnlyObjectProperty;
 import javafx.fxml.FXML;
 import org.cryptomator.common.vaults.Vault;
-import org.cryptomator.common.vaults.VaultState;
-import org.cryptomator.common.vaults.Volume;
 import org.cryptomator.ui.common.FxController;
-import org.cryptomator.ui.common.Tasks;
 import org.cryptomator.ui.common.VaultService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
-import java.util.concurrent.ExecutorService;
 
 @MainWindowScoped
 public class VaultDetailUnlockedController implements FxController {
 
-	private static final Logger LOG = LoggerFactory.getLogger(VaultDetailUnlockedController.class);
-
 	private final ReadOnlyObjectProperty<Vault> vault;
 	private final VaultService vaultService;
 
@@ -31,11 +23,7 @@ public class VaultDetailUnlockedController implements FxController {
 
 	@FXML
 	public void revealAccessLocation() {
-		try {
-			vault.get().reveal();
-		} catch (Volume.VolumeException e) {
-			LOG.error("Failed to reveal vault.", e);
-		}
+		vaultService.reveal(vault.get());
 	}
 
 	@FXML

+ 15 - 11
main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockSuccessController.java

@@ -5,13 +5,13 @@ import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.ReadOnlyObjectProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleObjectProperty;
+import javafx.concurrent.Task;
 import javafx.fxml.FXML;
 import javafx.scene.control.ContentDisplay;
 import javafx.stage.Stage;
 import org.cryptomator.common.vaults.Vault;
-import org.cryptomator.cryptolib.api.InvalidPassphraseException;
 import org.cryptomator.ui.common.FxController;
-import org.cryptomator.ui.common.Tasks;
+import org.cryptomator.ui.common.VaultService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,14 +26,16 @@ public class UnlockSuccessController implements FxController {
 	private final Stage window;
 	private final Vault vault;
 	private final ExecutorService executor;
+	private final VaultService vaultService;
 	private final ObjectProperty<ContentDisplay> revealButtonState;
 	private final BooleanProperty revealButtonDisabled;
 
 	@Inject
-	public UnlockSuccessController(@UnlockWindow Stage window, @UnlockWindow Vault vault, ExecutorService executor) {
+	public UnlockSuccessController(@UnlockWindow Stage window, @UnlockWindow Vault vault, ExecutorService executor, VaultService vaultService) {
 		this.window = window;
 		this.vault = vault;
 		this.executor = executor;
+		this.vaultService = vaultService;
 		this.revealButtonState = new SimpleObjectProperty<>(ContentDisplay.TEXT_ONLY);
 		this.revealButtonDisabled = new SimpleBooleanProperty();
 	}
@@ -49,17 +51,19 @@ public class UnlockSuccessController implements FxController {
 		LOG.trace("UnlockSuccessController.revealAndClose()");
 		revealButtonState.set(ContentDisplay.LEFT);
 		revealButtonDisabled.set(true);
-		Tasks.create(() -> {
-			vault.reveal();
-		}).onSuccess(() -> {
+
+		Task<Vault> revealTask = vaultService.createRevealTask(vault);
+		revealTask.setOnSucceeded(evt -> {
+			revealButtonState.set(ContentDisplay.TEXT_ONLY);
+			revealButtonDisabled.set(false);
 			window.close();
-		}).onError(InvalidPassphraseException.class, e -> {
-			// TODO
-			LOG.warn("Reveal failed.", e);
-		}).andFinally(() -> {
+		});
+		revealTask.setOnFailed(evt -> {
+			LOG.warn("Reveal failed.", revealTask.getException());
 			revealButtonState.set(ContentDisplay.TEXT_ONLY);
 			revealButtonDisabled.set(false);
-		}).runOnce(executor);
+		});
+		executor.execute(revealTask);
 	}
 
 	/* Getter/Setter */