logsui/logsengine/logssymbianos/src/logsreader.cpp
changeset 15 76d2cf7a585e
parent 9 68f3171a5819
child 17 90fe74753f71
--- 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;