1 package org
.asamk
.signal
.manager
.storage
.groups
;
3 import org
.asamk
.signal
.manager
.groups
.GroupIdV2
;
4 import org
.asamk
.signal
.manager
.groups
.GroupInviteLinkUrl
;
5 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientId
;
6 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
7 import org
.signal
.storageservice
.protos
.groups
.AccessControl
;
8 import org
.signal
.storageservice
.protos
.groups
.Member
;
9 import org
.signal
.storageservice
.protos
.groups
.local
.DecryptedGroup
;
10 import org
.signal
.storageservice
.protos
.groups
.local
.EnabledState
;
11 import org
.signal
.zkgroup
.groups
.GroupMasterKey
;
12 import org
.whispersystems
.signalservice
.api
.util
.UuidUtil
;
15 import java
.util
.stream
.Collectors
;
17 public class GroupInfoV2
extends GroupInfo
{
19 private final GroupIdV2 groupId
;
20 private final GroupMasterKey masterKey
;
22 private boolean blocked
;
23 private DecryptedGroup group
; // stored as a file with hexadecimal groupId as name
24 private RecipientResolver recipientResolver
;
25 private boolean permissionDenied
;
27 public GroupInfoV2(final GroupIdV2 groupId
, final GroupMasterKey masterKey
) {
28 this.groupId
= groupId
;
29 this.masterKey
= masterKey
;
33 final GroupIdV2 groupId
,
34 final GroupMasterKey masterKey
,
35 final boolean blocked
,
36 final boolean permissionDenied
38 this.groupId
= groupId
;
39 this.masterKey
= masterKey
;
40 this.blocked
= blocked
;
41 this.permissionDenied
= permissionDenied
;
45 public GroupIdV2
getGroupId() {
49 public GroupMasterKey
getMasterKey() {
53 public void setGroup(final DecryptedGroup group
, final RecipientResolver recipientResolver
) {
55 this.permissionDenied
= false;
58 this.recipientResolver
= recipientResolver
;
61 public DecryptedGroup
getGroup() {
66 public String
getTitle() {
67 if (this.group
== null) {
70 return this.group
.getTitle();
74 public String
getDescription() {
75 if (this.group
== null) {
78 return this.group
.getDescription();
82 public GroupInviteLinkUrl
getGroupInviteLink() {
83 if (this.group
== null || this.group
.getInviteLinkPassword().isEmpty() || (
84 this.group
.getAccessControl().getAddFromInviteLink() != AccessControl
.AccessRequired
.ANY
85 && this.group
.getAccessControl().getAddFromInviteLink()
86 != AccessControl
.AccessRequired
.ADMINISTRATOR
91 return GroupInviteLinkUrl
.forGroup(masterKey
, group
);
95 public Set
<RecipientId
> getMembers() {
96 if (this.group
== null) {
99 return group
.getMembersList()
101 .map(m
-> UuidUtil
.parseOrThrow(m
.getUuid().toByteArray()))
102 .map(recipientResolver
::resolveRecipient
)
103 .collect(Collectors
.toSet());
107 public Set
<RecipientId
> getPendingMembers() {
108 if (this.group
== null) {
111 return group
.getPendingMembersList()
113 .map(m
-> UuidUtil
.parseOrThrow(m
.getUuid().toByteArray()))
114 .map(recipientResolver
::resolveRecipient
)
115 .collect(Collectors
.toSet());
119 public Set
<RecipientId
> getRequestingMembers() {
120 if (this.group
== null) {
123 return group
.getRequestingMembersList()
125 .map(m
-> UuidUtil
.parseOrThrow(m
.getUuid().toByteArray()))
126 .map(recipientResolver
::resolveRecipient
)
127 .collect(Collectors
.toSet());
131 public Set
<RecipientId
> getAdminMembers() {
132 if (this.group
== null) {
135 return group
.getMembersList()
137 .filter(m
-> m
.getRole() == Member
.Role
.ADMINISTRATOR
)
138 .map(m
-> UuidUtil
.parseOrThrow(m
.getUuid().toByteArray()))
139 .map(recipientResolver
::resolveRecipient
)
140 .collect(Collectors
.toSet());
144 public boolean isBlocked() {
149 public void setBlocked(final boolean blocked
) {
150 this.blocked
= blocked
;
154 public int getMessageExpirationTime() {
155 return this.group
!= null && this.group
.hasDisappearingMessagesTimer()
156 ?
this.group
.getDisappearingMessagesTimer().getDuration()
161 public boolean isAnnouncementGroup() {
162 return this.group
!= null && this.group
.getIsAnnouncementGroup() == EnabledState
.ENABLED
;
165 public void setPermissionDenied(final boolean permissionDenied
) {
166 this.permissionDenied
= permissionDenied
;
169 public boolean isPermissionDenied() {
170 return permissionDenied
;