diff options
| author | Marvin W <git@larma.de> | 2026-10-23 16:56:02 +0200 |
|---|---|---|
| committer | Marvin W <git@larma.de> | 2026-10-23 17:01:44 +0200 |
| commit | ff93e855d25d600d0523fc9cd020079c352b0196 (patch) | |
| tree | 093e1a32c94d345d3e3113c2e66f100be917e5c1 /libdino/src/service/message_correction.vala | |
| parent | d314154abf1bf9a7f7ce20115c3c8c4512f73b15 (diff) | |
libdino: Improve message storage caching
Diffstat (limited to 'libdino/src/service/message_correction.vala')
| -rw-r--r-- | libdino/src/service/message_correction.vala | 32 |
1 files changed, 8 insertions, 24 deletions
diff --git a/libdino/src/service/message_correction.vala b/libdino/src/service/message_correction.vala index 02151ac8..55d121e2 100644 --- a/libdino/src/service/message_correction.vala +++ b/libdino/src/service/message_correction.vala @@ -29,7 +29,6 @@ public class MessageCorrection : StreamInteractionModule, MessageListener { public MessageCorrection(StreamInteractor stream_interactor, Database db) { this.stream_interactor = stream_interactor; this.db = db; - stream_interactor.account_added.connect(on_account_added); stream_interactor.get_module(MessageProcessor.IDENTITY).received_pipeline.connect(this); stream_interactor.get_module(MessageProcessor.IDENTITY).build_message_stanza.connect(check_add_correction_node); stream_interactor.get_module(PresenceManager.IDENTITY).received_offline_presence.connect((jid, account) => { @@ -65,15 +64,17 @@ public class MessageCorrection : StreamInteractionModule, MessageListener { Jid? own_jid = null; if (conversation.type_ == Conversation.Type.CHAT) { own_jid = stream_interactor.get_account_full_jid(conversation.account); + if (own_jid == null) return false; + Message other = stream_interactor.get_module(MessageStorage.IDENTITY).get_last_message_by_sent_resource(conversation, own_jid.resourcepart); + return other != null && other.id == message.id; } else if (conversation.type_ == Conversation.Type.GROUPCHAT) { own_jid = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); + if (own_jid == null) return false; + return last_messages.has_key(conversation) && + last_messages[conversation].has_key(own_jid) && + last_messages[conversation][own_jid].stanza_id == stanza_id; } - - if (own_jid == null) return false; - - return last_messages.has_key(conversation) && - last_messages[conversation].has_key(own_jid) && - last_messages[conversation][own_jid].stanza_id == stanza_id; + return false; } private void check_add_correction_node(Entities.Message message, Xmpp.MessageStanza message_stanza, Conversation conversation) { @@ -245,23 +246,6 @@ public class MessageCorrection : StreamInteractionModule, MessageListener { return -1; } - private void on_account_added(Account account) { - Gee.List<Conversation> conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(account); - foreach (Conversation conversation in conversations) { - if (conversation.type_ != Conversation.Type.CHAT) continue; - - HashMap<Jid, Message> last_conversation_messages = new HashMap<Jid, Message>(Jid.hash_func, Jid.equals_func); - Gee.List<Message> messages = stream_interactor.get_module(MessageStorage.IDENTITY).get_messages(conversation); - for (int i = messages.size - 1; i > 0; i--) { - Message message = messages[i]; - if (!last_conversation_messages.has_key(message.from) && message.edit_to == null) { - last_conversation_messages[message.from] = message; - } - } - last_messages[conversation] = last_conversation_messages; - } - } - private void cache_unmatched_correction(ContentItem content_item, Conversation conversation) { MessageItem message_item = content_item as MessageItem; if (message_item == null || message_item.message.edit_to == null) return; |
