fixed mam to work with muc

iNPUTmice created

Change summary

src/main/java/eu/siacs/conversations/generator/IqGenerator.java          |  4 
src/main/java/eu/siacs/conversations/parser/MessageParser.java           |  2 
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java | 21 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  5 
4 files changed, 21 insertions(+), 11 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/generator/IqGenerator.java 🔗

@@ -107,7 +107,9 @@ public class IqGenerator extends AbstractGenerator {
 		query.setAttribute("queryid",mam.getQueryId());
 		final Data data = new Data();
 		data.setFormType("urn:xmpp:mam:0");
-		if (mam.getWith()!=null) {
+		if (mam.muc()) {
+			packet.setTo(mam.getWith());
+		} else if (mam.getWith()!=null) {
 			data.put("with", mam.getWith().toString());
 		}
 		data.put("start",getTimestamp(mam.getStart()));

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

@@ -8,7 +8,6 @@ import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.entities.MucOptions;
-import eu.siacs.conversations.http.HttpConnection;
 import eu.siacs.conversations.http.HttpConnectionManager;
 import eu.siacs.conversations.services.MessageArchiveService;
 import eu.siacs.conversations.services.XmppConnectionService;
@@ -142,6 +141,7 @@ public class MessageParser extends AbstractParser implements
 		Conversation conversation = mXmppConnectionService
 				.findOrCreateConversation(account, from.toBareJid(), true);
 		if (packet.hasChild("subject")) {
+			conversation.setHasMessagesLeftOnServer(true);
 			conversation.getMucOptions().setSubject(packet.findChild("subject").getContent());
 			mXmppConnectionService.updateConversationUi();
 			return null;

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

@@ -225,7 +225,6 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 		private int messageCount = 0;
 		private long start;
 		private long end;
-		private Jid with = null;
 		private String queryId;
 		private String reference = null;
 		private Account account;
@@ -237,7 +236,6 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 		public Query(Conversation conversation, long start, long end) {
 			this(conversation.getAccount(), start, end);
 			this.conversation = conversation;
-			this.with = conversation.getJid().toBareJid();
 		}
 
 		public Query(Conversation conversation, long start, long end, PagingOrder order) {
@@ -256,7 +254,6 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 			Query query = new Query(this.account,this.start,this.end);
 			query.reference = reference;
 			query.conversation = conversation;
-			query.with = with;
 			query.totalCount = totalCount;
 			query.callback = callback;
 			return query;
@@ -287,7 +284,11 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 		}
 
 		public Jid getWith() {
-			return with;
+			return conversation == null ? null : conversation.getJid().toBareJid();
+		}
+
+		public boolean muc() {
+			return conversation != null && conversation.getMode() == Conversation.MODE_MULTI;
 		}
 
 		public long getStart() {
@@ -338,11 +339,15 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
 		@Override
 		public String toString() {
 			StringBuilder builder = new StringBuilder();
-			builder.append("with=");
-			if (this.with==null) {
-				builder.append("*");
+			if (this.muc()) {
+				builder.append("to="+this.getWith().toString());
 			} else {
-				builder.append(with.toString());
+				builder.append("with=");
+				if (this.getWith() == null) {
+					builder.append("*");
+				} else {
+					builder.append(getWith().toString());
+				}
 			}
 			builder.append(", start=");
 			builder.append(AbstractGenerator.getTimestamp(this.start));

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

@@ -1022,7 +1022,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 				}
 				this.databaseBackend.createConversation(conversation);
 			}
-			if (account.getXmppConnection() != null && account.getXmppConnection().getFeatures().mam()) {
+			if (account.getXmppConnection() != null
+					&& account.getXmppConnection().getFeatures().mam()
+					&& !muc) {
 				if (query == null) {
 					this.mMessageArchiveService.query(conversation);
 				} else {
@@ -1314,6 +1316,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 				conversation.setContactJid(joinJid);
 				databaseBackend.updateConversation(conversation);
 			}
+			conversation.setHasMessagesLeftOnServer(false);
 		} else {
 			account.pendingConferenceJoins.add(conversation);
 		}