That fuck shit the fascists are using
1package org.tm.archive.sms;
2
3import androidx.annotation.NonNull;
4
5import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
6import org.tm.archive.mms.MessageGroupContext;
7import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil;
8import org.whispersystems.signalservice.api.push.ServiceId;
9
10import java.util.Collections;
11import java.util.Optional;
12
13/**
14 * Helper util for inspecting GV2 {@link MessageGroupContext} for various message processing.
15 */
16public final class GroupV2UpdateMessageUtil {
17
18 public static boolean isGroupV2(@NonNull MessageGroupContext groupContext) {
19 return groupContext.isV2Group();
20 }
21
22 public static boolean isUpdate(@NonNull MessageGroupContext groupContext) {
23 return groupContext.isV2Group();
24 }
25
26 public static boolean isJustAGroupLeave(@NonNull MessageGroupContext groupContext) {
27 if (isGroupV2(groupContext) && isUpdate(groupContext)) {
28 DecryptedGroupChange decryptedGroupChange = groupContext.requireGroupV2Properties()
29 .getChange();
30
31 return changeEditorOnlyWasRemoved(decryptedGroupChange) &&
32 noChangesOtherThanDeletes(decryptedGroupChange);
33 }
34
35 return false;
36 }
37
38 private static boolean changeEditorOnlyWasRemoved(@NonNull DecryptedGroupChange decryptedGroupChange) {
39 return decryptedGroupChange.deleteMembers.size() == 1 &&
40 decryptedGroupChange.deleteMembers.get(0).equals(decryptedGroupChange.editorServiceIdBytes);
41 }
42
43 private static boolean noChangesOtherThanDeletes(@NonNull DecryptedGroupChange decryptedGroupChange) {
44 DecryptedGroupChange withoutDeletedMembers = decryptedGroupChange.newBuilder()
45 .deleteMembers(Collections.emptyList())
46 .build();
47 return DecryptedGroupUtil.changeIsEmpty(withoutDeletedMembers);
48 }
49
50 public static boolean isJoinRequestCancel(@NonNull MessageGroupContext groupContext) {
51 if (isGroupV2(groupContext) && isUpdate(groupContext)) {
52 DecryptedGroupChange decryptedGroupChange = groupContext.requireGroupV2Properties()
53 .getChange();
54
55 return decryptedGroupChange.deleteRequestingMembers.size() > 0;
56 }
57
58 return false;
59 }
60
61 public static int getChangeRevision(@NonNull MessageGroupContext groupContext) {
62 if (isGroupV2(groupContext) && isUpdate(groupContext)) {
63 return groupContext.requireGroupV2Properties().getChange().revision;
64 }
65 return -1;
66 }
67
68 public static Optional<ServiceId> getChangeEditor(MessageGroupContext groupContext) {
69 if (isGroupV2(groupContext) && isUpdate(groupContext)) {
70 return Optional.ofNullable(groupContext.requireGroupV2Properties().getChange().editorServiceIdBytes).map(ServiceId::parseOrNull);
71 }
72 return Optional.empty();
73 }
74}