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