Bladeren bron

Don't trigger quit handler on new non-unlocked vault states

Sebastian Stenzel 5 jaren geleden
bovenliggende
commit
68e69790cf
1 gewijzigde bestanden met toevoegingen van 16 en 7 verwijderingen
  1. 16 7
      main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java

+ 16 - 7
main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java

@@ -5,6 +5,7 @@ import javafx.beans.Observable;
 import javafx.collections.ObservableList;
 import org.cryptomator.common.settings.Settings;
 import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.common.vaults.VaultState;
 import org.cryptomator.ui.fxapp.FxApplication;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -18,8 +19,10 @@ import java.awt.PopupMenu;
 import java.awt.desktop.QuitResponse;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.EnumSet;
 import java.util.EventObject;
 import java.util.ResourceBundle;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Consumer;
@@ -35,7 +38,7 @@ class TrayMenuController {
 	private final Settings settings;
 	private final ObservableList<Vault> vaults;
 	private final PopupMenu menu;
-	private final AtomicBoolean allVaultsAreLocked;
+	private final AtomicBoolean allowSuddenTermination;
 
 	@Inject
 	TrayMenuController(ResourceBundle resourceBundle, FxApplicationStarter fxApplicationStarter, @Named("shutdownLatch") CountDownLatch shutdownLatch, Settings settings, ObservableList<Vault> vaults) {
@@ -45,7 +48,7 @@ class TrayMenuController {
 		this.settings = settings;
 		this.vaults = vaults;
 		this.menu = new PopupMenu();
-		this.allVaultsAreLocked = new AtomicBoolean(true);
+		this.allowSuddenTermination = new AtomicBoolean(true);
 	}
 
 	public PopupMenu getMenu() {
@@ -76,10 +79,16 @@ class TrayMenuController {
 	private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
 		assert Platform.isFxApplicationThread();
 		rebuildMenu();
-		boolean allLocked = vaults.stream().allMatch(Vault::isLocked);
-		// TODO remove logging
-		LOG.warn("allLocked: {}", allLocked);
-		allVaultsAreLocked.set(allLocked);
+		Set<VaultState> statesAllowingTermination = EnumSet.of(VaultState.LOCKED, VaultState.NEEDS_MIGRATION, VaultState.MISSING, VaultState.ERROR);
+		boolean allVaultsAllowTermination = vaults.stream().map(Vault::getState).allMatch(statesAllowingTermination::contains);
+		allowSuddenTermination.set(allVaultsAllowTermination);
+		if (Desktop.getDesktop().isSupported(Desktop.Action.APP_SUDDEN_TERMINATION)) {
+			if (allVaultsAllowTermination) {
+				Desktop.getDesktop().enableSuddenTermination();
+			} else {
+				Desktop.getDesktop().disableSuddenTermination();
+			}
+		}
 	}
 
 	private void rebuildMenu() {
@@ -141,7 +150,7 @@ class TrayMenuController {
 	}
 
 	private void handleQuitRequest(EventObject e, QuitResponse response) {
-		if (allVaultsAreLocked.get()) {
+		if (allowSuddenTermination.get()) {
 			response.performQuit(); // really?
 		} else {
 			fxApplicationStarter.get(true).thenAccept(app -> app.showQuitWindow(response));