From d53bb79bd68721abaf03254b4200a52e5aef2284 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Tue, 24 Oct 2017 11:09:08 -0400
Subject: [PATCH] conversations: prevents received messages from reverting
 status

- Message engine will cause erroneous status updates
  to SENDING or FAILURE for messages already SENT or READ. This
  patch treats these cases client side.

Change-Id: Icd5df2728bb83f8a4ba193f653e12f68935aa4bd
Reviewed-by: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
---
 Ring/Ring/Services/ConversationsService.swift | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/Ring/Ring/Services/ConversationsService.swift b/Ring/Ring/Services/ConversationsService.swift
index 0eff2be4b..8feedf760 100644
--- a/Ring/Ring/Services/ConversationsService.swift
+++ b/Ring/Ring/Services/ConversationsService.swift
@@ -68,9 +68,10 @@ class ConversationsService: MessagesAdapterDelegate {
          */
         for conversation in results.toArray() {
             for message in (conversation.messages) {
-                if message.id != "" && (message.status == .unknown || message.status == .sending ) {
+                if !message.id.isEmpty && (message.status == .unknown || message.status == .sending ) {
                     let updatedMessageStatus = self.status(forMessageId: message.id)
-                    if updatedMessageStatus != message.status {
+                    if (updatedMessageStatus.rawValue > message.status.rawValue && updatedMessageStatus != .failure) ||
+                        (updatedMessageStatus == .failure && message.status == .sending) {
                         self.setMessageStatus(withMessage: message, withStatus: updatedMessageStatus)
                             .subscribe(onCompleted: { [] in
                                 print("Message status updated - load")
@@ -268,7 +269,9 @@ class ConversationsService: MessagesAdapterDelegate {
 
         //Find message
         if let message = conversation?.messages.filter({ messages in
-            return !messages.id.isEmpty && messages.id == String(messageId) && messages.status != status
+            return  !messages.id.isEmpty && messages.id == String(messageId) &&
+                    ((status.rawValue > messages.status.rawValue && status != .failure) ||
+                    (status == .failure && messages.status == .sending))
         }).first {
             self.setMessageStatus(withMessage: message,
                                   withStatus: status)
-- 
GitLab