diff -r 52d644758b05 -r 76d2cf7a585e logsui/logsengine/logssymbianos/src/logsreader.cpp --- a/logsui/logsengine/logssymbianos/src/logsreader.cpp Fri Aug 06 14:57:47 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logsreader.cpp Mon Aug 23 18:14:51 2010 +0300 @@ -42,7 +42,8 @@ mStrings(strings), mEvents(events), mObserver(observer), - mGlobalObserverSet(false) + mGlobalObserverSet(false), + mPendingRead(false) { LOGS_QDEBUG( "logs [ENG] -> LogsReader::LogsReader()" ) @@ -112,16 +113,20 @@ void LogsReader::updateDetails(bool clearCached) { LOGS_QDEBUG( "logs [ENG] -> LogsReader::updateDetails()" ) + + if ( clearCached ){ + mContactCache.clear(); + } foreach (LogsEvent* event, mEvents){ event->prepareForContactMatching(); - } - if ( clearCached ) { - mContactCache.clear(); + if ( clearCached && event->contactMatched() ){ + event->setContactMatched( false ); + event->setRemoteParty(""); + } } - LogsReaderStateFillDetails* fillDetailsState = - new LogsReaderStateFillDetails(*this, *this); - fillDetailsState->fillDetails(); - delete fillDetailsState; + + start(); + LOGS_QDEBUG( "logs [ENG] <- LogsReader::updateDetails()" ) } @@ -150,6 +155,23 @@ } // ---------------------------------------------------------------------------- +// LogsReader::lock +// ---------------------------------------------------------------------------- +// +int LogsReader::lock(bool locked) +{ + bool prevLocked = mLocked; + mLocked = locked; + LOGS_QDEBUG_3( "logs [ENG] -> LogsReader::lock(), prev and new locked:", + prevLocked, mLocked ) + if ( prevLocked && !mLocked && mPendingRead ){ + // Read attempt occured while locked, read now when not anymore locked + start(); + } + return 0; +} + +// ---------------------------------------------------------------------------- // LogsReader::RunError // ---------------------------------------------------------------------------- // @@ -169,6 +191,11 @@ // void LogsReader::startL() { + if ( mLocked ){ + LOGS_QDEBUG( "logs [ENG] <-> LogsReader::startL(), locked" ) + mPendingRead = true; + User::Leave( KErrAccessDenied ); + } prepareReadingL(); initializeReadStates(); @@ -176,6 +203,8 @@ if ( currentState().enterL() ){ SetActive(); } + + mPendingRead = false; } // ---------------------------------------------------------------------------- @@ -422,16 +451,20 @@ new LogsReaderStateFindingDuplicates(*this, *this); LogsReaderStateReadingDuplicates* readingDuplicates = new LogsReaderStateReadingDuplicates(*this, *this); + LogsReaderStateMergingDuplicates* mergingDuplicates = + new LogsReaderStateMergingDuplicates(*this, *this); LogsReaderStateReadingDuplicatesDone* done = new LogsReaderStateReadingDuplicatesDone(*this, *this); filtering->setNextState(*searching); searching->setNextState(*findingDuplicates); findingDuplicates->setNextState(*readingDuplicates); - readingDuplicates->setNextState(*done); + readingDuplicates->setNextState(*mergingDuplicates); + mergingDuplicates->setNextState(*done); mDuplicateReadingStates.append(filtering); mDuplicateReadingStates.append(searching); mDuplicateReadingStates.append(findingDuplicates); mDuplicateReadingStates.append(readingDuplicates); + mDuplicateReadingStates.append(mergingDuplicates); mDuplicateReadingStates.append(done); } mCurrentStateMachine = &mDuplicateReadingStates;