That fuck shit the fascists are using
at master 74 lines 3.0 kB view raw
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}