mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-09-19 22:01:12 +00:00
Properly update state on children refresh
This commit is contained in:
parent
0a8881a9cf
commit
bdcc6a1295
|
@ -10,7 +10,7 @@ import java.util.function.Supplier;
|
||||||
public class DataStateProviderImpl extends DataStateProvider {
|
public class DataStateProviderImpl extends DataStateProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setState(DataStore store, Object value) {
|
public void setState(DataStore store, DataStoreState value) {
|
||||||
if (DataStorage.get() == null) {
|
if (DataStorage.get() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,7 @@ import io.xpipe.app.issue.ErrorEvent;
|
||||||
import io.xpipe.app.prefs.AppPrefs;
|
import io.xpipe.app.prefs.AppPrefs;
|
||||||
import io.xpipe.app.util.FixedHierarchyStore;
|
import io.xpipe.app.util.FixedHierarchyStore;
|
||||||
import io.xpipe.app.util.ThreadHelper;
|
import io.xpipe.app.util.ThreadHelper;
|
||||||
import io.xpipe.core.store.DataStore;
|
import io.xpipe.core.store.*;
|
||||||
import io.xpipe.core.store.DataStoreId;
|
|
||||||
import io.xpipe.core.store.FixedChildStore;
|
|
||||||
import io.xpipe.core.store.LocalStore;
|
|
||||||
import io.xpipe.core.util.UuidHelper;
|
import io.xpipe.core.util.UuidHelper;
|
||||||
import javafx.util.Pair;
|
import javafx.util.Pair;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -255,7 +252,7 @@ public abstract class DataStorage {
|
||||||
nc.getStore().getFixedId() == ((FixedChildStore) entry.getStore()).getFixedId())
|
nc.getStore().getFixedId() == ((FixedChildStore) entry.getStore()).getFixedId())
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
return new Pair<>(entry, found);
|
return new Pair<DataStoreEntry, DataStoreEntryRef<? extends FixedChildStore>>(entry, found);
|
||||||
})
|
})
|
||||||
.filter(en -> en.getValue() != null)
|
.filter(en -> en.getValue() != null)
|
||||||
.toList();
|
.toList();
|
||||||
|
@ -268,6 +265,13 @@ public abstract class DataStorage {
|
||||||
addStoreEntriesIfNotPresent(toAdd.stream().map(DataStoreEntryRef::get).toArray(DataStoreEntry[]::new));
|
addStoreEntriesIfNotPresent(toAdd.stream().map(DataStoreEntryRef::get).toArray(DataStoreEntry[]::new));
|
||||||
toUpdate.forEach(pair -> {
|
toUpdate.forEach(pair -> {
|
||||||
pair.getKey().setStoreInternal(pair.getValue().getStore(), false);
|
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();
|
saveAsync();
|
||||||
return !newChildren.isEmpty();
|
return !newChildren.isEmpty();
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class DataStoreEntry extends StorageElement {
|
||||||
UUID categoryUuid;
|
UUID categoryUuid;
|
||||||
|
|
||||||
@NonFinal
|
@NonFinal
|
||||||
Object storePersistentState;
|
DataStoreState storePersistentState;
|
||||||
|
|
||||||
@NonFinal
|
@NonFinal
|
||||||
JsonNode storePersistentStateNode;
|
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);
|
var changed = !Objects.equals(storePersistentState, value);
|
||||||
this.storePersistentState = value;
|
this.storePersistentState = value;
|
||||||
this.storePersistentStateNode = JacksonMapper.getDefault().valueToTree(value);
|
this.storePersistentStateNode = JacksonMapper.getDefault().valueToTree(value);
|
||||||
|
|
|
@ -27,4 +27,13 @@ public class ShellStoreState extends DataStoreState implements OsNameState {
|
||||||
public boolean isRunning() {
|
public boolean isRunning() {
|
||||||
return running != null ? running : false;
|
return running != null ? running : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void merge(DataStoreState newer) {
|
||||||
|
var shellStoreState = (ShellStoreState) newer;
|
||||||
|
osType = useNewer(osType, shellStoreState.getOsType());
|
||||||
|
osName = useNewer(osName, shellStoreState.getOsName());
|
||||||
|
shellDialect = useNewer(shellDialect, shellStoreState.getShellDialect());
|
||||||
|
running = useNewer(running, shellStoreState.getRunning());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,16 @@ import lombok.SneakyThrows;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
public class DataStoreState {
|
public abstract class DataStoreState {
|
||||||
|
|
||||||
public DataStoreState() {}
|
public DataStoreState() {}
|
||||||
|
|
||||||
|
protected static <T> T useNewer(T older, T newer) {
|
||||||
|
return newer != null ? newer : older;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void merge(DataStoreState newer);
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public String toString() {
|
public String toString() {
|
||||||
var tree = JacksonMapper.getDefault().valueToTree(this);
|
var tree = JacksonMapper.getDefault().valueToTree(this);
|
||||||
|
|
|
@ -20,7 +20,7 @@ public abstract class DataStateProvider {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void setState(DataStore store, Object value);
|
public abstract void setState(DataStore store, DataStoreState value);
|
||||||
|
|
||||||
public abstract <T extends DataStoreState> T getState(DataStore store, Supplier<T> def);
|
public abstract <T extends DataStoreState> T getState(DataStore store, Supplier<T> def);
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import io.xpipe.app.storage.DataStoreEntryRef;
|
||||||
import io.xpipe.app.util.Validators;
|
import io.xpipe.app.util.Validators;
|
||||||
import io.xpipe.core.process.ScriptSnippet;
|
import io.xpipe.core.process.ScriptSnippet;
|
||||||
import io.xpipe.core.process.ShellControl;
|
import io.xpipe.core.process.ShellControl;
|
||||||
|
import io.xpipe.core.process.ShellStoreState;
|
||||||
import io.xpipe.core.process.SimpleScriptSnippet;
|
import io.xpipe.core.process.SimpleScriptSnippet;
|
||||||
import io.xpipe.core.store.DataStore;
|
import io.xpipe.core.store.DataStore;
|
||||||
import io.xpipe.core.store.DataStoreState;
|
import io.xpipe.core.store.DataStoreState;
|
||||||
|
@ -163,6 +164,13 @@ public abstract class ScriptStore extends JacksonizedValue implements DataStore,
|
||||||
public static class State extends DataStoreState {
|
public static class State extends DataStoreState {
|
||||||
boolean isDefault;
|
boolean isDefault;
|
||||||
boolean bringToShell;
|
boolean bringToShell;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void merge(DataStoreState newer) {
|
||||||
|
var s = (State) newer;
|
||||||
|
isDefault = s.isDefault;
|
||||||
|
bringToShell = s.bringToShell;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue