diff -r 000000000000 -r dd21522fd290 codhandler/codeng/src/MediaObject.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codeng/src/MediaObject.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,753 @@ +/* +* 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 CMediaObjectData. +* +* +*/ + + +// INCLUDE FILES + +#include "MediaObject.h" +#include "CodDefs.h" +#include "CodUtil.h" +#include +#include "FileExt.h" +#include "CodStatus.h" +#include "HeaderField.h" +#include + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CMediaObjectData::NewL() +// --------------------------------------------------------- +// +EXPORT_C CMediaObjectData* CMediaObjectData::NewL() + { + CMediaObjectData* data = new (ELeave) CMediaObjectData(); + CleanupStack::PushL( data ); + data->ConstructL(); + CleanupStack::Pop( data ); + return data; + } + +// --------------------------------------------------------- +// CMediaObjectData::~CMediaObjectData() +// --------------------------------------------------------- +// +EXPORT_C CMediaObjectData::~CMediaObjectData() + { + delete iIcon; + delete iPrice; + delete iInfoUrl; + delete iInstallNotify; + delete iTypes; + delete iUrl; + delete iDescription; + delete iName; + delete iSourceUri; + + delete iFullName; + } + +// --------------------------------------------------------- +// CMediaObjectData::IsValid() +// --------------------------------------------------------- +// +EXPORT_C TBool CMediaObjectData::IsValid() const + { + return ( iUrl->Length() && iSize > 0 && iTypes->MdcaCount() ); + } + +// --------------------------------------------------------- +// CMediaObjectData::IsPostOrder() +// --------------------------------------------------------- +// +EXPORT_C TBool CMediaObjectData::IsPostOrder() const + { + return iIsPostOrder; + } + +// --------------------------------------------------------- +// CMediaObjectData::Reset() +// --------------------------------------------------------- +// +EXPORT_C void CMediaObjectData::Reset() + { + iName->Des().Zero(); + iDescription->Des().Zero(); + iUrl->Des().Zero(); + iSize = 0; + iTypes->Reset(); + iInstallNotify->Des().Zero(); + iInfoUrl->Des().Zero(); + iPrice->Des().Zero(); + iIcon->Des().Zero(); + iSourceUri->Des().Zero(); + iProgressiveDl = EFalse; + iIsPostOrder = EFalse; + + iDownloadedSize = 0; + iState = EQueued; + iStatusCode = KHttp902UserCancelled; + iResult = KErrGeneral; + iFileName.SetLength( 0 ); + iPausable = EFalse; + iUniqueFilenameSet = EFalse; + } + +// --------------------------------------------------------- +// CMediaObjectData::Name() +// --------------------------------------------------------- +// +EXPORT_C TPtrC CMediaObjectData::Name() const + { + return *iName; + } + +// --------------------------------------------------------- +// CMediaObjectData::Description() +// --------------------------------------------------------- +// +EXPORT_C TPtrC CMediaObjectData::Description() const + { + return *iDescription; + } + +// --------------------------------------------------------- +// CMediaObjectData::Url() +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::Url() const + { + return *iUrl; + } + +// --------------------------------------------------------- +// CMediaObjectData::Size() +// --------------------------------------------------------- +// +EXPORT_C TInt CMediaObjectData::Size() const + { + return iSize; + } + +// --------------------------------------------------------- +// CMediaObjectData::DownloadedSize() +// --------------------------------------------------------- +// +EXPORT_C TInt CMediaObjectData::DownloadedSize() const + { + return iDownloadedSize; + } + +// --------------------------------------------------------- +// CMediaObjectData::State() +// --------------------------------------------------------- +// +EXPORT_C TMediaObjectState CMediaObjectData::State() const + { + return iState; + } + +// --------------------------------------------------------- +// CMediaObjectData::Types() +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::Type() const + { + if ( iTypes->MdcaCount() ) + { + return iTypes->MdcaPoint( 0 ); + } + return TPtrC8( KNullDesC8 ); + } + +// --------------------------------------------------------- +// CMediaObjectData::Types() +// --------------------------------------------------------- +// +EXPORT_C const MDesC8Array& CMediaObjectData::Types() const + { + return *iTypes; + } + + +// --------------------------------------------------------- +// CMediaObjectData::InstallNotify() +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::InstallNotify() const + { + return *iInstallNotify; + } + +// --------------------------------------------------------- +// CMediaObjectData::InfoUrl +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::InfoUrl() const + { + return *iInfoUrl; + } + +// --------------------------------------------------------- +// CMediaObjectData::Price() +// --------------------------------------------------------- +// +EXPORT_C TPtrC CMediaObjectData::Price() const + { + return *iPrice; + } + +// --------------------------------------------------------- +// CMediaObjectData::Icon() +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::Icon() const + { + return *iIcon; + } + +// --------------------------------------------------------- +// CMediaObjectData::SourceUri() +// --------------------------------------------------------- +// +EXPORT_C TPtrC8 CMediaObjectData::SourceUri() const + { + return *iSourceUri; + } + +// --------------------------------------------------------- +// CMediaObjectData::ProgressiveDownload() +// --------------------------------------------------------- +// +EXPORT_C TBool CMediaObjectData::ProgressiveDownload() const + { + return iProgressiveDl; + } + +// --------------------------------------------------------- +// CMediaObjectData::HasType() +// --------------------------------------------------------- +// +TInt CMediaObjectData::HasType( const TDesC8& aType ) const + { + TInt i; + return 0 == iTypes->Find( aType, i, ECmpNormal ); + } + +// --------------------------------------------------------- +// CMediaObjectData::TypesCount() +// --------------------------------------------------------- +// +TInt CMediaObjectData::TypesCount() const + { + return iTypes->MdcaCount(); + } + +// --------------------------------------------------------- +// CMediaObjectData::FullName() +// --------------------------------------------------------- +// +TPtrC CMediaObjectData::FullName() const + { + return *iFullName; + } + +// --------------------------------------------------------- +// CMediaObjectData::Pausable() +// --------------------------------------------------------- +// +TBool CMediaObjectData::Pausable() const + { + return iPausable; + } + +// --------------------------------------------------------- +// CMediaObjectData::IsUniqueFilenameSet() +// --------------------------------------------------------- +// +TBool CMediaObjectData::IsUniqueFilenameSet() const + { + return iUniqueFilenameSet; + } + +// --------------------------------------------------------- +// CMediaObjectData::CMediaObjectData() +// --------------------------------------------------------- +// +CMediaObjectData::CMediaObjectData() + { + } + +// --------------------------------------------------------- +// CMediaObjectData::ConstructL() +// --------------------------------------------------------- +// +void CMediaObjectData::ConstructL() + { + iName = HBufC::NewL( 0 ); + iDescription = HBufC::NewL( 0 ); + iUrl = HBufC8::NewL( 0 ); + iSize = 0; + iTypes = new (ELeave) CDesC8ArrayFlat( KTypeGranularity ); + iInstallNotify = HBufC8::NewL( 0 ); + iInfoUrl = HBufC8::NewL( 0 ); + iPrice = HBufC::NewL( 0 ); + iIcon = HBufC8::NewL( 0 ); + iSourceUri = HBufC8::NewL( 0 ); + + iDownloadedSize = 0; + iState = EQueued; + iStatusCode = KHttp902UserCancelled; + iResult = KErrGeneral; + iFileName.SetLength( 0 ); + iPausable = EFalse; + iUniqueFilenameSet = EFalse; + iTempPath = KNullDesC; + iRootPath = KNullDesC; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetNameL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetNameL( const TDesC& aName ) + { + return SetStringAttrL( iName, aName, COD_NAME_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetDescriptionL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetDescriptionL( const TDesC& aDescription ) + { + return SetStringAttrL + ( iDescription, aDescription, COD_DESCRIPTION_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetUrlL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetUrlL( const TDesC& aUrl ) + { + return SetStringAttrL( iUrl, aUrl, COD_URL_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetSize() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetSize( TInt aSize ) + { + if( aSize <= 0 ) + { + return EFalse; + } + iSize = aSize; + return ETrue; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetDownloadedSize() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetDownloadedSize( TInt aSize ) + { + if( aSize < 0 ) + { + return EFalse; + } + iDownloadedSize = aSize; + return ETrue; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetState() +// --------------------------------------------------------- +// +void CMediaObjectData::SetState( TMediaObjectState aState ) + { + iState = aState; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetTypeL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetTypeL( const TDesC& aType ) + { + // Backwards-compatible deprecated method. + iTypes->Reset(); // Replace all, support only one type. + return AddTypeL( aType ); + } + +// --------------------------------------------------------- +// CMediaObjectData::AddTypeL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::AddTypeL( const TDesC& aType ) + { + if ( aType.Length() > COD_TYPE_MAX_LEN || !aType.Length() ) + { + return EFalse; + } + HBufC8* type8 = CodUtil::ConvertLC( aType ); + iTypes->AppendL( *type8 ); + CleanupStack::PopAndDestroy( type8 ); + return ETrue; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetInstallNotifyL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetInstallNotifyL( const TDesC& aInstallNotify ) + { + return SetStringAttrL + ( iInstallNotify, aInstallNotify, COD_INSTALL_NOTIFY_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetInfoUrlL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetInfoUrlL( const TDesC& aInfoUrl ) + { + return SetStringAttrL( iInfoUrl, aInfoUrl, COD_INFO_URL_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetPriceL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetPriceL( const TDesC& aPrice ) + { + return SetStringAttrL( iPrice, aPrice, COD_PRICE_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetIconL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetIconL( const TDesC& aIcon ) + { + return SetStringAttrL( iIcon, aIcon, COD_ICON_MAX_LEN ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetSourceUriL() +// --------------------------------------------------------- +// +void CMediaObjectData::SetSourceUriL( const TDesC8& aSourceUri ) + { + HBufC8* buf = aSourceUri.AllocL(); + delete iSourceUri; + iSourceUri = buf; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetProgressiveDownload() +// --------------------------------------------------------- +// +void CMediaObjectData::SetProgressiveDownload( TBool aProgressiveDl ) + { + iProgressiveDl = aProgressiveDl; + } + +// --------------------------------------------------------- +// CMediaObjectData::UniqueFilenameSet() +// --------------------------------------------------------- +// +void CMediaObjectData::UniqueFilenameSet( TBool aUniqueFilenameSet ) + { + iUniqueFilenameSet = aUniqueFilenameSet; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetOrderIsPost() +// --------------------------------------------------------- +// +void CMediaObjectData::SetOrderIsPost( TBool aIsPostOrder ) + { + iIsPostOrder = aIsPostOrder; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetStringAttrL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetStringAttrL +( HBufC*& aBuf, const TDesC& aString, TInt aMaxLength ) + { + HBufC* buf; + if ( aString.Length() > aMaxLength ) + { + buf = aString.Mid(0,aMaxLength).AllocL(); + } + else + { + buf = aString.AllocL(); + } + + delete aBuf; + aBuf = buf; + return ETrue; + } + +// --------------------------------------------------------- +// CMediaObjectData::SetStringAttrL() +// --------------------------------------------------------- +// +TBool CMediaObjectData::SetStringAttrL +( HBufC8*& aBuf, const TDesC& aString, TInt /*aMaxLength*/ ) + { + HBufC8* buf = CodUtil::ConvertL( aString ); + delete aBuf; + aBuf = buf; + return ETrue; + } + +// --------------------------------------------------------- +// CMediaObjectData::StoreMediaInfoL() +// --------------------------------------------------------- +// +void CMediaObjectData::StoreMediaInfoL( TPtr8& aBuf, const CArrayPtrFlat* aHeaders ) const + { + AppendBufL( aBuf, iName ); + AppendBufL( aBuf, iUrl ); + APPEND_BUF_INT( aBuf, iSize ); + AppendBufL( aBuf, iPrice ); + APPEND_BUF_INT( aBuf, iProgressiveDl ); + AppendBufL( aBuf, iSourceUri ); + AppendBufL( aBuf, iInstallNotify ); + AppendContentTypesL( aBuf, iTypes ); + + APPEND_BUF_INT( aBuf, iState ); + APPEND_BUF_INT( aBuf, iStatusCode ); + APPEND_BUF_INT( aBuf, iResult ); + APPEND_BUF_INT( aBuf, iPausable ); + APPEND_BUF_INT( aBuf, iUniqueFilenameSet ); + + AppendBufL( aBuf, iFullName ); + + HBufC* buf1 = iTempPath.AllocLC(); + AppendBufL(aBuf,buf1); + + HBufC* buf2 = iRootPath.AllocLC(); + AppendBufL(aBuf,buf2); + + CleanupStack::PopAndDestroy(2,buf1); + + AppendHeadersL(aBuf, aHeaders ); + } + +// --------------------------------------------------------- +// CMediaObjectData::AppendHeadersL() +// --------------------------------------------------------- +// +void CMediaObjectData::AppendHeadersL( TPtr8& aBuf, + const CArrayPtrFlat* aHeaders ) const + { + + if(!aHeaders) + { + TInt hdrCnt = 0; + APPEND_BUF_INT( aBuf, hdrCnt ); + return; + } + + TInt headers = aHeaders->Count(); + APPEND_BUF_INT( aBuf, headers ); + + HBufC8* fieldName = NULL; + HBufC8* fieldRawData = NULL; + + for( TInt i = 0; i < headers; ++i ) + { + + fieldName = (*aHeaders)[i]->FieldName(); + fieldRawData = (*aHeaders)[i]->FieldRawData(); + AppendBufL( aBuf, fieldName ); + AppendBufL( aBuf, fieldRawData ); + + } + return; + } + +// --------------------------------------------------------- +// CMediaObjectData::LoadHeadersL() +// --------------------------------------------------------- +// +void CMediaObjectData::LoadHeadersL( RFile& aFile, CArrayPtrFlat*& aHeaders ) + { + + if(!aHeaders) + { + return; + } + + TInt headers; + READ_INT_L( aFile, headers ); + + aHeaders->ResetAndDestroy(); + + for( TInt i = 0; i < headers; ++i ) + { + CHeaderField* field = CHeaderField::NewL(); + CleanupStack::PushL( field ); + + field->LoadHeaderInfoL( aFile ); + aHeaders->AppendL( field ); + + CleanupStack::Pop( field ); + } + } + +// --------------------------------------------------------- +// CMediaObjectData::LoadStorageInfoL() +// --------------------------------------------------------- +// +void CMediaObjectData::LoadMediaInfoL( RFile& aInFile, RFs &aFs, CArrayPtrFlat*& aHeaders ) + { + ReadHBufCL( aInFile, iName ); + ReadHBufCL( aInFile, iUrl ); + READ_INT_L( aInFile, iSize ); + ReadHBufCL( aInFile, iPrice ); + READ_INT_L( aInFile, iProgressiveDl ); + ReadHBufCL( aInFile, iSourceUri ); + ReadHBufCL( aInFile, iInstallNotify ); + LoadContentTypesL( aInFile, iTypes ); + + READ_INT_L( aInFile, iState ); + READ_INT_L( aInFile, iStatusCode ); + READ_INT_L( aInFile, iResult ); + READ_INT_L( aInFile, iPausable ); + READ_INT_L( aInFile, iUniqueFilenameSet ); + + ReadHBufCL( aInFile,iFullName ); + + HBufC* buf1 = NULL; + HBufC* buf2 = NULL; + + ReadHBufCL(aInFile,buf1); + if( buf1->Compare( KNullDesC )) + { + iTempPath = *buf1; + } + + ReadHBufCL(aInFile,buf2); + if( buf2->Compare( KNullDesC )) + { + iRootPath = *buf2; + } + delete buf1; + delete buf2; + + LoadHeadersL( aInFile, aHeaders ); + SetDownloadedFileSizeL( aFs ); + } + +// --------------------------------------------------------- +// CMediaObjectData::SetDownloadedFileSize() +// --------------------------------------------------------- +// +void CMediaObjectData::SetDownloadedFileSizeL( RFs &aFs ) + { + if( !iFullName ) + { + return; + } + + RFile mediaFile; + CleanupClosePushL( mediaFile ); + TInt err = mediaFile.Open(aFs, + *iFullName, + EFileShareReadersOnly | + EFileRead ) ; + + //KErrPathNotFound will occur when file is downloaded to MMC + //And MMC is removed when next time you launch Browser. + //Other possible errors, KErrNotFound, KErrBadName + if( err ) + { + CleanupStack::PopAndDestroy(); + return; + } + + err = mediaFile.Size( iDownloadedSize ) ; + User::LeaveIfError ( err ); + CleanupStack::PopAndDestroy(); // mediaFile + } + +// --------------------------------------------------------- +// CMediaObjectData::AppendContentTypes() +// --------------------------------------------------------- +// +void CMediaObjectData::AppendContentTypesL( TPtr8& aBuf, CDesC8ArrayFlat* aTypes ) const + { + + TInt count = aTypes->MdcaCount(); + APPEND_BUF_INT( aBuf,count ); + + for( TInt i =0 ; i < count ; i++ ) + { + HBufC8* buf = HBufC8::NewL( COD_TYPE_MAX_LEN ); + + CleanupStack::PushL( buf ); + + TPtr8 ptr= buf->Des(); + ptr = aTypes->MdcaPoint( i ); + AppendBufL( aBuf, buf ); + + CleanupStack::PopAndDestroy(/*buf*/); + } + } + +// --------------------------------------------------------- +// CMediaObjectData::LoadContentTypes() +// --------------------------------------------------------- +// +void CMediaObjectData::LoadContentTypesL( RFile& aInFile, CDesC8ArrayFlat* aTypes ) + { + TInt numTypes( 0 ); + READ_INT_L( aInFile, numTypes ); + aTypes->Reset(); + for( TInt i = 0 ; i < numTypes ; i++ ) + { + HBufC8* buf = NULL; + ReadHBufCL( aInFile, buf ); + CleanupStack::PushL( buf ); + aTypes->AppendL( *buf ); + CleanupStack::PopAndDestroy(/*buf*/); + } + } + + +// --------------------------------------------------------- +// CMediaObjectData::ReArrangeTypesL() +// --------------------------------------------------------- +// +void CMediaObjectData::ReArrangeTypesL( TInt aIndex ) + { + const TDataType& type( iTypes->MdcaPoint( aIndex ) ); + iTypes->Delete(aIndex); + iTypes->InsertL(0,type.Des8()); + } \ No newline at end of file