]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupInfo.java
a16af0ff34921959f44588d891c63043b7eff6fd
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / groups / GroupInfo.java
1 package org.asamk.signal.manager.storage.groups;
2
3 import org.asamk.signal.manager.api.GroupId;
4 import org.asamk.signal.manager.api.GroupInviteLinkUrl;
5 import org.asamk.signal.manager.api.GroupPermission;
6 import org.asamk.signal.manager.storage.recipients.RecipientId;
7 import org.whispersystems.signalservice.api.push.DistributionId;
8
9 import java.util.Set;
10 import java.util.stream.Collectors;
11 import java.util.stream.Stream;
12
13 public sealed abstract class GroupInfo permits GroupInfoV1, GroupInfoV2 {
14
15 public abstract GroupId getGroupId();
16
17 public abstract DistributionId getDistributionId();
18
19 public abstract String getTitle();
20
21 public String getDescription() {
22 return null;
23 }
24
25 public abstract GroupInviteLinkUrl getGroupInviteLink();
26
27 public abstract Set<RecipientId> getMembers();
28
29 public Set<RecipientId> getBannedMembers() {
30 return Set.of();
31 }
32
33 public Set<RecipientId> getPendingMembers() {
34 return Set.of();
35 }
36
37 public Set<RecipientId> getRequestingMembers() {
38 return Set.of();
39 }
40
41 public Set<RecipientId> getAdminMembers() {
42 return Set.of();
43 }
44
45 public abstract boolean isBlocked();
46
47 public abstract void setBlocked(boolean blocked);
48
49 public abstract int getMessageExpirationTimer();
50
51 public abstract boolean isAnnouncementGroup();
52
53 public abstract GroupPermission getPermissionAddMember();
54
55 public abstract GroupPermission getPermissionEditDetails();
56
57 public abstract GroupPermission getPermissionSendMessage();
58
59 public Set<RecipientId> getMembersWithout(RecipientId recipientId) {
60 return getMembers().stream().filter(member -> !member.equals(recipientId)).collect(Collectors.toSet());
61 }
62
63 public Set<RecipientId> getMembersIncludingPendingWithout(RecipientId recipientId) {
64 return Stream.concat(getMembers().stream(), getPendingMembers().stream())
65 .filter(member -> !member.equals(recipientId))
66 .collect(Collectors.toSet());
67 }
68
69 public boolean isMember(RecipientId recipientId) {
70 return getMembers().contains(recipientId);
71 }
72
73 public boolean isAdmin(RecipientId recipientId) {
74 return getAdminMembers().contains(recipientId);
75 }
76
77 public boolean isPendingMember(RecipientId recipientId) {
78 return getPendingMembers().contains(recipientId);
79 }
80 }