Synchronize queue entries

This commit is contained in:
crschnick committed 2026-09-15 09:12:52 +00:00
1 parent fc3cba399d
commit 1fc211e9f3
9 files changed
+44 -22

No files matched your search

@@ -38,7 +38,7 @@ public abstract class AbstractAction {
AppCache.update("pickIntroductionShown", true);
}
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
pick = action -> {
if (action instanceof SerializableAction) {
cancelPick();
@@ -55,7 +55,7 @@ public abstract class AbstractAction {
});
public static synchronized void cancelPick() {
AppLayoutModel.get().getQueueEntries().remove(queueEntry);
AppLayoutModel.get().hideQueueEntry(queueEntry);
pick = null;
}
@@ -61,10 +61,10 @@ public class AskpassExchange extends BeaconInterface<AskpassExchange.Request> {
new SimpleStringProperty(msg.getPrompt()),
new LabelGraphic.IconGraphic("mdi2f-fingerprint"),
() -> true);
AppLayoutModel.get().getQueueEntries().add(qe);
AppLayoutModel.get().showQueueEntry(qe);
GlobalTimer.delay(
() -> {
AppLayoutModel.get().getQueueEntries().remove(qe);
AppLayoutModel.get().hideQueueEntry(qe);
},
Duration.ofSeconds(15));
}
@@ -52,7 +52,7 @@ public class AppLayoutComp extends RegionStructureBuilder<BorderPane, AppLayoutC
pane.setCenter(multiR);
TrackEvent.info("Window content comp created");
var sidebar = new SideMenuBarComp(model.getSelected(), model.getEntries(), model.getQueueEntries());
var sidebar = new SideMenuBarComp(model.getSelected(), model.getEntries(), model.getQueueEntriesRaw());
var sidebarR = sidebar.build();
TrackEvent.info("Window sidebar comp created");
pane.setRight(sidebarR);
@@ -67,7 +67,7 @@ public class ModalOverlay {
public void hideable(AppLayoutModel.QueueEntry entry) {
setHideAction(() -> {
AppLayoutModel.get().getQueueEntries().add(entry);
AppLayoutModel.get().showQueueEntry(entry);
});
}
@@ -33,7 +33,7 @@ public class AppExecutableCache {
Hyperlinks.open(url);
return true;
});
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
try {
function.accept(file);
@@ -47,7 +47,7 @@ public class AppExecutableCache {
throw e;
}
} finally {
AppLayoutModel.get().getQueueEntries().remove(queueEntry);
AppLayoutModel.get().hideQueueEntry(queueEntry);
}
}
}
@@ -36,6 +36,7 @@ import javafx.scene.input.KeyCombination;
import lombok.*;
import lombok.experimental.NonFinal;
import lombok.extern.jackson.Jacksonized;
import org.int4.fx.builders.FX;
import org.kordamp.ikonli.javafx.FontIcon;
import java.time.Duration;
@@ -43,21 +44,25 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
@Getter
public class AppLayoutModel {
private static AppLayoutModel INSTANCE;
@Getter
private final SavedState savedState;
@Getter
private final List<Entry> entries;
@Getter
private final Property<Entry> selected;
private final ObservableList<QueueEntry> queueEntries;
@Getter
private final BooleanProperty ptbAvailable = new SimpleBooleanProperty();
@Getter
private final BooleanProperty portraitLayoutCollapsed = new SimpleBooleanProperty();
public AppLayoutModel(SavedState savedState) {
@@ -136,10 +141,10 @@ public class AppLayoutModel {
true);
AppSizeBreakpoints.compactMode().subscribe(v -> {
if (v) {
getQueueEntries().add(toggleExpand);
queueEntries.add(toggleExpand);
portraitExpanded.set(false);
} else {
getQueueEntries().remove(toggleExpand);
queueEntries.remove(toggleExpand);
portraitExpanded.set(true);
}
});
@@ -169,6 +174,23 @@ public class AppLayoutModel {
INSTANCE = null;
}
public synchronized void hideQueueEntry(QueueEntry entry) {
queueEntries.remove(entry);
}
public ObservableList<QueueEntry> getQueueEntriesRaw() {
return queueEntries;
}
public synchronized List<QueueEntry> getQueueEntries() {
var copy = new ArrayList<>(queueEntries);
return copy;
}
public void showQueueEntry(QueueEntry entry) {
showQueueEntry(entry, null, true);
}
public synchronized void showQueueEntry(QueueEntry entry, Duration duration, boolean allowDuplicates) {
if (!allowDuplicates && queueEntries.contains(entry)) {
return;
@@ -376,19 +398,19 @@ public class AppLayoutModel {
var r = getAction().get();
if (r) {
PlatformThread.runLaterIfNeeded(() -> {
AppLayoutModel.get().getQueueEntries().remove(this);
AppLayoutModel.get().hideQueueEntry(this);
});
}
} catch (Throwable t) {
PlatformThread.runLaterIfNeeded(() -> {
AppLayoutModel.get().getQueueEntries().remove(this);
AppLayoutModel.get().hideQueueEntry(this);
});
throw t;
}
}
public void hide() {
AppLayoutModel.get().getQueueEntries().remove(this);
AppLayoutModel.get().hideQueueEntry(this);
}
}
}
@@ -202,7 +202,7 @@ public class StoreCreationDialog {
var queueEntry = StoreCreationQueueEntry.of(model, modal);
modal.setHideAction(() -> {
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
showNotice();
});
@@ -212,7 +212,7 @@ public class StoreCreationDialog {
}
modal.hide();
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
showNotice();
});
modal.setRequireCloseButtonForClose(true);
@@ -339,7 +339,7 @@ public class TerminalDockHubManager {
showing.set(true);
NativeWinWindowControl.MAIN_WINDOW.setWindowsTransitionsEnabled(false);
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
}
public void disableDock() {
@@ -354,7 +354,7 @@ public class TerminalDockHubManager {
showDialogIfNeeded();
NativeWinWindowControl.MAIN_WINDOW.setWindowsTransitionsEnabled(true);
AppLayoutModel.get().getQueueEntries().remove(queueEntry);
AppLayoutModel.get().hideQueueEntry(queueEntry);
}
public void triggerDock() {
@@ -31,10 +31,10 @@ public class ScanDialog {
var button = new ModalButton(
"ok",
() -> {
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
ThreadHelper.runAsync(() -> {
comp.finish();
AppLayoutModel.get().getQueueEntries().remove(queueEntry);
AppLayoutModel.get().hideQueueEntry(queueEntry);
});
},
true,
@@ -59,10 +59,10 @@ public class ScanDialog {
var button = new ModalButton(
"ok",
() -> {
AppLayoutModel.get().getQueueEntries().add(queueEntry);
AppLayoutModel.get().showQueueEntry(queueEntry);
ThreadHelper.runAsync(() -> {
comp.finish();
AppLayoutModel.get().getQueueEntries().remove(queueEntry);
AppLayoutModel.get().hideQueueEntry(queueEntry);
});
},
true,