diff -r f27aebe284bb -r c5af8598d22c logsui/logsengine/logssymbianos/src/logsdbconnector.cpp --- a/logsui/logsengine/logssymbianos/src/logsdbconnector.cpp Wed Aug 18 09:49:12 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logsdbconnector.cpp Thu Sep 02 20:27:05 2010 +0300 @@ -30,6 +30,14 @@ // CONSTANTS +// Telephony Configuration API +// Keys under this category are used in defining telephony configuration. +const TUid logsTelConfigurationCRUid = {0x102828B8}; + +// Amount of digits to be used in contact matching. +// This allows a customer to variate the amount of digits to be matched. +const TUint32 logsTelMatchDigits = 0x00000001; + // ---------------------------------------------------------------------------- // LogsDbConnector::LogsDbConnector @@ -151,7 +159,6 @@ return -1; } mReader->updateDetails(clearCached); - readCompleted( mEvents.count() ); //to notify of model update return 0; } @@ -199,6 +206,16 @@ logsReadSizeCompressEnabled, LogsEvent::DirUndefined); mCompressionEnabled = true; } + + //Get number of digits used to match + int matchLen; + TRAPD( err, getTelNumMatchLenL(matchLen) ) + if ( err ){ + LOGS_QDEBUG( "logs [ENG] Getting tel num match len failed, use default" ); + matchLen = logsDefaultMatchLength; + } + LOGS_QDEBUG_2( "logs [ENG] Tel number match length", matchLen ) + LogsCommonData::getInstance().setTelNumMatchLen(matchLen); } // ---------------------------------------------------------------------------- @@ -218,14 +235,22 @@ // LogsDbConnector::clearEvent // ---------------------------------------------------------------------------- // -bool LogsDbConnector::clearEvents(const QList& eventIds) +bool LogsDbConnector::clearEvents(const QList& events) { bool asyncClearingStarted(false); if ( mLogsRemove ){ bool async(false); - int err = mLogsRemove->clearEvents(eventIds, async); + int err = mLogsRemove->clearEvents(events, async); asyncClearingStarted = ( !err && async ); - } + } + + if ( asyncClearingStarted ){ + // Lock reader while removing events one-by-one as reading + // might have chance to run while removing is still in progress + // which looks bad at UI layer. + mReader->lock(true); + } + return asyncClearingStarted; } @@ -233,7 +258,7 @@ // LogsDbConnector::markEventsSeen // ---------------------------------------------------------------------------- // -bool LogsDbConnector::markEventsSeen(const QList& eventIds) +bool LogsDbConnector::markEventsSeen(const QList& events) { LOGS_QDEBUG( "logs [ENG] -> LogsDbConnector::markEventsSeen()" ) @@ -241,13 +266,16 @@ return false; } - foreach( int currId, eventIds ){ - if ( !mEventsSeen.contains(currId) ){ - mEventsSeen.append(currId); + foreach( LogsEvent* ev, events ){ + if ( !mEventsSeen.contains(*ev) ){ + mEventsSeen.append(*ev); + foreach ( const LogsEvent& mergedEv, ev->mergedDuplicates() ){ + if ( !mEventsSeen.contains(mergedEv) ){ + mEventsSeen.append(mergedEv); + } + } } } - - LOGS_QDEBUG_2( "logs [ENG] -> event ids:", mEventsSeen ); int err = doMarkEventSeen(); LOGS_QDEBUG_2( "logs [ENG] <- LogsDbConnector::markEventsSeen(), marking err:", @@ -357,7 +385,7 @@ } } emit dataRemoved(removedIndexes); - deleteRemoved( numEventsLeftInMemory ); + deleteInvalidEvents( numEventsLeftInMemory ); mReader->stop(); } LOGS_QDEBUG( "logs [ENG] <- LogsDbConnector::compressData()" ) @@ -416,10 +444,10 @@ } // ---------------------------------------------------------------------------- -// LogsDbConnector::deleteRemoved +// LogsDbConnector::deleteInvalidEvents // ---------------------------------------------------------------------------- // -void LogsDbConnector::deleteRemoved(int newEventCount) +void LogsDbConnector::deleteInvalidEvents(int newEventCount) { // Remove events which are not anymore in db nor in model, // such events are always at end of list @@ -435,6 +463,7 @@ void LogsDbConnector::removeCompleted() { LOGS_QDEBUG( "logs [ENG] -> LogsDbConnector::removeCompleted()" ) + mReader->lock(false); emit clearingCompleted(0); LOGS_QDEBUG( "logs [ENG] <- LogsDbConnector::removeCompleted()" ) } @@ -447,6 +476,7 @@ { LOGS_QDEBUG_2( "logs [ENG] <-> LogsDbConnector::logsRemoveErrorOccured(), err:", err ) + mReader->lock(false); emit clearingCompleted(err); // TODO: error handling @@ -457,7 +487,7 @@ // LogsDbConnector::readCompleted // ---------------------------------------------------------------------------- // -void LogsDbConnector::readCompleted(int readCount) +void LogsDbConnector::readCompleted() { LOGS_QDEBUG( "logs [ENG] -> LogsDbConnector::readCompleted()" ) LOGS_QDEBUG_EVENT_ARR(mEvents) @@ -466,24 +496,24 @@ mRemovedEventIndexes.clear(); mUpdatedEventIndexes.clear(); mAddedEventIndexes.clear(); + mModelEvents.clear(); + QList toBeDeletedEvents; for ( int i = 0; i < mEvents.count(); i++ ){ - if ( !mEvents.at(i)->isInView() ){ - mRemovedEventIndexes.append( mEvents.at(i)->index() ); - } else if ( mEvents.at(i)->eventState() == LogsEvent::EventUpdated ) { - mUpdatedEventIndexes.append( mEvents.at(i)->index() ); - } else if ( mEvents.at(i)->eventState() == LogsEvent::EventAdded ) { - mAddedEventIndexes.append( mEvents.at(i)->index() ); - } - } - - bool doModelDataReset( !mRemovedEventIndexes.isEmpty() || - !mAddedEventIndexes.isEmpty() || - !mUpdatedEventIndexes.isEmpty() ); - if ( doModelDataReset ){ - mModelEvents.clear(); - int numValidEvents = qMin(mEvents.count(), readCount); - for ( int i = 0; i < numValidEvents; i++ ){ - mModelEvents.append(mEvents.at(i)); + LogsEvent* currEvent = mEvents.at(i); + if ( !currEvent->isInView() ){ + if ( currEvent->index() >= 0 ){ + mRemovedEventIndexes.append( currEvent->index() ); + } + toBeDeletedEvents.append( mEvents.takeAt(i) ); + i--; + } else { + currEvent->setIndex(i); + if ( currEvent->eventState() == LogsEvent::EventUpdated ) { + mUpdatedEventIndexes.append(i); + } else if ( currEvent->eventState() == LogsEvent::EventAdded ) { + mAddedEventIndexes.append(i); + } + mModelEvents.append(currEvent); } } @@ -508,7 +538,7 @@ } } - deleteRemoved(readCount); + qDeleteAll(toBeDeletedEvents); LOGS_QDEBUG( "logs [ENG] <- LogsDbConnector::readCompleted()" ) } @@ -585,7 +615,7 @@ { int err = -1; if ( mEventsSeen.count() > 0 ){ - err = mReader->markEventSeen(mEventsSeen.at(0)); + err = mReader->markEventSeen(mEventsSeen.at(0).logId()); } return err; } @@ -610,3 +640,17 @@ } return continueModify; } + +// ---------------------------------------------------------------------------- +// LogsDbConnector::getTelNumMatchLenL +// ---------------------------------------------------------------------------- +// +void LogsDbConnector::getTelNumMatchLenL(int& matchLen) +{ + TInt tempMatchLen; + CRepository* repository = CRepository::NewL(logsTelConfigurationCRUid); + CleanupStack::PushL(repository); + User::LeaveIfError( repository->Get(logsTelMatchDigits, tempMatchLen) ); + CleanupStack::PopAndDestroy(repository); + matchLen = tempMatchLen; +}