1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
4 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
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
;
14 import java
.util
.List
;
16 public class ListStickerPacksCommand
implements JsonRpcLocalCommand
{
19 public String
getName() {
20 return "listStickerPacks";
24 public void attachToSubparser(final Subparser subparser
) {
25 subparser
.help("Show a list of known sticker packs.");
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()),
42 sticker
.stickers().size(),
43 sticker
.url().getUrl());
48 private record JsonStickerPack(
55 List
<JsonSticker
> stickers
58 JsonStickerPack(StickerPack stickerPack
) {
59 this(Hex
.toStringCondensed(stickerPack
.packId().serialize()),
60 stickerPack
.url().getUrl().toString(),
61 stickerPack
.installed(),
64 stickerPack
.cover().map(JsonSticker
::new).orElse(null),
65 stickerPack
.stickers().stream().map(JsonSticker
::new).toList());
68 private record JsonSticker(int id
, String emoji
, String contentType
) {
70 JsonSticker(StickerPack
.Sticker sticker
) {
71 this(sticker
.id(), sticker
.emoji(), sticker
.contentType());