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;
}
}