notify on mam catchup messages

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/parser/MessageParser.java           | 20 
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java |  3 
src/main/java/eu/siacs/conversations/services/NotificationService.java   |  4 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
4 files changed, 21 insertions(+), 8 deletions(-)

Detailed changes

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

@@ -397,15 +397,21 @@ public class MessageParser extends AbstractParser implements
 			}
 
 			conversation.add(message);
-			if (query != null) {
-				query.incrementMessageCount();
-			} else {
+
+			if (query == null || query.getWith() == null) { //either no mam or catchup
 				if (status == Message.STATUS_SEND || status == Message.STATUS_SEND_RECEIVED) {
 					mXmppConnectionService.markRead(conversation);
-					account.activateGracePeriod();
+					if (query == null) {
+						account.activateGracePeriod();
+					}
 				} else {
 					message.markUnread();
 				}
+			}
+
+			if (query != null) {
+				query.incrementMessageCount();
+			} else {
 				mXmppConnectionService.updateConversationUi();
 			}
 
@@ -445,7 +451,11 @@ public class MessageParser extends AbstractParser implements
 			if (message.trusted() && message.treatAsDownloadable() != Message.Decision.NEVER && manager.getAutoAcceptFileSize() > 0) {
 				manager.createNewDownloadConnection(message);
 			} else if (!message.isRead()) {
-				mXmppConnectionService.getNotificationService().push(message);
+				if (query == null) {
+					mXmppConnectionService.getNotificationService().push(message);
+				} else if (query.getWith() == null) { // mam catchup
+					mXmppConnectionService.getNotificationService().pushFromBacklog(message);
+				}
 			}
 		} else { //no body
 			if (isTypeGroupChat) {

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

@@ -218,6 +218,9 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 		if (complete || relevant == null || abort) {
 			this.finalizeQuery(query);
 			Log.d(Config.LOGTAG,query.getAccount().getJid().toBareJid().toString()+": finished mam after "+query.getTotalCount()+" messages");
+			if (query.getWith() == null && query.getTotalCount() > 0) {
+				mXmppConnectionService.getNotificationService().finishBacklog(true);
+			}
 		} else {
 			final Query nextQuery;
 			if (query.getPagingOrder() == PagingOrder.NORMAL) {