That fuck shit the fascists are using
1package org.tm.archive.util;
2
3import android.content.Context;
4
5import androidx.annotation.NonNull;
6import androidx.annotation.Nullable;
7import androidx.annotation.WorkerThread;
8
9import org.signal.core.util.StringUtil;
10import org.signal.core.util.logging.Log;
11import org.signal.libsignal.zkgroup.InvalidInputException;
12import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
13import org.tm.archive.R;
14import org.tm.archive.database.GroupTable;
15import org.tm.archive.database.SignalDatabase;
16import org.tm.archive.database.model.GroupRecord;
17import org.tm.archive.groups.GroupId;
18import org.tm.archive.messages.SignalServiceProtoUtil;
19import org.tm.archive.mms.MessageGroupContext;
20import org.tm.archive.recipients.Recipient;
21import org.tm.archive.recipients.RecipientId;
22import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
23import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
24import org.whispersystems.signalservice.internal.push.Content;
25import org.whispersystems.signalservice.internal.push.GroupContextV2;
26
27import java.io.IOException;
28import java.util.List;
29
30public final class GroupUtil {
31
32 private GroupUtil() {
33 }
34
35 private static final String TAG = Log.tag(GroupUtil.class);
36
37 public static @Nullable GroupContextV2 getGroupContextIfPresent(@NonNull Content content) {
38 if (content.dataMessage != null && SignalServiceProtoUtil.INSTANCE.getHasGroupContext(content.dataMessage)) {
39 return content.dataMessage.groupV2;
40 } else if (content.syncMessage != null &&
41 content.syncMessage.sent != null &&
42 content.syncMessage.sent.message != null &&
43 SignalServiceProtoUtil.INSTANCE.getHasGroupContext(content.syncMessage.sent.message))
44 {
45 return content.syncMessage.sent.message.groupV2;
46 } else if (content.storyMessage != null && SignalServiceProtoUtil.INSTANCE.isValid(content.storyMessage.group)) {
47 return content.storyMessage.group;
48 } else {
49 return null;
50 }
51 }
52
53 public static @NonNull GroupMasterKey requireMasterKey(@NonNull byte[] masterKey) {
54 try {
55 return new GroupMasterKey(masterKey);
56 } catch (InvalidInputException e) {
57 throw new AssertionError(e);
58 }
59 }
60
61 public static @NonNull GroupDescription getNonV2GroupDescription(@NonNull Context context, @Nullable String encodedGroup) {
62 if (encodedGroup == null) {
63 return new GroupDescription(context, null);
64 }
65
66 try {
67 MessageGroupContext groupContext = new MessageGroupContext(encodedGroup, false);
68 return new GroupDescription(context, groupContext);
69 } catch (IOException e) {
70 Log.w(TAG, e);
71 return new GroupDescription(context, null);
72 }
73 }
74
75 @WorkerThread
76 public static void setDataMessageGroupContext(@NonNull Context context,
77 @NonNull SignalServiceDataMessage.Builder dataMessageBuilder,
78 @NonNull GroupId.Push groupId)
79 {
80 if (groupId.isV2()) {
81 GroupTable groupDatabase = SignalDatabase.groups();
82 GroupRecord groupRecord = groupDatabase.requireGroup(groupId);
83 GroupTable.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties();
84 SignalServiceGroupV2 group = SignalServiceGroupV2.newBuilder(v2GroupProperties.getGroupMasterKey())
85 .withRevision(v2GroupProperties.getGroupRevision())
86 .build();
87 dataMessageBuilder.asGroupMessage(group);
88 }
89 }
90
91 public static class GroupDescription {
92
93 @NonNull private final Context context;
94 @Nullable private final MessageGroupContext groupContext;
95 @Nullable private final List<RecipientId> members;
96
97 GroupDescription(@NonNull Context context, @Nullable MessageGroupContext groupContext) {
98 this.context = context.getApplicationContext();
99 this.groupContext = groupContext;
100
101 if (groupContext == null) {
102 this.members = null;
103 } else {
104 List<RecipientId> membersList = groupContext.getMembersListExcludingSelf();
105 this.members = membersList.isEmpty() ? null : membersList;
106 }
107 }
108
109 @WorkerThread
110 public String toString(@NonNull Recipient sender) {
111 StringBuilder description = new StringBuilder();
112 description.append(context.getString(R.string.MessageRecord_s_updated_group, sender.getDisplayName(context)));
113
114 if (groupContext == null) {
115 return description.toString();
116 }
117
118 String title = StringUtil.isolateBidi(groupContext.getName());
119
120 if (members != null && members.size() > 0) {
121 description.append("\n");
122 description.append(context.getResources().getQuantityString(R.plurals.GroupUtil_joined_the_group,
123 members.size(), toString(members)));
124 }
125
126 if (!title.trim().isEmpty()) {
127 if (members != null) description.append(" ");
128 else description.append("\n");
129 description.append(context.getString(R.string.GroupUtil_group_name_is_now, title));
130 }
131
132 return description.toString();
133 }
134
135 private String toString(List<RecipientId> recipients) {
136 StringBuilder result = new StringBuilder();
137
138 for (int i = 0; i < recipients.size(); i++) {
139 result.append(Recipient.live(recipients.get(i)).get().getDisplayName(context));
140
141 if (i != recipients.size() -1 )
142 result.append(", ");
143 }
144
145 return result.toString();
146 }
147 }
148}