diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 6cd025460..da82e9983 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -410,12 +410,19 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece } boolean isProperlyAddressed = (to != null) && (!to.isBareJid() || account.countPresences() == 0); boolean isMucStatusMessage = from.isBareJid() && mucUserElement != null && mucUserElement.hasChild("status"); + boolean selfAddressed; if (packet.fromAccount(account)) { status = Message.STATUS_SEND; - counterpart = to != null ? to : account.getJid(); + selfAddressed = to == null || account.getJid().toBareJid().equals(to.toBareJid()); + if (selfAddressed) { + counterpart = from; + } else { + counterpart = to != null ? to : account.getJid(); + } } else { status = Message.STATUS_RECEIVED; counterpart = from; + selfAddressed = false; } Invite invite = extractInvite(account, packet); @@ -431,6 +438,17 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece serverMsgId = extractStanzaId(packet, isTypeGroupChat, conversation); } + + if (selfAddressed) { + if (mXmppConnectionService.markMessage(conversation, remoteMsgId, Message.STATUS_SEND_RECEIVED, serverMsgId)) { + return; + } + status = Message.STATUS_RECEIVED; + if (conversation.findMessageWithRemoteId(remoteMsgId,counterpart) != null) { + return; + } + } + if (isTypeGroupChat) { if (conversation.getMucOptions().isSelf(counterpart)) { status = Message.STATUS_SEND_RECEIVED;