]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListStickerPacksCommand.java
Implement listStickerPacks command
[signal-cli] / src / main / java / org / asamk / signal / commands / ListStickerPacksCommand.java
1 package org.asamk.signal.commands;
2
3 import net.sourceforge.argparse4j.inf.Namespace;
4 import net.sourceforge.argparse4j.inf.Subparser;
5
6 import org.asamk.signal.commands.exceptions.CommandException;
7 import org.asamk.signal.manager.Manager;
8 import org.asamk.signal.manager.api.StickerPack;
9 import org.asamk.signal.output.JsonWriter;
10 import org.asamk.signal.output.OutputWriter;
11 import org.asamk.signal.output.PlainTextWriter;
12 import org.asamk.signal.util.Hex;
13
14 import java.util.List;
15
16 public class ListStickerPacksCommand implements JsonRpcLocalCommand {
17
18 @Override
19 public String getName() {
20 return "listStickerPacks";
21 }
22
23 @Override
24 public void attachToSubparser(final Subparser subparser) {
25 subparser.help("Show a list of known sticker packs.");
26 }
27
28 @Override
29 public void handleCommand(
30 final Namespace ns, final Manager c, final OutputWriter outputWriter
31 ) throws CommandException {
32 final var stickerPacks = c.getStickerPacks();
33 if (outputWriter instanceof JsonWriter jsonWriter) {
34 final var jsonStickerPacks = stickerPacks.stream().map(JsonStickerPack::new).toList();
35 jsonWriter.write(jsonStickerPacks);
36 } else if (outputWriter instanceof PlainTextWriter plainTextWriter) {
37 for (final var sticker : stickerPacks) {
38 plainTextWriter.println("Pack {}: “{}” by “{}” has {} stickers",
39 Hex.toStringCondensed(sticker.packId().serialize()),
40 sticker.title(),
41 sticker.author(),
42 sticker.stickers().size());
43 }
44 }
45 }
46
47 private record JsonStickerPack(
48 String packId, boolean installed, String title, String author, JsonSticker cover, List<JsonSticker> stickers
49 ) {
50
51 JsonStickerPack(StickerPack stickerPack) {
52 this(Hex.toStringCondensed(stickerPack.packId().serialize()),
53 stickerPack.installed(),
54 stickerPack.title(),
55 stickerPack.author(),
56 stickerPack.cover().map(JsonSticker::new).orElse(null),
57 stickerPack.stickers().stream().map(JsonSticker::new).toList());
58 }
59
60 private record JsonSticker(int id, String emoji, String contentType) {
61
62 JsonSticker(StickerPack.Sticker sticker) {
63 this(sticker.id(), sticker.emoji(), sticker.contentType());
64 }
65 }
66 }
67 }