]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/StickerHelper.java
Add addStickerPack command
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / StickerHelper.java
index 915f3d71fe32f537282acf261ed8bc7db607eafb..daa5aeb60820498bef81ee601a79038e49c1ef3a 100644 (file)
@@ -5,6 +5,7 @@ import org.asamk.signal.manager.api.StickerPackId;
 import org.asamk.signal.manager.internal.SignalDependencies;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
+import org.asamk.signal.manager.storage.stickers.StickerPack;
 import org.asamk.signal.manager.util.IOUtils;
 import org.signal.libsignal.protocol.InvalidMessageException;
 import org.slf4j.Logger;
@@ -28,15 +29,33 @@ public class StickerHelper {
         this.context = context;
     }
 
+    public StickerPack addOrUpdateStickerPack(
+            final StickerPackId stickerPackId, final byte[] stickerPackKey, final boolean installed
+    ) {
+        final var sticker = account.getStickerStore().getStickerPack(stickerPackId);
+        if (sticker != null) {
+            if (sticker.isInstalled() != installed) {
+                account.getStickerStore().updateStickerPackInstalled(sticker.packId(), installed);
+            }
+            return sticker;
+        }
+
+        if (stickerPackKey == null) {
+            return null;
+        }
+
+        final var newSticker = new StickerPack(-1, stickerPackId, stickerPackKey, installed);
+        account.getStickerStore().addStickerPack(newSticker);
+        return newSticker;
+    }
+
     public JsonStickerPack getOrRetrieveStickerPack(
             StickerPackId packId, byte[] packKey
     ) throws InvalidStickerException {
-        if (!context.getStickerPackStore().existsStickerPack(packId)) {
-            try {
-                retrieveStickerPack(packId, packKey);
-            } catch (InvalidMessageException | IOException e) {
-                throw new InvalidStickerException("Failed to retrieve sticker pack");
-            }
+        try {
+            retrieveStickerPack(packId, packKey);
+        } catch (InvalidMessageException | IOException e) {
+            throw new InvalidStickerException("Failed to retrieve sticker pack");
         }
         final JsonStickerPack manifest;
         try {
@@ -48,6 +67,10 @@ public class StickerHelper {
     }
 
     public void retrieveStickerPack(StickerPackId packId, byte[] packKey) throws InvalidMessageException, IOException {
+        if (context.getStickerPackStore().existsStickerPack(packId)) {
+            logger.debug("Sticker pack {} already downloaded.", Hex.toStringCondensed(packId.serialize()));
+            return;
+        }
         logger.debug("Retrieving sticker pack {}.", Hex.toStringCondensed(packId.serialize()));
         final var messageReceiver = dependencies.getMessageReceiver();
         final var manifest = messageReceiver.retrieveStickerManifest(packId.serialize(), packKey);