From 333e7a6510ccdd6b7575372541c8cb15bb2fb9fe Mon Sep 17 00:00:00 2001
From: Daniel Gultsch <daniel@gultsch.de>
Date: Thu, 23 Nov 2017 18:19:05 +0100
Subject: [PATCH] deduplicate read markers if one with real jid is found

---
 .../siacs/conversations/entities/Message.java  | 18 +++++++++++++++---
 .../conversations/entities/ReadByMarker.java   |  2 +-
 .../eu/siacs/conversations/utils/UIHelper.java |  2 +-
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java
index dcddb3eab..fda02c316 100644
--- a/src/main/java/eu/siacs/conversations/entities/Message.java
+++ b/src/main/java/eu/siacs/conversations/entities/Message.java
@@ -12,6 +12,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -433,16 +434,27 @@ public class Message extends AbstractEntity {
 	public boolean addReadByMarker(ReadByMarker readByMarker) {
 		if (readByMarker.getRealJid() != null) {
 			if (readByMarker.getRealJid().toBareJid().equals(trueCounterpart)) {
-				Log.d(Config.LOGTAG,"trying to add read marker by "+readByMarker.getRealJid()+" to "+body);
 				return false;
 			}
 		} else if (readByMarker.getFullJid() != null) {
 			if (readByMarker.getFullJid().equals(counterpart)) {
-				Log.d(Config.LOGTAG,"trying to add read marker by "+readByMarker.getFullJid()+" to "+body);
 				return false;
 			}
 		}
-		return this.readByMarkers.add(readByMarker);
+		if (this.readByMarkers.add(readByMarker)) {
+			if (readByMarker.getRealJid() != null && readByMarker.getFullJid() != null) {
+				Iterator<ReadByMarker> iterator = this.readByMarkers.iterator();
+				while (iterator.hasNext()) {
+					ReadByMarker marker = iterator.next();
+					if (marker.getRealJid() == null && readByMarker.getFullJid().equals(marker.getFullJid())) {
+						iterator.remove();
+					}
+				}
+			}
+			return true;
+		} else {
+			return false;
+		}
 	}
 
 	public Set<ReadByMarker> getReadByMarkers() {
diff --git a/src/main/java/eu/siacs/conversations/entities/ReadByMarker.java b/src/main/java/eu/siacs/conversations/entities/ReadByMarker.java
index 6767212dc..1a1c5ff71 100644
--- a/src/main/java/eu/siacs/conversations/entities/ReadByMarker.java
+++ b/src/main/java/eu/siacs/conversations/entities/ReadByMarker.java
@@ -82,7 +82,7 @@ public class ReadByMarker {
 	public static ReadByMarker from(Jid fullJid, Jid realJid) {
 		final ReadByMarker marker = new ReadByMarker();
 		marker.fullJid = fullJid;
-		marker.realJid = realJid;
+		marker.realJid = realJid == null ? null : realJid.toBareJid();
 		return marker;
 	}
 
diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java
index 5d648c1a8..b24b8099c 100644
--- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java
@@ -375,7 +375,7 @@ public class UIHelper {
 			if (builder.length() != 0) {
 				builder.append(", ");
 			}
-			final String name = UIHelper.getDisplayName(users.get(0));
+			final String name = UIHelper.getDisplayName(users.get(i));
 			builder.append(shortNames ? name.split("\\s+")[0] : name);
 		}
 		return builder.toString();