ncdengine/provider/client/src/ncdpurchasehistoryproxy.cpp
changeset 0 ba25891c3a9e
--- /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;
+    }