--- /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 <PbkFields.hrh>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <logengevents.h>
+#endif
+#include <logcli.h>
+#include <logview.h>
+#include <logviewchangeobserver.h>
+#include <featmgr.h>
+#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