diff -r 5b6f26637ad3 -r f4a778e096c2 logsui/EngineSrc/CLogsSMSEventUpdater.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/EngineSrc/CLogsSMSEventUpdater.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Updates SMS events contact name to match one in contact model +* +*/ + + +// INCLUDE FILES +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include "CLogsSMSEventUpdater.h" +#include "MLogsObserver.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +const TInt KFieldId = 5; + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater:: +// ---------------------------------------------------------------------------- +// +CLogsSMSEventUpdater::CLogsSMSEventUpdater( + RFs& aFsSession, + MLogsObserver* aObserver ) : + CLogsBaseUpdater( aFsSession, aObserver ) + { + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater:: +// ---------------------------------------------------------------------------- +// +CLogsSMSEventUpdater* CLogsSMSEventUpdater::NewL( + RFs& aFsSession, + MLogsObserver* aObserver, + CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlags ) + { + CLogsSMSEventUpdater* self = new ( ELeave ) CLogsSMSEventUpdater( aFsSession, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( aMatchFlags ); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::ConstructL +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::ConstructL( CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlags ) + { + BaseConstructL( aMatchFlags ); + iLogViewEvent = CLogViewEvent::NewL( *iLogClient, *this ); + iFilter->SetEventType( KLogShortMessageEventTypeUid ); + iFilter->SetFlags( KLogEventContactSearched ); + iFilter->SetNullFields( ELogFlagsField ); + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::~CLogsSMSEventUpdater +// ---------------------------------------------------------------------------- +// +CLogsSMSEventUpdater::~CLogsSMSEventUpdater() + { + } + + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::StartRunningL +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::StartRunningL() + { + Cancel(); + + if( iLogViewEvent->SetFilterL( *iFilter, iStatus ) ) //returns true, if found log events + { + iState = EStateActive; + iPhase = EFilter; + SetActive(); + } + else if( iObserver ) + { + iState = EStateSMSUpdaterFinished; + iObserver->StateChangedL( this ); + } + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::ContinueRunningL +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::ContinueRunningL( TInt aFieldId ) + { + if( aFieldId != KErrNotFound ) //Set remote party etc only if a contact was found + { + TBuf fieldText; + fieldText.Append( aFieldId ); + iEvent->SetRemoteParty( *iName ); //iName set in the base class + + // iEvent->SetSubject( fieldText ); + } + + //We set ContactSearched flag on, so next time we'll skip this entry and do not + //attempt again update remote party (even if we did not find remote party for it). + //Also, KLogEventContactSearched events only are accepted to + //EventListView (CLogsMainReader::SetOneFilterLC). + iEvent->SetFlags( KLogEventContactSearched ); + iLogClient->ChangeEvent( *iEvent, iStatus ); + SetActive(); + } + + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::RunL +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::RunL() + { + if( iStatus == KErrNone ) + { + switch( iPhase ) + { + case EFilter: + if( iLogViewEvent->FirstL( iStatus ) ) //If there's at least one entry in view, let's process it + { + iState = EStateActive; + iPhase = ERead; + SetActive(); + } + else + { + iState = EStateFinished; + } + break; + + case ERead: + { + + iEvent->CopyL( iLogViewEvent->Event() ); + iPhase = EUpdate; + + // SAT sms events are not updated since they do not have number + SearchRemotePartyL( iEvent->Number() ); + + //SetActive() is called when base class has got the contact and calls ContinueRunningL + } + break; + + case EUpdate: + if( iLogViewEvent->FirstL( iStatus ) ) //If there's still at least one entry in view, let's continue + { //processing it (this assumes that the event updated above has + iPhase = ERead; //has already disappeared from view and the "next" shows now as "first" + SetActive(); //in view). + } + else + { + iState = EStateFinished; + } + break; + + default: + break; + } + } + + if( iObserver ) //( <--not waiting here iState = EStateFinished!) + { + iObserver->StateChangedL( this ); //Inform for each change the observer that there's change in db (Maybe it's + } //worthwhile to do it immediately (as here) instead of waiting iState to reach EStateFinished. + //This way more rereads are started but we get speedier update of list too. + //Note that change of db (above) also invokes call of HandleLogViewChangeEventAddedL (below) too. + } + + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::HandleLogViewChangeEventAddedL +// +// When new event added to db, we need to start checking it in case the new event +// is messaging event (it is not shown before we update it by KLogEventContactSearched) +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::HandleLogViewChangeEventAddedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt aTotalChangeCount ) + { + if( aTotalChangeCount > 0 ) + { + StartL(); + } + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::HandleLogViewChangeEventChangedL +// +// is this needed (as we don't know for sure if a messaging event is eventually +// constructed by changing the db, we cannot only trust to HandleLogViewChangeEventAddedL +// to take care of it, so let's keep the below too just in case... +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::HandleLogViewChangeEventChangedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt aTotalChangeCount ) + { + if( aTotalChangeCount > 0 ) + { + StartL(); + } + } + +// ---------------------------------------------------------------------------- +// CLogsSMSEventUpdater::HandleLogViewChangeEventDeletedL +// +// No need to do anything when delete notification received. +// ---------------------------------------------------------------------------- +// +void CLogsSMSEventUpdater::HandleLogViewChangeEventDeletedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt /*aTotalChangeCount*/ ) + { + } + + +// End of File