diff --git a/app/src/main/java/io/xpipe/app/comp/store/DenseStoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/DenseStoreEntryComp.java index ed5fc119..b5953cc8 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/DenseStoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/DenseStoreEntryComp.java @@ -94,7 +94,7 @@ public class DenseStoreEntryComp extends StoreEntryComp { nameCC.setHgrow(Priority.ALWAYS); grid.getColumnConstraints().addAll(nameCC); var nameBox = new HBox(name, notes); - nameBox.setSpacing(8); + nameBox.setSpacing(1); nameBox.setAlignment(Pos.CENTER_LEFT); grid.addRow(0, nameBox); diff --git a/app/src/main/java/io/xpipe/app/comp/store/StandardStoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/StandardStoreEntryComp.java index 5efbd8d8..a95a95db 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StandardStoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StandardStoreEntryComp.java @@ -31,7 +31,7 @@ public class StandardStoreEntryComp extends StoreEntryComp { grid.getColumnConstraints().add(new ColumnConstraints(66)); var nameAndNotes = new HBox(name, notes); - nameAndNotes.setSpacing(8); + nameAndNotes.setSpacing(1); nameAndNotes.setAlignment(Pos.CENTER_LEFT); grid.add(nameAndNotes, 1, 0); grid.add(createSummary(), 1, 1); diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreSortMode.java b/app/src/main/java/io/xpipe/app/comp/store/StoreSortMode.java index e1228db2..0492edc8 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreSortMode.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreSortMode.java @@ -1,7 +1,5 @@ package io.xpipe.app.comp.store; -import io.xpipe.app.storage.DataStoreEntry; - import java.time.Instant; import java.util.Comparator; import java.util.List; @@ -105,12 +103,6 @@ public interface StoreSortMode { }; List ALL = List.of(ALPHABETICAL_DESC, ALPHABETICAL_ASC, DATE_DESC, DATE_ASC); - static Stream flatten(StoreSection section) { - return Stream.concat( - Stream.of(section.getWrapper().getEntry()), - section.getAllChildren().stream().flatMap(section1 -> flatten(section1))); - } - static Optional fromId(String id) { return ALL.stream() .filter(storeSortMode -> storeSortMode.getId().equals(id)) 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 fb94ac61..83c722b9 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -413,6 +413,12 @@ public abstract class DataStorage { if (!newChildren.isEmpty()) { e.setExpanded(true); } + // Force instant to be later in case we are really quick + ThreadHelper.sleep(1); + toAdd.forEach(nc -> { + // Update after parent entry + nc.get().notifyUpdate(false, true); + }); deleteWithChildren(toRemove.toArray(DataStoreEntry[]::new)); addStoreEntriesIfNotPresent(toAdd.stream().map(DataStoreEntryRef::get).toArray(DataStoreEntry[]::new)); @@ -535,12 +541,14 @@ public abstract class DataStorage { return; } - for (DataStoreEntry e : es) { + var toAdd = Arrays.stream(es).filter(e -> { if (storeEntriesSet.contains(e) || getStoreEntryIfPresent(e.getStore(), false).isPresent()) { - return; + return false; } - + return true; + }).toList(); + for (DataStoreEntry e : toAdd) { var syntheticParent = getSyntheticParent(e); if (syntheticParent.isPresent()) { addStoreEntryIfNotPresent(syntheticParent.get()); @@ -558,8 +566,8 @@ public abstract class DataStorage { p.setChildrenCache(null); }); } - this.listeners.forEach(l -> l.onStoreAdd(es)); - for (DataStoreEntry e : es) { + this.listeners.forEach(l -> l.onStoreAdd(toAdd.toArray(DataStoreEntry[]::new))); + for (DataStoreEntry e : toAdd) { e.initializeEntry(); } refreshValidities(true); diff --git a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java index ceb51e74..1eeaa89c 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java @@ -348,8 +348,11 @@ public class DataStoreEntry extends StorageElement { } public void setCategoryUuid(UUID categoryUuid) { + var changed = !Objects.equals(this.categoryUuid, categoryUuid); this.categoryUuid = categoryUuid; - notifyUpdate(false, true); + if (changed) { + notifyUpdate(false, true); + } } @Override @@ -388,7 +391,7 @@ public class DataStoreEntry extends StorageElement { var notesFile = directory.resolve("notes.md"); if (Files.exists(notesFile) && notes == null) { Files.delete(notesFile); - } else { + } else if (notes != null) { Files.writeString(notesFile, notes); } dirty = false; diff --git a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java index 2594f88e..d3adaad3 100644 --- a/app/src/main/java/io/xpipe/app/util/DesktopHelper.java +++ b/app/src/main/java/io/xpipe/app/util/DesktopHelper.java @@ -59,6 +59,10 @@ public class DesktopHelper { } public static void browsePathLocal(Path file) { + if (file == null) { + return; + } + if (!Desktop.getDesktop().isSupported(Desktop.Action.OPEN)) { return; }