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