diff -r 84d9eb65b26f -r 2981cb3aa489 messagingappbase/mce/logengsrc/MceLogPbkMatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/logengsrc/MceLogPbkMatcher.cpp Wed Nov 03 09:52:46 2010 +0530 @@ -0,0 +1,297 @@ +/* +* 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: +* Defines methods for CMceLogPbkMatcher +* +*/ + + + +// INCLUDE FILES +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include +#endif +#include +#include +#include +#include +#include +#include + +#include "MceLogPbkMatcher.h" +#include "MceLogPbkMatcherObserver.h" +#include "MceLogEngine.hrh" + +#include "CPhoneNumberMatcher.h" +#include + +// CONSTANTS + +// ================= MEMBER FUNCTIONS ======================= + + +CMceLogPbkMatcher::CMceLogPbkMatcher( + RFs& aFsSession, + MMceLogPbkMatcherObserver* aObserver) + : CActive( EPriorityHigh ), + iFsSession( aFsSession ), + iObserver( aObserver ) + { + } + + +CMceLogPbkMatcher* CMceLogPbkMatcher::NewL( + RFs& aFsSession, + MMceLogPbkMatcherObserver* aObserver ) + { + CMceLogPbkMatcher* self = new ( ELeave ) CMceLogPbkMatcher( + aFsSession, + aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +void CMceLogPbkMatcher::ConstructL() + { + iReaderState = ECreated; + iLogClient = CLogClient::NewL( iFsSession ); + iLogViewEvent = CLogViewEvent::NewL( *iLogClient, *this ); + iEvent = CLogEvent::NewL(); + SetFiltersL(); + CActiveScheduler::Add( this ); + iPbkS60Matcher = CPhoneNumberMatcher::NewL( iFsSession ); + } + + +CMceLogPbkMatcher::~CMceLogPbkMatcher() + { + Cancel(); + delete iPbkS60Matcher; + delete iLogViewEvent; + delete iLogClient; + delete iEvent; + if( iFilterList ) + { + iFilterList->ResetAndDestroy(); + delete iFilterList; + } + } + +void CMceLogPbkMatcher::StartL() + { + Cancel(); + + if ( iReaderState == ECreated || iReaderState == EOpeningDefaultMatchStores ) + { + iPbkS60Matcher->OpenDefaultMatchStoresL( iStatus ); + iReaderState = EOpeningDefaultMatchStores; + SetActive(); + } + else + { + SetFiltersToLogsL(); + } + } + +void CMceLogPbkMatcher::SetFiltersToLogsL() + { + TBool rc = ( EFalse ); + iReaderState = EFilteringEvent; + + TRAPD( err, ( rc = iLogViewEvent->SetFilterL( *iFilterList, iStatus ) ) ); + if( err ) + { + if( err == KErrAccessDenied ) // backup active + { + return; + } + else + { + User::Leave( err ); + } + } + + if( rc ) + { + SetActive(); + } + } + + +void CMceLogPbkMatcher::SetFiltersL() + { + if( iFilterList ) + { + iFilterList->ResetAndDestroy(); + delete iFilterList; + iFilterList = NULL; + } + iFilterList = new ( ELeave ) CLogFilterList(); + + /// Event type: SMS + iFilterList->AppendL( SetOneFilterLC( KLogShortMessageEventTypeUid ) ); + CleanupStack::Pop(); // filter set in SetOneFilterLC + + /// Event type: MMS + iFilterList->AppendL( SetOneFilterLC( KLogsEngMmsEventTypeUid ) ); + CleanupStack::Pop(); + + // Set filter with empty remote party + CLogFilter* filter = CLogFilter::NewL(); + CleanupStack::PushL( filter ); + filter->SetNullFields( ELogRemotePartyField ); + iFilterList->AppendL( filter ); + CleanupStack::Pop(); // filter + } + + +CLogFilter* CMceLogPbkMatcher::SetOneFilterLC( TUid aFilterType ) + { + CLogFilter* filter = CLogFilter::NewL(); + CleanupStack::PushL( filter ); + filter->SetEventType( aFilterType ); // certain type; + filter->SetFlags( KLogEventContactSearched ); // no flag or remoteparty + filter->SetFlags( KLogEventRead ); // event has not been cleared + filter->SetNullFields( ELogFlagsField | ELogRemotePartyField ); + return filter; + } + + + +void CMceLogPbkMatcher::DoCancel() + { + iPbkS60Matcher->CancelOperation(); + iLogClient->Cancel(); + iLogViewEvent->Cancel(); + } + + +TBool CMceLogPbkMatcher::GetRemotePartyL() + { + TBool result (EFalse ); + if( iPbkS60Matcher->MatchCountL( iEvent->Number()) == 1 ) + { + result = ETrue; + } + return result; + } + +void CMceLogPbkMatcher::RunL() + { + + if( iStatus == KErrNone ) + { + switch( iReaderState ) + { + case EOpeningDefaultMatchStores: + // now stores are open, continue with filtering + SetFiltersToLogsL(); + break; + case EFilteringEvent: + if( iLogViewEvent->FirstL( iStatus ) ) + { + iReaderState = EReadingEvent; + SetActive(); + } + else if( iObserver ) + { +// iObserver->PbkMatchingDoneL(); + } + + break; + + case EReadingEvent: + + iEvent->CopyL( iLogViewEvent->Event() ); + iEvent->SetFlags( KLogEventContactSearched ); + if( GetRemotePartyL() ) + { + iEvent->SetRemoteParty( iPbkS60Matcher->GetUniqueName() ); + } + iReaderState = EUpdatingEvent; + iLogClient->ChangeEvent( *iEvent, iStatus ); + SetActive(); + break; + + case EUpdatingEvent: + + if( iLogViewEvent->FirstL( iStatus ) ) + { + iReaderState = EReadingEvent; + SetActive(); + } + + else if( iObserver ) + { +// iObserver->PbkMatchingDoneL(); + } + + break; + + default: + break; + + } + } + else if ( iReaderState == EOpeningDefaultMatchStores ) + { + iReaderState = ECreated; + } + } + +TInt CMceLogPbkMatcher::RunError(TInt aError) + { + if( aError == KErrAccessDenied || aError == KErrInUse ) // backup active + { + return KErrNone; + } + else + { + return aError; + } + } + +void CMceLogPbkMatcher::HandleLogViewChangeEventAddedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt /*aTotalChangeCount*/) + { + StartL(); + } + +void CMceLogPbkMatcher::HandleLogViewChangeEventChangedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt /*aTotalChangeCount*/) + { + StartL(); + } + +void CMceLogPbkMatcher::HandleLogViewChangeEventDeletedL( + TLogId /*aId*/, + TInt /*aViewIndex*/, + TInt /*aChangeIndex*/, + TInt /*aTotalChangeCount*/) + { + StartL(); + } + + +// End of File +