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 switch (outputWriter
) {
34 case JsonWriter jsonWriter
-> {
35 final var jsonStickerPacks
= stickerPacks
.stream().map(JsonStickerPack
::new).toList();
36 jsonWriter
.write(jsonStickerPacks
);
38 case PlainTextWriter plainTextWriter
-> {
39 for (final var sticker
: stickerPacks
) {
40 plainTextWriter
.println("Pack {}: “{}” by “{}” has {} stickers. {}",
41 Hex
.toStringCondensed(sticker
.packId().serialize()),
44 sticker
.stickers().size(),
45 sticker
.url().getUrl());
51 private record JsonStickerPack(
58 List
<JsonSticker
> stickers
61 JsonStickerPack(StickerPack stickerPack
) {
62 this(Hex
.toStringCondensed(stickerPack
.packId().serialize()),
63 stickerPack
.url().getUrl().toString(),
64 stickerPack
.installed(),
67 stickerPack
.cover().map(JsonSticker
::new).orElse(null),
68 stickerPack
.stickers().stream().map(JsonSticker
::new).toList());
71 private record JsonSticker(int id
, String emoji
, String contentType
) {
73 JsonSticker(StickerPack
.Sticker sticker
) {
74 this(sticker
.id(), sticker
.emoji(), sticker
.contentType());