--- /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 <e32err.h>
+#include <s32mem.h>
+
+#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<const CNcdPurchaseDetails*>(&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<TUint> 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<TUid> 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<TUint> 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;
+ }