codhandler/codeng/src/CodData.cpp
changeset 0 dd21522fd290
child 25 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/codhandler/codeng/src/CodData.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,581 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 class CCodData.   
+*      
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "CodData.h"
+#include "CodDefs.h"
+#include "CodUtil.h"
+#include <badesca.h>
+#include "FileExt.h"
+#include "HttpDownloadData.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCodData::NewL()
+// ---------------------------------------------------------
+//
+EXPORT_C CCodData* CCodData::NewL()
+    {
+    CCodData* data = new (ELeave) CCodData();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    CleanupStack::Pop( data );
+    return data;
+    }
+
+// ---------------------------------------------------------
+// CCodData::~CCodData()
+// ---------------------------------------------------------
+//
+EXPORT_C CCodData::~CCodData()
+    {
+    delete iName;
+    delete iVendor;
+    delete iDescription;
+    delete iInstallNotify;
+    delete iNextUrl;
+    delete iNextUrlAtError;
+    delete iInfoUrl;
+    delete iPrice;
+    delete iIcon;
+    delete iVersion;
+	delete iUpdatedDDUri;
+    delete iSourceUri;
+    
+    iMediaObjects.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------
+// CCodData::IsValid()
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CCodData::IsValid() const
+    {
+    TInt mediaObjectsValid = EFalse;
+    
+    //First check if all the media objects are valid
+    //Also check total size is valid
+    for( TInt i = 0; i < iMediaObjects.Count(); i++ )
+        {
+        mediaObjectsValid = iMediaObjects[i]->IsValid();
+        if( !mediaObjectsValid ) break;
+        }
+    return ( iSize > 0 && mediaObjectsValid );
+    }
+
+// ---------------------------------------------------------
+// CCodData::IsPostOrder()
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CCodData::IsPostOrder() const
+    {
+    return iIsPostOrder;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Reset()
+// ---------------------------------------------------------
+//
+EXPORT_C void CCodData::Reset()
+    {
+    iName->Des().Zero();
+    iVendor->Des().Zero();
+    iDescription->Des().Zero();
+    iSize = 0;
+    iInstallNotify->Des().Zero();
+    iNextUrl->Des().Zero();
+    iNextUrlAtError->Des().Zero();
+    iInfoUrl->Des().Zero();
+    iPrice->Des().Zero();
+    iIcon->Des().Zero();
+    iVersion->Des().Zero();
+	iIsPostOrder = EFalse;
+	iUpdatedDDUri->Des().Zero();
+	iSourceUri->Des().Zero();
+	iActiveDownload = 1;
+    
+    //Also reset all media objects values
+    for( TInt i = 0; i < iMediaObjects.Count(); i++ )
+        {
+        iMediaObjects[i]->Reset();
+        }	
+    }
+
+// ---------------------------------------------------------
+// CCodData::Name()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCodData::Name() const
+    {
+    return *iName;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Vendor()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCodData::Vendor() const
+    {
+    return *iVendor;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Description()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCodData::Description() const
+    {
+    return *iDescription;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Size()
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CCodData::Size() const
+    {
+    return iSize;
+    }
+
+
+// ---------------------------------------------------------
+// CCodData::SuppressConfirm() 
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CCodData::SuppressConfirm() const
+    {
+    return iSuppressConfirm;
+    }
+        
+// ---------------------------------------------------------
+// CCodData::InstallNotify()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::InstallNotify() const
+    {
+    return *iInstallNotify;
+    }
+
+// ---------------------------------------------------------
+// CCodData::NextUrl()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::NextUrl() const
+    {
+    return *iNextUrl;
+    }
+
+// ---------------------------------------------------------
+// CCodData::NextUrlAtError()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::NextUrlAtError() const
+    {
+    return *iNextUrlAtError;
+    }
+
+// ---------------------------------------------------------
+// CCodData::InfoUrl
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::InfoUrl() const
+    {
+    return *iInfoUrl;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Price()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCodData::Price() const
+    {
+    return *iPrice;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Icon()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::Icon() const
+    {
+    return *iIcon;
+    }
+
+// ---------------------------------------------------------
+// CCodData::Version()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCodData::Version() const
+    {
+    return *iVersion;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SourceUri()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::SourceUri() const
+    {
+    return *iSourceUri;
+    }
+
+
+// ---------------------------------------------------------
+// CCodData::UpdatedDDURI()
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC8 CCodData::UpdatedDDUriL() const
+    {
+    return *iUpdatedDDUri;
+    }
+
+
+// ---------------------------------------------------------
+// CCodData::CCodData()
+// ---------------------------------------------------------
+//
+CCodData::CCodData()
+    {
+    }
+
+// ---------------------------------------------------------
+// CCodData::ConstructL()
+// ---------------------------------------------------------
+//
+void CCodData::ConstructL()
+    {
+    iName = HBufC::NewL( 0 );
+    iVendor = HBufC::NewL( 0 );
+    iDescription = HBufC::NewL( 0 );
+    iSize = 0;
+    iInstallNotify = HBufC8::NewL( 0 );
+    iNextUrl = HBufC8::NewL( 0 );
+    iNextUrlAtError = HBufC8::NewL( 0 );
+    iInfoUrl = HBufC8::NewL( 0 );
+    iPrice = HBufC::NewL( 0 );
+    iIcon = HBufC8::NewL( 0 );
+    iVersion = HBufC::NewL( 0 );
+    iSuppressConfirm = 0; 
+	iUpdatedDDUri = HBufC8::NewL( 0 );
+	iSourceUri = HBufC8::NewL( 0 );
+	iActiveDownload = 1;    
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetNameL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetNameL( const TDesC& aName )
+    {
+    return SetStringAttrL( iName, aName, COD_NAME_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetVendorL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetVendorL( const TDesC& aVendor )
+    {
+    return SetStringAttrL( iVendor, aVendor, COD_VENDOR_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetDescriptionL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetDescriptionL( const TDesC& aDescription )
+    {
+    return SetStringAttrL
+        ( iDescription, aDescription, COD_DESCRIPTION_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetSize()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetSize( TUint aSize )
+    {
+    if( aSize <= 0 )
+        {
+        return EFalse;
+        }
+    iSize = aSize;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetSuppressConfirm()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetSuppressConfirm( TInt aSuppressConfirm )
+    {
+    if( aSuppressConfirm < ENever || aSuppressConfirm > EAlways )
+        {
+        return EFalse;
+        }
+        
+    iSuppressConfirm  = aSuppressConfirm;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetInstallNotifyL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetInstallNotifyL( const TDesC& aInstallNotify )
+    {
+    return SetStringAttrL
+        ( iInstallNotify, aInstallNotify, COD_INSTALL_NOTIFY_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetNextUrlL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetNextUrlL( const TDesC& aNextUrl )
+    {
+    return SetStringAttrL( iNextUrl, aNextUrl, COD_NEXT_URL_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetNextUrlAtErrorL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetNextUrlAtErrorL( const TDesC& aNextUrlAtError )
+    {
+    return SetStringAttrL
+        ( iNextUrlAtError, aNextUrlAtError, COD_NEXT_URL_AT_ERROR_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetInfoUrlL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetInfoUrlL( const TDesC& aInfoUrl )
+    {
+    return SetStringAttrL( iInfoUrl, aInfoUrl, COD_INFO_URL_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetPriceL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetPriceL( const TDesC& aPrice )
+    {
+    return SetStringAttrL( iPrice, aPrice, COD_PRICE_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetIconL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetIconL( const TDesC& aIcon )
+    {
+    return SetStringAttrL( iIcon, aIcon, COD_ICON_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetVersionL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetVersionL( const TDesC& aVersion )
+    {
+    return SetStringAttrL( iVersion, aVersion, COD_VERSION_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetSourceUriL()
+// ---------------------------------------------------------
+//
+void CCodData::SetSourceUriL( const TDesC8& aSourceUri )
+    {
+    HBufC8* buf = aSourceUri.AllocL();
+    delete iSourceUri;
+    iSourceUri = buf;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetUpdatedDDURI()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetUpdatedDDURI( const TDesC& aUrl)
+    {
+    return SetStringAttrL( iUpdatedDDUri, aUrl, COD_URL_MAX_LEN );
+    }    
+    
+// ---------------------------------------------------------
+// CCodData::SetActiveDownload()
+// ---------------------------------------------------------
+//
+void CCodData::SetActiveDownload( const TInt aMediaObjectId )
+    {
+    iActiveDownload = aMediaObjectId;
+    }    
+
+// ---------------------------------------------------------
+// CCodData::SetOrderIsPost()
+// ---------------------------------------------------------
+//
+void CCodData::SetOrderIsPost( TBool aIsPostOrder )
+    {
+    iIsPostOrder = aIsPostOrder;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetStringAttrL
+( HBufC*& aBuf, const TDesC& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC* buf = aString.AllocL();
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CCodData::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CCodData::SetStringAttrL
+( HBufC8*& aBuf, const TDesC& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC8* buf = CodUtil::ConvertL( aString );
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+// ---------------------------------------------------------
+// CCodData::AppendStorageInfoL()
+// ---------------------------------------------------------
+//
+void CCodData::AppendStorageInfoL(TPtr8& aBuf)const
+	{
+	TInt mediaCount = iMediaObjects.Count();
+	AppendBufL( aBuf,iName );
+	AppendBufL( aBuf,iVendor );
+	AppendBufL( aBuf,iNextUrl );
+	APPEND_BUF_INT( aBuf,iSize );
+	AppendBufL( aBuf,iPrice );
+	AppendBufL( aBuf,iSourceUri );
+	AppendBufL(aBuf,iInstallNotify);
+	AppendBufL( aBuf,iUpdatedDDUri );	
+	APPEND_BUF_INT( aBuf, mediaCount );	
+	}
+
+// ---------------------------------------------------------
+// CCodData::LoadStorageInfoL()
+// ---------------------------------------------------------
+//
+void CCodData::LoadStorageInfoL(RFile& aInFile)
+	{
+	TInt mediaCount(0);
+    ReadHBufCL( aInFile,iName );
+    ReadHBufCL( aInFile,iVendor );
+    ReadHBufCL( aInFile,iNextUrl );
+    READ_INT_L( aInFile,iSize );
+    ReadHBufCL( aInFile,iPrice );
+	ReadHBufCL( aInFile,iSourceUri );
+	ReadHBufCL(aInFile,iInstallNotify);
+	ReadHBufCL( aInFile,iUpdatedDDUri );
+	READ_INT_L( aInFile, mediaCount );
+	
+	for( TInt i = 0; i < mediaCount; ++i )
+	    {
+        CMediaObjectData *mediaObject = CMediaObjectData::NewL();
+    	AppendMediaObjectL( mediaObject );
+	    }
+	}
+	
+// ---------------------------------------------------------
+// CCodData::AppendMediaObjectL()
+// ---------------------------------------------------------
+//
+
+TInt CCodData::AppendMediaObjectL( CMediaObjectData *aMO )
+    {
+    //Check if the same media object has already been added to the array.
+    //Return index if index is present
+    TInt i;
+
+    for( i = 0; i < iMediaObjects.Count(); ++i )
+        {
+        if( iMediaObjects[i] == aMO )
+            {
+            return i;
+            }
+        }
+
+    iMediaObjects.AppendL( aMO );
+    iSize += aMO->Size();
+    // return item index
+    return iMediaObjects.Count();    
+    }
+    
+// ---------------------------------------------------------
+// CCodData::operator[]
+// ---------------------------------------------------------
+//
+
+EXPORT_C CMediaObjectData *CCodData::operator[]( TInt aIndex )
+    {
+    //Check if the media object exits at specified index. Return the same if it is.
+    if( aIndex > 0 && aIndex <= iMediaObjects.Count() )
+        {
+        return iMediaObjects[aIndex-1];
+        }
+    return NULL;    
+    }
+
+// ---------------------------------------------------------
+// CCodData::operator[]
+// ---------------------------------------------------------
+//
+
+EXPORT_C CMediaObjectData *CCodData::operator[]( TInt aIndex ) const
+    {
+    //Check if the media object exits at specified index. Return the same if it is.
+    if( aIndex > 0 && aIndex <= iMediaObjects.Count() )
+        {
+        return iMediaObjects[aIndex-1];
+        }
+    return NULL;    
+    }
+    
+// ---------------------------------------------------------
+// CCodData::ActiveDownload
+// ---------------------------------------------------------
+//        
+EXPORT_C TInt CCodData::ActiveDownload() const
+	{
+	return iActiveDownload;    
+	}