diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncddownloadinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncddownloadinfo.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,281 @@ +/* +* 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: Implementation of CNcdDownloadInfo +* +*/ + + +#include "ncddownloadinfo.h" +#include "ncd_pp_entitydependency.h" +#include "ncd_pp_download.h" +#include "ncd_pp_descriptor.h" +#include "ncd_pp_rights.h" +#include "catalogsutils.h" +#include "ncdpurchasedownloadinfo.h" + + +CNcdDownloadInfo* CNcdDownloadInfo::NewL() + { + CNcdDownloadInfo* self = + CNcdDownloadInfo::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +CNcdDownloadInfo* CNcdDownloadInfo::NewLC() + { + CNcdDownloadInfo* self = + new (ELeave) CNcdDownloadInfo(); + CleanupStack::PushL( self ); + self->CNcdPurchaseDownloadInfo::ConstructL(); + return self; + } + + +CNcdDownloadInfo* CNcdDownloadInfo::NewL( + const MNcdPreminetProtocolEntityDependency& aProtocolDependency ) + { + CNcdDownloadInfo* self = + CNcdDownloadInfo::NewLC( aProtocolDependency ); + CleanupStack::Pop( self ); + return self; + } + +CNcdDownloadInfo* CNcdDownloadInfo::NewLC( + const MNcdPreminetProtocolEntityDependency& aProtocolDependency ) + { + CNcdDownloadInfo* self = + new (ELeave) CNcdDownloadInfo(); + CleanupStack::PushL( self ); + self->ConstructL( aProtocolDependency ); + return self; + } + + +CNcdDownloadInfo* CNcdDownloadInfo::NewLC( + const MNcdPreminetProtocolDownload& aProtocolDownload ) + { + CNcdDownloadInfo* self = + new (ELeave) CNcdDownloadInfo(); + CleanupStack::PushL( self ); + self->ConstructL( aProtocolDownload ); + return self; + } + + +CNcdDownloadInfo* CNcdDownloadInfo::NewLC( + const MNcdPurchaseDownloadInfo& aDownload, + TUid aUid, + const TDesC& aVersion ) + { + CNcdDownloadInfo* self = + new (ELeave) CNcdDownloadInfo(); + CleanupStack::PushL( self ); + self->ConstructL( aDownload, aUid, aVersion ); + return self; + } + + + +void CNcdDownloadInfo::InternalizeL( RReadStream& aStream ) + { + DLTRACEIN(("")); + CNcdPurchaseDownloadInfo::InternalizeL( aStream ); + iUid.iUid = aStream.ReadInt32L(); + InternalizeDesL( iVersion, aStream ); + InternalizeEnumL( iDependencyState, aStream ); + DLTRACEOUT(("Internalization successful")); + } + + +void CNcdDownloadInfo::ExternalizeL( RWriteStream& aStream ) + { + DLTRACEIN(("")); + CNcdPurchaseDownloadInfo::ExternalizeL( aStream ); + aStream.WriteInt32L( iUid.iUid ); + ExternalizeDesL( *iVersion, aStream ); + ExternalizeEnumL( iDependencyState, aStream ); + DLTRACEOUT(("Externalization successful")); + } + + + +const TDesC& CNcdDownloadInfo::ContentName() const + { + DLTRACEIN(("")); + const TDesC* name = NULL; + + // Errors ignore, AttributeStringL leaves with KErrNotFound if + // the attribute is not set but that doesn't matter + TRAP_IGNORE( name = &AttributeStringL( + MNcdPurchaseDownloadInfo::EDownloadAttributeDependencyName ) ); + if ( name ) + { + return *name; + } + return KNullDesC; + } + + +TUid CNcdDownloadInfo::ContentId() const + { + return iUid; + } + + +const TDesC& CNcdDownloadInfo::ContentVersion() const + { + DASSERT( iVersion ); + return *iVersion; + } + + +TNcdDependencyState CNcdDownloadInfo::DependencyState() const + { + return iDependencyState; + } + + +void CNcdDownloadInfo::SetDependencyState( TNcdDependencyState aState ) + { + iDependencyState = aState; + } + + +CNcdDownloadInfo::CNcdDownloadInfo() + : CNcdPurchaseDownloadInfo(), + iDependencyState( ENcdDependencyMissing ) + { + } + + +void CNcdDownloadInfo::ConstructL( + const MNcdPreminetProtocolEntityDependency& aProtocolDependency ) + { + DLTRACEIN(("")); + // Just to be sure that everything will be initialized. + // Notice, that this initializes everything. So, + // most of the data is most likely unnecessarily created + // here because they will be replaced later in this function. + CNcdPurchaseDownloadInfo::ConstructL(); + + if ( aProtocolDependency.DownloadDetails() ) + { + ConstructDownloadL( *aProtocolDependency.DownloadDetails() ); + } + + if ( aProtocolDependency.ContentId().Length() ) + { + TInt uid = 0; + DLTRACE(( _L("Content ID: %S"), &aProtocolDependency.ContentId() )); + + TRAPD( err, uid = DesHexToIntL( aProtocolDependency.ContentId() ) ); + if( err != KErrNone ) + { + DLERROR(( "DownloadableContent()->Id() was not valid hex" )); + iUid.iUid = 0; + } + else + { + iUid.iUid = uid; + } + } + + iVersion = aProtocolDependency.ContentVersion().AllocL(); + + + SetAttributeL( MNcdPurchaseDownloadInfo::EDownloadAttributeDependencyName, + aProtocolDependency.Name() ); + + DLTRACEOUT(( _L("Content version: %S"), iVersion )); + } + + +void CNcdDownloadInfo::ConstructL( + const MNcdPreminetProtocolDownload& aProtocolDownload ) + { + DLTRACEIN(("")); + CNcdPurchaseDownloadInfo::ConstructL(); + iVersion = KNullDesC().AllocL(); + + SetAttributeL( MNcdPurchaseDownloadInfo::EDownloadAttributeDependencyName, + KNullDesC ); + + ConstructDownloadL( aProtocolDownload ); + } + + +void CNcdDownloadInfo::ConstructDownloadL( + const MNcdPreminetProtocolDownload& aProtocolDownload ) + { + DLTRACEIN(("")); + + + SetContentUriL( aProtocolDownload.Uri() ); + SetLaunchable( aProtocolDownload.Launchable() ); + SetContentMimeTypeL( aProtocolDownload.Mime() ); + + SetContentSize( aProtocolDownload.Size() ); + + SetInstallNotificationUriL( aProtocolDownload.InstallNotificationUri() ); + + // Set content usage + if ( aProtocolDownload.Target() == EDownloadTargetConsumable ) + { + SetContentUsage( MNcdPurchaseDownloadInfo::EConsumable ); + } + else + { + DLINFO(("Setting as downloadable, was actually: %d", + aProtocolDownload.Target())); + SetContentUsage( MNcdPurchaseDownloadInfo::EDownloadable ); + } + + if( aProtocolDownload.Descriptor() != NULL ) + { + SetDescriptorDataL( aProtocolDownload.Descriptor()->Data() ); + SetDescriptorNameL( aProtocolDownload.Descriptor()->Name() ); + SetDescriptorTypeL( aProtocolDownload.Descriptor()->Type() ); + SetDescriptorUriL( aProtocolDownload.Descriptor()->Uri() ); + } + + if( aProtocolDownload.Rights() ) + { + SetRightsTypeL( aProtocolDownload.Rights()->Type() ); + SetRightsUriL( aProtocolDownload.Rights()->Uri() ); + SetActivationKeyL( aProtocolDownload.Rights()->ActivationKey()); + } + + SetContentValidityDelta( aProtocolDownload.ValidityDelta() ); + + DLTRACEOUT(("")); + } + + +void CNcdDownloadInfo::ConstructL( + const MNcdPurchaseDownloadInfo& aDownload, + TUid aUid, + const TDesC& aVersion ) + { + DLTRACEIN(("")); + CNcdPurchaseDownloadInfo::ConstructL( aDownload ); + iVersion = aVersion.AllocL(); + iUid = aUid; + } + + +CNcdDownloadInfo::~CNcdDownloadInfo() + { + delete iVersion; + }