X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/6a1b7dc5975161f59fbb1012dd340c7b6e0198f7..4acc9a96e34995c86c076d9020a40251c726c64c:/src/main/java/org/asamk/signal/manager/Manager.java diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index 07c8b583..56376f0e 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -26,6 +26,7 @@ import org.asamk.signal.storage.groups.GroupInfoV2; import org.asamk.signal.storage.profiles.SignalProfile; import org.asamk.signal.storage.profiles.SignalProfileEntry; import org.asamk.signal.storage.protocol.JsonIdentityKeyStore; +import org.asamk.signal.storage.stickers.Sticker; import org.asamk.signal.util.IOUtils; import org.asamk.signal.util.Util; import org.signal.libsignal.metadata.InvalidMetadataMessageException; @@ -103,6 +104,7 @@ import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo; import org.whispersystems.signalservice.api.messages.multidevice.RequestMessage; import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; +import org.whispersystems.signalservice.api.messages.multidevice.StickerPackOperationMessage; import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; import org.whispersystems.signalservice.api.push.ContactTokenDetails; @@ -871,6 +873,10 @@ public class Manager implements Closeable { byte[] packKey = KeyUtils.createStickerUploadKey(); String packId = messageSender.uploadStickerManifest(manifest, packKey); + Sticker sticker = new Sticker(Hex.fromStringCondensed(packId), packKey); + account.getStickerStore().updateSticker(sticker); + account.save(); + try { return new URI("https", "signal.art", "/addstickers/", "pack_id=" + URLEncoder.encode(packId, StandardCharsets.UTF_8) + "&pack_key=" + URLEncoder.encode(Hex.toStringCondensed(packKey), StandardCharsets.UTF_8)) .toString(); @@ -1409,6 +1415,14 @@ public class Manager implements Closeable { } } } + if (message.getSticker().isPresent()) { + final SignalServiceDataMessage.Sticker messageSticker = message.getSticker().get(); + Sticker sticker = account.getStickerStore().getSticker(messageSticker.getPackId()); + if (sticker == null) { + sticker = new Sticker(messageSticker.getPackId(), messageSticker.getPackKey()); + account.getStickerStore().updateSticker(sticker); + } + } return actions; } @@ -1647,7 +1661,7 @@ public class Manager implements Closeable { if (rm.isBlockedListRequest()) { actions.add(SendSyncBlockedListAction.create()); } - // TODO Handle rm.isConfigurationRequest(); + // TODO Handle rm.isConfigurationRequest(); rm.isKeysRequest(); } if (syncMessage.getGroups().isPresent()) { File tmpFile = null; @@ -1773,6 +1787,23 @@ public class Manager implements Closeable { final VerifiedMessage verifiedMessage = syncMessage.getVerified().get(); account.getSignalProtocolStore().setIdentityTrustLevel(resolveSignalServiceAddress(verifiedMessage.getDestination()), verifiedMessage.getIdentityKey(), TrustLevel.fromVerifiedState(verifiedMessage.getVerified())); } + if (syncMessage.getStickerPackOperations().isPresent()) { + final List stickerPackOperationMessages = syncMessage.getStickerPackOperations().get(); + for (StickerPackOperationMessage m : stickerPackOperationMessages) { + if (!m.getPackId().isPresent()) { + continue; + } + Sticker sticker = account.getStickerStore().getSticker(m.getPackId().get()); + if (sticker == null) { + if (!m.getPackKey().isPresent()) { + continue; + } + sticker = new Sticker(m.getPackId().get(), m.getPackKey().get()); + } + sticker.setInstalled(!m.getType().isPresent() || m.getType().get() == StickerPackOperationMessage.Type.INSTALL); + account.getStickerStore().updateSticker(sticker); + } + } if (syncMessage.getConfiguration().isPresent()) { // TODO }