diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_contacts_vpbk/src/contactinterfacecallback.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_contacts_vpbk/src/contactinterfacecallback.cpp Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,238 @@ +/* +* Copyright (c) 2006-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 the contact callback interface. +* +*/ + + +#include +#include + +// User Includes +#include "contactinterfacecallback.h" +#include "contactinterface.h" +#include "contacterrormessage.hrh" +#include "../../inc/serviceerrno.h" +#include "searchfields.h" + +//_LIT8(KResponse,"ReturnValue"); +//_LIT(KAddFieldKeyNotSupported,"Contacts : Add :Field Key Not Supported on this Database: "); +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::CContactInterfaceCallback() + Description : Symbian default Constructor can NOT contain + any code that might leave. + Return values : N/A +----------------------------------------------------------------------------- +*/ +CContactInterfaceCallback::CContactInterfaceCallback() + :iCallback(NULL), + iTransactionId(0), + iInParamList(NULL), + iEventParamList(NULL), + iContact(NULL) + { + } + +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::NewL() + Description : Two-phased constructor. + Return values : CContactInterfaceCallback object pointer +----------------------------------------------------------------------------- +*/ +CContactInterfaceCallback* CContactInterfaceCallback::NewL() + { + return new ( ELeave ) CContactInterfaceCallback(); + } + +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::NewL() + Description : Two-phased overloaded constructor. + Return values : CContactInterfaceCallback object pointer +----------------------------------------------------------------------------- +*/ +CContactInterfaceCallback* CContactInterfaceCallback::NewL(CSingleContact* aContact) + { + CContactInterfaceCallback* self = new (ELeave) CContactInterfaceCallback(); + self->iContact = aContact; + return self; + } + + +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::~CContactInterfaceCallback() + Description : Destructor, free allocated resources + Return values : N/A +----------------------------------------------------------------------------- +*/ +CContactInterfaceCallback::~CContactInterfaceCallback() + { + delete iEventParamList; + delete iContact; + } + +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::SetParams() + Description : Sets the basic params of the callback object + Return values : N/A +----------------------------------------------------------------------------- +*/ +void CContactInterfaceCallback::SetParams( MLiwNotifyCallback* aCallback, + const TInt aTransId, + const CLiwGenericParamList* aInParamList ) + { + iCallback = aCallback; + iTransactionId = aTransId; + iInParamList = aInParamList; + } + +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::HandleReturnValue() + Description : The MContactCallback Method, is called when + Error has occured.The Error is passed + to the consumer by appending to the CLiwGenericParamList. + Return values : N/A +----------------------------------------------------------------------------- +*/ +void CContactInterfaceCallback::HandleReturnValue( TOperationEvent aEventId, const TInt& aError,TInt aTransId) + { + TInt err = 0; + CleanupStack::PushL(this); + if( iCallback ) + { + if( iEventParamList ) + { + iEventParamList->Reset(); + } + else + { + iEventParamList = CLiwGenericParamList::NewL(); + } + + if(aEventId == EOpCancel) + { + iEventParamList->AppendL(TLiwGenericParam(KErrorCode, + TLiwVariant((TInt32)SErrCancelSuccess ))); + //Call HandleNotify + TRAP(err,iCallback->HandleNotifyL((TInt32)aTransId, + KLiwEventCanceled, + *iEventParamList, + *iInParamList)); + } + else if(aEventId == EOpError) + { + TInt32 sapiError = CContactInterface::SapiError(aError); + iEventParamList->AppendL(TLiwGenericParam( KErrorCode, + TLiwVariant((TInt32)sapiError))); + //Call HandleNotify + TRAP(err,iCallback->HandleNotifyL((TInt32)aTransId, + KLiwEventError, + *iEventParamList, + *iInParamList)); + } + else if(aEventId == EInvalidKey) + { + TPtrC8 ptr = CSearchFields::GetFieldKeyFromId(aError); + TBuf<25> buff; + buff.Copy(ptr); + TBuf errmsg(KAddFieldKeyNotSupported); + errmsg.Append(buff); + + const_cast (aError) = KErrNotSupported; + TInt32 sapiError = CContactInterface::SapiError(aError); + + iEventParamList->AppendL(TLiwGenericParam( KErrorCode, + TLiwVariant((TInt32)sapiError))); + + iEventParamList->AppendL(TLiwGenericParam(KErrorMessage, + TLiwVariant(errmsg))); + //Call HandleNotify + TRAP(err,iCallback->HandleNotifyL((TInt32)aTransId, + KLiwEventError, + *iEventParamList, + *iInParamList)); + } + else + { + //Append Error code + TInt32 sapiError = CContactInterface::SapiError(aError); + iEventParamList->AppendL(TLiwGenericParam( KErrorCode, + TLiwVariant( (TInt32)sapiError ))); + //Append Reason + + //Call HandleNotify + TRAP(err,iCallback->HandleNotifyL((TInt32)aTransId, + KLiwEventCompleted, + *iEventParamList, + *iInParamList)); + } + + } + CleanupStack::PopAndDestroy(this); + } +/* +----------------------------------------------------------------------------- + CContactInterfaceCallback::HandleReturnIter() + Description : The MContactCallback Method, is called when + GetList returns an iterator on a list of entries retrived. + Return values : N/A +----------------------------------------------------------------------------- +*/ + + +void CContactInterfaceCallback::HandleReturnIter(const TInt& aError, + CContactIter* aIter, + TInt aTransId) + { + TInt err = 0; + CleanupStack::PushL(this); + if( iCallback ) + { + if( iEventParamList ) + { + iEventParamList->Reset(); + } + else + { + iEventParamList = CLiwGenericParamList::NewL(); + } + //Append Error Code + TInt32 sapiError = CContactInterface::SapiError(aError); + iEventParamList->AppendL(TLiwGenericParam( KErrorCode, + TLiwVariant((TInt32)sapiError))); + + if(aIter) + { + CContactIterator* iterator=CContactIterator::NewL(aIter); + CleanupStack::PushL(iterator); + //Append Iterator in case it is valid + iEventParamList->AppendL(TLiwGenericParam(KReturnValue, + TLiwVariant(iterator))); + iterator->DecRef(); + CleanupStack::Pop(iterator); + } + + //Call HandleNotify + TRAP(err,iCallback->HandleNotifyL(aTransId, + KLiwEventCompleted, + *iEventParamList, + *iInParamList)); + } + CleanupStack::PopAndDestroy(this); + }