]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
Update groups when using listGroups command
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / GroupHelper.java
index 0c15ceff3751d9dd800edbf5cfb5f5b2fffd6e5f..7cc9fef8f47465c6ddffdc4934d21673d9e96d50 100644 (file)
@@ -79,6 +79,12 @@ public class GroupHelper {
         return getGroup(groupId, false);
     }
 
+    public List<GroupInfo> getGroups() {
+        final var groups = account.getGroupStore().getGroups();
+        groups.forEach(group -> fillOrUpdateGroup(group, false));
+        return groups;
+    }
+
     public boolean isGroupBlocked(final GroupId groupId) {
         var group = getGroup(groupId);
         return group != null && group.isBlocked();
@@ -382,34 +388,46 @@ public class GroupHelper {
 
     private GroupInfo getGroup(GroupId groupId, boolean forceUpdate) {
         final var group = account.getGroupStore().getGroup(groupId);
-        if (group instanceof GroupInfoV2 groupInfoV2) {
-            if (forceUpdate || (!groupInfoV2.isPermissionDenied() && groupInfoV2.getGroup() == null)) {
-                final var groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupInfoV2.getMasterKey());
-                DecryptedGroup decryptedGroup;
-                try {
-                    decryptedGroup = context.getGroupV2Helper().getDecryptedGroup(groupSecretParams);
-                } catch (NotAGroupMemberException e) {
-                    groupInfoV2.setPermissionDenied(true);
-                    decryptedGroup = null;
-                }
-                if (decryptedGroup != null) {
-                    try {
-                        storeProfileKeysFromHistory(groupSecretParams, groupInfoV2, decryptedGroup);
-                    } catch (NotAGroupMemberException ignored) {
-                    }
-                    storeProfileKeysFromMembers(decryptedGroup);
-                    final var avatar = decryptedGroup.avatar;
-                    if (!avatar.isEmpty()) {
-                        downloadGroupAvatar(groupInfoV2.getGroupId(), groupSecretParams, avatar);
-                    }
-                }
-                groupInfoV2.setGroup(decryptedGroup);
-                account.getGroupStore().updateGroup(group);
-            }
-        }
+        fillOrUpdateGroup(group, forceUpdate);
         return group;
     }
 
+    private void fillOrUpdateGroup(final GroupInfo group, final boolean forceUpdate) {
+        if (!(group instanceof GroupInfoV2 groupInfoV2)) {
+            return;
+        }
+
+        if (!forceUpdate && (groupInfoV2.isPermissionDenied() || groupInfoV2.getGroup() != null)) {
+            return;
+        }
+
+        final var groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupInfoV2.getMasterKey());
+        DecryptedGroup decryptedGroup;
+        try {
+            decryptedGroup = context.getGroupV2Helper().getDecryptedGroup(groupSecretParams);
+        } catch (NotAGroupMemberException e) {
+            groupInfoV2.setPermissionDenied(true);
+            account.getGroupStore().updateGroup(group);
+            return;
+        }
+
+        if (decryptedGroup == null) {
+            return;
+        }
+
+        try {
+            storeProfileKeysFromHistory(groupSecretParams, groupInfoV2, decryptedGroup);
+        } catch (NotAGroupMemberException ignored) {
+        }
+        storeProfileKeysFromMembers(decryptedGroup);
+        final var avatar = decryptedGroup.avatar;
+        if (!avatar.isEmpty()) {
+            downloadGroupAvatar(groupInfoV2.getGroupId(), groupSecretParams, avatar);
+        }
+        groupInfoV2.setGroup(decryptedGroup);
+        account.getGroupStore().updateGroup(group);
+    }
+
     private void downloadGroupAvatar(GroupIdV2 groupId, GroupSecretParams groupSecretParams, String cdnKey) {
         try {
             context.getAvatarStore()