Add pagination to listgroups command (#3226)

This commit is contained in:
Tadhg Boyle 2021-11-30 11:52:43 -08:00 committed by GitHub
parent e227d96cbf
commit 64bd8b5eaf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 12 deletions

View File

@ -69,7 +69,9 @@ luckperms {
flags brigadier:string greedy_phrase;
}
}
listgroups;
listgroups {
page brigadier:integer;
}
createtrack {
name brigadier:string single_word;
}

View File

@ -99,8 +99,9 @@ public enum CommandSpec {
DELETE_GROUP("/%s deletegroup <group>",
arg("name", true)
),
LIST_GROUPS("/%s listgroups"),
LIST_GROUPS("/%s listgroups",
arg("page", false)
),
CREATE_TRACK("/%s createtrack <track>",
arg("name", true)
),

View File

@ -30,17 +30,20 @@ import me.lucko.luckperms.common.command.access.CommandPermission;
import me.lucko.luckperms.common.command.spec.CommandSpec;
import me.lucko.luckperms.common.command.utils.ArgumentList;
import me.lucko.luckperms.common.locale.Message;
import me.lucko.luckperms.common.model.Group;
import me.lucko.luckperms.common.model.Track;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Iterators;
import me.lucko.luckperms.common.util.Predicates;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class ListGroups extends SingleCommand {
public ListGroups() {
super(CommandSpec.LIST_GROUPS, "ListGroups", CommandPermission.LIST_GROUPS, Predicates.alwaysFalse());
super(CommandSpec.LIST_GROUPS, "ListGroups", CommandPermission.LIST_GROUPS, Predicates.notInRange(0, 1));
}
@Override
@ -53,15 +56,29 @@ public class ListGroups extends SingleCommand {
return;
}
Message.GROUPS_LIST.send(sender);
plugin.getGroupManager().getAll().values().stream()
.sorted((o1, o2) -> {
int page = args.getIntOrDefault(0, 1);
int pageIndex = page - 1;
List<Group> groups = plugin.getGroupManager().getAll().values().stream().sorted((o1, o2) -> {
int i = Integer.compare(o2.getWeight().orElse(0), o1.getWeight().orElse(0));
return i != 0 ? i : o1.getName().compareToIgnoreCase(o2.getName());
})
.forEach(group -> {
List<String> tracks = plugin.getTrackManager().getAll().values().stream().filter(t -> t.containsGroup(group)).map(Track::getName).collect(Collectors.toList());
Message.GROUPS_LIST_ENTRY.send(sender, group, group.getWeight().orElse(0), tracks);
});
}).collect(Collectors.toList());
List<List<Group>> pages = Iterators.divideIterable(groups, 8);
if (pageIndex < 0 || pageIndex >= pages.size()) {
page = 1;
pageIndex = 0;
}
Message.SEARCH_SHOWING_GROUPS.send(sender, page, pages.size(), groups.size());
Message.GROUPS_LIST.send(sender);
Collection<? extends Track> allTracks = plugin.getTrackManager().getAll().values();
for (Group group : pages.get(pageIndex)) {
List<String> tracks = allTracks.stream().filter(t -> t.containsGroup(group)).map(Track::getName).collect(Collectors.toList());
Message.GROUPS_LIST_ENTRY.send(sender, group, group.getWeight().orElse(0), tracks);
}
}
}