]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/storage/groups/GroupInfo.java
Move group classes to separate package
[signal-cli] / src / main / java / org / asamk / signal / storage / groups / GroupInfo.java
index e28a5921fe6ca80b7ee2bfe12934a2e41d57f41e..fe72514172c8b3a945e6c4ed8aad2e690b19b285 100644 (file)
@@ -1,40 +1,77 @@
 package org.asamk.signal.storage.groups;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
-import java.util.Collection;
-import java.util.HashSet;
+import org.asamk.signal.manager.groups.GroupId;
+import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public abstract class GroupInfo {
+
+    @JsonIgnore
+    public abstract GroupId getGroupId();
+
+    @JsonIgnore
+    public abstract String getTitle();
+
+    @JsonIgnore
+    public abstract GroupInviteLinkUrl getGroupInviteLink();
+
+    @JsonIgnore
+    public abstract Set<SignalServiceAddress> getMembers();
+
+    @JsonIgnore
+    public Set<SignalServiceAddress> getPendingMembers() {
+        return Set.of();
+    }
 
-public class GroupInfo {
-    @JsonProperty
-    public final byte[] groupId;
+    @JsonIgnore
+    public Set<SignalServiceAddress> getRequestingMembers() {
+        return Set.of();
+    }
 
-    @JsonProperty
-    public String name;
+    @JsonIgnore
+    public abstract boolean isBlocked();
 
-    @JsonProperty
-    public Set<String> members = new HashSet<>();
+    @JsonIgnore
+    public abstract void setBlocked(boolean blocked);
 
-    private long avatarId;
+    @JsonIgnore
+    public abstract int getMessageExpirationTime();
 
     @JsonIgnore
-    public long getAvatarId() {
-        return avatarId;
+    public Set<SignalServiceAddress> getMembersWithout(SignalServiceAddress address) {
+        return getMembers().stream().filter(member -> !member.matches(address)).collect(Collectors.toSet());
     }
 
-    @JsonProperty
-    public boolean active;
+    @JsonIgnore
+    public Set<SignalServiceAddress> getMembersIncludingPendingWithout(SignalServiceAddress address) {
+        return Stream.concat(getMembers().stream(), getPendingMembers().stream())
+                .filter(member -> !member.matches(address))
+                .collect(Collectors.toSet());
+    }
 
-    public GroupInfo(byte[] groupId) {
-        this.groupId = groupId;
+    @JsonIgnore
+    public boolean isMember(SignalServiceAddress address) {
+        for (SignalServiceAddress member : getMembers()) {
+            if (member.matches(address)) {
+                return true;
+            }
+        }
+        return false;
     }
 
-    public GroupInfo(@JsonProperty("groupId") byte[] groupId, @JsonProperty("name") String name, @JsonProperty("members") Collection<String> members, @JsonProperty("avatarId") long avatarId) {
-        this.groupId = groupId;
-        this.name = name;
-        this.members.addAll(members);
-        this.avatarId = avatarId;
+    @JsonIgnore
+    public boolean isPendingMember(SignalServiceAddress address) {
+        for (SignalServiceAddress member : getPendingMembers()) {
+            if (member.matches(address)) {
+                return true;
+            }
+        }
+        return false;
     }
 }