From d5143cd27697053ffd8b06dcac411e966329b7cc Mon Sep 17 00:00:00 2001 From: luvletter2333 Date: Thu, 25 Mar 2021 22:08:43 +0800 Subject: [PATCH] Improve ignore blocked: use cache --- .../org/telegram/messenger/MessagesController.java | 11 ++++++++++- .../main/java/org/telegram/ui/Cells/DialogCell.java | 7 ++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index 13a7c14b7..afe5e03c8 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -56,6 +56,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -99,6 +100,8 @@ public class MessagesController extends BaseController implements NotificationCe public ConcurrentHashMap dialogs_read_outbox_max = new ConcurrentHashMap<>(100, 1.0f, 2); public LongSparseArray dialogs_dict = new LongSparseArray<>(); public LongSparseArray dialogMessage = new LongSparseArray<>(); + // NekoX: ignoreBlocked, Messages cache for Dialog Cell + public LongSparseArray dialogMessageFromUnblocked = new LongSparseArray<>(); public LongSparseArray dialogMessagesByRandomIds = new LongSparseArray<>(); public LongSparseArray deletedHistory = new LongSparseArray<>(); public SparseArray dialogMessagesByIds = new SparseArray<>(); @@ -6326,7 +6329,7 @@ public class MessagesController extends BaseController implements NotificationCe })); } } - + public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCount, long dialogId, long mergeDialogId, int count, int max_id, int offset_date, boolean isCache, int classGuid, int first_unread, int last_message_id, int unread_count, int last_date, int load_type, boolean isChannel, boolean isEnd, int mode, int threadMessageId, int loadIndex, boolean queryFromServer, int mentionsCount, boolean needProcess) { if (BuildVars.LOGS_ENABLED) { @@ -13997,6 +14000,11 @@ public class MessagesController extends BaseController implements NotificationCe dialog.top_message = lastMessage.getId(); dialog.last_message_date = lastMessage.messageOwner.date; changed = true; + if(NekoConfig.ignoreBlocked && blockePeers.indexOfKey(lastMessage.getSenderId())>=0){ + MessageObject preMsg = dialogMessage.get(uid); + if(blockePeers.indexOfKey(preMsg.getSenderId())<0) + dialogMessageFromUnblocked.put(uid, preMsg); + } dialogMessage.put(uid, lastMessage); if (lastMessage.messageOwner.peer_id.channel_id == 0) { dialogMessagesByIds.put(lastMessage.getId(), lastMessage); @@ -14004,6 +14012,7 @@ public class MessagesController extends BaseController implements NotificationCe dialogMessagesByRandomIds.put(lastMessage.messageOwner.random_id, lastMessage); } } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 047d3859e..8ee291b46 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -1943,7 +1943,12 @@ public class DialogCell extends BaseCell { clearingDialog = MessagesController.getInstance(currentAccount).isClearingDialog(dialog.id); message = MessagesController.getInstance(currentAccount).dialogMessage.get(dialog.id); if (message != null && NekoConfig.ignoreBlocked && MessagesController.getInstance(currentAccount).blockePeers.indexOfKey(message.getSenderId()) >= 0) { - message = MessageHelper.getInstance(currentAccount).getLastMessageFromUnblock(dialog.id); + if (MessagesController.getInstance(currentAccount).dialogMessageFromUnblocked.get(dialog.id) != null) + message = MessagesController.getInstance(currentAccount).dialogMessageFromUnblocked.get(dialog.id); + else { + message = MessageHelper.getInstance(currentAccount).getLastMessageFromUnblock(dialog.id); + MessagesController.getInstance(currentAccount).dialogMessageFromUnblocked.put(dialog.id, message); + } // Username show may be abnormal if User who send `message` is not loaded in (never enter chat since boot, esp after cold starting) } lastUnreadState = message != null && message.isUnread();