--- a/logsui/logsengine/logssymbianos/src/logsreader.cpp Wed Aug 18 09:49:12 2010 +0300
+++ b/logsui/logsengine/logssymbianos/src/logsreader.cpp Thu Sep 02 20:27:05 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;