From ca5a3a63c634fc8f599b9e17d7059ed8ea427bcb Mon Sep 17 00:00:00 2001 From: crschnick Date: Mon, 10 Mar 2025 09:12:49 +0000 Subject: [PATCH] Various small fixes --- .../beacon/impl/DaemonFocusExchangeImpl.java | 7 +- .../app/comp/store/StoreCreationComp.java | 5 ++ .../app/comp/store/StoreEntryWrapper.java | 3 +- .../java/io/xpipe/app/core/AppInstance.java | 5 +- .../io/xpipe/app/icon/SystemIconCache.java | 2 + .../io/xpipe/app/storage/DataStorage.java | 19 ------ .../io/xpipe/app/util/BindingsHelper.java | 11 +++- .../xpipe/beacon/api/DaemonFocusExchange.java | 5 +- .../action/DeleteChildrenStoreAction.java | 64 ------------------- 9 files changed, 24 insertions(+), 97 deletions(-) delete mode 100644 ext/base/src/main/java/io/xpipe/ext/base/action/DeleteChildrenStoreAction.java diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/DaemonFocusExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/DaemonFocusExchangeImpl.java index 4b1b2f178..2cf7481d2 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/DaemonFocusExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/DaemonFocusExchangeImpl.java @@ -1,6 +1,7 @@ package io.xpipe.app.beacon.impl; import io.xpipe.app.core.mode.OperationMode; +import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.beacon.api.DaemonFocusExchange; import com.sun.net.httpserver.HttpExchange; @@ -9,7 +10,11 @@ public class DaemonFocusExchangeImpl extends DaemonFocusExchange { @Override public Object handle(HttpExchange exchange, Request msg) { - OperationMode.switchUp(OperationMode.map(msg.getMode())); + OperationMode.switchUp(OperationMode.GUI); + var w = AppMainWindow.getInstance(); + if (w != null) { + w.getStage().requestFocus(); + } return Response.builder().build(); } diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreCreationComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreCreationComp.java index 25e510137..2d3be5de8 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreCreationComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreCreationComp.java @@ -183,6 +183,10 @@ public class StoreCreationComp extends DialogComp { } public static void showEdit(DataStoreEntry e) { + showEdit(e, dataStoreEntry -> {}); + } + + public static void showEdit(DataStoreEntry e, Consumer consumer) { show( e.getName(), e.getProvider(), @@ -204,6 +208,7 @@ public class StoreCreationComp extends DialogComp { } } } + consumer.accept(e); }); }, true, diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java index c3f284b30..b829ee583 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java @@ -125,8 +125,7 @@ public class StoreEntryWrapper { public void delete() { ThreadHelper.runAsync(() -> { - DataStorage.get().deleteChildren(this.entry); - DataStorage.get().deleteStoreEntry(this.entry); + DataStorage.get().deleteWithChildren(this.entry); }); } diff --git a/app/src/main/java/io/xpipe/app/core/AppInstance.java b/app/src/main/java/io/xpipe/app/core/AppInstance.java index 1cf97773f..d7164e558 100644 --- a/app/src/main/java/io/xpipe/app/core/AppInstance.java +++ b/app/src/main/java/io/xpipe/app/core/AppInstance.java @@ -56,10 +56,7 @@ public class AppInstance { try { var inputs = AppProperties.get().getArguments().getOpenArgs(); // Assume that we want to open the GUI if we launched again - client.get() - .performRequest(DaemonFocusExchange.Request.builder() - .mode(XPipeDaemonMode.GUI) - .build()); + client.get().performRequest(DaemonFocusExchange.Request.builder().build()); if (!inputs.isEmpty()) { client.get() .performRequest(DaemonOpenExchange.Request.builder() diff --git a/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java b/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java index 0bffe2203..e93156927 100644 --- a/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java +++ b/app/src/main/java/io/xpipe/app/icon/SystemIconCache.java @@ -7,6 +7,7 @@ import com.github.weisj.jsvg.SVGDocument; import com.github.weisj.jsvg.SVGRenderingHints; import com.github.weisj.jsvg.attributes.ViewBox; import com.github.weisj.jsvg.parser.SVGLoader; +import io.xpipe.app.issue.TrackEvent; import lombok.Getter; import java.awt.*; @@ -106,6 +107,7 @@ public class SystemIconCache { } private static ImageColorScheme rasterizeSizes(Path path, Path dir, String name, boolean dark) throws IOException { + TrackEvent.trace("Rasterizing image " + path.getFileName().toString()); try { ImageColorScheme c = null; for (var size : sizes) { diff --git a/app/src/main/java/io/xpipe/app/storage/DataStorage.java b/app/src/main/java/io/xpipe/app/storage/DataStorage.java index eee61d23c..393173621 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -600,25 +600,6 @@ public abstract class DataStorage { } } - public void deleteChildren(DataStoreEntry e) { - var c = getDeepStoreChildren(e); - if (c.isEmpty()) { - return; - } - - c.forEach(entry -> entry.finalizeEntry()); - this.storeEntriesSet.removeAll(c); - synchronized (identityStoreEntryMapCache) { - identityStoreEntryMapCache.remove(e.getStore()); - } - synchronized (storeEntryMapCache) { - storeEntryMapCache.remove(e.getStore()); - } - this.listeners.forEach(l -> l.onStoreRemove(c.toArray(DataStoreEntry[]::new))); - refreshEntries(); - saveAsync(); - } - public void deleteWithChildren(DataStoreEntry... entries) { List toDelete = Arrays.stream(entries) .flatMap(entry -> { diff --git a/app/src/main/java/io/xpipe/app/util/BindingsHelper.java b/app/src/main/java/io/xpipe/app/util/BindingsHelper.java index 4921f1b95..49ebd7afd 100644 --- a/app/src/main/java/io/xpipe/app/util/BindingsHelper.java +++ b/app/src/main/java/io/xpipe/app/util/BindingsHelper.java @@ -8,6 +8,7 @@ import lombok.Value; import java.lang.ref.WeakReference; import java.util.Collections; +import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -15,12 +16,14 @@ import java.util.function.Function; @SuppressWarnings("InfiniteLoopStatement") public class BindingsHelper { - private static final Set REFERENCES = Collections.newSetFromMap(new ConcurrentHashMap<>()); + private static final Set REFERENCES = new HashSet<>(); static { ThreadHelper.createPlatformThread("referenceGC", true, () -> { while (true) { - REFERENCES.removeIf(ReferenceEntry::canGc); + synchronized (REFERENCES) { + REFERENCES.removeIf(ReferenceEntry::canGc); + } ThreadHelper.sleep(1000); // Use for testing @@ -31,7 +34,9 @@ public class BindingsHelper { } public static void preserve(Object source, Object target) { - REFERENCES.add(new ReferenceEntry(new WeakReference<>(source), target)); + synchronized (REFERENCES) { + REFERENCES.add(new ReferenceEntry(new WeakReference<>(source), target)); + } } public static ObservableValue map( diff --git a/beacon/src/main/java/io/xpipe/beacon/api/DaemonFocusExchange.java b/beacon/src/main/java/io/xpipe/beacon/api/DaemonFocusExchange.java index ff1ed896e..a264cbfdf 100644 --- a/beacon/src/main/java/io/xpipe/beacon/api/DaemonFocusExchange.java +++ b/beacon/src/main/java/io/xpipe/beacon/api/DaemonFocusExchange.java @@ -18,10 +18,7 @@ public class DaemonFocusExchange extends BeaconInterface getLeafDataStoreCallSite() { - return new LeafDataStoreCallSite<>() { - - @Override - public boolean isSystemAction() { - return true; - } - - @Override - public ActionProvider.Action createAction(DataStoreEntryRef store) { - return new Action(store.get()); - } - - @Override - public Class getApplicableClass() { - return DataStore.class; - } - - @Override - public boolean isApplicable(DataStoreEntryRef o) { - return !(o.getStore() instanceof FixedHierarchyStore) - && DataStorage.get().getStoreChildren(o.get()).size() > 1; - } - - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return AppI18n.observable("base.deleteChildren"); - } - - @Override - public String getIcon(DataStoreEntryRef store) { - return "mdal-delete_outline"; - } - }; - } - - @Value - static class Action implements ActionProvider.Action { - - DataStoreEntry store; - - @Override - public void execute() { - DataStorage.get().deleteChildren(store); - } - } -}