--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/src/ncdpurchasedetails.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,932 @@
+/*
+* Copyright (c) 2006-2008 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:
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "ncdpurchasedetails.h"
+#include "ncdpurchasedownloadinfo.h"
+#include "ncdpurchaseinstallinfo.h"
+#include "catalogsutils.h"
+#include "catalogsconstants.h"
+#include "ncdutils.h"
+#include "ncdattributes.h"
+
+#include "catalogsdebug.h"
+
+
+static inline void AssignHBufC( HBufC*& aDes, HBufC* const aSource )
+ {
+ delete aDes;
+ aDes = aSource;
+ }
+
+EXPORT_C CNcdPurchaseDetails* CNcdPurchaseDetails::NewL()
+ {
+ CNcdPurchaseDetails* self = NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+EXPORT_C CNcdPurchaseDetails* CNcdPurchaseDetails::NewLC()
+ {
+ CNcdPurchaseDetails* self = new ( ELeave ) CNcdPurchaseDetails;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+EXPORT_C CNcdPurchaseDetails* CNcdPurchaseDetails::NewL(
+ const MNcdPurchaseDetails& aDetails )
+ {
+ CNcdPurchaseDetails* self = NewLC( aDetails );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+EXPORT_C CNcdPurchaseDetails* CNcdPurchaseDetails::NewLC(
+ const MNcdPurchaseDetails& aDetails )
+ {
+ DLTRACEIN((""));
+ CNcdPurchaseDetails* self = new ( ELeave ) CNcdPurchaseDetails;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ self->SetCatalogSourceNameL( aDetails.CatalogSourceName() );
+ self->SetClientUid( aDetails.ClientUid() );
+ self->SetDescriptionL( aDetails.Description() );
+ self->SetDownloadAccessPointL( aDetails.DownloadAccessPoint() );
+ self->SetDownloadedFilesL( aDetails.DownloadedFiles() );
+ self->SetDownloadInfoL( aDetails.DownloadInfoL() );
+ self->SetEntityIdL( aDetails.EntityId() );
+ self->SetFinalPriceL( aDetails.FinalPrice() );
+ self->SetIconL( aDetails.Icon() );
+ self->SetInstallInfoL( aDetails.InstallInfoL() );
+ self->SetItemNameL( aDetails.ItemName() );
+ self->SetItemPurpose( aDetails.ItemPurpose() );
+ self->SetNamespaceL( aDetails.Namespace() );
+ self->SetPaymentMethodNameL( aDetails.PaymentMethodName() );
+ self->SetPurchaseOptionIdL( aDetails.PurchaseOptionId() );
+ self->SetPurchaseOptionNameL( aDetails.PurchaseOptionName() );
+ self->SetPurchaseOptionPriceL( aDetails.PurchaseOptionPrice() );
+ self->SetPurchaseTime( aDetails.PurchaseTime() );
+ self->SetVersionL( aDetails.Version() );
+ self->SetServerUriL( aDetails.ServerUri() );
+ self->SetItemType( aDetails.ItemType() );
+ self->SetTotalContentSize( aDetails.TotalContentSize() );
+ self->SetLastOperationTime( aDetails.LastOperationTime() );
+ self->SetLastOperationErrorCode( aDetails.LastOperationErrorCode() );
+ self->SetOriginNodeIdL( aDetails.OriginNodeId() );
+
+ // Some ugly stuff for copying the attributes
+ // This WILL NOT work for other MNcdPurchaseDetails-implementations
+ // if there's going to be any
+ const CNcdPurchaseDetails& details =
+ static_cast<const CNcdPurchaseDetails&>( aDetails );
+
+ if ( details.iAttributes )
+ {
+ DeletePtr( self->iAttributes );
+ self->iAttributes = CNcdAttributes::NewL( *details.iAttributes );
+ }
+
+ return self;
+ }
+
+CNcdPurchaseDetails::~CNcdPurchaseDetails()
+ {
+ delete iNamespace;
+ delete iEntityId;
+ delete iItemName;
+ delete iCatalogSourceName;
+ ResetAndDestroyWithCast< CNcdPurchaseDownloadInfo >( iDownloadInfo );
+ delete iPurchaseOptionId;
+ delete iPurchaseOptionName;
+ delete iPurchaseOptionPrice;
+ delete iFinalPrice;
+ delete iPaymentMethodName;
+ delete iDownloadedFiles;
+
+ ResetAndDestroyWithCast< CNcdPurchaseInstallInfo >( iInstallInfo );
+
+ delete iIcon;
+ delete iDownloadAccessPoint;
+ delete iDescription;
+ delete iVersion;
+ delete iServerUri;
+ delete iOriginNodeId;
+ delete iAttributes;
+ }
+
+MNcdPurchaseDetails::TState CNcdPurchaseDetails::State() const
+ {
+ // The state is automatically checked here without using any
+ // state member variable. At the moment, a member variable for
+ // the state and setter function for the state can not be used
+ // because, for example, PC-client does not support it.
+
+ // Notice, that here we do not use the last operation error code
+ // to check if the last operation has failed. We just give, the current
+ // state. It is up to the user of the purchase details to do more checking
+ // related to the error code if more information is needed, for example,
+ // to check if some operation has failed and the state has not progressed
+ // because of that.
+
+ if ( iInstallInfo.Count() > 0
+ && iInstallInfo.Count() >= iDownloadInfo.Count() )
+ {
+ // All the items have been installed.
+ // So, we can suppose that the installation was a success.
+ // So, return installed-state.
+ return EStateInstalled;
+ }
+ else if ( iDownloadedFiles
+ && iDownloadedFiles->Count() > 0
+ && iDownloadedFiles->Count() >= iDownloadInfo.Count() )
+ {
+ // All of the items have been downloaded,
+ // So, we can suppose that the download was a success.
+ return EStateDownloaded;
+ }
+ else
+ {
+ // Because an item has not been yet fully downloaded or installed,
+ // its state is purchased-state.
+ return EStatePurchased;
+ }
+ }
+
+TUid CNcdPurchaseDetails::ClientUid() const
+ {
+ return iClientUid;
+ }
+
+const TDesC& CNcdPurchaseDetails::Namespace() const
+ {
+ return *iNamespace;
+ }
+
+const TDesC& CNcdPurchaseDetails::EntityId() const
+ {
+ return *iEntityId;
+ }
+
+const TDesC& CNcdPurchaseDetails::ItemName() const
+ {
+ return *iItemName;
+ }
+
+TUint CNcdPurchaseDetails::ItemPurpose() const
+ {
+ return iItemPurpose;
+ }
+
+const TDesC& CNcdPurchaseDetails::CatalogSourceName() const
+ {
+ return *iCatalogSourceName;
+ }
+
+TArray< MNcdPurchaseDownloadInfo* >
+ CNcdPurchaseDetails::DownloadInfoL() const
+ {
+ return iDownloadInfo.Array();
+ }
+
+const TDesC& CNcdPurchaseDetails::PurchaseOptionId() const
+ {
+ return *iPurchaseOptionId;
+ }
+
+const TDesC& CNcdPurchaseDetails::PurchaseOptionName() const
+ {
+ return *iPurchaseOptionName;
+ }
+
+const TDesC& CNcdPurchaseDetails::PurchaseOptionPrice() const
+ {
+ return *iPurchaseOptionPrice;
+ }
+
+const TDesC& CNcdPurchaseDetails::FinalPrice() const
+ {
+ return *iFinalPrice;
+ }
+
+const TDesC& CNcdPurchaseDetails::PaymentMethodName() const
+ {
+ return *iPaymentMethodName;
+ }
+
+TTime CNcdPurchaseDetails::PurchaseTime() const
+ {
+ return iPurchaseTime;
+ }
+
+const MDesCArray& CNcdPurchaseDetails::DownloadedFiles() const
+ {
+ return *iDownloadedFiles;
+ }
+
+TArray< MNcdPurchaseInstallInfo* > CNcdPurchaseDetails::InstallInfoL() const
+ {
+ return iInstallInfo.Array();
+ }
+
+const TDesC8& CNcdPurchaseDetails::Icon() const
+ {
+ DASSERT( iIcon );
+ return *iIcon;
+ }
+
+TBool CNcdPurchaseDetails::HasIcon() const
+ {
+ DLTRACE(("iHasIcon: %d",iHasIcon));
+ return iHasIcon;
+ }
+
+const TDesC& CNcdPurchaseDetails::DownloadAccessPoint() const
+ {
+ return *iDownloadAccessPoint;
+ }
+
+const TDesC& CNcdPurchaseDetails::Description() const
+ {
+ return *iDescription;
+ }
+
+const TDesC& CNcdPurchaseDetails::Version() const
+ {
+ return *iVersion;
+ }
+
+const TDesC& CNcdPurchaseDetails::ServerUri() const
+ {
+ return *iServerUri;
+ }
+
+MNcdPurchaseDetails::TItemType CNcdPurchaseDetails::ItemType() const
+ {
+ return iItemType;
+ }
+
+TInt CNcdPurchaseDetails::TotalContentSize() const
+ {
+ return iTotalContentSize;
+ }
+
+const TDesC& CNcdPurchaseDetails::OriginNodeId() const
+ {
+ return *iOriginNodeId;
+ }
+
+TTime CNcdPurchaseDetails::LastOperationTime() const
+ {
+ return iLastOperationTime;
+ }
+
+TInt CNcdPurchaseDetails::LastOperationErrorCode() const
+ {
+ return iLastOperationErrorCode;
+ }
+
+
+const TDesC& CNcdPurchaseDetails::AttributeString(
+ TPurchaseAttribute aAttribute ) const
+ {
+ DLTRACEIN((""));
+ return iAttributes->AttributeString16( aAttribute );
+ }
+
+
+TInt32 CNcdPurchaseDetails::AttributeInt32(
+ TPurchaseAttribute aAttribute ) const
+ {
+ return iAttributes->AttributeInt32( aAttribute );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::ExternalizeL( RWriteStream& aStream ) const
+ {
+ TUint count = 0;
+
+ aStream.WriteInt32L( iClientUid.iUid );
+ ExternalizeDesL( *iNamespace, aStream );
+ ExternalizeDesL( *iEntityId, aStream );
+ ExternalizeDesL( *iItemName, aStream );
+ aStream.WriteUint32L( iItemPurpose );
+ ExternalizeDesL( *iCatalogSourceName, aStream );
+
+ count = iDownloadInfo.Count();
+ aStream.WriteUint32L( count );
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseDownloadInfo* info =
+ (CNcdPurchaseDownloadInfo*)iDownloadInfo[i];
+ info->ExternalizeL( aStream );
+ }
+
+ ExternalizeDesL( *iPurchaseOptionId, aStream );
+ ExternalizeDesL( *iPurchaseOptionName, aStream );
+ ExternalizeDesL( *iPurchaseOptionPrice, aStream );
+ ExternalizeDesL( *iFinalPrice, aStream );
+ ExternalizeDesL( *iPaymentMethodName, aStream );
+ aStream << iPurchaseTime.Int64();
+
+ count = iDownloadedFiles->Count();
+ aStream.WriteUint32L( count );
+ for ( TInt i = 0; i < count; i++ )
+ {
+ ExternalizeDesL( (*iDownloadedFiles)[i], aStream );
+ }
+
+ count = iInstallInfo.Count();
+ aStream.WriteUint32L( count );
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseInstallInfo* info =
+ (CNcdPurchaseInstallInfo*)iInstallInfo[i];
+ info->ExternalizeL( aStream );
+ }
+
+ aStream.WriteInt32L( iHasIcon );
+ ExternalizeDesL( *iIcon, aStream );
+ ExternalizeDesL( *iDownloadAccessPoint, aStream );
+ ExternalizeDesL( *iDescription, aStream );
+ ExternalizeDesL( *iVersion, aStream );
+ ExternalizeDesL( *iServerUri, aStream );
+ aStream.WriteInt32L( iItemType );
+ aStream.WriteInt32L( iTotalContentSize );
+ ExternalizeDesL( *iOriginNodeId, aStream );
+
+ aStream << LastOperationTime().Int64();
+ aStream.WriteInt32L( LastOperationErrorCode() );
+
+ iAttributes->ExternalizeL( aStream );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::InternalizeL( RReadStream& aStream )
+ {
+ TInt64 int64 = 0;
+ TUint count = 0;
+
+ iClientUid = TUid::Uid( aStream.ReadInt32L() );
+ InternalizeDesL( iNamespace, aStream );
+ InternalizeDesL( iEntityId, aStream );
+ InternalizeDesL( iItemName, aStream );
+ iItemPurpose = aStream.ReadUint32L();
+ InternalizeDesL( iCatalogSourceName, aStream );
+
+ count = aStream.ReadUint32L();
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseDownloadInfo* info = CNcdPurchaseDownloadInfo::NewLC();
+ info->InternalizeL( aStream );
+ iDownloadInfo.AppendL( info );
+ CleanupStack::Pop( info );
+ }
+
+ InternalizeDesL( iPurchaseOptionId, aStream );
+ InternalizeDesL( iPurchaseOptionName, aStream );
+ InternalizeDesL( iPurchaseOptionPrice, aStream );
+ InternalizeDesL( iFinalPrice, aStream );
+ InternalizeDesL( iPaymentMethodName, aStream );
+ aStream >> int64;
+ iPurchaseTime = int64;
+
+ count = aStream.ReadUint32L();
+ for ( TInt i = 0; i < count; i++ )
+ {
+ HBufC* buf = NULL;
+ InternalizeDesL( buf, aStream );
+ CleanupStack::PushL( buf );
+ iDownloadedFiles->AppendL( *buf );
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ count = aStream.ReadUint32L();
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseInstallInfo* info = CNcdPurchaseInstallInfo::NewLC();
+ info->InternalizeL( aStream );
+ User::LeaveIfError( iInstallInfo.Append( info ) );
+ CleanupStack::Pop( info );
+ }
+
+ iHasIcon = aStream.ReadInt32L();
+ InternalizeDesL( iIcon, aStream );
+ InternalizeDesL( iDownloadAccessPoint, aStream );
+ InternalizeDesL( iDescription, aStream );
+ InternalizeDesL( iVersion, aStream );
+ InternalizeDesL( iServerUri, aStream );
+ iItemType = (MNcdPurchaseDetails::TItemType)aStream.ReadInt32L();
+ iTotalContentSize = aStream.ReadInt32L();
+ InternalizeDesL( iOriginNodeId, aStream );
+
+ TInt64 tmpLastOperationTime( 0 );
+ aStream >> tmpLastOperationTime;
+ iLastOperationTime = tmpLastOperationTime;
+
+ iLastOperationErrorCode = aStream.ReadInt32L();
+
+ iAttributes->InternalizeL( aStream );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetClientUid( TUid aClientUid )
+ {
+ iClientUid = aClientUid;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetNamespaceL( const TDesC& aNamespace )
+ {
+ AssignDesL( iNamespace, aNamespace );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetNamespace( HBufC* aNamespace )
+ {
+ AssignHBufC( iNamespace, aNamespace );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetEntityIdL( const TDesC& aEntityId )
+ {
+ AssignDesL( iEntityId, aEntityId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetEntityId( HBufC* aEntityId )
+ {
+ AssignHBufC( iEntityId, aEntityId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetItemNameL( const TDesC& aItemName )
+ {
+ AssignDesL( iItemName, aItemName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetItemName( HBufC* aItemName )
+ {
+ AssignHBufC( iItemName, aItemName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetItemPurpose( TUint aItemPurpose )
+ {
+ iItemPurpose = aItemPurpose;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetCatalogSourceNameL(
+ const TDesC& aCatalogSourceName )
+ {
+ AssignDesL( iCatalogSourceName, aCatalogSourceName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetCatalogSourceName( HBufC* aCatalogSourceName )
+ {
+ AssignHBufC( iCatalogSourceName, aCatalogSourceName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDownloadInfoL(
+ const TArray< MNcdPurchaseDownloadInfo* >& aDownloadInfo )
+ {
+ DLTRACEIN((""));
+
+ RPointerArray< MNcdPurchaseDownloadInfo > tempArray;
+ // Can't push to cleanup stack since MNcdPurchaseDownloadInfo cannot be
+ // deleted but the array owns the objects
+
+ TRAPD( err,
+ {
+ TInt count = aDownloadInfo.Count();
+ tempArray.ReserveL( count );
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseDownloadInfo* info =
+ CNcdPurchaseDownloadInfo::NewLC( *aDownloadInfo[i] );
+ tempArray.AppendL( info );
+ CleanupStack::Pop( info );
+ }
+ });
+ if ( err != KErrNone )
+ {
+ DLERROR(("%d", err));
+ ResetAndDestroyWithCast<CNcdPurchaseDownloadInfo>( tempArray );
+ User::Leave( err );
+ }
+
+ ResetAndDestroyWithCast<CNcdPurchaseDownloadInfo>( iDownloadInfo );
+ iDownloadInfo = tempArray;
+ }
+
+
+
+EXPORT_C void CNcdPurchaseDetails::AddDownloadInfoL(
+ MNcdPurchaseDownloadInfo* aDownloadInfo )
+ {
+ iDownloadInfo.AppendL( aDownloadInfo );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::InsertDownloadInfoL(
+ MNcdPurchaseDownloadInfo* aDownloadInfo,
+ TInt aIndex )
+ {
+ iDownloadInfo.InsertL( aDownloadInfo, aIndex );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::RemoveDownloadInfo( TInt aIndex )
+ {
+ DeleteFromArray<CNcdPurchaseDownloadInfo>( iDownloadInfo, aIndex );
+ }
+
+
+EXPORT_C TInt CNcdPurchaseDetails::DownloadInfoCount() const
+ {
+ return iDownloadInfo.Count();
+ }
+
+
+EXPORT_C CNcdPurchaseDownloadInfo& CNcdPurchaseDetails::DownloadInfo(
+ TInt aIndex )
+ {
+ CNcdPurchaseDownloadInfo* ptr = static_cast<CNcdPurchaseDownloadInfo*>(
+ iDownloadInfo[aIndex] );
+ return *ptr;
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionIdL(
+ const TDesC& aPurchaseOptionId )
+ {
+ AssignDesL( iPurchaseOptionId, aPurchaseOptionId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionId( HBufC* aPurchaseOptionId )
+ {
+ AssignHBufC( iPurchaseOptionId, aPurchaseOptionId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionNameL(
+ const TDesC& aPurchaseOptionName )
+ {
+ AssignDesL( iPurchaseOptionName, aPurchaseOptionName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionName( HBufC* aPurchaseOptionName )
+ {
+ AssignHBufC( iPurchaseOptionName, aPurchaseOptionName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionPriceL(
+ const TDesC& aPurchaseOptionPrice )
+ {
+ AssignDesL( iPurchaseOptionPrice, aPurchaseOptionPrice );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseOptionPrice(
+ HBufC* aPurchaseOptionPrice )
+ {
+ AssignHBufC( iPurchaseOptionPrice, aPurchaseOptionPrice );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetFinalPriceL( const TDesC& aFinalPrice )
+ {
+ AssignDesL( iFinalPrice, aFinalPrice );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetFinalPrice( HBufC* aFinalPrice )
+ {
+ AssignHBufC( iFinalPrice, aFinalPrice );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPaymentMethodNameL(
+ const TDesC& aPaymentMethodName )
+ {
+ AssignDesL( iPaymentMethodName, aPaymentMethodName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPaymentMethodName( HBufC* aPaymentMethodName )
+ {
+ AssignHBufC( iPaymentMethodName, aPaymentMethodName );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetPurchaseTime( TTime aPurchaseTime )
+ {
+ iPurchaseTime = aPurchaseTime;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDownloadedFiles( CDesCArray* aDownloadedFiles )
+ {
+ delete iDownloadedFiles;
+ iDownloadedFiles = aDownloadedFiles;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDownloadedFilesL(
+ const MDesCArray& aDownloadedFiles )
+ {
+ delete iDownloadedFiles;
+ iDownloadedFiles = NULL;
+ iDownloadedFiles = new (ELeave) CDesCArrayFlat( KListGranularity );
+ for ( TInt i = 0; i < aDownloadedFiles.MdcaCount(); i++ )
+ {
+ iDownloadedFiles->AppendL( aDownloadedFiles.MdcaPoint( i ) );
+ }
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::ReplaceDownloadedFileL( TInt aIndex,
+ const TDesC& aDownloadedFile )
+ {
+ iDownloadedFiles->InsertL( aIndex, aDownloadedFile );
+ iDownloadedFiles->Delete( aIndex + 1 );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::AddDownloadedFileL(
+ const TDesC& aDownloadedFile )
+ {
+ iDownloadedFiles->AppendL( aDownloadedFile );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::InsertDownloadedFileL(
+ const TDesC& aDownloadedFile,
+ TInt aIndex )
+ {
+ iDownloadedFiles->InsertL( aIndex, aDownloadedFile );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::RemoveDownloadedFile(
+ TInt aIndex )
+ {
+ iDownloadedFiles->Delete( aIndex );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::SetInstallInfoL(
+ const TArray< MNcdPurchaseInstallInfo* >& aInstallInfo )
+ {
+ DLTRACEIN((""));
+ RPointerArray<MNcdPurchaseInstallInfo> tempArray;
+
+ TRAPD( err,
+ {
+ TInt count = aInstallInfo.Count();
+ tempArray.ReserveL( count );
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CNcdPurchaseInstallInfo* info =
+ CNcdPurchaseInstallInfo::NewLC( *aInstallInfo[i] );
+ tempArray.AppendL( info );
+ CleanupStack::Pop( info );
+ }
+ });
+
+ if ( err != KErrNone )
+ {
+ DLERROR(("%d", err));
+ ResetAndDestroyWithCast<CNcdPurchaseInstallInfo>( tempArray );
+ User::Leave( err );
+ }
+
+ ResetAndDestroyWithCast<CNcdPurchaseInstallInfo>( iInstallInfo );
+ iInstallInfo = tempArray;
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::AddInstallInfoL(
+ MNcdPurchaseInstallInfo* aInstallInfo )
+ {
+ iInstallInfo.AppendL( aInstallInfo );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::InsertInstallInfoL(
+ MNcdPurchaseInstallInfo* aInstallInfo,
+ TInt aIndex )
+ {
+ iInstallInfo.InsertL( aInstallInfo, aIndex );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::RemoveInstallInfo( TInt aIndex )
+ {
+ DeleteFromArray<CNcdPurchaseInstallInfo>( iInstallInfo, aIndex );
+ }
+
+
+EXPORT_C TInt CNcdPurchaseDetails::InstallInfoCount() const
+ {
+ return iInstallInfo.Count();
+ }
+
+
+EXPORT_C CNcdPurchaseInstallInfo& CNcdPurchaseDetails::InstallInfo(
+ TInt aIndex )
+ {
+ DASSERT( aIndex >= 0 && aIndex < iInstallInfo.Count() );
+ CNcdPurchaseInstallInfo* ptr = static_cast<CNcdPurchaseInstallInfo*>(
+ iInstallInfo[aIndex] );
+ return *ptr;
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::SetIconL( const TDesC8& aIcon )
+ {
+ HBufC8* tmpIcon = aIcon.AllocL();
+ delete iIcon;
+ iIcon = tmpIcon;
+ iHasIcon = ETrue;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetIcon( HBufC8* aIcon )
+ {
+ delete iIcon;
+ iIcon = aIcon;
+ iHasIcon = ETrue;
+ }
+
+EXPORT_C HBufC8* CNcdPurchaseDetails::GetIconData()
+ {
+ HBufC8* tmpIcon = iIcon;
+ iIcon = NULL;
+ return tmpIcon;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetHasIcon( TBool aHasIcon )
+ {
+ iHasIcon = aHasIcon;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDownloadAccessPointL(
+ const TDesC& aAccessPoint )
+ {
+ AssignDesL( iDownloadAccessPoint, aAccessPoint );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDownloadAccessPoint(
+ HBufC* aAccessPoint )
+ {
+ AssignHBufC( iDownloadAccessPoint, aAccessPoint );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDescriptionL(
+ const TDesC& aDescription )
+ {
+ AssignDesL( iDescription, aDescription );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetDescription(
+ HBufC* aDescription )
+ {
+ AssignHBufC( iDescription, aDescription );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetVersionL(
+ const TDesC& aVersion )
+ {
+ AssignDesL( iVersion, aVersion );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetVersion(
+ HBufC* aVersion )
+ {
+ AssignHBufC( iVersion, aVersion );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetServerUriL(
+ const TDesC& aServerUri )
+ {
+ AssignDesL( iServerUri, aServerUri );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetServerUri(
+ HBufC* aServerUri )
+ {
+ AssignHBufC( iServerUri, aServerUri );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetItemType(
+ TItemType aItemType )
+ {
+ iItemType = aItemType;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetTotalContentSize( TInt aSize )
+ {
+ iTotalContentSize = aSize;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetOriginNodeIdL( const TDesC& aOriginNodeId )
+ {
+ AssignDesL( iOriginNodeId, aOriginNodeId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetOriginNodeId( HBufC* aOriginNodeId )
+ {
+ AssignHBufC( iOriginNodeId, aOriginNodeId );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetLastUniversalOperationTime()
+ {
+ TTime time;
+ time.UniversalTime();
+ SetLastOperationTime( time );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetLastOperationTime( const TTime& aTime )
+ {
+ iLastOperationTime = aTime;
+ }
+
+EXPORT_C void CNcdPurchaseDetails::SetLastOperationErrorCode( TInt aError )
+ {
+ iLastOperationErrorCode = aError;
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::SetAttributeL(
+ TPurchaseAttribute aAttribute,
+ TInt32 aValue )
+ {
+ iAttributes->SetAttributeL( aAttribute, aValue );
+ }
+
+
+EXPORT_C void CNcdPurchaseDetails::SetAttributeL(
+ TPurchaseAttribute aAttribute,
+ const TDesC& aValue )
+ {
+ iAttributes->SetAttributeL( aAttribute, aValue );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::ExternalizeAttributesL(
+ RWriteStream& aStream ) const
+ {
+ DLTRACEIN((""));
+ iAttributes->ExternalizeL( aStream );
+ }
+
+EXPORT_C void CNcdPurchaseDetails::InternalizeAttributesL(
+ RReadStream& aStream )
+ {
+ DLTRACEIN((""));
+ iAttributes->InternalizeL( aStream );
+ }
+
+
+void CNcdPurchaseDetails::CreateAttributesL()
+ {
+ DLTRACEIN((""));
+ if ( !iAttributes )
+ {
+ iAttributes = CNcdAttributes::NewL(
+ MNcdPurchaseDetails::EPurchaseAttributeInternal );
+ }
+ }
+
+
+void CNcdPurchaseDetails::ConstructL()
+ {
+ iNamespace = KNullDesC().AllocL();
+ iEntityId = KNullDesC().AllocL();
+ iItemName = KNullDesC().AllocL();
+ iCatalogSourceName = KNullDesC().AllocL();
+ iPurchaseOptionId = KNullDesC().AllocL();
+ iPurchaseOptionName = KNullDesC().AllocL();
+ iPurchaseOptionPrice = KNullDesC().AllocL();
+ iFinalPrice = KNullDesC().AllocL();
+ iPaymentMethodName = KNullDesC().AllocL();
+ iDownloadedFiles = new (ELeave) CDesCArrayFlat( KListGranularity );
+ iIcon = KNullDesC8().AllocL();
+ iDownloadAccessPoint = KNullDesC().AllocL();
+ iDescription = KNullDesC().AllocL();
+ iVersion = KNullDesC().AllocL();
+ iServerUri = KNullDesC().AllocL();
+ iItemType = MNcdPurchaseDetails::EItem;
+ iOriginNodeId = KNullDesC().AllocL();
+ CreateAttributesL();
+ }
+
+CNcdPurchaseDetails::CNcdPurchaseDetails()
+ : iPurchaseTime( 0 ),
+ iHasIcon( EFalse ),
+ iTotalContentSize( 0 ),
+ iLastOperationTime( 0 ),
+ iLastOperationErrorCode( KErrNone )
+
+ {
+ iClientUid = TUid::Null();
+ }