Desktop rework

This commit is contained in:
crschnick
2024-04-16 08:58:48 +00:00
parent d9e23b9ebf
commit dd3ccf37d3
27 changed files with 1215 additions and 42 deletions
@@ -0,0 +1,51 @@
package io.xpipe.core.store;
public interface SingletonSessionStore<T extends SingletonSessionStore.Session> extends InternalCacheDataStore {
static abstract class Session {
public abstract boolean isRunning();
public abstract void start() throws Exception;
public abstract void stop() throws Exception;
}
void onSessionUpdate(boolean active);
T newSession() throws Exception;
Class<?> getSessionClass();
@SuppressWarnings("unchecked")
default T getSession() {
return (T) getCache("session", getSessionClass(), null);
}
default void startIfNeeded() throws Exception {
var s = getSession();
if (s != null) {
if (s.isRunning()) {
return;
}
s.start();
return;
}
s = newSession();
s.start();
setCache("session", s);
onSessionUpdate(true);
}
default void stopIfNeeded() throws Exception {
var ex = getSession();
setCache("session", null);
if (ex != null) {
ex.stop();
onSessionUpdate(false);
}
}
}
@@ -0,0 +1,33 @@
package io.xpipe.core.store;
public interface SingletonToggleSessionStore<T extends SingletonSessionStore.Session> extends SingletonSessionStore<T>, StatefulDataStore<ToggleSessionState>, ValidatableStore {
@Override
default Class<ToggleSessionState> getStateClass() {
return ToggleSessionState.class;
}
@Override
public default void onSessionUpdate(boolean active) {
var c = getState();
c.setRunning(active);
if (!active) {
c.setEnabled(false);
} else {
c.setEnabled(true);
}
setState(c);
}
@Override
public default void validate() throws Exception {
if (getState().getEnabled() != null) {
if (getState().getEnabled()) {
startIfNeeded();
} else {
stopIfNeeded();
}
}
}
}
@@ -0,0 +1,23 @@
package io.xpipe.core.store;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import lombok.extern.jackson.Jacksonized;
@Getter
@Setter
@SuperBuilder
@Jacksonized
public class ToggleSessionState extends DataStoreState {
Boolean enabled;
Boolean running;
@Override
public void merge(DataStoreState newer) {
var state = (ToggleSessionState) newer;
enabled = useNewer(enabled, state.enabled);
running = useNewer(running, state.running);
}
}