logsui/logsengine/logssymbianos/src/logsreaderstates.cpp
changeset 17 90fe74753f71
parent 15 76d2cf7a585e
--- a/logsui/logsengine/logssymbianos/src/logsreaderstates.cpp	Mon Aug 23 18:14:51 2010 +0300
+++ b/logsui/logsengine/logssymbianos/src/logsreaderstates.cpp	Fri Sep 03 14:26:05 2010 +0300
@@ -21,7 +21,6 @@
 #include <logwraplimits.h>
 #include "logsreaderstates.h"
 #include "logsstatebasecontext.h"
-#include "logsreaderstatecontext.h"
 #include "logsevent.h"
 #include "logseventdata.h"
 #include "logsengdefs.h"
@@ -425,31 +424,19 @@
 void LogsReaderStateFillDetails::fillDetails()
 {
     mDuplicateLookup.invalidate();
-    
+    QSet<QString> numbersWithoutMatch;
     QHash<QString, ContactCacheEntry>& contactMappings = mContext.contactCache();
     QList<LogsEvent*> &events = mContext.events();
     foreach ( LogsEvent* event, events ){  
         if ( event->isInView() ){
             const QString& num = event->getNumberForCalling();
-            if ( contactMappings.contains(num) ) {
-                // Matching cached contact found, use that
-                LOGS_QDEBUG_2( "logs [ENG]    Use existing contact for num:", num )
-                ContactCacheEntry entry = contactMappings.value(num);
-                event->setContactMatched( true );
-                event->setRemoteParty( entry.mRemoteParty );
-                event->setContactLocalId( entry.mContactLocalId );
-            } else if ( event->remoteParty().length() == 0 ) {
-                // No remote party name, search for match from phonebook
-                QString contactNameStr = event->updateRemotePartyFromContacts(
-                        LogsCommonData::getInstance().contactManager());
-                if (contactNameStr.length() > 0){
-                    LOGS_QDEBUG_3( "LogsReaderStateFillDetails, (name, num):", 
-                                   contactNameStr, num );
-                    // Cache the new contact name
-                    event->setContactMatched( true );
-                    ContactCacheEntry contactEntry(contactNameStr, event->contactLocalId());
-                    contactMappings.insert( num, contactEntry );
-                }
+            if ( !event->remoteParty().isEmpty() ){
+                // NOP
+            } else if ( numbersWithoutMatch.contains(num) ) {
+                event->setRemoteParty( "", true ); // No contact match found
+            } else {
+                // No remote party name, search match from contact cache or phonebook 
+                searchMatchForNumber(contactMappings, numbersWithoutMatch, *event, num);
             }
             if ( mBaseContext.isRecentView() ){
                 LogsEvent* duplicateEvent = mDuplicateLookup.findDuplicate(*event);
@@ -464,6 +451,39 @@
     
     mDuplicateLookup.cleanup();
 }
+
+// ----------------------------------------------------------------------------
+// LogsReaderStateFillDetails::searchMatchForNumber
+// ----------------------------------------------------------------------------
+//
+void LogsReaderStateFillDetails::searchMatchForNumber(
+    QHash<QString, ContactCacheEntry>& contactMappings, 
+    QSet<QString>& numbersWithoutMatch, 
+    LogsEvent& event, 
+    const QString& num)
+{
+    if ( contactMappings.contains(num) ) {
+        // Matching cached contact found, use that
+        LOGS_QDEBUG_2( "logs [ENG]    Use existing contact for num:", num )
+        ContactCacheEntry entry = contactMappings.value(num);
+        event.setRemoteParty( entry.mRemoteParty, true );
+        event.setContactLocalId( entry.mContactLocalId );
+    } else {
+        QString contactNameStr;
+        if (event.updateRemotePartyFromContacts(
+                LogsCommonData::getInstance().contactManager(), contactNameStr)){
+            LOGS_QDEBUG_3( "LogsReaderStateFillDetails, (name, num):", 
+                           contactNameStr, num );
+            // Cache the new contact name
+            ContactCacheEntry contactEntry(contactNameStr, event.contactLocalId());
+            contactMappings.insert( num, contactEntry );
+        } else {
+            // Avoid searching match again for the same number at this round
+            event.setRemoteParty( "", true ); // No contact match found
+            numbersWithoutMatch.insert( num );
+        }
+    }
+}
  
 // ----------------------------------------------------------------------------
 // LogsReaderStateFillDetails::mergeDuplicates