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