--- /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 <badesca.h>
+#include "FileExt.h"
+#include "CodStatus.h"
+#include "HeaderField.h"
+#include <ApmStd.h>
+
+
+// ================= 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<CHeaderField>* 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<CHeaderField>* 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<CHeaderField>*& 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<CHeaderField>*& 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<RFile>( 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