diff -r 000000000000 -r dd21522fd290 codhandler/codeng/src/DownloadDataClient.cpp --- /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 +#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); + + }