Attach extra data to the editor payload object to allow for tab completion
This commit is contained in:
parent
17da2807cf
commit
9a420403de
@ -30,6 +30,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
|
||||||
import me.lucko.luckperms.common.commands.ArgumentPermissions;
|
import me.lucko.luckperms.common.commands.ArgumentPermissions;
|
||||||
@ -63,10 +64,8 @@ import java.io.StringWriter;
|
|||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.stream.Stream;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class HolderEditor<T extends PermissionHolder> extends SubCommand<T> {
|
public class HolderEditor<T extends PermissionHolder> extends SubCommand<T> {
|
||||||
private static final String USER_ID_PATTERN = "user/";
|
private static final String USER_ID_PATTERN = "user/";
|
||||||
@ -84,22 +83,40 @@ public class HolderEditor<T extends PermissionHolder> extends SubCommand<T> {
|
|||||||
return CommandResult.NO_PERMISSION;
|
return CommandResult.NO_PERMISSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObject data = new JsonObject();
|
// form the payload data
|
||||||
Set<NodeModel> nodes = holder.getEnduringNodes().values().stream().map(NodeModel::fromNode).collect(Collectors.toCollection(LinkedHashSet::new));
|
JsonObject payload = new JsonObject();
|
||||||
data.addProperty("who", id(holder));
|
payload.addProperty("who", id(holder));
|
||||||
data.addProperty("cmdAlias", label);
|
payload.addProperty("whoFriendly", holder.getFriendlyName());
|
||||||
data.addProperty("uploadedBy", sender.getNameWithLocation());
|
if (holder instanceof User) {
|
||||||
data.addProperty("time", System.currentTimeMillis());
|
payload.addProperty("whoUuid", ((User) holder).getUuid().toString());
|
||||||
data.add("nodes", serializePermissions(nodes));
|
}
|
||||||
|
payload.addProperty("cmdAlias", label);
|
||||||
|
payload.addProperty("uploadedBy", sender.getNameWithLocation());
|
||||||
|
payload.addProperty("uploadedByUuid", sender.getUuid().toString());
|
||||||
|
payload.addProperty("time", System.currentTimeMillis());
|
||||||
|
|
||||||
String dataUrl = paste(new GsonBuilder().setPrettyPrinting().create().toJson(data));
|
// attach the holders permissions
|
||||||
|
payload.add("nodes", serializePermissions(holder.getEnduringNodes().values().stream().map(NodeModel::fromNode)));
|
||||||
|
|
||||||
|
// attach an array of all permissions known to the server, to use for tab completion in the editor
|
||||||
|
JsonArray knownPermsArray = new JsonArray();
|
||||||
|
for (String perm : plugin.getPermissionVault().rootAsList()) {
|
||||||
|
knownPermsArray.add(new JsonPrimitive(perm));
|
||||||
|
}
|
||||||
|
payload.add("knownPermissions", knownPermsArray);
|
||||||
|
|
||||||
|
// upload the payload data to gist
|
||||||
|
String dataUrl = paste(new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create().toJson(payload));
|
||||||
if (dataUrl == null) {
|
if (dataUrl == null) {
|
||||||
Message.EDITOR_UPLOAD_FAILURE.send(sender);
|
Message.EDITOR_UPLOAD_FAILURE.send(sender);
|
||||||
return CommandResult.STATE_ERROR;
|
return CommandResult.STATE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extract the information we need from the gist url
|
||||||
List<String> parts = Splitter.on('/').splitToList(dataUrl);
|
List<String> parts = Splitter.on('/').splitToList(dataUrl);
|
||||||
String id = "?" + parts.get(4) + "/" + parts.get(6);
|
String id = "?" + parts.get(4) + "/" + parts.get(6);
|
||||||
|
|
||||||
|
// form a url for the editor
|
||||||
String url = plugin.getConfiguration().get(ConfigKeys.WEB_EDITOR_URL_PATTERN) + id;
|
String url = plugin.getConfiguration().get(ConfigKeys.WEB_EDITOR_URL_PATTERN) + id;
|
||||||
|
|
||||||
Message.EDITOR_URL.send(sender);
|
Message.EDITOR_URL.send(sender);
|
||||||
@ -171,10 +188,9 @@ public class HolderEditor<T extends PermissionHolder> extends SubCommand<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JsonArray serializePermissions(Set<NodeModel> nodes) {
|
private static JsonArray serializePermissions(Stream<NodeModel> nodes) {
|
||||||
JsonArray arr = new JsonArray();
|
JsonArray arr = new JsonArray();
|
||||||
|
nodes.forEach(node -> {
|
||||||
for (NodeModel node : nodes) {
|
|
||||||
JsonObject attributes = new JsonObject();
|
JsonObject attributes = new JsonObject();
|
||||||
attributes.addProperty("permission", node.getPermission());
|
attributes.addProperty("permission", node.getPermission());
|
||||||
attributes.addProperty("value", node.getValue());
|
attributes.addProperty("value", node.getValue());
|
||||||
@ -196,8 +212,7 @@ public class HolderEditor<T extends PermissionHolder> extends SubCommand<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
arr.add(attributes);
|
arr.add(attributes);
|
||||||
}
|
});
|
||||||
|
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,11 +32,13 @@ import com.google.common.base.Splitter;
|
|||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores a collection of all permissions known to the platform.
|
* Stores a collection of all permissions known to the platform.
|
||||||
@ -98,6 +100,10 @@ public class PermissionVault implements Runnable {
|
|||||||
return ImmutableSet.copyOf(knownPermissions);
|
return ImmutableSet.copyOf(knownPermissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> rootAsList() {
|
||||||
|
return rootNode.makeImmutableCopy().getNodeEndings().stream().map(Map.Entry::getValue).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return rootNode.getDeepSize();
|
return rootNode.getDeepSize();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user