diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/CategoryAddExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/CategoryAddExchangeImpl.java new file mode 100644 index 000000000..0264eea6e --- /dev/null +++ b/app/src/main/java/io/xpipe/app/beacon/impl/CategoryAddExchangeImpl.java @@ -0,0 +1,20 @@ +package io.xpipe.app.beacon.impl; + +import com.sun.net.httpserver.HttpExchange; +import io.xpipe.app.issue.ErrorEvent; +import io.xpipe.app.storage.DataStorage; +import io.xpipe.app.storage.DataStoreCategory; +import io.xpipe.app.storage.DataStoreEntry; +import io.xpipe.beacon.api.CategoryAddExchange; +import io.xpipe.beacon.api.ConnectionAddExchange; +import io.xpipe.core.util.ValidationException; + +public class CategoryAddExchangeImpl extends CategoryAddExchange { + + @Override + public Object handle(HttpExchange exchange, Request msg) throws Throwable { + var cat = DataStoreCategory.createNew(msg.getParent(), msg.getName()); + DataStorage.get().addStoreCategory(cat); + return Response.builder().category(cat.getUuid()).build(); + } +} diff --git a/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionAddExchangeImpl.java b/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionAddExchangeImpl.java index 7cf0c747f..b1c8ec979 100644 --- a/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionAddExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/beacon/impl/ConnectionAddExchangeImpl.java @@ -18,6 +18,9 @@ public class ConnectionAddExchangeImpl extends ConnectionAddExchange { } var entry = DataStoreEntry.createNew(msg.getName(), msg.getData()); + if (msg.getCategory() != null) { + entry.setCategoryUuid(msg.getCategory()); + } try { DataStorage.get().addStoreEntryInProgress(entry); if (msg.getValidate()) { diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index 7d15b1d61..a54dd846a 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -132,6 +132,7 @@ open module io.xpipe.app { ConnectionInfoExchangeImpl, ConnectionRemoveExchangeImpl, ConnectionAddExchangeImpl, + CategoryAddExchangeImpl, ConnectionBrowseExchangeImpl, ConnectionTerminalExchangeImpl, ConnectionToggleExchangeImpl, diff --git a/beacon/src/main/java/io/xpipe/beacon/api/CategoryAddExchange.java b/beacon/src/main/java/io/xpipe/beacon/api/CategoryAddExchange.java new file mode 100644 index 000000000..560adc029 --- /dev/null +++ b/beacon/src/main/java/io/xpipe/beacon/api/CategoryAddExchange.java @@ -0,0 +1,37 @@ +package io.xpipe.beacon.api; + +import io.xpipe.beacon.BeaconInterface; +import io.xpipe.core.store.DataStore; +import lombok.Builder; +import lombok.NonNull; +import lombok.Value; +import lombok.extern.jackson.Jacksonized; + +import java.util.UUID; + +public class CategoryAddExchange extends BeaconInterface { + + @Override + public String getPath() { + return "/category/add"; + } + + @Jacksonized + @Builder + @Value + public static class Request { + @NonNull + String name; + + @NonNull + UUID parent; + } + + @Jacksonized + @Builder + @Value + public static class Response { + @NonNull + UUID category; + } +} diff --git a/beacon/src/main/java/io/xpipe/beacon/api/ConnectionAddExchange.java b/beacon/src/main/java/io/xpipe/beacon/api/ConnectionAddExchange.java index fec2a8841..bc887aba5 100644 --- a/beacon/src/main/java/io/xpipe/beacon/api/ConnectionAddExchange.java +++ b/beacon/src/main/java/io/xpipe/beacon/api/ConnectionAddExchange.java @@ -29,6 +29,8 @@ public class ConnectionAddExchange extends BeaconInterface