package org.asamk.signal.storage.groups;
import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
+import org.asamk.signal.manager.groups.GroupId;
+import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
-public class GroupInfo {
+public abstract class GroupInfo {
- @JsonProperty
- public final byte[] groupId;
+ @JsonIgnore
+ public abstract GroupId getGroupId();
- @JsonProperty
- public String name;
+ @JsonIgnore
+ public abstract String getTitle();
- @JsonProperty
- public Set<String> members = new HashSet<>();
- @JsonProperty
- public String color;
- @JsonProperty(defaultValue = "false")
- public boolean blocked;
- @JsonProperty
- public Integer inboxPosition;
- @JsonProperty(defaultValue = "false")
- public boolean archived;
+ @JsonIgnore
+ public abstract GroupInviteLinkUrl getGroupInviteLink();
- private long avatarId;
+ @JsonIgnore
+ public abstract Set<SignalServiceAddress> getMembers();
- @JsonProperty
@JsonIgnore
- private boolean active;
+ public Set<SignalServiceAddress> getPendingMembers() {
+ return Set.of();
+ }
- public GroupInfo(byte[] groupId) {
- this.groupId = groupId;
+ @JsonIgnore
+ public Set<SignalServiceAddress> getRequestingMembers() {
+ return Set.of();
}
- public GroupInfo(@JsonProperty("groupId") byte[] groupId, @JsonProperty("name") String name, @JsonProperty("members") Collection<String> members, @JsonProperty("avatarId") long avatarId, @JsonProperty("color") String color, @JsonProperty("blocked") boolean blocked, @JsonProperty("inboxPosition") Integer inboxPosition, @JsonProperty("archived") boolean archived) {
- this.groupId = groupId;
- this.name = name;
- this.members.addAll(members);
- this.avatarId = avatarId;
- this.color = color;
- this.blocked = blocked;
- this.inboxPosition = inboxPosition;
- this.archived = archived;
+ @JsonIgnore
+ public abstract boolean isBlocked();
+
+ @JsonIgnore
+ public abstract void setBlocked(boolean blocked);
+
+ @JsonIgnore
+ public abstract int getMessageExpirationTime();
+
+ @JsonIgnore
+ public Set<SignalServiceAddress> getMembersWithout(SignalServiceAddress address) {
+ return getMembers().stream().filter(member -> !member.matches(address)).collect(Collectors.toSet());
}
@JsonIgnore
- public long getAvatarId() {
- return avatarId;
+ public Set<SignalServiceAddress> getMembersIncludingPendingWithout(SignalServiceAddress address) {
+ return Stream.concat(getMembers().stream(), getPendingMembers().stream())
+ .filter(member -> !member.matches(address))
+ .collect(Collectors.toSet());
}
@JsonIgnore
- public Set<SignalServiceAddress> getMembers() {
- Set<SignalServiceAddress> addresses = new HashSet<>(members.size());
- for (String member : members) {
- addresses.add(new SignalServiceAddress(null, member));
+ public boolean isMember(SignalServiceAddress address) {
+ for (SignalServiceAddress member : getMembers()) {
+ if (member.matches(address)) {
+ return true;
+ }
}
- return addresses;
+ return false;
}
- public void addMembers(Collection<SignalServiceAddress> members) {
- for (SignalServiceAddress member : members) {
- this.members.add(member.getNumber().get());
+ @JsonIgnore
+ public boolean isPendingMember(SignalServiceAddress address) {
+ for (SignalServiceAddress member : getPendingMembers()) {
+ if (member.matches(address)) {
+ return true;
+ }
}
+ return false;
}
}