]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/commands/ListStickerPacksCommand.java
Reformat files
[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,
31 final Manager c,
32 final OutputWriter outputWriter
33 ) throws CommandException {
34 final var stickerPacks = c.getStickerPacks();
35 switch (outputWriter) {
36 case JsonWriter jsonWriter -> {
37 final var jsonStickerPacks = stickerPacks.stream().map(JsonStickerPack::new).toList();
38 jsonWriter.write(jsonStickerPacks);
39 }
40 case PlainTextWriter plainTextWriter -> {
41 for (final var sticker : stickerPacks) {
42 plainTextWriter.println("Pack {}: “{}” by “{}” has {} stickers. {}",
43 Hex.toStringCondensed(sticker.packId().serialize()),
44 sticker.title(),
45 sticker.author(),
46 sticker.stickers().size(),
47 sticker.url().getUrl());
48 }
49 }
50 }
51 }
52
53 private record JsonStickerPack(
54 String packId,
55 String url,
56 boolean installed,
57 String title,
58 String author,
59 JsonSticker cover,
60 List<JsonSticker> stickers
61 ) {
62
63 JsonStickerPack(StickerPack stickerPack) {
64 this(Hex.toStringCondensed(stickerPack.packId().serialize()),
65 stickerPack.url().getUrl().toString(),
66 stickerPack.installed(),
67 stickerPack.title(),
68 stickerPack.author(),
69 stickerPack.cover().map(JsonSticker::new).orElse(null),
70 stickerPack.stickers().stream().map(JsonSticker::new).toList());
71 }
72
73 private record JsonSticker(int id, String emoji, String contentType) {
74
75 JsonSticker(StickerPack.Sticker sticker) {
76 this(sticker.id(), sticker.emoji(), sticker.contentType());
77 }
78 }
79 }
80 }