MessageParser: dismiss notification when receiving read marker from another client

This commit is contained in:
Daniel Gultsch 2017-11-21 13:26:23 +01:00
parent 05b6fdb9f1
commit 702d6cf2a5
1 changed files with 12 additions and 7 deletions

View File

@ -712,15 +712,20 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
if (conversation != null && id != null) { if (conversation != null && id != null) {
Message message = conversation.findMessageWithRemoteId(id); Message message = conversation.findMessageWithRemoteId(id);
if (message != null) { if (message != null) {
if (conversation.getMucOptions().isSelf(counterpart)) {
if (!message.isRead() && (query == null || query.isCatchup())) { //checking if message is unread fixes race conditions with reflections
mXmppConnectionService.markRead(conversation);
}
} else {
final Jid fallback = conversation.getMucOptions().getTrueCounterpart(counterpart); final Jid fallback = conversation.getMucOptions().getTrueCounterpart(counterpart);
Jid trueJid = getTrueCounterpart(query != null ? mucUserElement : null, fallback); Jid trueJid = getTrueCounterpart(query != null ? mucUserElement : null, fallback);
ReadByMarker readByMarker = ReadByMarker.from(counterpart, trueJid); ReadByMarker readByMarker = ReadByMarker.from(counterpart, trueJid);
if (!conversation.getMucOptions().isSelf(counterpart) && message.addReadByMarker(readByMarker)) { if (message.addReadByMarker(readByMarker)) {
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": added read by (" + readByMarker.getRealJid() + ") to message '" + message.getBody() + "'"); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": added read by (" + readByMarker.getRealJid() + ") to message '" + message.getBody() + "'");
mXmppConnectionService.updateMessage(message); mXmppConnectionService.updateMessage(message);
} }
} }
}
} }
} else { } else {
final Message displayedMessage = mXmppConnectionService.markMessage(account, from.toBareJid(), id, Message.STATUS_SEND_DISPLAYED); final Message displayedMessage = mXmppConnectionService.markMessage(account, from.toBareJid(), id, Message.STATUS_SEND_DISPLAYED);