diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdpurchasehistoryproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/client/src/ncdpurchasehistoryproxy.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,287 @@ +/* +* Copyright (c) 2006 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 CNcdPurchaseHistoryProxy class +* +*/ + + +#include +#include + +#include "catalogsinterfaceidentifier.h" +#include "catalogsclientserver.h" +#include "ncdpurchasehistoryproxy.h" +#include "ncdnodefunctionids.h" +#include "ncdpurchasedetails.h" +#include "ncdutils.h" +#include "ncdpurchasehistoryfilter.h" +#include "catalogsutils.h" +#include "catalogsconstants.h" +#include "catalogsdebug.h" + + +CNcdPurchaseHistoryProxy::CNcdPurchaseHistoryProxy( + MCatalogsClientServer& aSession, + TInt aHandle, + CCatalogsInterfaceBase* aParent, + CNcdOperationManagerProxy& aOperationManager ) + : CNcdInterfaceBaseProxy( aSession, aHandle, aParent ), + iOperationManager( aOperationManager ) + { + } + +void CNcdPurchaseHistoryProxy::ConstructL() + { + MNcdPurchaseHistory* history( this ); + AddInterfaceL( + CCatalogsInterfaceIdentifier::NewL( + history, + this, + MNcdPurchaseHistory::KInterfaceUid ) ); + } + + +CNcdPurchaseHistoryProxy* CNcdPurchaseHistoryProxy::NewL( + MCatalogsClientServer& aSession, + TInt aHandle, + CCatalogsInterfaceBase* aParent, + CNcdOperationManagerProxy& aOperationManager ) + { + CNcdPurchaseHistoryProxy* self = + CNcdPurchaseHistoryProxy::NewLC( + aSession, + aHandle, + aParent, + aOperationManager ); + CleanupStack::Pop( self ); + return self; + } + +CNcdPurchaseHistoryProxy* CNcdPurchaseHistoryProxy::NewLC( + MCatalogsClientServer& aSession, + TInt aHandle, + CCatalogsInterfaceBase* aParent, + CNcdOperationManagerProxy& aOperationManager ) + { + CNcdPurchaseHistoryProxy* self = + new( ELeave ) CNcdPurchaseHistoryProxy( + aSession, + aHandle, + aParent, + aOperationManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CNcdPurchaseHistoryProxy::~CNcdPurchaseHistoryProxy() + { + // Remove interfaces implemented by this class from the interface list. + // So, the interface list is up to date when this class object is deleted. + RemoveInterface( MNcdPurchaseHistory::KInterfaceUid ); + } + +void CNcdPurchaseHistoryProxy::SavePurchaseL( + const MNcdPurchaseDetails& aDetails, + TBool aSaveIcon ) + { + DLTRACEIN(("")); + + DLINFO(("Save purchase details to purchase history")); + + CBufBase* buf = CBufFlat::NewL( KBufExpandSize ); + CleanupStack::PushL( buf ); + + RBufWriteStream stream( *buf ); + CleanupClosePushL( stream ); + + static_cast(&aDetails)->ExternalizeL( stream ); + + CleanupStack::PopAndDestroy( &stream ); + + TInt funcId( NcdNodeFunctionIds::ENcdPurchaseHistorySavePurchase ); + if ( !aSaveIcon ) + { + funcId = + NcdNodeFunctionIds::ENcdPurchaseHistorySavePurchaseWithOldIcon; + } + + HBufC8* dummyBuf = NULL; + + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + funcId, + buf->Ptr( 0 ), + dummyBuf, + Handle(), + 0 ) ); + delete dummyBuf; + + CleanupStack::PopAndDestroy( buf ); + + DLTRACEOUT(("")); + } + +RArray CNcdPurchaseHistoryProxy::PurchaseIdsL( + const MNcdPurchaseHistoryFilter& aFilter ) + { + DLTRACEIN(("")); + + DLINFO(("Get purchase IDs from purchase history")); + + CBufBase* filterBuf = CBufFlat::NewL( KBufExpandSize ); + CleanupStack::PushL( filterBuf ); + + RBufWriteStream stream( *filterBuf ); + CleanupClosePushL( stream ); + + TArray clientUids = aFilter.ClientUids(); + TUint count = clientUids.Count(); + stream.WriteUint32L( count ); + for ( TInt i = 0; i < count; i++ ) + { + stream.WriteInt32L( clientUids[i].iUid ); + } + ExternalizeDesL( aFilter.Namespace(), stream ); + ExternalizeDesL( aFilter.EntityId(), stream ); + stream.WriteUint32L( aFilter.EventId() ); + + CleanupStack::PopAndDestroy( &stream ); + + HBufC8* idBuf = NULL; + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + NcdNodeFunctionIds::ENcdPurchaseHistoryGetPurchaseIds, + filterBuf->Ptr( 0 ), + idBuf, + Handle(), + 0 ) ); + + CleanupStack::PopAndDestroy( filterBuf ); + + CleanupStack::PushL( idBuf ); + + TInt size = sizeof(TUint); + count = Des8ToUint( idBuf->Mid( 0, size ) ); + + RArray purchaseIds; + CleanupClosePushL( purchaseIds ); + + for ( TInt i = 0; i < count; i++ ) + { + purchaseIds.Append( + Des8ToUint( idBuf->Mid( ( i + 1 ) * size, size ) ) ); + } + + CleanupStack::Pop( &purchaseIds ); + CleanupStack::PopAndDestroy( idBuf ); + + DLTRACEOUT(("")); + + return purchaseIds; + } + +CNcdPurchaseDetails* CNcdPurchaseHistoryProxy::PurchaseDetailsL( + TUint aPurchaseId, + TBool aLoadIcon ) + { + DLTRACEIN(("Load with icon: %d", aLoadIcon)); + + DLINFO(("Get purchase details from purchase history")); + + HBufC8* id = UintToDes8LC( aPurchaseId ); + + HBufC8* detailsBuf = NULL; + + + if ( aLoadIcon ) + { + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + NcdNodeFunctionIds::ENcdPurchaseHistoryGetPurchase, + *id, + detailsBuf, + Handle(), + 0 ) ); + } + else + { + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + NcdNodeFunctionIds::ENcdPurchaseHistoryGetPurchaseNoIcon, + *id, + detailsBuf, + Handle(), + 0 ) ); + } + CleanupStack::PopAndDestroy( id ); + CleanupStack::PushL( detailsBuf ); + + CNcdPurchaseDetails* details = CNcdPurchaseDetails::NewLC(); + + RDesReadStream stream( *detailsBuf ); + CleanupClosePushL( stream ); + + details->InternalizeL( stream ); + + CleanupStack::PopAndDestroy( &stream ); + CleanupStack::Pop( details ); + CleanupStack::PopAndDestroy( detailsBuf ); + + DLTRACEOUT(("")); + + return details; + } + +void CNcdPurchaseHistoryProxy::RemovePurchaseL( TUint aPurchaseId ) + { + DLTRACEIN(("")); + + DLINFO(("Remove purchase from purchase history")); + + HBufC8* id = UintToDes8LC( aPurchaseId ); + + HBufC8* dummyBuf = NULL; + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + NcdNodeFunctionIds::ENcdPurchaseHistoryRemovePurchase, + *id, + dummyBuf, + Handle(), + 0 ) ); + delete dummyBuf; + + CleanupStack::PopAndDestroy( id ); + + DLTRACEOUT(("")); + } + +TUint CNcdPurchaseHistoryProxy::EventCountL() + { + DLTRACEIN(("")); + + DLINFO(("Get event count from purchase history")); + + HBufC8* countBuf = NULL; + User::LeaveIfError( ClientServerSession().SendSyncAlloc( + NcdNodeFunctionIds::ENcdPurchaseHistoryEventCount, + KNullDesC8, + countBuf, + Handle(), + 0 ) ); + CleanupStack::PushL( countBuf ); + + TUint count = Des8ToUint( *countBuf ); + + CleanupStack::PopAndDestroy( countBuf ); + + DLTRACEOUT(("")); + + return count; + }