[gnome-shell] telepathyClient: fix duplicate copy of first message in a chat



commit d2de0865bfdfb1c77c36cf50674354d8ea085c9c
Author: Dan Winship <danw gnome org>
Date:   Wed Mar 23 15:25:42 2011 -0400

    telepathyClient: fix duplicate copy of first message in a chat
    
    The chat-history-fill-in code had logic to avoid appending two
    messages when a message appeared in both the log and the pending
    messages. But it wasn't working because of an incorrect object field
    name.
    
    Additionally, the code was previously keeping the copy of the message
    from the log, and suppressing the copy from pending. But that meant
    that once the previous bug was fixed, it would think it had only shown
    old messages, and so it would create a source but not notify it. So
    fix it to suppress the log message and show the pending message.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=645612

 js/ui/telepathyClient.js |   41 ++++++++++++++++++++---------------------
 1 files changed, 20 insertions(+), 21 deletions(-)
---
diff --git a/js/ui/telepathyClient.js b/js/ui/telepathyClient.js
index 4634a40..b59c058 100644
--- a/js/ui/telepathyClient.js
+++ b/js/ui/telepathyClient.js
@@ -245,36 +245,35 @@ Source.prototype = {
         let [success, events] = logManager.get_filtered_events_finish(result);
 
         let logMessages = events.map(makeMessageFromTplEvent);
-        for (let i = 0; i < logMessages.length; i++) {
-            this._notification.appendMessage(logMessages[i], true);
-        }
 
-        let pendingMessages = this._channel.get_pending_messages();
-        let hasPendingMessage = false;
-        for (let i = 0; i < pendingMessages.length; i++) {
-            let message = makeMessageFromTpMessage(pendingMessages[i], NotificationDirection.RECEIVED);
-
-            // Skip any pending messages that are in the logs.
-            let inLog = false;
-            for (let j = 0; j < logMessages.length; j++) {
-                let logMessage = logMessages[j];
-                if (logMessage.timestamp == message.timestamp && logMessage.text == message.body) {
-                    inLog = true;
+        let pendingTpMessages = this._channel.get_pending_messages();
+        let pendingMessages = pendingTpMessages.map(function (tpMessage) { return makeMessageFromTpMessage(tpMessage, NotificationDirection.RECEIVED); });
+
+        for (let i = 0; i < logMessages.length; i++) {
+            let logMessage = logMessages[i];
+            let isPending = false;
+
+            // Skip any log messages that are also in pendingMessages
+            for (let j = 0; j < pendingMessages.length; j++) {
+                let pending = pendingMessages[j];
+                if (logMessage.timestamp == pending.timestamp && logMessage.text == pending.text) {
+                    isPending = true;
+                    break;
                 }
             }
 
-            if (inLog)
-                continue;
-
-            this._notification.appendMessage(message, true);
-            hasPendingMessage = true;
+            if (!isPending)
+                this._notification.appendMessage(logMessage, true);
         }
 
+        for (let i = 0; i < pendingMessages.length; i++)
+            this._notification.appendMessage(pendingMessages[i], true);
+
         // Only show the timestamp if we have at least one message.
-        if (hasPendingMessage || logMessages.length > 0)
+        if (pendingMessages.length > 0 || logMessages.length > 0)
             this._notification.appendTimestamp();
 
-        if (hasPendingMessage)
+        if (pendingMessages.length > 0)
             this.notify();
     },
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]