]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/manager/storage/groups/GroupInfoV2.java
2092c03aa648a82de6157c4ab2d802e5092f3d92
[signal-cli] / src / main / java / org / asamk / signal / manager / storage / groups / GroupInfoV2.java
1 package org.asamk.signal.manager.storage.groups;
2
3 import org.asamk.signal.manager.groups.GroupIdV2;
4 import org.asamk.signal.manager.groups.GroupInviteLinkUrl;
5 import org.signal.storageservice.protos.groups.AccessControl;
6 import org.signal.storageservice.protos.groups.local.DecryptedGroup;
7 import org.signal.zkgroup.groups.GroupMasterKey;
8 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
9 import org.whispersystems.signalservice.api.util.UuidUtil;
10
11 import java.util.Set;
12 import java.util.stream.Collectors;
13
14 public class GroupInfoV2 extends GroupInfo {
15
16 private final GroupIdV2 groupId;
17 private final GroupMasterKey masterKey;
18
19 private boolean blocked;
20 private DecryptedGroup group; // stored as a file with hexadecimal groupId as name
21
22 public GroupInfoV2(final GroupIdV2 groupId, final GroupMasterKey masterKey) {
23 this.groupId = groupId;
24 this.masterKey = masterKey;
25 }
26
27 @Override
28 public GroupIdV2 getGroupId() {
29 return groupId;
30 }
31
32 public GroupMasterKey getMasterKey() {
33 return masterKey;
34 }
35
36 public void setGroup(final DecryptedGroup group) {
37 this.group = group;
38 }
39
40 public DecryptedGroup getGroup() {
41 return group;
42 }
43
44 @Override
45 public String getTitle() {
46 if (this.group == null) {
47 return null;
48 }
49 return this.group.getTitle();
50 }
51
52 @Override
53 public GroupInviteLinkUrl getGroupInviteLink() {
54 if (this.group == null || this.group.getInviteLinkPassword() == null || (
55 this.group.getAccessControl().getAddFromInviteLink() != AccessControl.AccessRequired.ANY
56 && this.group.getAccessControl().getAddFromInviteLink()
57 != AccessControl.AccessRequired.ADMINISTRATOR
58 )) {
59 return null;
60 }
61
62 return GroupInviteLinkUrl.forGroup(masterKey, group);
63 }
64
65 @Override
66 public Set<SignalServiceAddress> getMembers() {
67 if (this.group == null) {
68 return Set.of();
69 }
70 return group.getMembersList()
71 .stream()
72 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
73 .collect(Collectors.toSet());
74 }
75
76 @Override
77 public Set<SignalServiceAddress> getPendingMembers() {
78 if (this.group == null) {
79 return Set.of();
80 }
81 return group.getPendingMembersList()
82 .stream()
83 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
84 .collect(Collectors.toSet());
85 }
86
87 @Override
88 public Set<SignalServiceAddress> getRequestingMembers() {
89 if (this.group == null) {
90 return Set.of();
91 }
92 return group.getRequestingMembersList()
93 .stream()
94 .map(m -> new SignalServiceAddress(UuidUtil.parseOrThrow(m.getUuid().toByteArray()), null))
95 .collect(Collectors.toSet());
96 }
97
98 @Override
99 public boolean isBlocked() {
100 return blocked;
101 }
102
103 @Override
104 public void setBlocked(final boolean blocked) {
105 this.blocked = blocked;
106 }
107
108 @Override
109 public int getMessageExpirationTime() {
110 return this.group != null && this.group.hasDisappearingMessagesTimer()
111 ? this.group.getDisappearingMessagesTimer().getDuration()
112 : 0;
113 }
114 }