serviceproviders/sapi_logging/loggingservice/src/loggingsyncservice.cpp
changeset 19 989d2f495d90
--- /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 <logwrap.h>
+#include <logcli.h>
+#include <logview.h>
+
+#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 ;
+    }
+
+
+