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(
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
);
40 case PlainTextWriter plainTextWriter
-> {
41 for (final var sticker
: stickerPacks
) {
42 plainTextWriter
.println("Pack {}: “{}” by “{}” has {} stickers. {}",
43 Hex
.toStringCondensed(sticker
.packId().serialize()),
46 sticker
.stickers().size(),
47 sticker
.url().getUrl());
53 private record JsonStickerPack(
60 List
<JsonSticker
> stickers
63 JsonStickerPack(StickerPack stickerPack
) {
64 this(Hex
.toStringCondensed(stickerPack
.packId().serialize()),
65 stickerPack
.url().getUrl().toString(),
66 stickerPack
.installed(),
69 stickerPack
.cover().map(JsonSticker
::new).orElse(null),
70 stickerPack
.stickers().stream().map(JsonSticker
::new).toList());
73 private record JsonSticker(int id
, String emoji
, String contentType
) {
75 JsonSticker(StickerPack
.Sticker sticker
) {
76 this(sticker
.id(), sticker
.emoji(), sticker
.contentType());