From ef5921e676722b4e5898d6b1282efe873209e67c Mon Sep 17 00:00:00 2001 From: vivabelarus <74508922+vivabelarus@users.noreply.github.com> Date: Wed, 26 Mar 2025 18:56:26 +0300 Subject: [PATCH] fix messages grouping in secret groups --- .../java/org/telegram/ui/ChatActivity.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index d6115f7ab..5645901e7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -306,6 +306,7 @@ import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.IntStream; @SuppressWarnings("unchecked") public class ChatActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate, LocationActivity.LocationActivityDelegate, ChatAttachAlertDocumentLayout.DocumentSelectActivityDelegate, ChatActivityInterface, FloatingDebugProvider, AllowShowingActivityInterface, InstantCameraView.Delegate { @@ -20086,10 +20087,19 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not MessageObject previous; if (load_type == MessagesController.LOAD_FORWARD) { previous = messages.get(0); + } else if (isEncryptedGroup()) { + previous = null; + for (int i = messages.size() - 1; i >= 0; i--) { + MessageObject otherMessage = messages.get(i); + if (otherMessage.getDialogId() == obj.getDialogId() && otherMessage.type != MessageObject.TYPE_DATE) { + previous = otherMessage; + break; + } + } } else { previous = messages.get(messages.size() - (reversed || !addDateObjects ? 1 : 2)); } - if (previous.getGroupIdForUse() == obj.getGroupIdForUse()) { + if (previous != null && previous.getGroupIdForUse() == obj.getGroupIdForUse()) { if (previous.localGroupId != 0) { obj.localGroupId = previous.localGroupId; groupedMessages = groupedMessagesMap.get(previous.localGroupId); @@ -23267,8 +23277,23 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return true; } else { List massageCopies = hiddenEncryptedGroupOutMessages.get(obj.messageOwner.random_id); - massageCopies.add(obj); - return false; + /* + int originalIndex = IntStream.range(0, messages.size()) + .filter(i -> messages.get(i).messageOwner.random_id == obj.messageOwner.random_id) + .findAny() + .orElse(-1); + + if (originalIndex != -1 && messages.get(originalIndex).getDialogId() > obj.getDialogId()) { + // replace original message with smaller dialog id + MessageObject newObj = messages.set(originalIndex, obj); + massageCopies.add(newObj); + return true; + } else { + + */ + massageCopies.add(obj); + return false; + //} } } else { messages.add(pos, obj);