diff --git a/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartAction.java b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartAction.java new file mode 100644 index 000000000..b584f667e --- /dev/null +++ b/ext/base/src/main/java/io/xpipe/ext/base/store/StoreRestartAction.java @@ -0,0 +1,59 @@ +package io.xpipe.ext.base.store; + +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.ext.ActionProvider; +import io.xpipe.app.storage.DataStoreEntryRef; +import io.xpipe.core.store.DataStore; +import javafx.beans.value.ObservableValue; +import lombok.Value; + +public class StoreRestartAction implements ActionProvider { + + @Override + public LeafDataStoreCallSite getLeafDataStoreCallSite() { + return new LeafDataStoreCallSite() { + + @Override + public ActionProvider.Action createAction(DataStoreEntryRef store) { + return new Action(store); + } + + @Override + public Class getApplicableClass() { + return DataStore.class; + } + + @Override + public ObservableValue getName(DataStoreEntryRef store) { + return AppI18n.observable("restart"); + } + + @Override + public String getIcon(DataStoreEntryRef store) { + return "mdi2r-restart"; + } + + @Override + public boolean requiresValidStore() { + return false; + } + + @Override + public boolean isApplicable(DataStoreEntryRef o) { + return o.getStore() instanceof StartableStore && o.getStore() instanceof StoppableStore; + } + }; + } + + @Value + static class Action implements ActionProvider.Action { + + DataStoreEntryRef entry; + + @Override + public void execute() throws Exception { + ((StoppableStore) entry.getStore()).stop(); + ((StartableStore) entry.getStore()).start(); + } + } +} diff --git a/ext/base/src/main/java/module-info.java b/ext/base/src/main/java/module-info.java index 33428efe8..1667b4a3c 100644 --- a/ext/base/src/main/java/module-info.java +++ b/ext/base/src/main/java/module-info.java @@ -13,6 +13,7 @@ import io.xpipe.ext.base.service.*; import io.xpipe.ext.base.store.StorePauseAction; import io.xpipe.ext.base.store.StoreStartAction; import io.xpipe.ext.base.store.StoreStopAction; +import io.xpipe.ext.base.store.StoreRestartAction; open module io.xpipe.ext.base { exports io.xpipe.ext.base; @@ -76,6 +77,7 @@ open module io.xpipe.ext.base { StoreStopAction, StoreStartAction, StorePauseAction, + StoreRestartAction, ServiceOpenAction, ServiceOpenHttpAction, ServiceOpenHttpsAction, diff --git a/lang/base/strings/translations_en.properties b/lang/base/strings/translations_en.properties index 89742360b..fe7d06d11 100644 --- a/lang/base/strings/translations_en.properties +++ b/lang/base/strings/translations_en.properties @@ -5,6 +5,7 @@ launch=Launch start=Start stop=Stop pause=Pause +restart=Restart refresh=Refresh options=Options newFile=New file