]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/jobs/RetrieveStickerPackJob.java
Change stickerId to hex everywhere
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / jobs / RetrieveStickerPackJob.java
1 package org.asamk.signal.manager.jobs;
2
3 import org.asamk.signal.manager.JsonStickerPack;
4 import org.asamk.signal.manager.api.StickerPackId;
5 import org.asamk.signal.manager.helper.Context;
6 import org.asamk.signal.manager.util.IOUtils;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9 import org.whispersystems.libsignal.InvalidMessageException;
10 import org.whispersystems.signalservice.internal.util.Hex;
11
12 import java.io.IOException;
13 import java.util.HashSet;
14
15 public class RetrieveStickerPackJob implements Job {
16
17 private final static Logger logger = LoggerFactory.getLogger(RetrieveStickerPackJob.class);
18
19 private final StickerPackId packId;
20 private final byte[] packKey;
21
22 public RetrieveStickerPackJob(final StickerPackId packId, final byte[] packKey) {
23 this.packId = packId;
24 this.packKey = packKey;
25 }
26
27 @Override
28 public void run(Context context) {
29 if (context.getStickerPackStore().existsStickerPack(packId)) {
30 logger.debug("Sticker pack {} already downloaded.", Hex.toStringCondensed(packId.serialize()));
31 return;
32 }
33 logger.debug("Retrieving sticker pack {}.", Hex.toStringCondensed(packId.serialize()));
34 try {
35 final var manifest = context.getDependencies()
36 .getMessageReceiver()
37 .retrieveStickerManifest(packId.serialize(), packKey);
38
39 final var stickerIds = new HashSet<Integer>();
40 if (manifest.getCover().isPresent()) {
41 stickerIds.add(manifest.getCover().get().getId());
42 }
43 for (var sticker : manifest.getStickers()) {
44 stickerIds.add(sticker.getId());
45 }
46
47 for (var id : stickerIds) {
48 final var inputStream = context.getDependencies()
49 .getMessageReceiver()
50 .retrieveSticker(packId.serialize(), packKey, id);
51 context.getStickerPackStore().storeSticker(packId, id, o -> IOUtils.copyStream(inputStream, o));
52 }
53
54 final var jsonManifest = new JsonStickerPack(manifest.getTitle().orNull(),
55 manifest.getAuthor().orNull(),
56 manifest.getCover()
57 .transform(c -> new JsonStickerPack.JsonSticker(c.getId(),
58 c.getEmoji(),
59 String.valueOf(c.getId()),
60 c.getContentType()))
61 .orNull(),
62 manifest.getStickers()
63 .stream()
64 .map(c -> new JsonStickerPack.JsonSticker(c.getId(),
65 c.getEmoji(),
66 String.valueOf(c.getId()),
67 c.getContentType()))
68 .toList());
69 context.getStickerPackStore().storeManifest(packId, jsonManifest);
70 } catch (IOException e) {
71 logger.warn("Failed to retrieve sticker pack {}: {}",
72 Hex.toStringCondensed(packId.serialize()),
73 e.getMessage());
74 } catch (InvalidMessageException e) {
75 logger.warn("Failed to retrieve sticker pack {}, invalid pack data: {}",
76 Hex.toStringCondensed(packId.serialize()),
77 e.getMessage());
78 }
79 }
80 }