prepend instead off append mam messages to conversations when going in reverse

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java | 9 ++
src/main/java/eu/siacs/conversations/parser/MessageParser.java  | 6 +
2 files changed, 13 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -752,7 +752,7 @@ public class Conversation extends AbstractEntity implements Blockable {
 	}
 
 	public boolean alwaysNotify() {
-		return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY,Config.ALWAYS_NOTIFY_BY_DEFAULT || isPnNA());
+		return mode == MODE_SINGLE || getBooleanAttribute(ATTRIBUTE_ALWAYS_NOTIFY, Config.ALWAYS_NOTIFY_BY_DEFAULT || isPnNA());
 	}
 
 	public boolean setAttribute(String key, String value) {
@@ -814,6 +814,13 @@ public class Conversation extends AbstractEntity implements Blockable {
 		}
 	}
 
+	public void prepend(Message message) {
+		message.setConversation(this);
+		synchronized (this.messages) {
+			this.messages.add(0,message);
+		}
+	}
+
 	public void addAll(int index, List<Message> messages) {
 		synchronized (this.messages) {
 			this.messages.addAll(index, messages);

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

@@ -398,7 +398,11 @@ public class MessageParser extends AbstractParser implements
 				return;
 			}
 
-			conversation.add(message);
+			if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) {
+				conversation.prepend(message);
+			} else {
+				conversation.add(message);
+			}
 
 			if (query == null || query.getWith() == null) { //either no mam or catchup
 				if (status == Message.STATUS_SEND || status == Message.STATUS_SEND_RECEIVED) {