logsui/logsengine/logssymbianos/src/logsreaderstates.cpp
changeset 0 4a5361db8937
child 9 68f3171a5819
equal deleted inserted replaced
-1:000000000000 0:4a5361db8937
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE FILES
       
    19 #include <QList>
       
    20 #include <logview.h>
       
    21 #include <logwraplimits.h>
       
    22 #include "logsreaderstates.h"
       
    23 #include "logsreaderstatecontext.h"
       
    24 #include "logsevent.h"
       
    25 #include "logseventdata.h"
       
    26 #include "logsengdefs.h"
       
    27 #include "logslogger.h"
       
    28 #include "logsreaderobserver.h"
       
    29 #include "logscommondata.h"
       
    30 
       
    31 // CONSTANTS
       
    32 
       
    33 // ----------------------------------------------------------------------------
       
    34 // LogsReaderStateBase::LogsReaderStateBase
       
    35 // ----------------------------------------------------------------------------
       
    36 //
       
    37 LogsReaderStateBase::LogsReaderStateBase(
       
    38     LogsReaderStateContext& context) 
       
    39  : mContext(context),
       
    40    mNextState(0)
       
    41 {
       
    42 }
       
    43 
       
    44 // ----------------------------------------------------------------------------
       
    45 // LogsReaderStateBase::~LogsReaderStateBase
       
    46 // ----------------------------------------------------------------------------
       
    47 //
       
    48 LogsReaderStateBase::~LogsReaderStateBase()
       
    49 {
       
    50 
       
    51 }
       
    52 
       
    53 // ----------------------------------------------------------------------------
       
    54 // LogsReaderStateFiltering::setNextState
       
    55 // ----------------------------------------------------------------------------
       
    56 //
       
    57 void LogsReaderStateBase::setNextState(LogsReaderStateBase& nextState)
       
    58 {
       
    59     mNextState = &nextState;
       
    60 }
       
    61 
       
    62 // ----------------------------------------------------------------------------
       
    63 // LogsReaderStateFiltering::enterNextStateL
       
    64 // ----------------------------------------------------------------------------
       
    65 //
       
    66 bool LogsReaderStateBase::enterNextStateL()
       
    67 {
       
    68     if ( mNextState ){
       
    69         mContext.setCurrentState(*mNextState);
       
    70         return mNextState->enterL();
       
    71     }
       
    72     return false;
       
    73 }
       
    74 
       
    75 // ----------------------------------------------------------------------------
       
    76 // LogsReaderStateBase::enterL
       
    77 // ----------------------------------------------------------------------------
       
    78 //
       
    79 bool LogsReaderStateBase::enterL()
       
    80 {
       
    81     return false;
       
    82 }
       
    83 
       
    84 // ----------------------------------------------------------------------------
       
    85 // LogsReaderStateBase::continueL
       
    86 // ----------------------------------------------------------------------------
       
    87 //
       
    88 bool LogsReaderStateBase::continueL()
       
    89 {
       
    90     return false;
       
    91 }
       
    92 
       
    93 // ----------------------------------------------------------------------------
       
    94 // LogsReaderStateBase::viewCount
       
    95 // ----------------------------------------------------------------------------
       
    96 //
       
    97 int LogsReaderStateBase::viewCountL() const
       
    98     {
       
    99     return mContext.logView().CountL();
       
   100     }
       
   101 
       
   102 // ----------------------------------------------------------------------------
       
   103 // LogsReaderStateBase::event
       
   104 // ----------------------------------------------------------------------------
       
   105 //
       
   106 CLogEvent& LogsReaderStateBase::event() const
       
   107     {
       
   108     //The RVCT compiler provides warnings "type qualifier on return type is meaningless"
       
   109     //for functions that return const values. In order to avoid these numerous warnings and 
       
   110     //const cascading, the CLogEvent is const_casted here.
       
   111     return const_cast<CLogEvent&>( mContext.logView().Event() );
       
   112     }
       
   113 
       
   114 // ----------------------------------------------------------------------------
       
   115 // LogsReaderStateBase::updateAndInsertEventL
       
   116 // ----------------------------------------------------------------------------
       
   117 //
       
   118 bool LogsReaderStateBase::updateAndInsertEventL(
       
   119     const CLogEvent& source, LogsEvent* dest, int& eventIndex)
       
   120 {
       
   121     Q_ASSERT( dest );
       
   122     dest->initializeEventL( source, mContext.strings() );
       
   123     dest->setIndex(eventIndex);
       
   124     mContext.events().insert(eventIndex, dest);
       
   125     eventIndex++;
       
   126     return true;
       
   127 }
       
   128 
       
   129 // ----------------------------------------------------------------------------
       
   130 // LogsReaderStateBase::constructAndInsertEventL
       
   131 // ----------------------------------------------------------------------------
       
   132 //
       
   133 bool LogsReaderStateBase::constructAndInsertEventL(
       
   134     const CLogEvent& source, LogsEvent* dest, int& eventIndex, QList<LogsEvent*>& events)
       
   135 {
       
   136     Q_ASSERT( dest );
       
   137     dest->initializeEventL( source, mContext.strings() );
       
   138     if ( !dest->validate() ){
       
   139         LOGS_QDEBUG( "LogsReaderStateBase::constructAndInsertEventL, event discarded" )
       
   140         delete dest;
       
   141         return false;
       
   142     } 
       
   143     dest->setIndex(eventIndex);
       
   144     events.insert(eventIndex, dest);
       
   145     eventIndex++;
       
   146     return true;
       
   147 }
       
   148 
       
   149 // ----------------------------------------------------------------------------
       
   150 // LogsReaderStateBase::resetEvents
       
   151 // ----------------------------------------------------------------------------
       
   152 //
       
   153 void LogsReaderStateBase::resetEvents()
       
   154 {
       
   155     QList<LogsEvent*> &events = mContext.events();
       
   156     for ( int i = 0; i < events.count(); i++ ){
       
   157         events.at(i)->setIsInView(false);
       
   158     }
       
   159 }
       
   160 
       
   161 // ----------------------------------------------------------------------------
       
   162 // LogsReaderStateBase::takeMatchingEvent
       
   163 // ----------------------------------------------------------------------------
       
   164 //
       
   165 LogsEvent* LogsReaderStateBase::takeMatchingEvent(const CLogEvent& event)
       
   166 {
       
   167     QList<LogsEvent*> &events = mContext.events();
       
   168     for ( int i = 0; i < events.count(); i++ ){
       
   169         if ( events.at(i)->logId() == event.Id() ){
       
   170             return events.takeAt(i);
       
   171         }
       
   172     }
       
   173     return 0;
       
   174 }
       
   175 
       
   176 // ----------------------------------------------------------------------------
       
   177 // LogsReaderStateBase::eventById
       
   178 // ----------------------------------------------------------------------------
       
   179 //
       
   180 LogsEvent* LogsReaderStateBase::eventById(int eventId)
       
   181 {
       
   182     LogsEvent* event = 0;
       
   183     QList<LogsEvent*> &events = mContext.events();
       
   184     for ( int i = 0; i < events.count(); i++ ){
       
   185         if ( events.at(i)->logId() == eventId ){
       
   186             event = events.at(i);
       
   187             break;
       
   188         }
       
   189     }
       
   190     return event;
       
   191 }
       
   192 
       
   193 // ----------------------------------------------------------------------------
       
   194 // LogsReaderStateBase::duplicatesL
       
   195 // ----------------------------------------------------------------------------
       
   196 //
       
   197 bool LogsReaderStateBase::duplicatesL(const CLogFilter* aFilter){
       
   198     bool gettingDuplicates( false );
       
   199     if ( mContext.isRecentView() ){
       
   200         if ( aFilter ){
       
   201             gettingDuplicates = 
       
   202                 static_cast<CLogViewRecent&>( mContext.logView() ).DuplicatesL( 
       
   203                         mContext.duplicatesView(), *aFilter, mContext.reqStatus() ); 
       
   204         } else {
       
   205             gettingDuplicates = 
       
   206                 static_cast<CLogViewRecent&>( mContext.logView() ).DuplicatesL( 
       
   207                         mContext.duplicatesView(), mContext.reqStatus() ); 
       
   208         }
       
   209     }
       
   210     return gettingDuplicates;
       
   211 }
       
   212 
       
   213 // ----------------------------------------------------------------------------
       
   214 // LogsReaderStateInitReading::LogsReaderStateInitReading
       
   215 // ----------------------------------------------------------------------------
       
   216 //
       
   217 LogsReaderStateInitReading::LogsReaderStateInitReading(
       
   218     LogsReaderStateContext& context ) 
       
   219  : LogsReaderStateBase(context)
       
   220 {
       
   221 }
       
   222 
       
   223 // ----------------------------------------------------------------------------
       
   224 // LogsReaderInitReadingState::enterL
       
   225 // ----------------------------------------------------------------------------
       
   226 //
       
   227 bool LogsReaderStateInitReading::enterL()
       
   228 {
       
   229     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateInitReading::enterL" );
       
   230     resetEvents();
       
   231     return enterNextStateL();
       
   232 }
       
   233 
       
   234 // ----------------------------------------------------------------------------
       
   235 // LogsReaderStateFiltering::LogsReaderStateFiltering
       
   236 // ----------------------------------------------------------------------------
       
   237 //
       
   238 LogsReaderStateFiltering::LogsReaderStateFiltering(
       
   239     LogsReaderStateContext& context ) 
       
   240  : LogsReaderStateBase(context),
       
   241    mFilterList(0)
       
   242 {
       
   243 }
       
   244 
       
   245 // ----------------------------------------------------------------------------
       
   246 // LogsReaderStateFiltering::~LogsReaderStateFiltering
       
   247 // ----------------------------------------------------------------------------
       
   248 //
       
   249 LogsReaderStateFiltering::~LogsReaderStateFiltering()
       
   250 {
       
   251     if ( mFilterList ){
       
   252         mFilterList->ResetAndDestroy();
       
   253     }
       
   254     delete mFilterList;
       
   255 }
       
   256 
       
   257 // ----------------------------------------------------------------------------
       
   258 // LogsReaderStateFiltering::enterL
       
   259 // ----------------------------------------------------------------------------
       
   260 //
       
   261 bool LogsReaderStateFiltering::enterL()
       
   262 {
       
   263     // Filtering all recent calls (max number of recent events is configurable,
       
   264     // see TLogConfig in logcli.h
       
   265     //
       
   266     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateFiltering::enterL" );
       
   267     
       
   268     CLogFilterList* filterList = new ( ELeave ) CLogFilterList;
       
   269     CleanupStack::PushL(filterList);
       
   270     CLogFilter* filter = CLogFilter::NewL();
       
   271     CleanupStack::PushL( filter );
       
   272     filter->SetEventType( KLogCallEventTypeUid );
       
   273     filterList->AppendL( filter );
       
   274     CleanupStack::Pop( filter );
       
   275     
       
   276     if ( mFilterList ){
       
   277         mFilterList->ResetAndDestroy();
       
   278         delete mFilterList;
       
   279         mFilterList = 0;
       
   280     }
       
   281     mFilterList = filterList;
       
   282     CleanupStack::Pop(filterList);
       
   283     
       
   284     if ( setFilterL( *filterList ) ) {
       
   285         return true;
       
   286     }
       
   287     
       
   288     // Not possible to continue with filtering
       
   289     return enterNextStateL();
       
   290 }
       
   291 
       
   292 // ----------------------------------------------------------------------------
       
   293 // LogsReaderStateFiltering::continueL
       
   294 // ----------------------------------------------------------------------------
       
   295 //
       
   296 bool LogsReaderStateFiltering::continueL()
       
   297 {
       
   298     return enterNextStateL();
       
   299 }
       
   300 
       
   301 // ----------------------------------------------------------------------------
       
   302 // LogsReaderStateFiltering::setFilterL
       
   303 // ----------------------------------------------------------------------------
       
   304 //
       
   305 bool LogsReaderStateFiltering::setFilterL(CLogFilterList& filterList){
       
   306     __ASSERT_ALWAYS( mContext.isRecentView(), User::Leave( KErrNotFound ) );
       
   307     return static_cast<CLogViewRecent&>( mContext.logView() ).SetRecentListL( 
       
   308             KLogNullRecentList, filterList, mContext.reqStatus() );
       
   309 }
       
   310     
       
   311 // ----------------------------------------------------------------------------
       
   312 // LogsReaderStateFiltering::LogsReaderStateFiltering
       
   313 // ----------------------------------------------------------------------------
       
   314 //
       
   315 LogsReaderStateFilteringAll::LogsReaderStateFilteringAll(
       
   316     LogsReaderStateContext& context ) 
       
   317  : LogsReaderStateFiltering(context)
       
   318 {
       
   319 }
       
   320 
       
   321 // ----------------------------------------------------------------------------
       
   322 // LogsReaderStateFilteringAll::~LogsReaderStateFilteringAll
       
   323 // ----------------------------------------------------------------------------
       
   324 //
       
   325 LogsReaderStateFilteringAll::~LogsReaderStateFilteringAll()
       
   326 {
       
   327 }
       
   328 
       
   329 // ----------------------------------------------------------------------------
       
   330 // LogsReaderStateFilteringAll::setFilterL
       
   331 // ----------------------------------------------------------------------------
       
   332 //
       
   333 bool LogsReaderStateFilteringAll::setFilterL(CLogFilterList& filterList){
       
   334     __ASSERT_ALWAYS( !mContext.isRecentView(), User::Leave( KErrNotFound ) );
       
   335     return static_cast<CLogViewEvent&>( mContext.logView() ).SetFilterL( 
       
   336             filterList, mContext.reqStatus() );
       
   337 }
       
   338 
       
   339 // ----------------------------------------------------------------------------
       
   340 // LogsReaderStateReading::LogsReaderStateReading
       
   341 // ----------------------------------------------------------------------------
       
   342 //
       
   343 LogsReaderStateReading::LogsReaderStateReading(
       
   344     LogsReaderStateContext& context ) 
       
   345  : LogsReaderStateBase(context),
       
   346    mDuplicateMissedFilter(0),
       
   347    mCheckingMissed(false),
       
   348    mEventIndex(0),
       
   349    mReadSizeCounter(0)
       
   350 {
       
   351 }
       
   352 
       
   353 // ----------------------------------------------------------------------------
       
   354 // LogsReaderStateReading::~LogsReaderStateReading
       
   355 // ----------------------------------------------------------------------------
       
   356 //
       
   357 LogsReaderStateReading::~LogsReaderStateReading()
       
   358 {
       
   359     delete mDuplicateMissedFilter;
       
   360 }
       
   361 
       
   362 // ----------------------------------------------------------------------------
       
   363 // LogsReaderStateReading::enterL
       
   364 // ----------------------------------------------------------------------------
       
   365 //
       
   366 bool LogsReaderStateReading::enterL()
       
   367 {
       
   368     mCheckingMissed = false;
       
   369     mEventIndex = 0;
       
   370     mReadSizeCounter = 0;
       
   371     
       
   372     if ( !mDuplicateMissedFilter ){
       
   373         // Interested only about duplicates which are not marked as read
       
   374         mDuplicateMissedFilter = CLogFilter::NewL();
       
   375         mDuplicateMissedFilter->SetFlags(KLogEventRead);
       
   376         mDuplicateMissedFilter->SetNullFields(ELogFlagsField);
       
   377     }
       
   378     
       
   379     if ( viewCountL() > 0 && mContext.logView().FirstL( mContext.reqStatus() ) ){
       
   380         return true;
       
   381     }
       
   382     
       
   383     // Not possible to continue with reading
       
   384     return enterNextStateL();  
       
   385 }
       
   386 
       
   387 // ----------------------------------------------------------------------------
       
   388 // LogsReaderStateReading::continueL
       
   389 // ----------------------------------------------------------------------------
       
   390 //
       
   391 bool LogsReaderStateReading::continueL()
       
   392 {
       
   393     int& index = mContext.index();  
       
   394     QList<LogsEvent*> &events = mContext.events();
       
   395         
       
   396     if ( mCheckingMissed ) {
       
   397         events.at(mEventIndex-1)->setDuplicates( 
       
   398                 mContext.duplicatesView().CountL() );
       
   399         mCheckingMissed = false;
       
   400     } 
       
   401     else {
       
   402         const CLogEvent& sourceEvent = event();
       
   403         LogsEvent* event = takeMatchingEvent(sourceEvent);
       
   404         bool inserted = false;
       
   405         if ( event ){
       
   406             // Matching event is updated and put to new position
       
   407             inserted = updateAndInsertEventL( sourceEvent, event, mEventIndex );
       
   408         }
       
   409         else {
       
   410             // Create new entry
       
   411             event = new LogsEvent;
       
   412             inserted = constructAndInsertEventL( 
       
   413                     sourceEvent, event, mEventIndex, mContext.events() );
       
   414         }
       
   415         
       
   416         if ( inserted  ){
       
   417             updateReadSizeCounter(*event);
       
   418             if ( handleMissedL(*event) ){
       
   419                 mCheckingMissed = true;
       
   420                 return true;
       
   421             }
       
   422         }
       
   423     }
       
   424 
       
   425     index++;    
       
   426     if ( canContinueReadingL(index) ){
       
   427         return mContext.logView().NextL( mContext.reqStatus() );
       
   428     }           
       
   429     return enterNextStateL();
       
   430 }
       
   431 
       
   432 // ----------------------------------------------------------------------------
       
   433 // LogsReaderStateReading::handleMissedL
       
   434 // ----------------------------------------------------------------------------
       
   435 //
       
   436 bool LogsReaderStateReading::handleMissedL(LogsEvent& parsedEvent)
       
   437 {
       
   438     bool handled = false;
       
   439     if ( parsedEvent.direction() == LogsEvent::DirMissed ){
       
   440         handled = duplicatesL(mDuplicateMissedFilter); 
       
   441     }
       
   442     return handled;
       
   443 }
       
   444 
       
   445 // ----------------------------------------------------------------------------
       
   446 // LogsReaderStateReading::updateReadSizeCounter
       
   447 // ----------------------------------------------------------------------------
       
   448 //
       
   449 void LogsReaderStateReading::updateReadSizeCounter(LogsEvent& event)
       
   450 {
       
   451     if ( LogsCommonData::getInstance().maxReadSize() >= 0 ){
       
   452         LogsEvent::LogsDirection dir = 
       
   453             LogsCommonData::getInstance().maxReadSizeDirection();
       
   454         if ( dir == LogsEvent::DirUndefined || dir == event.direction() ){
       
   455             mReadSizeCounter++;
       
   456         }
       
   457     }
       
   458 }
       
   459 
       
   460 // ----------------------------------------------------------------------------
       
   461 // LogsReaderStateReading::canContinueReadingL
       
   462 // ----------------------------------------------------------------------------
       
   463 //
       
   464 bool LogsReaderStateReading::canContinueReadingL(int index) const
       
   465 {
       
   466     bool canContinue( index < viewCountL() );
       
   467     int maxReadSize = LogsCommonData::getInstance().maxReadSize();
       
   468     if ( canContinue && maxReadSize >= 0 ){
       
   469         canContinue = ( mReadSizeCounter < maxReadSize );
       
   470     }
       
   471     return canContinue;
       
   472 }
       
   473 
       
   474 // ----------------------------------------------------------------------------
       
   475 // LogsReaderStateFillDetails::LogsReaderStateFillDetails
       
   476 // ----------------------------------------------------------------------------
       
   477 //
       
   478 LogsReaderStateFillDetails::LogsReaderStateFillDetails(
       
   479     LogsReaderStateContext& context) 
       
   480  : LogsReaderStateBase(context)
       
   481 {
       
   482 }
       
   483 
       
   484 // ----------------------------------------------------------------------------
       
   485 // LogsReaderStateFillDetails::~LogsReaderStateFillDetails
       
   486 // ----------------------------------------------------------------------------
       
   487 //
       
   488 LogsReaderStateFillDetails::~LogsReaderStateFillDetails()
       
   489 {
       
   490 }
       
   491 
       
   492 // ----------------------------------------------------------------------------
       
   493 // LogsReaderStateFillDetails::enterL
       
   494 // ----------------------------------------------------------------------------
       
   495 //
       
   496 bool LogsReaderStateFillDetails::enterL()
       
   497 {
       
   498     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateFillDetails::enterL()" )
       
   499     fillDetails();
       
   500     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateFillDetails::enterL()" )
       
   501     return enterNextStateL();
       
   502 }
       
   503 
       
   504 // ----------------------------------------------------------------------------
       
   505 // LogsReaderStateFillDetails::fillDetails
       
   506 // ----------------------------------------------------------------------------
       
   507 //
       
   508 void LogsReaderStateFillDetails::fillDetails()
       
   509 {
       
   510     QHash<QString, ContactCacheEntry>& contactMappings = mContext.contactCache();
       
   511     QList<LogsEvent*> &events = mContext.events();
       
   512     foreach ( LogsEvent* event, events ){
       
   513         const QString& num = event->getNumberForCalling();
       
   514         if ( !event->isInView() ){
       
   515             // Not interested about to be removed event
       
   516         } else if ( contactMappings.contains(num) ) {
       
   517             // Matching cached contact found, use that
       
   518             LOGS_QDEBUG_2( "logs [ENG]    Use existing contact for num:", num )
       
   519             ContactCacheEntry entry = contactMappings.value(num);
       
   520             event->setRemoteParty( entry.mRemoteParty );
       
   521             event->setContactLocalId( entry.mContactLocalId );
       
   522         } else if ( event->remoteParty().length() == 0 ) {
       
   523             // No remote party name, search for match from phonebook
       
   524             QString contactNameStr = event->updateRemotePartyFromContacts(
       
   525                     LogsCommonData::getInstance().contactManager());
       
   526             if (contactNameStr.length() > 0){
       
   527                 LOGS_QDEBUG_3( "LogsReaderStateFillDetails, (name, num):", 
       
   528                                contactNameStr, num );
       
   529                 // Cache the new contact name
       
   530                 ContactCacheEntry contactEntry(contactNameStr, event->contactLocalId());
       
   531                 contactMappings.insert( num, contactEntry );
       
   532             }
       
   533         }
       
   534     }    
       
   535 }
       
   536     
       
   537 // ----------------------------------------------------------------------------
       
   538 // LogsReaderStateDone::LogsReaderStateDone
       
   539 // ----------------------------------------------------------------------------
       
   540 //
       
   541 LogsReaderStateDone::LogsReaderStateDone(
       
   542     LogsReaderStateContext& context ) 
       
   543  : LogsReaderStateBase(context)
       
   544 {
       
   545 }
       
   546 
       
   547 // ----------------------------------------------------------------------------
       
   548 // LogsReaderStateDone::~LogsReaderStateDone
       
   549 // ----------------------------------------------------------------------------
       
   550 //
       
   551 LogsReaderStateDone::~LogsReaderStateDone()
       
   552 {
       
   553 }
       
   554 
       
   555 // ----------------------------------------------------------------------------
       
   556 // LogsReaderStateDone::enterL
       
   557 // ----------------------------------------------------------------------------
       
   558 //
       
   559 bool LogsReaderStateDone::enterL()
       
   560 {
       
   561     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateDone::enterL" );
       
   562     
       
   563     int numRead = qMin(mContext.index(),viewCountL());
       
   564     mContext.observer().readCompleted(numRead);
       
   565 
       
   566     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateDone::enterL" );
       
   567     
       
   568     return false;
       
   569 }
       
   570 
       
   571 
       
   572 // ----------------------------------------------------------------------------
       
   573 // LogsReaderStateSearchingEvent::LogsReaderStateSearchingEvent
       
   574 // ----------------------------------------------------------------------------
       
   575 //
       
   576 LogsReaderStateSearchingEvent::LogsReaderStateSearchingEvent(
       
   577     LogsReaderStateContext& context ) 
       
   578   : LogsReaderStateBase(context)
       
   579 {
       
   580 }
       
   581 
       
   582 
       
   583 // ----------------------------------------------------------------------------
       
   584 // LogsReaderStateSearchingEvent::enterL
       
   585 // ----------------------------------------------------------------------------
       
   586 //
       
   587 bool LogsReaderStateSearchingEvent::enterL()
       
   588 {
       
   589     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateSearchingEvent::enterL" );
       
   590     if ( viewCountL() > 0 && mContext.logView().FirstL( mContext.reqStatus() ) ){
       
   591         return true;
       
   592     }    
       
   593     return enterNextStateL();    
       
   594 }
       
   595 
       
   596 
       
   597 // ----------------------------------------------------------------------------
       
   598 // LogsReaderStateSearchingEvent::continueL
       
   599 // ----------------------------------------------------------------------------
       
   600 //
       
   601 bool LogsReaderStateSearchingEvent::continueL()
       
   602 {
       
   603     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateSearchingEvent::continueL" );
       
   604     int& index = mContext.index();
       
   605     if ( event().Id() != mContext.currentEventId() ) {
       
   606         index++;            
       
   607         if ( index < viewCountL() ){
       
   608             return mContext.logView().NextL( mContext.reqStatus() );
       
   609         }
       
   610     }
       
   611     
       
   612     return enterNextStateL();
       
   613 }    
       
   614 
       
   615 // ----------------------------------------------------------------------------
       
   616 // LogsReaderStateFindingDuplicates::LogsReaderStateFindingDuplicates
       
   617 // ----------------------------------------------------------------------------
       
   618 //
       
   619 LogsReaderStateFindingDuplicates::LogsReaderStateFindingDuplicates(
       
   620     LogsReaderStateContext& context ) 
       
   621  : LogsReaderStateBase(context),
       
   622    mDuplicateFilter(0)
       
   623 {
       
   624 }
       
   625 
       
   626 // ----------------------------------------------------------------------------
       
   627 // LogsReaderStateFindingDuplicates::~LogsReaderStateFindingDuplicates
       
   628 // ----------------------------------------------------------------------------
       
   629 //
       
   630 LogsReaderStateFindingDuplicates::~LogsReaderStateFindingDuplicates()
       
   631 {
       
   632     delete mDuplicateFilter;
       
   633 }
       
   634 
       
   635 // ----------------------------------------------------------------------------
       
   636 // LogsReaderStateFindingDuplicates::enterL
       
   637 // ----------------------------------------------------------------------------
       
   638 //
       
   639 bool LogsReaderStateFindingDuplicates::enterL()
       
   640 {
       
   641     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateFindingDuplicates::enterL" );
       
   642     
       
   643     if ( !mDuplicateFilter ){
       
   644         // Interested only about duplicates which are not marked as read
       
   645         mDuplicateFilter = CLogFilter::NewL();
       
   646         mDuplicateFilter->SetFlags(KLogEventRead);
       
   647         mDuplicateFilter->SetNullFields(ELogFlagsField);
       
   648     }
       
   649     
       
   650     if ( duplicatesL(mDuplicateFilter) ) {
       
   651         LOGS_QDEBUG( "logs [ENG] duplicates exist!");
       
   652         return true;
       
   653     }
       
   654     
       
   655     // Not possible to continue with finding
       
   656     return enterNextStateL();
       
   657 }
       
   658 
       
   659 // ----------------------------------------------------------------------------
       
   660 // LogsReaderStateFindingDuplicates::continueL
       
   661 // ----------------------------------------------------------------------------
       
   662 //
       
   663 bool LogsReaderStateFindingDuplicates::continueL()
       
   664 {
       
   665     LOGS_QDEBUG( "logs [ENG] <-> LogsReaderStateFindingDuplicates::continueL" );
       
   666     
       
   667     return enterNextStateL();
       
   668 }
       
   669 
       
   670 
       
   671 // ----------------------------------------------------------------------------
       
   672 // LogsReaderStateMarkingDuplicates::LogsReaderStateMarkingDuplicates
       
   673 // ----------------------------------------------------------------------------
       
   674 //
       
   675 LogsReaderStateMarkingDuplicates::LogsReaderStateMarkingDuplicates(
       
   676     LogsReaderStateContext& context ) 
       
   677  : LogsReaderStateBase(context)
       
   678 {
       
   679 }
       
   680     
       
   681 // ----------------------------------------------------------------------------
       
   682 // LogsReaderStateMarkingDuplicates::enterL
       
   683 // ----------------------------------------------------------------------------
       
   684 //
       
   685 bool LogsReaderStateMarkingDuplicates::enterL()
       
   686 {
       
   687     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateMarkingDuplicates::enterL" );
       
   688     
       
   689     mGettingDuplicates = false;
       
   690     if ( event().Id() == mContext.currentEventId() ) {
       
   691         // Mark event read
       
   692         event().SetFlags( event().Flags() | KLogEventRead ); 
       
   693         mContext.logClient().ChangeEvent(event(), mContext.reqStatus());
       
   694         return true;
       
   695     }
       
   696     
       
   697     // Not possible to continue with marking
       
   698     return enterNextStateL();
       
   699 }
       
   700 
       
   701 // ----------------------------------------------------------------------------
       
   702 // LogsReaderStateMarkingDuplicates::continueL
       
   703 // ----------------------------------------------------------------------------
       
   704 //
       
   705 bool LogsReaderStateMarkingDuplicates::continueL()
       
   706 {
       
   707     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateMarkingDuplicates::continueL" );
       
   708 
       
   709     if ( !mGettingDuplicates ){
       
   710         if ( duplicatesL() ) {
       
   711             LOGS_QDEBUG( "logs [ENG] duplicates exist!");
       
   712             mGettingDuplicates = true;
       
   713             return true;
       
   714         }
       
   715     } else {
       
   716         // Mark duplicate events read
       
   717         mContext.duplicatesView().SetFlagsL(
       
   718                 mContext.duplicatesView().Event().Flags() | KLogEventRead ); 
       
   719     }
       
   720 
       
   721     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateMarkingDuplicates::continueL" );
       
   722     
       
   723     return enterNextStateL();
       
   724 }
       
   725 
       
   726 // ----------------------------------------------------------------------------
       
   727 // LogsReaderStateReadingDuplicates::LogsReaderStateReadingDuplicates
       
   728 // ----------------------------------------------------------------------------
       
   729 //
       
   730 LogsReaderStateReadingDuplicates::LogsReaderStateReadingDuplicates(
       
   731     LogsReaderStateContext& context ) 
       
   732  : LogsReaderStateBase(context)
       
   733 {
       
   734 }
       
   735 
       
   736 // ----------------------------------------------------------------------------
       
   737 // LogsReaderStateReadingDuplicates::enterL
       
   738 // ----------------------------------------------------------------------------
       
   739 //
       
   740 bool LogsReaderStateReadingDuplicates::enterL()
       
   741 {
       
   742     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateReadingDuplicates::enterL" );
       
   743     if ( mContext.duplicatesView().CountL() > 0 && 
       
   744          mContext.duplicatesView().FirstL(mContext.reqStatus()) ){
       
   745          LOGS_QDEBUG( "logs [ENG] duplicates exist!");
       
   746          return true;
       
   747     }
       
   748     
       
   749     // Not possible to continue with deletion
       
   750     return enterNextStateL();
       
   751 }
       
   752 
       
   753 // ----------------------------------------------------------------------------
       
   754 // LogsReaderStateReadingDuplicates::continueL
       
   755 // ----------------------------------------------------------------------------
       
   756 //
       
   757 bool LogsReaderStateReadingDuplicates::continueL()
       
   758 {
       
   759     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateReadingDuplicates::continueL" );
       
   760 
       
   761     int nextIndex = mContext.duplicatedEvents().count();
       
   762     const CLogEvent& sourceEvent = mContext.duplicatesView().Event();
       
   763     LogsEvent* event = new LogsEvent;
       
   764     constructAndInsertEventL( 
       
   765             sourceEvent, event, nextIndex, mContext.duplicatedEvents() );
       
   766     if ( mContext.duplicatesView().NextL(mContext.reqStatus()) ) {
       
   767         return true;
       
   768     } 
       
   769 
       
   770     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateReadingDuplicates::continueL" );
       
   771     
       
   772     return enterNextStateL();
       
   773 }
       
   774 
       
   775 // ----------------------------------------------------------------------------
       
   776 // LogsReaderStateModifyingDone::LogsReaderStateModifyingDone
       
   777 // ----------------------------------------------------------------------------
       
   778 //
       
   779 LogsReaderStateModifyingDone::LogsReaderStateModifyingDone(
       
   780     LogsReaderStateContext& context) : LogsReaderStateBase(context)
       
   781 {
       
   782 
       
   783 }
       
   784     
       
   785 // ----------------------------------------------------------------------------
       
   786 // LogsReaderStateModifyingDone::enterL
       
   787 // ----------------------------------------------------------------------------
       
   788 //
       
   789 bool LogsReaderStateModifyingDone::enterL()
       
   790 {
       
   791     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateModifyingDone::enterL" );
       
   792     
       
   793     LogsEvent* modifiedEvent = eventById(mContext.currentEventId());
       
   794     if ( modifiedEvent ){
       
   795         // Update modified event to know that it has been marked. Real
       
   796         // update of the event happens soon when db notifies the change.
       
   797         modifiedEvent->markedAsSeenLocally(true);
       
   798     }
       
   799     mContext.observer().eventModifyingCompleted();
       
   800 
       
   801     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateModifyingDone::enterL" );
       
   802     
       
   803     return false;
       
   804 }
       
   805 
       
   806 // ----------------------------------------------------------------------------
       
   807 // LogsReaderStateReadingDuplicatesDone::LogsReaderStateReadingDuplicatesDone
       
   808 // ----------------------------------------------------------------------------
       
   809 //
       
   810 LogsReaderStateReadingDuplicatesDone::LogsReaderStateReadingDuplicatesDone(
       
   811     LogsReaderStateContext& context) : LogsReaderStateBase(context)
       
   812 {
       
   813 
       
   814 }
       
   815     
       
   816 // ----------------------------------------------------------------------------
       
   817 // LogsReaderStateReadingDuplicatesDone::enterL
       
   818 // ----------------------------------------------------------------------------
       
   819 //
       
   820 bool LogsReaderStateReadingDuplicatesDone::enterL()
       
   821 {
       
   822     LOGS_QDEBUG( "logs [ENG] -> LogsReaderStateReadingDuplicatesDone::enterL" );
       
   823     
       
   824     QList<LogsEvent*> duplicates = mContext.duplicatedEvents();
       
   825     mContext.duplicatedEvents().clear();
       
   826     mContext.observer().duplicatesReadingCompleted(duplicates);
       
   827 
       
   828     LOGS_QDEBUG( "logs [ENG] <- LogsReaderStateReadingDuplicatesDone::enterL" );
       
   829     
       
   830     return false;
       
   831 }