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