]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
Extract AttachmentHelper and SyncHelper
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / GroupHelper.java
index 9ff3134eaed78eb51541c2aa18ffad4e731fde51..5566d9d7ede254910ca2a4bd2f67bcacdcd6dab1 100644 (file)
@@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
 import org.whispersystems.libsignal.util.Pair;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException;
+import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
 import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream;
 import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
 import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
@@ -59,6 +60,7 @@ public class GroupHelper {
 
     private final SignalAccount account;
     private final SignalDependencies dependencies;
+    private final AttachmentHelper attachmentHelper;
     private final SendHelper sendHelper;
     private final GroupV2Helper groupV2Helper;
     private final AvatarStore avatarStore;
@@ -68,6 +70,7 @@ public class GroupHelper {
     public GroupHelper(
             final SignalAccount account,
             final SignalDependencies dependencies,
+            final AttachmentHelper attachmentHelper,
             final SendHelper sendHelper,
             final GroupV2Helper groupV2Helper,
             final AvatarStore avatarStore,
@@ -76,6 +79,7 @@ public class GroupHelper {
     ) {
         this.account = account;
         this.dependencies = dependencies;
+        this.attachmentHelper = attachmentHelper;
         this.sendHelper = sendHelper;
         this.groupV2Helper = groupV2Helper;
         this.avatarStore = avatarStore;
@@ -87,6 +91,15 @@ public class GroupHelper {
         return getGroup(groupId, false);
     }
 
+    public void downloadGroupAvatar(GroupIdV1 groupId, SignalServiceAttachment avatar) {
+        try {
+            avatarStore.storeGroupAvatar(groupId,
+                    outputStream -> attachmentHelper.retrieveAttachment(avatar, outputStream));
+        } catch (IOException e) {
+            logger.warn("Failed to download avatar for group {}, ignoring: {}", groupId.toBase64(), e.getMessage());
+        }
+    }
+
     public Optional<SignalServiceAttachmentStream> createGroupAvatarAttachment(GroupIdV1 groupId) throws IOException {
         final var streamDetails = avatarStore.retrieveGroupAvatar(groupId);
         if (streamDetails == null) {
@@ -282,6 +295,11 @@ public class GroupHelper {
         }
     }
 
+    public void deleteGroup(GroupId groupId) throws IOException {
+        account.getGroupStore().deleteGroup(groupId);
+        avatarStore.deleteGroupAvatar(groupId);
+    }
+
     public SendGroupMessageResults sendGroupInfoRequest(
             GroupIdV1 groupId, RecipientId recipientId
     ) throws IOException {