diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_mediamanagement/src/mgserviceobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_mediamanagement/src/mgserviceobserver.cpp Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,213 @@ +/* +* Copyright (c) 2007-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: This Class is observer for the mgservice class (core class) +* +*/ + +#include +#include + +#include "mgserviceobserver.h" +#include "mgitemslist.h" +#include "mginterface.h" +#include "serviceerrno.h" +//using namespace LIW; +//Output Keys/arguments +_LIT8(KResponse,"ReturnValue"); +_LIT8(KErrorCode,"ErrorCode"); + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::NewL +// Returns the instance of CMgServiceObserver. +// ----------------------------------------------------------------------------- +CMgServiceObserver* CMgServiceObserver::NewL() + { + + CMgServiceObserver* self = new ( ELeave )CMgServiceObserver(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + + } + + + + + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::MgNotify +// Called by CMgService class when asynch operation complete +// ----------------------------------------------------------------------------- +void CMgServiceObserver :: MgNotifyL( TUint aTransactionID, + MCLFItemListModel* aListModel, + TMgOperationEvent& aOperationEvent, + const TInt& aError ) + + + { + iOutput->Reset(); + //const CLiwGenericParamList& temp1 = *iOutput; + //const CLiwGenericParamList* temp2 = &temp1; + //delete temp2; + + if ( EMgModelCancel == aOperationEvent ) + { + if( iCallBack ) + + { + iOutput->AppendL( TLiwGenericParam ( KErrorCode,TLiwVariant( (TInt32)SErrNone ) ) ); + TRAP_IGNORE(iCallBack->HandleNotifyL ( aTransactionID, KLiwEventCanceled, *iOutput,*iInput )); + //self destruction should be done here in future + // instead of below four lines + iCallBack = NULL ; + //iOutput= NULL; + iInput = NULL; + iCmdId= EMgBlankCmdId; + + } + + } + + // Fill the Error code inside Generic Param List + TInt sapiErr = SErrNone; + if (aError) + { + sapiErr = CMgInterface::SapiError( aError ); + } + + iOutput->AppendL(TLiwGenericParam(KErrorCode,TLiwVariant((TInt32)sapiErr))); + // if not error create the iterator class and put it into output list + if( ( EMgRefreshComplete == aOperationEvent )&& ( KErrNone == aError ) ) + { + // Fill the Iterator in Generic Paaram List + TLiwVariant response; + + // Iterator will accept the cmd Id and iListmodel and + // it will become the owner of iListModel,Ownership of + // Iterator is transfered to consumer + + CMgItemsList *iterator = CMgItemsList::NewL( aListModel, iCmdId ); + CleanupStack::PushL( iterator ); + response.Set( iterator ); + iOutput->AppendL( TLiwGenericParam ( KResponse, response ) ); + CleanupStack::Pop( iterator ); + iterator->DecRef(); + } + else + { + delete aListModel; + aListModel = NULL; + } + + if( NULL != iCallBack ) + { + // call callback of consumer + if( KErrNone == aError ) + { + TRAP_IGNORE( + iCallBack->HandleNotifyL + ( aTransactionID, KLiwEventCompleted, *iOutput,*iInput )); + + } + else + { + iCallBack->HandleNotifyL ( aTransactionID, KLiwEventError, *iOutput,*iInput ); + } + + } + + iCmdId = EMgBlankCmdId; + iCallBack = NULL; + iInput=NULL; + + } + + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::SetMemberVar +// set the member varibale for the current request. +// ----------------------------------------------------------------------------- +void CMgServiceObserver::SetMemberVar(const TMgCmdId& aCmdId, + const CLiwGenericParamList* aInput, + MLiwNotifyCallback* aCallBack) + { + + iCmdId= EMgBlankCmdId; + + iCallBack = aCallBack; + iInput = aInput; + iCmdId = aCmdId; + + } + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::Cancel +// Cancel the pending asynchronous request +// ----------------------------------------------------------------------------- +void CMgServiceObserver::CancelL() + { + if( iCallBack ) + { + iCallBack->HandleNotifyL ( 0, + KLiwEventCanceled, + *iOutput, + *iInput ); + + iCallBack = NULL ; + iOutput->Reset(); + iInput = NULL; + iCmdId= EMgBlankCmdId; + } + } + + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::CMgServiceObserver +// constructor of class +// ----------------------------------------------------------------------------- + +CMgServiceObserver::CMgServiceObserver() + :iCallBack(NULL), + iOutput(NULL), + iInput(NULL), + iCmdId(EMgBlankCmdId) + { + + } + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::~CMgServiceObserver +// Destructor +// ----------------------------------------------------------------------------- + +CMgServiceObserver::~CMgServiceObserver() + { + //release output Parameter List + if ( iOutput ) + { + iOutput->Reset(); + delete iOutput; + } + } + +// ----------------------------------------------------------------------------- +// CMgServiceObserver::ConstructL +// Destructor +// ----------------------------------------------------------------------------- + +void CMgServiceObserver::ConstructL() + { + iOutput = CLiwGenericParamList::NewL(); + }