From af77a09bd701f1f5ceaf68290866b9a033fc27f0 Mon Sep 17 00:00:00 2001 From: crschnick Date: Wed, 24 Jul 2024 01:28:05 +0000 Subject: [PATCH] File browser busy fixes --- .../app/browser/BrowserBookmarkComp.java | 20 +++++++++++++++---- .../store/StoreQuickAccessButtonComp.java | 8 ++++---- .../app/comp/store/StoreSectionComp.java | 4 ++-- .../app/comp/store/StoreSectionMiniComp.java | 8 ++++---- .../app/fxcomps/impl/DataStoreChoiceComp.java | 6 +++--- .../io/xpipe/app/issue/ErrorHandlerComp.java | 3 ++- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkComp.java index 9dab4f23c..446438b16 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserBookmarkComp.java @@ -10,10 +10,12 @@ import io.xpipe.app.storage.DataStoreEntry; import javafx.beans.binding.Bindings; import javafx.beans.property.*; import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; import javafx.css.PseudoClass; import javafx.scene.control.Button; import javafx.scene.layout.Region; +import java.util.HashSet; import java.util.function.BiConsumer; import java.util.function.Predicate; @@ -41,13 +43,13 @@ public final class BrowserBookmarkComp extends SimpleComp { @Override protected Region createSimple() { - BooleanProperty busy = new SimpleBooleanProperty(false); + var busyEntries = FXCollections.observableSet(new HashSet<>()); BiConsumer>> augment = (s, comp) -> { comp.disable(Bindings.createBooleanBinding( () -> { - return !applicable.test(s.getWrapper()); + return busyEntries.contains(s) || !applicable.test(s.getWrapper()); }, - busy)); + busyEntries)); comp.apply(struc -> { selected.addListener((observable, oldValue, newValue) -> { PlatformThread.runLaterIfNeeded(() -> { @@ -70,7 +72,17 @@ public final class BrowserBookmarkComp extends SimpleComp { category, StoreViewState.get().getEntriesListUpdateObservable()), augment, - entryWrapper -> action.accept(entryWrapper, busy)); + selectedAction -> { + BooleanProperty busy = new SimpleBooleanProperty(false); + action.accept(selectedAction.getWrapper(), busy); + busy.addListener((observable, oldValue, newValue) -> { + if (newValue) { + busyEntries.add(selectedAction); + } else { + busyEntries.remove(selectedAction); + } + }); + }); var r = section.vgrow().createRegion(); r.getStyleClass().add("bookmark-list"); diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreQuickAccessButtonComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreQuickAccessButtonComp.java index db170476f..14388a105 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreQuickAccessButtonComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreQuickAccessButtonComp.java @@ -19,9 +19,9 @@ import java.util.function.Consumer; public class StoreQuickAccessButtonComp extends Comp> { private final StoreSection section; - private final Consumer action; + private final Consumer action; - public StoreQuickAccessButtonComp(StoreSection section, Consumer action) { + public StoreQuickAccessButtonComp(StoreSection section, Consumer action) { this.section = section; this.action = action; } @@ -48,7 +48,7 @@ public class StoreQuickAccessButtonComp extends Comp> { new LabelGraphic.ImageGraphic(graphic, 16), w.getName().getValue()); item.setOnAction(event -> { - action.accept(w); + action.accept(section); contextMenu.hide(); event.consume(); }); @@ -73,7 +73,7 @@ public class StoreQuickAccessButtonComp extends Comp> { return; } - action.accept(w); + action.accept(section); contextMenu.hide(); event.consume(); } diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreSectionComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreSectionComp.java index 6553b83c3..d3a9f526b 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreSectionComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreSectionComp.java @@ -44,9 +44,9 @@ public class StoreSectionComp extends Comp> { return section.getShownChildren().getList().isEmpty(); }, section.getShownChildren().getList()); - Consumer quickAccessAction = w -> { + Consumer quickAccessAction = w -> { ThreadHelper.runFailableAsync(() -> { - w.executeDefaultAction(); + w.getWrapper().executeDefaultAction(); }); }; var quickAccessButton = new StoreQuickAccessButtonComp(section, quickAccessAction) diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreSectionMiniComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreSectionMiniComp.java index 58b56ecb1..cceeddb74 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreSectionMiniComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreSectionMiniComp.java @@ -34,12 +34,12 @@ public class StoreSectionMiniComp extends Comp> { private final StoreSection section; private final BiConsumer>> augment; - private final Consumer action; + private final Consumer action; public StoreSectionMiniComp( StoreSection section, BiConsumer>> augment, - Consumer action) { + Consumer action) { this.section = section; this.augment = augment; this.action = action; @@ -68,7 +68,7 @@ public class StoreSectionMiniComp extends Comp> { }) .apply(struc -> { struc.get().setOnAction(event -> { - action.accept(section.getWrapper()); + action.accept(section); event.consume(); }); }) @@ -105,7 +105,7 @@ public class StoreSectionMiniComp extends Comp> { return section.getShownChildren().getList().isEmpty(); }, section.getShownChildren().getList()); - Consumer quickAccessAction = action; + Consumer quickAccessAction = action; var quickAccessButton = new StoreQuickAccessButtonComp(section, quickAccessAction) .vgrow() .styleClass("quick-access-button") diff --git a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java b/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java index 54560b961..911e13f9f 100644 --- a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java @@ -101,9 +101,9 @@ public class DataStoreChoiceComp extends SimpleComp { comp.disable(new SimpleBooleanProperty(true)); } }, - storeEntryWrapper -> { - if (applicable.test(storeEntryWrapper)) { - selected.setValue(storeEntryWrapper.getEntry().ref()); + sec -> { + if (applicable.test(sec.getWrapper())) { + selected.setValue(sec.getWrapper().getEntry().ref()); popover.hide(); } }); diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java index 9f5caae2a..92f08bfa2 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerComp.java @@ -196,6 +196,7 @@ public class ErrorHandlerComp extends SimpleComp { if (desc == null) { desc = AppI18n.get("errorNoDetail"); } + desc = desc.trim(); var graphic = new FontIcon("mdomz-warning"); graphic.setIconColor(Color.RED); @@ -204,7 +205,7 @@ public class ErrorHandlerComp extends SimpleComp { header.setGraphicTextGap(6); AppFont.setSize(header, 3); var descriptionField = new TextArea(desc); - descriptionField.setPrefRowCount(6); + descriptionField.setPrefRowCount(Math.min((int) desc.lines().count(), 14)); descriptionField.setWrapText(true); descriptionField.setEditable(false); descriptionField.setPadding(Insets.EMPTY);