properly count mam messages

iNPUTmice created

Change summary

src/main/java/eu/siacs/conversations/parser/MessageParser.java           | 10 
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java |  7 
2 files changed, 13 insertions(+), 4 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -278,6 +278,10 @@ public class MessageParser extends AbstractParser implements
 		if (result == null ) {
 			return null;
 		}
+		final MessageArchiveService.Query query = this.mXmppConnectionService.getMessageArchiveService().findQuery(result.getAttribute("queryid"));
+		if (query!=null) {
+			query.incrementTotalCount();
+		}
 		final Element forwarded = result.findChild("forwarded","urn:xmpp:forward:0");
 		if (forwarded == null) {
 			return null;
@@ -304,7 +308,6 @@ public class MessageParser extends AbstractParser implements
 		final long timestamp = getTimestamp(forwarded);
 		final Jid to = message.getAttributeAsJid("to");
 		final Jid from = message.getAttributeAsJid("from");
-		final MessageArchiveService.Query query = this.mXmppConnectionService.getMessageArchiveService().findQuery(result.getAttribute("queryid"));
 		Jid counterpart;
 		int status;
 		Conversation conversation;
@@ -324,8 +327,11 @@ public class MessageParser extends AbstractParser implements
 		finishedMessage.setCounterpart(counterpart);
 		finishedMessage.setRemoteMsgId(message.getAttribute("id"));
 		finishedMessage.setServerMsgId(result.getAttribute("id"));
+		if (conversation.hasDuplicateMessage(finishedMessage)) {
+			return null;
+		}
 		if (query!=null) {
-			query.incrementCount();
+			query.incrementMessageCount();
 		}
 		return finishedMessage;
 	}

src/main/java/eu/siacs/conversations/services/MessageArchiveService.java 🔗

@@ -311,11 +311,14 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 			return this.account;
 		}
 
-		public void incrementCount() {
-			this.count++;
+		public void incrementTotalCount() {
 			this.totalCount++;
 		}
 
+		public void incrementMessageCount() {
+			this.count++;
+		}
+
 		public int getTotalCount() {
 			return this.totalCount;
 		}