diff -r c5af8598d22c -r e4c884866116 logsui/logsengine/logssymbianos/src/logsreaderstates.cpp --- a/logsui/logsengine/logssymbianos/src/logsreaderstates.cpp Thu Sep 02 20:27:05 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logsreaderstates.cpp Fri Sep 17 08:29:34 2010 +0300 @@ -21,7 +21,6 @@ #include #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 numbersWithoutMatch; QHash& contactMappings = mContext.contactCache(); QList &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& contactMappings, + QSet& 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