]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java
Implement support for sending/receiving Group V2 messages
[signal-cli] / src / main / java / org / asamk / signal / storage / groups / GroupInfoV2.java
diff --git a/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java b/src/main/java/org/asamk/signal/storage/groups/GroupInfoV2.java
new file mode 100644 (file)
index 0000000..5e3115a
--- /dev/null
@@ -0,0 +1,70 @@
+package org.asamk.signal.storage.groups;
+
+import org.signal.storageservice.protos.groups.local.DecryptedGroup;
+import org.signal.zkgroup.groups.GroupMasterKey;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+import org.whispersystems.signalservice.api.util.UuidUtil;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class GroupInfoV2 extends GroupInfo {
+
+    private final GroupMasterKey masterKey;
+
+    private boolean blocked;
+    private DecryptedGroup group; // stored as a file with hexadecimal groupId as name
+
+    public GroupInfoV2(final byte[] groupId, final GroupMasterKey masterKey) {
+        super(groupId);
+        this.masterKey = masterKey;
+    }
+
+    public GroupMasterKey getMasterKey() {
+        return masterKey;
+    }
+
+    public void setGroup(final DecryptedGroup group) {
+        this.group = group;
+    }
+
+    public DecryptedGroup getGroup() {
+        return group;
+    }
+
+    @Override
+    public String getTitle() {
+        if (this.group == null) {
+            return null;
+        }
+        return this.group.getTitle();
+    }
+
+    @Override
+    public Set<SignalServiceAddress> getMembers() {
+        if (this.group == null) {
+            return Collections.emptySet();
+        }
+        return group.getMembersList().stream()
+                .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
+                .collect(Collectors.toSet());
+    }
+
+    @Override
+    public boolean isBlocked() {
+        return blocked;
+    }
+
+    @Override
+    public void setBlocked(final boolean blocked) {
+        this.blocked = blocked;
+    }
+
+    @Override
+    public int getMessageExpirationTime() {
+        return this.group != null && this.group.hasDisappearingMessagesTimer()
+                ? this.group.getDisappearingMessagesTimer().getDuration()
+                : 0;
+    }
+}