]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/storage/groups/GroupInfo.java
3571985b70bcf64c65476ddaa9683d00363baf79
[signal-cli] / src / main / java / org / asamk / signal / storage / groups / GroupInfo.java
1 package org.asamk.signal.storage.groups;
2
3 import com.fasterxml.jackson.annotation.JsonIgnore;
4 import com.fasterxml.jackson.annotation.JsonProperty;
5
6 import org.asamk.signal.manager.GroupInviteLinkUrl;
7 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
8
9 import java.util.Set;
10 import java.util.stream.Collectors;
11 import java.util.stream.Stream;
12
13 public abstract class GroupInfo {
14
15 @JsonProperty
16 public final byte[] groupId;
17
18 public GroupInfo(byte[] groupId) {
19 this.groupId = groupId;
20 }
21
22 @JsonIgnore
23 public abstract String getTitle();
24
25 @JsonIgnore
26 public abstract GroupInviteLinkUrl getGroupInviteLink();
27
28 @JsonIgnore
29 public abstract Set<SignalServiceAddress> getMembers();
30
31 @JsonIgnore
32 public Set<SignalServiceAddress> getPendingMembers() {
33 return Set.of();
34 }
35
36 @JsonIgnore
37 public Set<SignalServiceAddress> getRequestingMembers() {
38 return Set.of();
39 }
40
41 @JsonIgnore
42 public abstract boolean isBlocked();
43
44 @JsonIgnore
45 public abstract void setBlocked(boolean blocked);
46
47 @JsonIgnore
48 public abstract int getMessageExpirationTime();
49
50 @JsonIgnore
51 public Set<SignalServiceAddress> getMembersWithout(SignalServiceAddress address) {
52 return getMembers().stream().filter(member -> !member.matches(address)).collect(Collectors.toSet());
53 }
54
55 @JsonIgnore
56 public Set<SignalServiceAddress> getMembersIncludingPendingWithout(SignalServiceAddress address) {
57 return Stream.concat(getMembers().stream(), getPendingMembers().stream())
58 .filter(member -> !member.matches(address))
59 .collect(Collectors.toSet());
60 }
61
62 @JsonIgnore
63 public boolean isMember(SignalServiceAddress address) {
64 for (SignalServiceAddress member : getMembers()) {
65 if (member.matches(address)) {
66 return true;
67 }
68 }
69 return false;
70 }
71
72 @JsonIgnore
73 public boolean isPendingMember(SignalServiceAddress address) {
74 for (SignalServiceAddress member : getPendingMembers()) {
75 if (member.matches(address)) {
76 return true;
77 }
78 }
79 return false;
80 }
81 }