From 44500962e12eafd2329b4619e03b26b39bb028e6 Mon Sep 17 00:00:00 2001 From: crschnick Date: Wed, 1 Jan 2025 05:54:01 +0000 Subject: [PATCH] Rework open args --- .../beacon/impl/DaemonOpenExchangeImpl.java | 4 +-- .../xpipe/app/core/AppActionLinkDetector.java | 5 ++- .../xpipe/app/core/AppDesktopIntegration.java | 3 +- ...uncherInput.java => AppOpenArguments.java} | 33 +++++++++++++++---- .../io/xpipe/app/core/mode/OperationMode.java | 1 + version | 2 +- 6 files changed, 33 insertions(+), 15 deletions(-) rename app/src/main/java/io/xpipe/app/core/{launcher/LauncherInput.java => AppOpenArguments.java} (81%) diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/DaemonOpenExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/DaemonOpenExchangeImpl.java index c1690b0f8..50e3c97e9 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/DaemonOpenExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/DaemonOpenExchangeImpl.java @@ -1,6 +1,6 @@ package io.xpipe.app.beacon.impl; -import io.xpipe.app.core.launcher.LauncherInput; +import io.xpipe.app.core.AppOpenArguments; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.util.PlatformInit; import io.xpipe.beacon.BeaconServerException; @@ -20,7 +20,7 @@ public class DaemonOpenExchangeImpl extends DaemonOpenExchange { OperationMode.switchToAsync(OperationMode.GUI); } else { - LauncherInput.handle(msg.getArguments()); + AppOpenArguments.handle(msg.getArguments()); } return Response.builder().build(); } diff --git a/app/src/main/java/io/xpipe/app/core/AppActionLinkDetector.java b/app/src/main/java/io/xpipe/app/core/AppActionLinkDetector.java index a44d3a65c..0e69c3ce2 100644 --- a/app/src/main/java/io/xpipe/app/core/AppActionLinkDetector.java +++ b/app/src/main/java/io/xpipe/app/core/AppActionLinkDetector.java @@ -1,6 +1,5 @@ package io.xpipe.app.core; -import io.xpipe.app.core.launcher.LauncherInput; import io.xpipe.app.core.window.AppDialog; import javafx.scene.input.Clipboard; @@ -25,7 +24,7 @@ public class AppActionLinkDetector { } public static void handle(String content, boolean showAlert) { - var detected = LauncherInput.of(content); + var detected = AppOpenArguments.parseActions(content); if (detected.size() == 0) { return; } @@ -34,7 +33,7 @@ public class AppActionLinkDetector { return; } - LauncherInput.handle(List.of(content)); + AppOpenArguments.handle(List.of(content)); } public static void detectOnFocus() { diff --git a/app/src/main/java/io/xpipe/app/core/AppDesktopIntegration.java b/app/src/main/java/io/xpipe/app/core/AppDesktopIntegration.java index ea55160f1..bccca2db9 100644 --- a/app/src/main/java/io/xpipe/app/core/AppDesktopIntegration.java +++ b/app/src/main/java/io/xpipe/app/core/AppDesktopIntegration.java @@ -1,7 +1,6 @@ package io.xpipe.app.core; import io.xpipe.app.Main; -import io.xpipe.app.core.launcher.LauncherInput; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.prefs.AppPrefs; @@ -58,7 +57,7 @@ public class AppDesktopIntegration { // URL open operations have to be handled in a special way on macOS! Desktop.getDesktop().setOpenURIHandler(e -> { - LauncherInput.handle(List.of(e.getURI().toString())); + AppOpenArguments.handle(List.of(e.getURI().toString())); }); // Do it this way to prevent IDE inspections from complaining diff --git a/app/src/main/java/io/xpipe/app/core/launcher/LauncherInput.java b/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java similarity index 81% rename from app/src/main/java/io/xpipe/app/core/launcher/LauncherInput.java rename to app/src/main/java/io/xpipe/app/core/AppOpenArguments.java index b8d54f90b..c82299c82 100644 --- a/app/src/main/java/io/xpipe/app/core/launcher/LauncherInput.java +++ b/app/src/main/java/io/xpipe/app/core/AppOpenArguments.java @@ -1,12 +1,11 @@ -package io.xpipe.app.core.launcher; +package io.xpipe.app.core; import io.xpipe.app.browser.BrowserFullSessionModel; -import io.xpipe.app.core.AppLayoutModel; +import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.ext.ActionProvider; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.storage.DataStorage; - import lombok.Value; import java.net.URI; @@ -16,9 +15,29 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -public abstract class LauncherInput { +public class AppOpenArguments { - public static void handle(List arguments) { + private static final List bufferedArguments = new ArrayList<>(); + + public static synchronized void init() { + handleImpl(bufferedArguments); + bufferedArguments.clear(); + } + + public static synchronized void handle(List arguments) { + if (OperationMode.isInShutdown()) { + return; + } + + if (OperationMode.isInStartup()) { + bufferedArguments.addAll(arguments); + return; + } + + handleImpl(arguments); + } + + private static synchronized void handleImpl(List arguments) { if (arguments.size() == 0) { return; } @@ -28,7 +47,7 @@ public abstract class LauncherInput { var all = new ArrayList(); arguments.forEach(s -> { try { - all.addAll(of(s)); + all.addAll(parseActions(s)); } catch (Exception e) { ErrorEvent.fromThrowable(e).omit().handle(); } @@ -49,7 +68,7 @@ public abstract class LauncherInput { }); } - public static List of(String input) { + public static List parseActions(String input) { if (input.startsWith("\"") && input.endsWith("\"")) { input = input.substring(1, input.length() - 1); } diff --git a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java index 7c9cfc777..6eb5a9d7c 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java @@ -154,6 +154,7 @@ public abstract class OperationMode { switchToSyncOrThrow(map(getStartupMode())); inStartup = false; + AppOpenArguments.init(); } public static void switchToAsync(OperationMode newMode) { diff --git a/version b/version index 09047a111..dd2af1a8a 100644 --- a/version +++ b/version @@ -1 +1 @@ -14.0-35 +14.0-36