--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/logengsrc/MceLogPbkMatcher.cpp Wed Sep 01 12:31:54 2010 +0100
@@ -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 <logfilterandeventconstants.hrh>
+#include <logengevents.h>
+#endif
+#include <e32base.h>
+#include <CPbkContactEngine.h>
+#include <CPbkContactItem.h>
+#include <CPbkFieldsInfo.h>
+#include <logview.h>
+#include <logcli.h>
+
+#include "MceLogPbkMatcher.h"
+#include "MceLogPbkMatcherObserver.h"
+#include "MceLogEngine.hrh"
+
+#include "CPhoneNumberMatcher.h"
+#include <LogsApiConsts.h>
+
+// 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
+