MAM: update previously sent messages with server msg id during mam query
This commit is contained in:
parent
fc8a5641db
commit
ffb3eeb913
|
@ -804,15 +804,19 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
||||||
return this.bookmark;
|
return this.bookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasDuplicateMessage(Message message) {
|
public Message findDuplicateMessage(Message message) {
|
||||||
synchronized (this.messages) {
|
synchronized (this.messages) {
|
||||||
for (int i = this.messages.size() - 1; i >= 0; --i) {
|
for (int i = this.messages.size() - 1; i >= 0; --i) {
|
||||||
if (this.messages.get(i).similar(message)) {
|
if (this.messages.get(i).similar(message)) {
|
||||||
return true;
|
return this.messages.get(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasDuplicateMessage(Message message) {
|
||||||
|
return findDuplicateMessage(message) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message findSentMessageWithBody(String body) {
|
public Message findSentMessageWithBody(String body) {
|
||||||
|
|
|
@ -474,6 +474,14 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
if (query == null && extractChatState(mXmppConnectionService.find(account, counterpart.toBareJid()), isTypeGroupChat, packet)) {
|
if (query == null && extractChatState(mXmppConnectionService.find(account, counterpart.toBareJid()), isTypeGroupChat, packet)) {
|
||||||
mXmppConnectionService.updateConversationUi();
|
mXmppConnectionService.updateConversationUi();
|
||||||
}
|
}
|
||||||
|
if (query != null && status == Message.STATUS_SEND && remoteMsgId != null) {
|
||||||
|
Message previouslySent = conversation.findSentMessageWithUuid(remoteMsgId);
|
||||||
|
if (previouslySent != null && previouslySent.getServerMsgId() == null && serverMsgId != null) {
|
||||||
|
previouslySent.setServerMsgId(serverMsgId);
|
||||||
|
mXmppConnectionService.databaseBackend.updateMessage(previouslySent);
|
||||||
|
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": encountered previously sent OMEMO message without serverId. updating...");
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (conversationMultiMode) {
|
if (conversationMultiMode) {
|
||||||
|
@ -577,10 +585,24 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
boolean checkForDuplicates = (isTypeGroupChat && packet.hasChild("delay", "urn:xmpp:delay"))
|
boolean checkForDuplicates = (isTypeGroupChat && packet.hasChild("delay", "urn:xmpp:delay"))
|
||||||
|| message.getType() == Message.TYPE_PRIVATE
|
|| message.getType() == Message.TYPE_PRIVATE
|
||||||
|| message.getServerMsgId() != null;
|
|| message.getServerMsgId() != null;
|
||||||
if (checkForDuplicates && conversation.hasDuplicateMessage(message)) {
|
if (checkForDuplicates ) {
|
||||||
Log.d(Config.LOGTAG, "skipping duplicate message from " + message.getCounterpart().toString() + " " + message.getBody());
|
final Message duplicate = conversation.findDuplicateMessage(message);
|
||||||
|
if (duplicate != null) {
|
||||||
|
final boolean serverMsgIdUpdated;
|
||||||
|
if (duplicate.getStatus() != Message.STATUS_RECEIVED
|
||||||
|
&& duplicate.getUuid().equals(message.getRemoteMsgId())
|
||||||
|
&& duplicate.getServerMsgId() == null
|
||||||
|
&& message.getServerMsgId() != null) {
|
||||||
|
duplicate.setServerMsgId(message.getServerMsgId());
|
||||||
|
mXmppConnectionService.databaseBackend.updateMessage(message);
|
||||||
|
serverMsgIdUpdated = true;
|
||||||
|
} else {
|
||||||
|
serverMsgIdUpdated = false;
|
||||||
|
}
|
||||||
|
Log.d(Config.LOGTAG, "skipping duplicate message with " + message.getCounterpart()+". serverMsgIdUpdated="+Boolean.toString(serverMsgIdUpdated));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) {
|
if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) {
|
||||||
conversation.prepend(message);
|
conversation.prepend(message);
|
||||||
|
|
Loading…
Reference in a new issue