-package org.asamk.signal;
+package org.asamk.signal.storage.groups;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.Collection;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+
import java.util.HashSet;
import java.util.Set;
-public class GroupInfo {
+public abstract class GroupInfo {
+
@JsonProperty
public final byte[] groupId;
- @JsonProperty
- public String name;
+ public GroupInfo(byte[] groupId) {
+ this.groupId = groupId;
+ }
- @JsonProperty
- public Set<String> members = new HashSet<>();
+ @JsonIgnore
+ public abstract String getTitle();
- private long avatarId;
+ @JsonIgnore
+ public abstract Set<SignalServiceAddress> getMembers();
@JsonIgnore
- public long getAvatarId() {
- return avatarId;
+ public Set<SignalServiceAddress> getPendingMembers() {
+ return Set.of();
}
- @JsonProperty
- public boolean active;
+ @JsonIgnore
+ public Set<SignalServiceAddress> getRequestingMembers() {
+ return Set.of();
+ }
- public GroupInfo(byte[] groupId) {
- this.groupId = groupId;
+ @JsonIgnore
+ public abstract boolean isBlocked();
+
+ @JsonIgnore
+ public abstract void setBlocked(boolean blocked);
+
+ @JsonIgnore
+ public abstract int getMessageExpirationTime();
+
+ @JsonIgnore
+ public Set<SignalServiceAddress> getMembersWithout(SignalServiceAddress address) {
+ Set<SignalServiceAddress> members = new HashSet<>();
+ for (SignalServiceAddress member : getMembers()) {
+ if (!member.matches(address)) {
+ members.add(member);
+ }
+ }
+ return members;
}
- 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 isMember(SignalServiceAddress address) {
+ for (SignalServiceAddress member : getMembers()) {
+ if (member.matches(address)) {
+ return true;
+ }
+ }
+ return false;
}
}