]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListStickerPacksCommand.java
Refactor selfNumber in send 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 sticker.url().getUrl());
44 }
45 }
46 }
47
48 private record JsonStickerPack(
49 String packId,
50 String url,
51 boolean installed,
52 String title,
53 String author,
54 JsonSticker cover,
55 List<JsonSticker> stickers
56 ) {
57
58 JsonStickerPack(StickerPack stickerPack) {
59 this(Hex.toStringCondensed(stickerPack.packId().serialize()),
60 stickerPack.url().getUrl().toString(),
61 stickerPack.installed(),
62 stickerPack.title(),
63 stickerPack.author(),
64 stickerPack.cover().map(JsonSticker::new).orElse(null),
65 stickerPack.stickers().stream().map(JsonSticker::new).toList());
66 }
67
68 private record JsonSticker(int id, String emoji, String contentType) {
69
70 JsonSticker(StickerPack.Sticker sticker) {
71 this(sticker.id(), sticker.emoji(), sticker.contentType());
72 }
73 }
74 }
75 }