logsui/logsengine/logssymbianos/src/logsreaderstates.cpp
changeset 19 e4c884866116
parent 16 c5af8598d22c
equal deleted inserted replaced
16:c5af8598d22c 19:e4c884866116
    19 #include <QList>
    19 #include <QList>
    20 #include <logview.h>
    20 #include <logview.h>
    21 #include <logwraplimits.h>
    21 #include <logwraplimits.h>
    22 #include "logsreaderstates.h"
    22 #include "logsreaderstates.h"
    23 #include "logsstatebasecontext.h"
    23 #include "logsstatebasecontext.h"
    24 #include "logsreaderstatecontext.h"
       
    25 #include "logsevent.h"
    24 #include "logsevent.h"
    26 #include "logseventdata.h"
    25 #include "logseventdata.h"
    27 #include "logsengdefs.h"
    26 #include "logsengdefs.h"
    28 #include "logslogger.h"
    27 #include "logslogger.h"
    29 #include "logsreaderobserver.h"
    28 #include "logsreaderobserver.h"
   423 // ----------------------------------------------------------------------------
   422 // ----------------------------------------------------------------------------
   424 //
   423 //
   425 void LogsReaderStateFillDetails::fillDetails()
   424 void LogsReaderStateFillDetails::fillDetails()
   426 {
   425 {
   427     mDuplicateLookup.invalidate();
   426     mDuplicateLookup.invalidate();
   428     
   427     QSet<QString> numbersWithoutMatch;
   429     QHash<QString, ContactCacheEntry>& contactMappings = mContext.contactCache();
   428     QHash<QString, ContactCacheEntry>& contactMappings = mContext.contactCache();
   430     QList<LogsEvent*> &events = mContext.events();
   429     QList<LogsEvent*> &events = mContext.events();
   431     foreach ( LogsEvent* event, events ){  
   430     foreach ( LogsEvent* event, events ){  
   432         if ( event->isInView() ){
   431         if ( event->isInView() ){
   433             const QString& num = event->getNumberForCalling();
   432             const QString& num = event->getNumberForCalling();
   434             if ( contactMappings.contains(num) ) {
   433             if ( !event->remoteParty().isEmpty() ){
   435                 // Matching cached contact found, use that
   434                 // NOP
   436                 LOGS_QDEBUG_2( "logs [ENG]    Use existing contact for num:", num )
   435             } else if ( numbersWithoutMatch.contains(num) ) {
   437                 ContactCacheEntry entry = contactMappings.value(num);
   436                 event->setRemoteParty( "", true ); // No contact match found
   438                 event->setContactMatched( true );
   437             } else {
   439                 event->setRemoteParty( entry.mRemoteParty );
   438                 // No remote party name, search match from contact cache or phonebook 
   440                 event->setContactLocalId( entry.mContactLocalId );
   439                 searchMatchForNumber(contactMappings, numbersWithoutMatch, *event, num);
   441             } else if ( event->remoteParty().length() == 0 ) {
       
   442                 // No remote party name, search for match from phonebook
       
   443                 QString contactNameStr = event->updateRemotePartyFromContacts(
       
   444                         LogsCommonData::getInstance().contactManager());
       
   445                 if (contactNameStr.length() > 0){
       
   446                     LOGS_QDEBUG_3( "LogsReaderStateFillDetails, (name, num):", 
       
   447                                    contactNameStr, num );
       
   448                     // Cache the new contact name
       
   449                     event->setContactMatched( true );
       
   450                     ContactCacheEntry contactEntry(contactNameStr, event->contactLocalId());
       
   451                     contactMappings.insert( num, contactEntry );
       
   452                 }
       
   453             }
   440             }
   454             if ( mBaseContext.isRecentView() ){
   441             if ( mBaseContext.isRecentView() ){
   455                 LogsEvent* duplicateEvent = mDuplicateLookup.findDuplicate(*event);
   442                 LogsEvent* duplicateEvent = mDuplicateLookup.findDuplicate(*event);
   456                 if ( duplicateEvent ){
   443                 if ( duplicateEvent ){
   457                     mergeDuplicates( *duplicateEvent, *event ); 
   444                     mergeDuplicates( *duplicateEvent, *event ); 
   461             }
   448             }
   462         }
   449         }
   463     } 
   450     } 
   464     
   451     
   465     mDuplicateLookup.cleanup();
   452     mDuplicateLookup.cleanup();
       
   453 }
       
   454 
       
   455 // ----------------------------------------------------------------------------
       
   456 // LogsReaderStateFillDetails::searchMatchForNumber
       
   457 // ----------------------------------------------------------------------------
       
   458 //
       
   459 void LogsReaderStateFillDetails::searchMatchForNumber(
       
   460     QHash<QString, ContactCacheEntry>& contactMappings, 
       
   461     QSet<QString>& numbersWithoutMatch, 
       
   462     LogsEvent& event, 
       
   463     const QString& num)
       
   464 {
       
   465     if ( contactMappings.contains(num) ) {
       
   466         // Matching cached contact found, use that
       
   467         LOGS_QDEBUG_2( "logs [ENG]    Use existing contact for num:", num )
       
   468         ContactCacheEntry entry = contactMappings.value(num);
       
   469         event.setRemoteParty( entry.mRemoteParty, true );
       
   470         event.setContactLocalId( entry.mContactLocalId );
       
   471     } else {
       
   472         QString contactNameStr;
       
   473         if (event.updateRemotePartyFromContacts(
       
   474                 LogsCommonData::getInstance().contactManager(), contactNameStr)){
       
   475             LOGS_QDEBUG_3( "LogsReaderStateFillDetails, (name, num):", 
       
   476                            contactNameStr, num );
       
   477             // Cache the new contact name
       
   478             ContactCacheEntry contactEntry(contactNameStr, event.contactLocalId());
       
   479             contactMappings.insert( num, contactEntry );
       
   480         } else {
       
   481             // Avoid searching match again for the same number at this round
       
   482             event.setRemoteParty( "", true ); // No contact match found
       
   483             numbersWithoutMatch.insert( num );
       
   484         }
       
   485     }
   466 }
   486 }
   467  
   487  
   468 // ----------------------------------------------------------------------------
   488 // ----------------------------------------------------------------------------
   469 // LogsReaderStateFillDetails::mergeDuplicates
   489 // LogsReaderStateFillDetails::mergeDuplicates
   470 // ----------------------------------------------------------------------------
   490 // ----------------------------------------------------------------------------