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 a2c4f32a6..728c00a48 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -56,6 +56,9 @@ public abstract class DataStorage { private final Map storeEntryMapCache = new HashMap<>(); private final Map storeMoveCache = new IdentityHashMap<>(); + @Getter + protected boolean entriesAvailable; + @Getter @Setter protected DataStoreCategory selectedCategory; @@ -1217,7 +1220,12 @@ public abstract class DataStorage { return parent.isPresent() && parent.get().equals(entry) && !isParentLoop(entry); }) .collect(Collectors.toSet()); - entry.setChildrenCache(children); + + // Don't build caches too early to prevent wrong caches + if (entriesAvailable) { + entry.setChildrenCache(children); + } + return children; } diff --git a/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java b/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java index d169c140d..cd0230a6a 100644 --- a/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/ImpersistentStorage.java @@ -59,6 +59,8 @@ public class ImpersistentStorage extends DataStorage { LOCAL_ID, DataStorage.DEFAULT_CATEGORY_UUID, "Local Machine", new LocalStore()); storeEntries.put(e, e); e.validate(); + + entriesAvailable = true; } @Override diff --git a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java index e0d6252d4..cd75fc584 100644 --- a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java @@ -275,7 +275,8 @@ public class StandardStorage extends DataStorage { addStoreEntryIfNotPresent(entry1); }); }); - // Update validities from synthetic parent changes + entriesAvailable = true; + // Update validities from synthetic parent changes and entries available flag changes refreshEntries(); // Remove user inaccessible entries only when everything is valid, so we can check the parent hierarchies filterPerUserEntries(storeEntries.keySet()); diff --git a/dist/changelog/21.0.md b/dist/changelog/21.0.md index a6e4e4cee..75a528261 100644 --- a/dist/changelog/21.0.md +++ b/dist/changelog/21.0.md @@ -53,6 +53,7 @@ The scripting system has been completely reworked with the goal of becoming simp ## Fixes - Fix various performance issues +- Fix various entries like SSH connections or SSH config entries sometimes disappearing on restart - Fix SSH config write, e.g. for vscode SSH, not properly passing all configured options - Fix SSH config identity detection not working for patterns in host entries - Fix custom SSH agent setting not always overriding other agents configured in SSH config diff --git a/version b/version index 1e4d5a468..d352ddf67 100644 --- a/version +++ b/version @@ -1 +1 @@ -21.0-3 +21.0-4