]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java
Move sticker store to database
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / ManagerImpl.java
index 40bd7240a9da9485f22a4880adb65ce39c7ea161..21d43fa5dd3ceb5f941befe9bb324fb7b6c57aab 100644 (file)
@@ -27,11 +27,11 @@ import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.NotPrimaryDeviceException;
 import org.asamk.signal.manager.api.Pair;
+import org.asamk.signal.manager.api.ReceiveConfig;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.SendGroupMessageResults;
 import org.asamk.signal.manager.api.SendMessageResult;
 import org.asamk.signal.manager.api.SendMessageResults;
-import org.asamk.signal.manager.api.StickerPack;
 import org.asamk.signal.manager.api.StickerPackId;
 import org.asamk.signal.manager.api.StickerPackInvalidException;
 import org.asamk.signal.manager.api.StickerPackUrl;
@@ -57,7 +57,7 @@ import org.asamk.signal.manager.storage.recipients.Recipient;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.storage.stickerPacks.JsonStickerPack;
 import org.asamk.signal.manager.storage.stickerPacks.StickerPackStore;
-import org.asamk.signal.manager.storage.stickers.Sticker;
+import org.asamk.signal.manager.storage.stickers.StickerPack;
 import org.asamk.signal.manager.util.AttachmentUtils;
 import org.asamk.signal.manager.util.KeyUtils;
 import org.asamk.signal.manager.util.StickerUtils;
@@ -65,6 +65,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.signalservice.api.SignalSessionLock;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
+import org.whispersystems.signalservice.api.messages.SignalServicePreview;
 import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage;
 import org.whispersystems.signalservice.api.push.ACI;
@@ -230,6 +231,7 @@ class ManagerImpl implements Manager {
             context.getAccountHelper().setDeviceName(deviceName);
         }
         context.getAccountHelper().updateAccountAttributes();
+        context.getAccountHelper().checkWhoAmiI();
     }
 
     @Override
@@ -551,9 +553,8 @@ class ManagerImpl implements Manager {
             final SignalServiceDataMessage.Builder messageBuilder, final Message message
     ) throws AttachmentInvalidException, IOException, UnregisteredRecipientException, InvalidStickerException {
         messageBuilder.withBody(message.messageText());
-        final var attachments = message.attachments();
-        if (attachments != null) {
-            messageBuilder.withAttachments(context.getAttachmentHelper().uploadAttachments(attachments));
+        if (message.attachments().size() > 0) {
+            messageBuilder.withAttachments(context.getAttachmentHelper().uploadAttachments(message.attachments()));
         }
         if (message.mentions().size() > 0) {
             messageBuilder.withMentions(resolveMentions(message.mentions()));
@@ -562,7 +563,8 @@ class ManagerImpl implements Manager {
             final var quote = message.quote().get();
             messageBuilder.withQuote(new SignalServiceDataMessage.Quote(quote.timestamp(),
                     context.getRecipientHelper()
-                            .resolveSignalServiceAddress(context.getRecipientHelper().resolveRecipient(quote.author())),
+                            .resolveSignalServiceAddress(context.getRecipientHelper().resolveRecipient(quote.author()))
+                            .getServiceId(),
                     quote.message(),
                     List.of(),
                     resolveMentions(quote.mentions()),
@@ -577,7 +579,7 @@ class ManagerImpl implements Manager {
             if (stickerPack == null) {
                 throw new InvalidStickerException("Sticker pack not found");
             }
-            final var manifest = context.getStickerHelper().getOrRetrieveStickerPack(packId, stickerPack.getPackKey());
+            final var manifest = context.getStickerHelper().getOrRetrieveStickerPack(packId, stickerPack.packKey());
             if (manifest.stickers().size() <= stickerId) {
                 throw new InvalidStickerException("Sticker id not part of this pack");
             }
@@ -587,11 +589,24 @@ class ManagerImpl implements Manager {
                 throw new InvalidStickerException("Missing local sticker file");
             }
             messageBuilder.withSticker(new SignalServiceDataMessage.Sticker(packId.serialize(),
-                    stickerPack.getPackKey(),
+                    stickerPack.packKey(),
                     stickerId,
                     manifestSticker.emoji(),
                     AttachmentUtils.createAttachmentStream(streamDetails, Optional.empty())));
         }
+        if (message.previews().size() > 0) {
+            final var previews = new ArrayList<SignalServicePreview>(message.previews().size());
+            for (final var p : message.previews()) {
+                final var image = p.image().isPresent() ? context.getAttachmentHelper()
+                        .uploadAttachment(p.image().get()) : null;
+                previews.add(new SignalServicePreview(p.url(),
+                        p.title(),
+                        p.description(),
+                        0,
+                        Optional.ofNullable(image)));
+            }
+            messageBuilder.withPreviews(previews);
+        }
     }
 
     private ArrayList<SignalServiceDataMessage.Mention> resolveMentions(final List<Message.Mention> mentionList) throws UnregisteredRecipientException {
@@ -636,7 +651,7 @@ class ManagerImpl implements Manager {
         var targetAuthorRecipientId = context.getRecipientHelper().resolveRecipient(targetAuthor);
         var reaction = new SignalServiceDataMessage.Reaction(emoji,
                 remove,
-                context.getRecipientHelper().resolveSignalServiceAddress(targetAuthorRecipientId),
+                context.getRecipientHelper().resolveSignalServiceAddress(targetAuthorRecipientId).getServiceId(),
                 targetSentTimestamp);
         final var messageBuilder = SignalServiceDataMessage.newBuilder().withReaction(reaction);
         return sendMessage(messageBuilder, recipients);
@@ -691,12 +706,13 @@ class ManagerImpl implements Manager {
 
     @Override
     public void setContactName(
-            RecipientIdentifier.Single recipient, String name
+            RecipientIdentifier.Single recipient, String givenName, final String familyName
     ) throws NotPrimaryDeviceException, UnregisteredRecipientException {
         if (!account.isPrimaryDevice()) {
             throw new NotPrimaryDeviceException();
         }
-        context.getContactHelper().setContactName(context.getRecipientHelper().resolveRecipient(recipient), name);
+        context.getContactHelper()
+                .setContactName(context.getRecipientHelper().resolveRecipient(recipient), givenName, familyName);
     }
 
     @Override
@@ -779,21 +795,21 @@ class ManagerImpl implements Manager {
         var packIdString = messageSender.uploadStickerManifest(manifest, packKey);
         var packId = StickerPackId.deserialize(Hex.fromStringCondensed(packIdString));
 
-        var sticker = new Sticker(packId, packKey);
-        account.getStickerStore().updateSticker(sticker);
+        var sticker = new StickerPack(packId, packKey);
+        account.getStickerStore().addStickerPack(sticker);
 
         return new StickerPackUrl(packId, packKey);
     }
 
     @Override
-    public List<StickerPack> getStickerPacks() {
+    public List<org.asamk.signal.manager.api.StickerPack> getStickerPacks() {
         final var stickerPackStore = context.getStickerPackStore();
         return account.getStickerStore().getStickerPacks().stream().map(pack -> {
-            if (stickerPackStore.existsStickerPack(pack.getPackId())) {
+            if (stickerPackStore.existsStickerPack(pack.packId())) {
                 try {
-                    final var manifest = stickerPackStore.retrieveManifest(pack.getPackId());
-                    return new StickerPack(pack.getPackId(),
-                            new StickerPackUrl(pack.getPackId(), pack.getPackKey()),
+                    final var manifest = stickerPackStore.retrieveManifest(pack.packId());
+                    return new org.asamk.signal.manager.api.StickerPack(pack.packId(),
+                            new StickerPackUrl(pack.packId(), pack.packKey()),
                             pack.isInstalled(),
                             manifest.title(),
                             manifest.author(),
@@ -804,7 +820,7 @@ class ManagerImpl implements Manager {
                 }
             }
 
-            return new StickerPack(pack.getPackId(), pack.getPackKey(), pack.isInstalled());
+            return new org.asamk.signal.manager.api.StickerPack(pack.packId(), pack.packKey(), pack.isInstalled());
         }).toList();
     }
 
@@ -815,9 +831,7 @@ class ManagerImpl implements Manager {
     }
 
     void retrieveRemoteStorage() throws IOException {
-        if (account.getStorageKey() != null) {
-            context.getStorageHelper().readDataFromStorage();
-        }
+        context.getStorageHelper().readDataFromStorage();
     }
 
     @Override
@@ -845,7 +859,8 @@ class ManagerImpl implements Manager {
             logger.debug("Starting receiving messages");
             context.getReceiveHelper().receiveMessagesContinuously((envelope, e) -> {
                 synchronized (messageHandlers) {
-                    Stream.concat(messageHandlers.stream(), weakHandlers.stream()).forEach(h -> {
+                    final var handlers = Stream.concat(messageHandlers.stream(), weakHandlers.stream()).toList();
+                    handlers.forEach(h -> {
                         try {
                             h.handleMessage(envelope, e);
                         } catch (Throwable ex) {
@@ -934,8 +949,8 @@ class ManagerImpl implements Manager {
     }
 
     @Override
-    public void setIgnoreAttachments(final boolean ignoreAttachments) {
-        context.getReceiveHelper().setIgnoreAttachments(ignoreAttachments);
+    public void setReceiveConfig(final ReceiveConfig receiveConfig) {
+        context.getReceiveHelper().setReceiveConfig(receiveConfig);
     }
 
     @Override
@@ -973,6 +988,9 @@ class ManagerImpl implements Manager {
                 return null;
             }
         }).filter(Objects::nonNull).collect(Collectors.toSet());
+        if (!recipients.isEmpty() && recipientIds.isEmpty()) {
+            return List.of();
+        }
         // refresh profiles of explicitly given recipients
         context.getProfileHelper().refreshRecipientProfiles(recipientIds);
         return account.getRecipientStore().getRecipients(onlyContacts, blocked, recipientIds, name);
@@ -1033,7 +1051,7 @@ class ManagerImpl implements Manager {
         IdentityInfo identity;
         try {
             identity = account.getIdentityKeyStore()
-                    .getIdentity(context.getRecipientHelper().resolveRecipient(recipient));
+                    .getIdentityInfo(context.getRecipientHelper().resolveRecipient(recipient));
         } catch (UnregisteredRecipientException e) {
             identity = null;
         }