codhandler/codeng/src/DownloadDataClient.cpp
changeset 0 dd21522fd290
child 10 a359256acfc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/codhandler/codeng/src/DownloadDataClient.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,786 @@
+/*
+* 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 CDownloadDataClient.   
+*      
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <s32mem.h>
+#include "DownloadDataClient.h"
+#include "CodData.h"
+#include "CodUtil.h"
+
+// ================= CONSTANTS =======================
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+    
+// ---------------------------------------------------------
+// CMediaDataClient::NewL()
+// ---------------------------------------------------------
+//
+CMediaDataClient* CMediaDataClient::NewL()
+    {
+    CMediaDataClient* data = new (ELeave) CMediaDataClient();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    CleanupStack::Pop(); //data
+    return data;
+    }
+    
+// ---------------------------------------------------------
+// CMediaDataClient::NewLC()
+// ---------------------------------------------------------
+//
+CMediaDataClient* CMediaDataClient::NewLC()
+    {
+    CMediaDataClient* data = new (ELeave) CMediaDataClient();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    return data;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::~CMediaDataClient()
+// ---------------------------------------------------------
+//    
+CMediaDataClient::~CMediaDataClient()
+    {
+    delete iName;
+    delete iUrl;
+    delete iIcon;
+    delete iSourceUri;
+    delete iRedirUrl;
+    delete iDestFilename;
+    delete iTempFilename;
+    }
+    
+// ---------------------------------------------------------
+// CMediaDataClient::ConstructL()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::ConstructL()
+    {
+    iName = HBufC::NewL( 0 );
+    iUrl = HBufC8::NewL( 0 );
+    iTypes = new (ELeave) CDesC8ArrayFlat( KTypeGranularity );
+    iIcon = HBufC8::NewL( 0 );
+    iSourceUri = HBufC8::NewL( 0 );
+    iRedirUrl = HBufC8::NewL( 0 );
+    iDestFilename = HBufC::NewL( 0 );
+    iTempFilename = HBufC::NewL( 0 );
+    }
+    
+// ---------------------------------------------------------
+// CMediaDataClient::Bytes()
+// ---------------------------------------------------------
+//
+TInt CMediaDataClient::Bytes() const
+    {
+    TInt bytes = 0;
+    
+    bytes += iName->Size();
+    bytes += iUrl->Size();
+    bytes += sizeof(iSize);
+    bytes += iIcon->Size();
+    bytes += iSourceUri->Size();
+    bytes += sizeof(iProgressiveDl);
+    bytes += sizeof(iState);
+    
+    bytes += iRedirUrl->Size();
+    bytes += sizeof(iMethod);
+    bytes += sizeof(iRedirected);
+    bytes += iDestFilename->Size();
+    bytes += sizeof(iDownloadedSize);
+    bytes += sizeof(iDesRemovable);
+    bytes += sizeof(iLastErrorId);
+    bytes += sizeof(iGlobalErrorId);
+    bytes += sizeof(iPausable);
+    bytes += iTempFilename->Size();
+    
+    // iTypes array elements
+    for (TInt index = 0; index < iTypes->MdcaCount(); ++index)
+        bytes += iTypes->MdcaPoint(index).Size();
+    
+    return bytes;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetNameL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetNameL( const TDesC& aName )
+    {
+    return SetStringAttrL( iName, aName, COD_NAME_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetUrlL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetUrlL( const TDesC8& aUrl )
+    {
+    return SetStringAttrL( iUrl, aUrl, COD_URL_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetSize()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetSize( TUint aSize )
+    {
+    if( aSize <= 0 )
+        {
+        return EFalse;
+        }
+    iSize = aSize;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetTypeL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetTypeL( const TDesC8& aType )
+    {
+    // Backwards-compatible deprecated method.
+    iTypes->Reset();    // Replace all, support only one type.
+    return AddTypeL( aType );
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::AddTypeL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::AddTypeL( const TDesC8& aType )
+    {
+    if ( aType.Length() > COD_TYPE_MAX_LEN || !aType.Length() )
+        {
+        return EFalse;
+        }
+    HBufC8* type8 = aType.AllocLC();
+    iTypes->AppendL( *type8 );
+    CleanupStack::PopAndDestroy(); //type8
+    return ETrue;
+    }
+    
+// ---------------------------------------------------------
+// CMediaDataClient::ResetTypes()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::ResetTypes()
+	{
+	iTypes->Reset();
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetIconL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetIconL( const TDesC8& aIcon )
+    {
+    return SetStringAttrL( iIcon, aIcon, COD_ICON_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetSourceUriL()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetSourceUriL( const TDesC8& aSourceUri )
+    {
+    HBufC8* buf = aSourceUri.AllocL();
+    delete iSourceUri;
+    iSourceUri = buf;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetProgressiveDownload()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetProgressiveDownload( TBool aProgressiveDl )
+    {
+    iProgressiveDl = aProgressiveDl;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetState()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetState( TMediaObjectState aState )
+    {
+    iState = aState;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetResult()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetResult( TInt aResult )
+    {
+    iResult = aResult;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetRedirUrlL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetRedirUrlL( const TDesC8& aRedirUrl )
+	{
+	return SetStringAttrL( iRedirUrl, aRedirUrl, COD_URL_MAX_LEN );
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetMethod()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetMethod( TInt aMethod )
+	{
+	iMethod = aMethod;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetRedirected()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetRedirected( TBool aRedirected )
+	{
+	iRedirected = aRedirected;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetDestFilenameL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetDestFilenameL( const TDesC& aDestFilename )
+	{
+	return SetStringAttrL( iDestFilename, aDestFilename, KMaxFileName );
+	}
+	
+// ---------------------------------------------------------
+// CMediaDataClient::SetTempFilenameL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetTempFilenameL( const TDesC& aTempFilename )
+	{
+	return SetStringAttrL( iTempFilename, aTempFilename, KMaxFileName );
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetDownloadedSize()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetDownloadedSize( TInt aDownloadedSize )
+	{
+	if( aDownloadedSize <= 0 )
+        {
+        return EFalse;
+        }
+    iDownloadedSize = aDownloadedSize;
+    return ETrue;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetDesRemovable()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetDesRemovable( TBool aDesRemovable )
+	{
+	iDesRemovable = aDesRemovable;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetLastErrorId()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetLastErrorId( TInt aLastErrorId )
+	{
+	iLastErrorId = aLastErrorId;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetGlobalErrorId()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetGlobalErrorId( TInt aGlobalErrorId )
+	{
+	iGlobalErrorId = aGlobalErrorId;
+	}
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetPausable()
+// ---------------------------------------------------------
+//
+void CMediaDataClient::SetPausable( TBool aPausable )
+	{
+	iPausable = aPausable;
+	}
+	
+// ---------------------------------------------------------
+// CMediaDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetStringAttrL
+( HBufC*& aBuf, const TDesC& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC* buf = aString.AllocL();
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::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;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CMediaDataClient::SetStringAttrL
+( HBufC8*& aBuf, const TDesC8& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC8* buf = aString.AllocL();
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::MarshalDataL()
+// ---------------------------------------------------------
+//
+HBufC8* CMediaDataClient::MarshalDataL() const
+    {
+    TInt bufLen = Bytes();      // Size of class including iMediaArray elements.
+                                //  Note that this includes actual bytes occupied by
+                                //  contents of descriptors and pointers.
+                                
+    bufLen += sizeof(TInt);  	// We include the count of elements in iTypes array
+                                //  while externalizing.
+                                
+    
+    // Dynamic data buffer
+    CBufFlat* buf = CBufFlat::NewL(bufLen);
+    CleanupStack::PushL(buf);
+    // Stream over the buffer
+    RBufWriteStream stream(*buf);
+    CleanupClosePushL(stream);
+    
+    ExternalizeL(stream);
+    CleanupStack::PopAndDestroy(); //stream
+    
+    // Create a heap descriptor from the buffer
+    HBufC8* des = HBufC8::NewL(buf->Size());
+    TPtr8 ptr(des->Des());
+    buf->Read(0, ptr, buf->Size());
+    CleanupStack::PopAndDestroy(); //buf
+    
+    return des;
+    }
+
+// ---------------------------------------------------------
+// CMediaDataClient::ExternalizeL()
+// ---------------------------------------------------------
+//	
+void CMediaDataClient::ExternalizeL(RWriteStream& aStream) const
+    {
+    // iName
+    if (iName)
+        aStream << *iName;
+    else
+        aStream << KNullDesC;
+    
+    // iUrl
+    if (iUrl)
+        aStream << *iUrl;
+    else
+        aStream << KNullDesC;
+    
+    // iSize
+    aStream.WriteUint32L(iSize);
+    
+    // Number of elements in iTypes array
+    if (iTypes)
+        {
+        TInt count = iTypes->MdcaCount();
+        aStream.WriteInt32L(count);
+        // Elements of iTypes array
+        for (TInt index = 0; index < count; ++index)
+            aStream << iTypes->MdcaPoint(index);
+        }
+    else
+        {
+        aStream.WriteInt32L(0);
+        }
+    
+    // iIcon
+    if (iIcon)
+        aStream << *iIcon;
+    else
+        aStream << KNullDesC;
+    
+    // iSourceUri
+    if (iSourceUri)
+        aStream << *iSourceUri;
+    else
+        aStream << KNullDesC;
+    
+    // iProgressiveDl
+    aStream.WriteInt32L(iProgressiveDl);
+    
+    // iState
+    aStream.WriteInt32L(iState);
+    
+    // iResult
+    aStream.WriteInt32L(iResult);
+    
+    // iRedirUrl
+    if (iRedirUrl)
+        aStream << *iRedirUrl;
+    else
+        aStream << KNullDesC;
+    
+    // iMethod
+    aStream.WriteInt32L(iMethod);
+    
+    // iRedirected
+    aStream.WriteInt32L(iRedirected);
+    
+    // iDestFilename
+    if (iIcon)
+        aStream << *iDestFilename;
+    else
+        aStream << KNullDesC;
+    
+    // iDownloadedSize
+    aStream.WriteInt32L(iDownloadedSize);
+    
+    // iDesRemovable
+    aStream.WriteInt32L(iDesRemovable);
+    
+    // iLastErrorId
+    aStream.WriteInt32L(iLastErrorId);
+    
+    // iGlobalErrorId
+    aStream.WriteInt32L(iGlobalErrorId);
+    
+    // iPausable
+    aStream.WriteInt32L(iPausable);
+    }
+
+void CMediaDataClient::InternalizeL(RReadStream& /*aStream*/)
+    {
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::NewL()
+// ---------------------------------------------------------
+//
+CDownloadDataClient* CDownloadDataClient::NewL()
+    {
+    CDownloadDataClient* data = new (ELeave) CDownloadDataClient();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    CleanupStack::Pop(); //data
+    return data;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::NewLC()
+// ---------------------------------------------------------
+//
+CDownloadDataClient* CDownloadDataClient::NewLC()
+    {
+    CDownloadDataClient* data = new (ELeave) CDownloadDataClient();
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    return data;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::~CDownloadDataClient()
+// ---------------------------------------------------------
+//
+CDownloadDataClient::~CDownloadDataClient()
+    {
+    delete iName;
+    delete iIcon;
+	delete iUpdatedDDUri;
+    
+    iMediaArray.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::ConstructL()
+// ---------------------------------------------------------
+//
+void CDownloadDataClient::ConstructL()
+    {
+    iName = HBufC::NewL( 0 );
+    iSize = 0;
+    iIcon = HBufC8::NewL( 0 );
+	iUpdatedDDUri = HBufC8::NewL( 0 );
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::Bytes()
+// ---------------------------------------------------------
+//
+TInt CDownloadDataClient::Bytes() const
+    {
+    TInt bytes = 0;
+    
+    bytes += iName->Size();
+    bytes += sizeof(iSize);
+    bytes += iIcon->Size();
+    bytes += iUpdatedDDUri->Size();
+    
+    // iMediaArray elements 
+    for (TInt index = 0; index < iMediaArray.Count(); ++index)
+        bytes += iMediaArray[index]->Bytes();
+    
+    return bytes;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetNameL()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetNameL( const TDesC& aName )
+    {
+    return SetStringAttrL( iName, aName, COD_NAME_MAX_LEN );
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetSize()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetSize( TUint aSize )
+    {
+    if( aSize <= 0 )
+        {
+        return EFalse;
+        }
+    iSize = aSize;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetIconL()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetIconL( const TDesC8& aIcon )
+    {
+    return SetStringAttrL( iIcon, aIcon, COD_ICON_MAX_LEN );
+    }
+    
+// ---------------------------------------------------------
+// CDownloadDataClient::SetUpdatedDDURI()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetUpdatedDDURI( const TDesC8& aUrl)
+    {
+    return SetStringAttrL( iUpdatedDDUri, aUrl, COD_URL_MAX_LEN );
+    }    
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetStringAttrL
+( HBufC*& aBuf, const TDesC& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC* buf = aString.AllocL();
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::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;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::SetStringAttrL()
+// ---------------------------------------------------------
+//
+TBool CDownloadDataClient::SetStringAttrL
+( HBufC8*& aBuf, const TDesC8& aString, TInt aMaxLength )
+    {
+    if ( aString.Length() > aMaxLength )
+        {
+        return EFalse;
+        }
+    HBufC8* buf = aString.AllocL();
+    delete aBuf;
+    aBuf = buf;
+    return ETrue;
+    }
+	
+// ---------------------------------------------------------
+// CDownloadDataClient::AppendMediaData()
+// ---------------------------------------------------------
+//
+TInt CDownloadDataClient::AppendMediaData( CMediaDataClient *aMO )
+    {
+    iMediaArray.AppendL( aMO );
+    // return item index
+    return iMediaArray.Count();    
+    }
+    
+// ---------------------------------------------------------
+// CDownloadDataClient::operator[]
+// ---------------------------------------------------------
+//
+
+CMediaDataBase* CDownloadDataClient::operator[]( TInt aIndex )
+    {
+    //Check if the media object exits at specified index. Return the same if it is.
+    if( aIndex >= 0 && aIndex < iMediaArray.Count() )
+        {
+        return iMediaArray[aIndex];
+        }
+    return NULL;    
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::operator[]
+// ---------------------------------------------------------
+//
+
+CMediaDataBase* CDownloadDataClient::operator[]( TInt aIndex ) const
+    {
+    //Check if the media object exits at specified index. Return the same if it is.
+    if( aIndex >= 0 && aIndex < iMediaArray.Count() )
+        {
+        return iMediaArray[aIndex];
+        }
+    return NULL;    
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::MarshalDataL()
+// ---------------------------------------------------------
+//
+HBufC8* CDownloadDataClient::MarshalDataL() const
+    {
+    TInt bufLen = Bytes();      // Size of class including iMediaArray elements.
+                                //  Note that this includes actual bytes occupied by
+                                //  contents of descriptors and pointers.
+                                
+    bufLen += sizeof(TInt);  // We include the count of elements in iMediaArray
+                                //  while externalizing.
+                                
+    bufLen += sizeof(TInt) * iMediaArray.Count();
+                                // iMediaArray has an array iTypes. We are including
+                                //  count of elements in iTypes array while externalizing
+                                //  each element of iMediaArray.
+    
+    // Dynamic data buffer
+    CBufFlat* buf = CBufFlat::NewL(bufLen);
+    CleanupStack::PushL(buf);
+    // Stream over the buffer
+    RBufWriteStream stream(*buf);
+    CleanupClosePushL(stream);
+    
+    ExternalizeL(stream);
+    CleanupStack::PopAndDestroy(); //stream
+    
+    // Create a heap descriptor from the buffer
+    HBufC8* des = HBufC8::NewL(buf->Size());
+    TPtr8 ptr(des->Des());
+    buf->Read(0, ptr, buf->Size());
+    CleanupStack::PopAndDestroy(); //buf
+    
+    return des;
+    }
+
+// ---------------------------------------------------------
+// CDownloadDataClient::ExternalizeL()
+// ---------------------------------------------------------
+//
+void CDownloadDataClient::ExternalizeL(RWriteStream& aStream) const
+    {
+    // iName
+    if (iName)
+        aStream << *iName;
+    else
+        aStream << KNullDesC;
+    
+    // iSize
+    aStream.WriteUint32L(iSize);
+    
+    // iIcon
+    if (iIcon)
+        aStream << *iIcon;
+    else
+        aStream << KNullDesC;
+    
+    // iUpdatedDDUri
+    if (iUpdatedDDUri)
+        aStream << *iUpdatedDDUri;
+    else
+        aStream << KNullDesC;
+    
+    // iMediaArray elements 
+    TInt count = iMediaArray.Count();
+    aStream.WriteInt32L(count);
+    for (TInt index = 0; index < count; ++index)
+        iMediaArray[index]->ExternalizeL(aStream);
+   
+    }