diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_logging/loggingservice/src/loggingsyncservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_logging/loggingservice/src/loggingsyncservice.cpp Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 logging SAPI deligator class. +* +*/ + + + +#include +#include +#include + +#include "loggingasyncservice.h" +#include "loggingsyncservice.h" +#include "loggingevent.h" +#include "logiter.h" + +/** +* Default Constructor Method +*/ + +CLogSyncService :: CLogSyncService(): CActive(EPriorityStandard) + { + } + + +/** +* Default Destructor +*/ +CLogSyncService :: ~CLogSyncService() + { + if(this->IsAdded()) + { + this->Deque() ; + } + delete iLogViewEvents ; + delete iLogViewRecent ; + delete iLogClient ; + delete iWaitScheduler; + iFs.Close() ; + } + +/** +* Two phased constructor implementation +*/ +EXPORT_C CLogSyncService* CLogSyncService :: NewL() + { + CLogSyncService* self = CLogSyncService::NewLC(); + CleanupStack::Pop(self); + return self; + } + +/** +* Two phased constructor implementation +*/ + +CLogSyncService* CLogSyncService :: NewLC() + { + CLogSyncService* self = new (ELeave) CLogSyncService(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +/** +* This function constructs the member elements of CLogSyncService Class +*/ + +void CLogSyncService :: ConstructL() + { + User::LeaveIfError(iFs.Connect()); + iLogClient = CLogClient::NewL(iFs); + iLogViewEvents = CLogViewEvent :: NewL(*iLogClient) ; + iLogViewRecent = CLogViewRecent :: NewL(*iLogClient) ; + iTaskId = -1 ; + iWaitScheduler = new CActiveSchedulerWait(); + DoInitialiseL() ; + } + +/** +* DoInitialise Method, initalises the members of the class, +* and puts the object in ActiveScheduler List +*/ + +void CLogSyncService :: DoInitialiseL() + { + if(!(this->IsAdded())) + { + CActiveScheduler :: Add (this) ; + } + } + +/** +* RunL method implementation +*/ +void CLogSyncService :: RunL() + { + iWaitScheduler->AsyncStop(); + } + +/** +* DoCancel Implementation +*/ +void CLogSyncService :: DoCancel() + { + ; + } + +/** +* Reads recent events from the event database +* +* @param aRecentList, recent event list +* @param aFilter, filter for events to appear in the view +* returns the ownership handle to Recentevents in the iter +*/ +CLogIter* CLogSyncService :: ReadRecentEventsL( TLogRecentList aRecentList , + CLogFilter *aFilter ) + { + CLogIter *iter = CLogIter :: NewL() ; + CLogClient *logcli = CLogClient :: NewL(iter->GetRFs()) ; + CLogViewRecent *LogViewRecent = CLogViewRecent :: NewL(*logcli) ; + + iter->SetLogClient(logcli) ; + iter->SetLogRecentView(LogViewRecent) ; + iter->SetTaskId(EGetRecent) ; + + if (LogViewRecent->SetRecentListL(aRecentList, *aFilter, iStatus) ) + { + // set this active object active to get the events + // from the main event database, see RunL() + SetActive(); + iWaitScheduler->Start() ; + + //Wrap the LogViewRecent in iter and return the ownership to + // the consumer + iter->SetRecentView(LogViewRecent) ; + } + else + { + delete iter ; + iter = NULL ; + } + return iter ; + + } + + +/** +* Adds a new event to the event database +* @param aEvent: Details of the event to be added to the event database +*/ +EXPORT_C TLogId CLogSyncService :: AddL( CLogEvent* aEvent ) + { + iLogClient->AddEvent( *aEvent , iStatus ) ; + SetActive() ; + iWaitScheduler->Start() ; + + if( iStatus.Int() != KRequestPending ) + { + return aEvent->Id() ; + } + return iStatus.Int() ; + } + + +/** +* Deletes a event from the event database +* @param aLogId Event id of the event in the database +*/ +EXPORT_C TInt CLogSyncService :: Delete( TLogId aLogId ) + { + if( aLogId > 0 ) + { + iLogClient->DeleteEvent(aLogId , iStatus) ; + } + else + { + return KErrNotFound; + } + + SetActive() ; + iWaitScheduler->Start(); + return iStatus.Int() ; + } + +/** +* GetList(): Gets the events as specified by filter +* +* @param aFilter, view filter +* Returns the ownership of the iterator for the getlist +* result containing the handle to LogviewEvents. +*/ +EXPORT_C CLogIter* CLogSyncService :: GetListL( CLogFilter *aFilter ) + { + + CLogIter *iter = CLogIter :: NewL() ; + CLogClient *cli = CLogClient :: NewL(iter->GetRFs()) ; + CLogViewEvent* LogviewEvents = CLogViewEvent :: NewL(*cli) ; + + iter->SetLogClient(cli) ; + iter->SetLogViewEvents(LogviewEvents) ; + //LogviewEvents->SetFilterL(*aFilter , iStatus) ; + iter->SetTaskId(EReadEvents) ; + + if(LogviewEvents->SetFilterL(*aFilter , iStatus)) + { + SetActive() ; + iWaitScheduler->Start(); + iter->SetLogViewEvents(LogviewEvents); + return iter ; + } + else + { + delete iter; + return NULL; + } + } + +/** +* Gets the details of the event as specified by the +* input paramater +* +* @param aEvent, details of the event to be fetched +* returns the owner ship of the iter to the consumer +*/ +CLogIter* CLogSyncService :: GetEventL( CLogEvent *aEvent ) + { + CLogIter *iter = CLogIter :: NewL() ; + + iter->SetTaskId(EGetEvent) ; + CLogClient *cli = CLogClient :: NewL(iter->GetRFs()) ; + iter->SetLogClient(cli) ; + cli->GetEvent(*aEvent , iStatus) ; + SetActive() ; + iWaitScheduler->Start(); + + if(iStatus.Int() != KErrNone) + { + delete iter ; + return NULL ; + } + return iter ; + } + + +