]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java
Update libsignal-service-java
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / SyncHelper.java
index 9af1f01fdce5d75a74a7546d022ef3735151ca3c..efb4862356a9554220534420ba737ddb1ca71f53 100644 (file)
@@ -9,7 +9,6 @@ import org.asamk.signal.manager.storage.groups.GroupInfoV1;
 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.storage.stickers.StickerPack;
-import org.asamk.signal.manager.util.AttachmentUtils;
 import org.asamk.signal.manager.util.IOUtils;
 import org.asamk.signal.manager.util.MimeUtils;
 import org.jetbrains.annotations.NotNull;
@@ -18,12 +17,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.whispersystems.signalservice.api.messages.SendMessageResult;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
-import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
 import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.ContactsMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.DeviceContact;
+import org.whispersystems.signalservice.api.messages.multidevice.DeviceContactAvatar;
 import org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsInputStream;
 import org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsOutputStream;
 import org.whispersystems.signalservice.api.messages.multidevice.DeviceGroup;
@@ -170,7 +169,14 @@ public class SyncHelper {
                     final var contact = contactPair.second();
                     final var address = account.getRecipientAddressResolver().resolveRecipientAddress(recipientId);
 
-                    out.write(getDeviceContact(address, recipientId, contact));
+                    final var deviceContact = getDeviceContact(address, recipientId, contact);
+                    out.write(deviceContact);
+                    deviceContact.getAvatar().ifPresent(a -> {
+                        try {
+                            a.getInputStream().close();
+                        } catch (IOException ignored) {
+                        }
+                    });
                 }
 
                 if (account.getProfileKey() != null) {
@@ -178,7 +184,14 @@ public class SyncHelper {
                     final var address = account.getSelfRecipientAddress();
                     final var recipientId = account.getSelfRecipientId();
                     final var contact = account.getContactStore().getContact(recipientId);
-                    out.write(getDeviceContact(address, recipientId, contact));
+                    final var deviceContact = getDeviceContact(address, recipientId, contact);
+                    out.write(deviceContact);
+                    deviceContact.getAvatar().ifPresent(a -> {
+                        try {
+                            a.getInputStream().close();
+                        } catch (IOException ignored) {
+                        }
+                    });
                 }
             }
 
@@ -234,6 +247,7 @@ public class SyncHelper {
                 Optional.ofNullable(profileKey),
                 Optional.ofNullable(contact == null ? null : contact.messageExpirationTime()),
                 Optional.empty(),
+                Optional.empty(),
                 contact != null && contact.isArchived());
     }
 
@@ -391,7 +405,7 @@ public class SyncHelper {
             account.getContactStore().storeContact(recipientId, builder.build());
 
             if (c.getAvatar().isPresent()) {
-                downloadContactAvatar(c.getAvatar().get(), address);
+                storeContactAvatar(c.getAvatar().get(), address);
             }
         }
     }
@@ -425,21 +439,22 @@ public class SyncHelper {
         return context.getSendHelper().sendSyncMessage(message);
     }
 
-    private Optional<SignalServiceAttachmentStream> createContactAvatarAttachment(RecipientAddress address) throws IOException {
+    private Optional<DeviceContactAvatar> createContactAvatarAttachment(RecipientAddress address) throws IOException {
         final var streamDetails = context.getAvatarStore().retrieveContactAvatar(address);
         if (streamDetails == null) {
             return Optional.empty();
         }
 
-        final var uploadSpec = context.getDependencies().getMessageSender().getResumableUploadSpec().toProto();
-        return Optional.of(AttachmentUtils.createAttachmentStream(streamDetails, Optional.empty(), uploadSpec));
+        return Optional.of(new DeviceContactAvatar(streamDetails.getStream(),
+                streamDetails.getLength(),
+                streamDetails.getContentType()));
     }
 
-    private void downloadContactAvatar(SignalServiceAttachment avatar, RecipientAddress address) {
+    private void storeContactAvatar(DeviceContactAvatar avatar, RecipientAddress address) {
         try {
             context.getAvatarStore()
                     .storeContactAvatar(address,
-                            outputStream -> context.getAttachmentHelper().retrieveAttachment(avatar, outputStream));
+                            outputStream -> IOUtils.copyStream(avatar.getInputStream(), outputStream));
         } catch (IOException e) {
             logger.warn("Failed to download avatar for contact {}, ignoring: {}", address, e.getMessage());
         }