Change summary
  src/main/java/eu/siacs/conversations/parser/MessageParser.java         |  8 
src/main/java/eu/siacs/conversations/services/NotificationService.java | 13 
2 files changed, 20 insertions(+), 1 deletion(-)
  Detailed changes
  
  
    
    @@ -18,6 +18,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
@@ -846,7 +847,6 @@ public class MessageParser extends AbstractParser implements Consumer<im.convers
 
             if (replacementId != null && mXmppConnectionService.allowMessageCorrection()) {
                 final Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, counterpart);
-Log.d("WUT", "" + replacementId + "  " + replacedMessage);
                 if (replacedMessage != null) {
                     final boolean fingerprintsMatch = replacedMessage.getFingerprint() == null
                             || replacedMessage.getFingerprint().equals(message.getFingerprint());
@@ -1184,7 +1184,10 @@ Log.d("WUT", "" + replacementId + "  " + replacedMessage);
                                     message.setServerMsgId(serverMsgId);
                                     message.setTime(timestamp);
                                     message.setBody(new RtpSessionStatus(false, 0).toString());
+                                    message.markUnread();
                                     c.add(message);
+                                    mXmppConnectionService.getNotificationService().possiblyMissedCall(c.getUuid() + sessionId, message);
+                                    query.incrementActualMessageCount();
                                     mXmppConnectionService.databaseBackend.createMessage(message);
                                 }
                             } else if ("proceed".equals(action)) {
@@ -1203,6 +1206,9 @@ Log.d("WUT", "" + replacementId + "  " + replacedMessage);
                                         message.setServerMsgId(serverMsgId);
                                     }
                                     message.setTime(timestamp);
+                                    message.markRead();
+                                    mXmppConnectionService.getNotificationService().possiblyMissedCall(c.getUuid() + sessionId, message);
+                                    query.incrementActualMessageCount();
                                     mXmppConnectionService.updateMessage(message, true);
                                 } else {
                                     Log.d(
  
  
  
    
    @@ -122,6 +122,7 @@ public class NotificationService {
     private final HashMap<Conversation, AtomicInteger> mBacklogMessageCounter = new HashMap<>();
     private final LinkedHashMap<Conversational, MissedCallsInfo> mMissedCalls =
             new LinkedHashMap<>();
+    private final Map<String, Message> possiblyMissedCalls = new HashMap<>();
     private Conversation mOpenConversation;
     private boolean mIsInForeground;
     private long mLastNotification;
@@ -489,6 +490,12 @@ public class NotificationService {
                 updateNotification(count > 0, conversations);
             }
         }
+        synchronized (possiblyMissedCalls) {
+            for (final var entry : possiblyMissedCalls.entrySet()) {
+               pushFromBacklog(entry.getValue());
+            }
+            possiblyMissedCalls.clear();
+        }
         synchronized (mMissedCalls) {
             updateMissedCallNotifications(mMissedCalls.keySet());
         }
@@ -877,6 +884,12 @@ public class NotificationService {
         }
     }
 
+    public void possiblyMissedCall(final String sessionId, final Message message) {
+        synchronized (possiblyMissedCalls) {
+            possiblyMissedCalls.put(sessionId, message);
+        }
+    }
+
     public void pushMissedCallNow(final Message message) {
         synchronized (mMissedCalls) {
             pushMissedCall(message);