Properly update state on children refresh

This commit is contained in:
crschnick committed 2023-12-08 04:39:44 +00:00
1 parent 0a8881a9cf
commit bdcc6a1295
7 files changed
+37 -10

No files matched your search

@@ -10,7 +10,7 @@ import java.util.function.Supplier;
public class DataStateProviderImpl extends DataStateProvider {
@Override
public void setState(DataStore store, Object value) {
public void setState(DataStore store, DataStoreState value) {
if (DataStorage.get() == null) {
return;
}
@@ -5,10 +5,7 @@ import io.xpipe.app.issue.ErrorEvent;
import io.xpipe.app.prefs.AppPrefs;
import io.xpipe.app.util.FixedHierarchyStore;
import io.xpipe.app.util.ThreadHelper;
import io.xpipe.core.store.DataStore;
import io.xpipe.core.store.DataStoreId;
import io.xpipe.core.store.FixedChildStore;
import io.xpipe.core.store.LocalStore;
import io.xpipe.core.store.*;
import io.xpipe.core.util.UuidHelper;
import javafx.util.Pair;
import lombok.Getter;
@@ -255,7 +252,7 @@ public abstract class DataStorage {
nc.getStore().getFixedId() == ((FixedChildStore) entry.getStore()).getFixedId())
.findFirst()
.orElse(null);
return new Pair<>(entry, found);
return new Pair<DataStoreEntry, DataStoreEntryRef<? extends FixedChildStore>>(entry, found);
})
.filter(en -> en.getValue() != null)
.toList();
@@ -268,6 +265,13 @@ public abstract class DataStorage {
addStoreEntriesIfNotPresent(toAdd.stream().map(DataStoreEntryRef::get).toArray(DataStoreEntry[]::new));
toUpdate.forEach(pair -> {
pair.getKey().setStoreInternal(pair.getValue().getStore(), false);
// Update state by merging
if (pair.getKey().getStorePersistentState() != null && pair.getValue().get().getStorePersistentState() != null) {
var mergedState = pair.getKey().getStorePersistentState().deepCopy();
mergedState.merge(pair.getValue().get().getStorePersistentState());
pair.getKey().setStorePersistentState(mergedState);
}
});
saveAsync();
return !newChildren.isEmpty();
@@ -59,7 +59,7 @@ public class DataStoreEntry extends StorageElement {
UUID categoryUuid;
@NonFinal
Object storePersistentState;
DataStoreState storePersistentState;
@NonFinal
JsonNode storePersistentStateNode;
@@ -284,7 +284,7 @@ public class DataStoreEntry extends StorageElement {
}
}
public void setStorePersistentState(Object value) {
public void setStorePersistentState(DataStoreState value) {
var changed = !Objects.equals(storePersistentState, value);
this.storePersistentState = value;
this.storePersistentStateNode = JacksonMapper.getDefault().valueToTree(value);