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