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 // ---------------------------------------------------------------------------- |