diff -r 000000000000 -r e686773b3f54 logsui/EngineSrc/CLogsGetEvent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/EngineSrc/CLogsGetEvent.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,444 @@ +/* +* 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: +* Implements interface for log event getting +* +*/ + + +// INCLUDE FILES +// #include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include +#include +#include +#include +#include "CLogsGetEvent.h" +#include "CLogsEventData.h" +#include "CLogsEvent.h" +#include "MLogsObserver.h" +#include "CLogsEventGetter.h" +#include "LogsApiConsts.h" //additional event uids + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +//========================================CLogsGetEventNotify============================================= +// +class CLogsGetEventNotify : public CActive, + public MLogViewChangeObserver + { + public: + /** + * Symbian OS constructor. + * + * @param aFsSession ref. to file server session + * @param aGetEvent pointer to Logs reader + * @return New instance of this class + */ + static CLogsGetEventNotify* NewL + ( RFs& aFsSession + , CLogsGetEvent* aGetEvent + ); + + /** + * Destructor + */ + ~CLogsGetEventNotify(); + + private: + /** + * Default constructor. + */ + CLogsGetEventNotify(); + + /** + * Second phase constructor. + */ + void ConstructL(); + + /** + * C++ constructor. + * + * @param aFsSession ref. to file server session + * @param aGetEvent pointer to Logs reader + */ + CLogsGetEventNotify( RFs& aFsSession, CLogsGetEvent* aGetEvent ); + + public: + /** + * Sets Log ID + * @param aId Log ID + */ + void SetId( TLogId aId ); + + private: + /** + * Creates and returns a filter. + * Leaves filter object on cleanupstack. + * + * @param aFilterType Filter type id. + * + * @return Pointer to created and configured filter. + */ + CLogFilter* SetOneFilterLC( TUid aFilterType ); + + public: // from MLogViewChangeObserver + void HandleLogViewChangeEventAddedL + ( TLogId aId + , TInt aViewIndex + , TInt aChangeIndex + , TInt aTotalChangeCount + ); + + void HandleLogViewChangeEventChangedL + ( TLogId aId + , TInt aViewIndex + , TInt aChangeIndex + , TInt aTotalChangeCount + ); + + void HandleLogViewChangeEventDeletedL + ( TLogId aId + , TInt aViewIndex + , TInt aChangeIndex + , TInt aTotalChangeCount + ); + + private: /// from CActive + void DoCancel(); + + protected: /// from CActive + void RunL(); + TInt RunError(TInt aError); + + private: // data + /// Own: + TLogId iId; + + /// Ref: File server session + RFs& iFsSession; + + /// Own: + CLogsGetEvent* iGetEvent; + + /// Own: Log client + CLogClient* iLogClient; + + /// Own: + CLogViewEvent* iEventView; + + /// Own: Filterlist + CLogFilterList* iFilterList; + }; +// +//========================================CLogsGetEventNotify============================================= + + + + +// LOCAL FUNCTION PROTOTYPES + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + +CLogsGetEvent::CLogsGetEvent + ( RFs& aFsSession + , TLogsEventStrings& aStrings + , MLogsObserver* aObserver + ) + : CActive( EPriorityHigh ) + , iFsSession( aFsSession ) + , iStrings( aStrings ) + , iObserver( aObserver ) + , iState( EStateUndefined ) + , iStaticEmerg( ETrue ) + { + } + +CLogsGetEvent* CLogsGetEvent::NewL + ( RFs& aFsSession + , TLogsEventStrings& aStrings + , MLogsObserver* aObserver + ) + { + CLogsGetEvent* self = new (ELeave) CLogsGetEvent + ( aFsSession + , aStrings + , aObserver + ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +void CLogsGetEvent::ConstructL() + { + iLogClient = CLogClient::NewL( iFsSession ); + iNotify = CLogsGetEventNotify::NewL( iFsSession, this ); + iLogEvent = CLogEvent::NewL(); + CLogsEvent* event = CLogsEvent::NewLC( ); + + CleanupStack::Pop(); // event + iEvent = event; + iWrapper = CLogsEventGetter::NewL( ); + + if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) ) + { + iStaticEmerg = EFalse; + } + + CActiveScheduler::Add( this ); + } + +CLogsGetEvent::~CLogsGetEvent() + { + Cancel(); + delete iLogClient; + delete iLogEvent; + delete iEvent; + delete iWrapper; + delete iNotify; + } + +void CLogsGetEvent::Get( TLogId aId ) + { + Cancel(); + iLogEvent->SetId( aId ); + iNotify->SetId( aId ); + iLogClient->GetEvent( *iLogEvent, iStatus ); //Get details from db.This is an asynchronous request + iState = EStateActive; + SetActive(); + } + +const MLogsEventGetter* CLogsGetEvent::Event() + { + return iWrapper->Wrap( iEvent ); + } + +const CLogEvent* CLogsGetEvent::LogEvent() const + { + return iLogEvent; + } + +void CLogsGetEvent::SetObserver( MLogsObserver* aObserver ) + { + iObserver = aObserver; //Observer to indicate when asynchronous retrieval is ok + } + +void CLogsGetEvent::DoCancel() + { + iLogClient->Cancel(); + } + +void CLogsGetEvent::RunL() + { + ConstructEventL( *iEvent, *iLogEvent ); + iState = EStateFinished; + + if( iObserver ) + { + iObserver->StateChangedL( this ); //Indicate observer: Asynch retrieval is now done + } // on CLogsDetailControlContainer::StateChangedL + } + +TInt CLogsGetEvent::RunError(TInt aError) + { + if( aError == KErrAccessDenied ) + { + return KErrNone; + } + else + { + return aError; + } + } + +TLogsState CLogsGetEvent::State() const + { + return iState; + } + +void CLogsGetEvent::ConstructEventL( MLogsEvent& aDest, const CLogEvent& aSource ) + { + aDest.InitializeEventL( aSource, iStrings, ELogsDetailModel ); + } + + +//========================================CLogsGetEventNotify============================================= +// +CLogsGetEventNotify* CLogsGetEventNotify::NewL + ( RFs& aFsSession + , CLogsGetEvent* aGetEvent + ) + { + CLogsGetEventNotify* self = new (ELeave) CLogsGetEventNotify + ( aFsSession + , aGetEvent + ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CLogsGetEventNotify::CLogsGetEventNotify + ( RFs& aFsSession + , CLogsGetEvent* aGetEvent + ) + : CActive( EPriorityStandard ) + , iFsSession( aFsSession ) + , iGetEvent( aGetEvent ) + { + } + +void CLogsGetEventNotify::ConstructL() + { + iLogClient = CLogClient::NewL( iFsSession ); + iEventView = CLogViewEvent::NewL( *iLogClient, *this ); + iFilterList = new ( ELeave ) CLogFilterList; + iFilterList->AppendL( SetOneFilterLC( KLogShortMessageEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogsEngMmsEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogCallEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogDataEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogFaxEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogPacketDataEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogsEngWlanEventTypeUid ) ); + CleanupStack::Pop(); + iFilterList->AppendL( SetOneFilterLC( KLogsEngPocInfoEventTypeUid ) ); + CleanupStack::Pop(); + + CActiveScheduler::Add( this ); + + TRAPD( err, iEventView->SetFilterL( *iFilterList, iStatus ) ); + if( err == KErrAccessDenied ) + { + return; + } + User::LeaveIfError( err ); + SetActive(); + } + +CLogFilter* CLogsGetEventNotify::SetOneFilterLC( TUid aFilterType ) + { + CLogFilter* filter = CLogFilter::NewL(); + CleanupStack::PushL( filter ); + filter->SetEventType( aFilterType ); + return filter; + } + +CLogsGetEventNotify::~CLogsGetEventNotify() + { + Cancel(); + delete iEventView; + delete iLogClient; + + if( iFilterList ) + { + iFilterList->ResetAndDestroy(); + delete iFilterList; + iFilterList = NULL; + } + } + +void CLogsGetEventNotify::DoCancel() + { + if( iEventView ) + { + iEventView->Cancel(); + } + + if( iLogClient ) + { + iLogClient->Cancel(); + } + } + +void CLogsGetEventNotify::RunL() + { + } + +TInt CLogsGetEventNotify::RunError(TInt aError) + { + if( aError == KErrAccessDenied ) + { + return KErrNone; + } + else + { + return aError; + } + } + +void CLogsGetEventNotify::HandleLogViewChangeEventAddedL + ( TLogId /*aId*/ + , TInt /*aViewIndex*/ + , TInt /*aChangeIndex*/ + , TInt /*aTotalChangeCount*/ + ) + { + } + +void CLogsGetEventNotify::HandleLogViewChangeEventChangedL + ( TLogId aId + , TInt /*aViewIndex*/ + , TInt /*aChangeIndex*/ + , TInt aTotalChangeCount + ) + { + if( aTotalChangeCount && ( iId == aId ) ) + { + iGetEvent->Get( iId ); + } + } + +void CLogsGetEventNotify::HandleLogViewChangeEventDeletedL + ( TLogId /*aId*/ + , TInt /*aViewIndex*/ + , TInt /*aChangeIndex*/ + , TInt /*aTotalChangeCount*/ + ) + { + } + +void CLogsGetEventNotify::SetId( TLogId aId ) + { + iId = aId; + } +// +//========================================CLogsGetEventNotify============================================= + + + + +// End of File