From 6ffa82d6223ce46d7ef0e8e145db4892dfe67f23 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Sat, 9 Feb 2019 13:58:16 +0100 Subject: Do not ignore encrypted messages without a body tag Fixes #473 --- libdino/src/service/conversation_manager.vala | 2 +- libdino/src/service/message_processor.vala | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/libdino/src/service/conversation_manager.vala b/libdino/src/service/conversation_manager.vala index c72500b4..1965e13d 100644 --- a/libdino/src/service/conversation_manager.vala +++ b/libdino/src/service/conversation_manager.vala @@ -120,7 +120,7 @@ public class ConversationManager : StreamInteractionModule, Object { private class MessageListener : Dino.MessageListener { - public string[] after_actions_const = new string[]{ "DEDUPLICATE" }; + public string[] after_actions_const = new string[]{ "DEDUPLICATE", "FILTER_EMPTY" }; public override string action_group { get { return "MANAGER"; } } public override string[] after_actions { get { return after_actions_const; } } diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala index f7f13a40..758d9139 100644 --- a/libdino/src/service/message_processor.vala +++ b/libdino/src/service/message_processor.vala @@ -34,6 +34,7 @@ public class MessageProcessor : StreamInteractionModule, Object { if (state == ConnectionManager.ConnectionState.CONNECTED) send_unsent_messages(account); }); received_pipeline.connect(new DeduplicateMessageListener(db)); + received_pipeline.connect(new FilterMessageListener()); received_pipeline.connect(new StoreMessageListener(stream_interactor)); received_pipeline.connect(new MamMessageListener(stream_interactor)); received_pipeline.connect(new SlackMessageListener()); @@ -74,8 +75,6 @@ public class MessageProcessor : StreamInteractionModule, Object { } private async void on_message_received(Account account, Xmpp.MessageStanza message_stanza) { - if (message_stanza.body == null) return; - Entities.Message message = yield parse_message_stanza(account, message_stanza); Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation_for_message(message); @@ -178,9 +177,20 @@ public class MessageProcessor : StreamInteractionModule, Object { } } - private class StoreMessageListener : MessageListener { + private class FilterMessageListener : MessageListener { public string[] after_actions_const = new string[]{ "DEDUPLICATE", "DECRYPT" }; + public override string action_group { get { return "FILTER_EMPTY"; } } + public override string[] after_actions { get { return after_actions_const; } } + + public override async bool run(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) { + return (message.body == null); + } + } + + private class StoreMessageListener : MessageListener { + + public string[] after_actions_const = new string[]{ "DEDUPLICATE", "DECRYPT", "FILTER_EMPTY" }; public override string action_group { get { return "STORE"; } } public override string[] after_actions { get { return after_actions_const; } } @@ -191,6 +201,7 @@ public class MessageProcessor : StreamInteractionModule, Object { } public override async bool run(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) { + if (message.body == null) return true; stream_interactor.get_module(MessageStorage.IDENTITY).add_message(message, conversation); return false; } -- cgit v1.2.3-70-g09d2