combine multiple message receipts into single message

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/generator/MessageGenerator.java | 14 
src/main/java/eu/siacs/conversations/parser/MessageParser.java       | 13 
2 files changed, 15 insertions(+), 12 deletions(-)

Detailed changes

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

@@ -4,6 +4,7 @@ import net.java.otr4j.OtrException;
 import net.java.otr4j.session.Session;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -72,9 +73,9 @@ public class MessageGenerator extends AbstractGenerator {
 		Element html = packet.addChild("html","http://jabber.org/protocol/xhtml-im");
 		Element body = html.addChild("body","http://www.w3.org/1999/xhtml");
 		Element img = body.addChild("img");
-		img.setAttribute("src",params.url.toString());
-		img.setAttribute("height",params.height);
-		img.setAttribute("width",params.width);
+		img.setAttribute("src", params.url.toString());
+		img.setAttribute("height", params.height);
+		img.setAttribute("width", params.width);
 	}
 
 	public static void addMessageHints(MessagePacket packet) {
@@ -188,13 +189,14 @@ public class MessageGenerator extends AbstractGenerator {
 		return packet;
 	}
 
-	public MessagePacket received(Account account, MessagePacket originalMessage, String namespace, int type) {
+	public MessagePacket received(Account account, MessagePacket originalMessage, ArrayList<String> namespaces, int type) {
 		MessagePacket receivedPacket = new MessagePacket();
 		receivedPacket.setType(type);
 		receivedPacket.setTo(originalMessage.getFrom());
 		receivedPacket.setFrom(account.getJid());
-		Element received = receivedPacket.addChild("received", namespace);
-		received.setAttribute("id", originalMessage.getId());
+		for(String namespace : namespaces) {
+			receivedPacket.addChild("received", namespace).setAttribute("id", originalMessage.getId());
+		}
 		return receivedPacket;
 	}
 

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

@@ -7,6 +7,7 @@ import eu.siacs.conversations.crypto.PgpDecryptionService;
 import net.java.otr4j.session.Session;
 import net.java.otr4j.session.SessionStatus;
 
+import java.util.ArrayList;
 import java.util.Set;
 
 import eu.siacs.conversations.Config;
@@ -393,17 +394,17 @@ public class MessageParser extends AbstractParser implements
 			}
 
 			if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) {
+				ArrayList<String> receiptsNamespaces = new ArrayList<>();
 				if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) {
-					MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account,
-							packet,
-							"urn:xmpp:chat-markers:0",
-							MessagePacket.TYPE_CHAT);
-					mXmppConnectionService.sendMessagePacket(account, receipt);
+					receiptsNamespaces.add("urn:xmpp:chat-markers:0");
 				}
 				if (packet.hasChild("request", "urn:xmpp:receipts")) {
+					receiptsNamespaces.add("urn:xmpp:receipts");
+				}
+				if (receiptsNamespaces.size() > 0) {
 					MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account,
 							packet,
-							"urn:xmpp:receipts",
+							receiptsNamespaces,
 							packet.getType());
 					mXmppConnectionService.sendMessagePacket(account, receipt);
 				}