diff -r d2c4c66342f3 -r d51193d814ea messagingfw/deprecate/senduiservices/src_old/CMessageDataImpl.cpp --- a/messagingfw/deprecate/senduiservices/src_old/CMessageDataImpl.cpp Tue Aug 31 15:41:11 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,643 +0,0 @@ -/* -* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Encapsulates the message data for sending services. -* -*/ - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include - -#ifdef RD_MULTIPLE_DRIVE -#include -#endif - -#include "CMessageDataImpl.h" -#include "CSendUiAttachment.h" - -// CONSTANTS -const TInt KMDArrayGranularity = 1; -const TInt KMDRichTextStoreGranularity = 512; - -_LIT( KSenduiTempFile, ":\\system\\temp\\sendui\\%x_%x"); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::CMessageDataImpl -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CMessageDataImpl::CMessageDataImpl() - : iDataType(KSenduiMsgDataBase) - { - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::ConstructL() - { - iAttachments = new ( ELeave ) CDesCArrayFlat( KMDArrayGranularity ); - iToAddresses = new ( ELeave ) CMessageAddressArray( KMDArrayGranularity ); - iCcAddresses = new ( ELeave ) CMessageAddressArray( KMDArrayGranularity ); - iBccAddresses = new ( ELeave ) CMessageAddressArray( KMDArrayGranularity ); - - CEikonEnv* eikonEnv = CEikonEnv::Static(); - iBodyText = CRichText::NewL( eikonEnv->SystemParaFormatLayerL(), - eikonEnv->SystemCharFormatLayerL() ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMessageDataImpl* CMessageDataImpl::NewL() - { - CMessageDataImpl* self = CMessageDataImpl::NewLC(); - - CleanupStack::Pop( self ); - - return self; - } - -// --------------------------------------------------------- -// CMessageDataImpl::NewLC -// Two-phased constructor. -// --------------------------------------------------------- -// -CMessageDataImpl* CMessageDataImpl::NewLC() - { - CMessageDataImpl* self = new (ELeave) CMessageDataImpl; - - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - - -// Destructor -CMessageDataImpl::~CMessageDataImpl() - { - TInt i = 0; - - delete iSubject; - delete iAttachments; - delete iBodyText; - delete iOpaqueData; - - if ( iToAddresses ) - { - iToAddresses->ResetAndDestroy(); - delete iToAddresses; - } - - if ( iCcAddresses ) - { - iCcAddresses->ResetAndDestroy(); - delete iCcAddresses; - } - - if ( iBccAddresses ) - { - iBccAddresses->ResetAndDestroy(); - delete iBccAddresses; - } - - for (i = 0; i < iAttachmentHandles.Count(); i++) - { - iAttachmentHandles[i].Close(); - } - iAttachmentHandles.Close(); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::SetSubjectL -// Set message subject. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::SetSubjectL( const TDesC* aSubject ) - { - delete iSubject; - iSubject = NULL; - - if ( aSubject ) - { - iSubject = aSubject->AllocL(); - } - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::Subject -// Returns message subject. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const TPtrC CMessageDataImpl::Subject() const - { - return iSubject ? TPtrC( *iSubject ) : TPtrC(); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AppendAttachmentL -// Appends attachment file path to the array of attachment file paths. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::AppendAttachmentL( const TDesC& aFileName ) - { - iAttachments->AppendL( aFileName ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AttachmentArray -// Returns array of attachment file paths. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const CDesCArray& CMessageDataImpl::AttachmentArray() const - { - return *iAttachments; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::ClearAttachmentArray -// Clears the array of attachment file paths. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::ClearAttachmentArray() - { - TInt i( iAttachmentHandles.Count() ); - iAttachments->Reset(); - - while( i-- ) - { - iAttachmentHandles[i].Close(); - } - iAttachmentHandles.Reset(); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AppendToAddressL -// Encapsulates address and alias to CMessageAddress and adds to array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::AppendToAddressL( - const TDesC& aAddress, - const TDesC& aAlias) - { - CMessageAddress* messageAddress = CMessageAddress::NewLC(); - - messageAddress->SetAddressL( aAddress ); - messageAddress->SetAliasL( aAlias ); - - iToAddresses->AppendL( messageAddress ); - - CleanupStack::Pop( messageAddress ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::ToAddressArray -// Returns array of addresses and aliases. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const CMessageAddressArray& CMessageDataImpl::ToAddressArray() const - { - return *iToAddresses; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AppendCcAddressL -// Encapsulates CC address and alias to CMessageAddress and adds to array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::AppendCcAddressL( - const TDesC& aCcAddress, - const TDesC& aCcAlias) - { - CMessageAddress* messageAddress = CMessageAddress::NewLC(); - - messageAddress->SetAddressL( aCcAddress ); - messageAddress->SetAliasL( aCcAlias ); - - iCcAddresses->AppendL( messageAddress ); - - CleanupStack::Pop( messageAddress ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::CcAddressArray -// Returns array of CC addresses and aliases. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const CMessageAddressArray& CMessageDataImpl::CcAddressArray() const - { - return *iCcAddresses; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AppendBccAddressL -// Encapsulates Bcc address and alias to CMessageAddress and adds to array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::AppendBccAddressL( - const TDesC& aBccAddress, - const TDesC& aBccAlias) - { - CMessageAddress* messageAddress = CMessageAddress::NewLC(); - - messageAddress->SetAddressL( aBccAddress ); - messageAddress->SetAliasL( aBccAlias ); - - iBccAddresses->AppendL( messageAddress ); - - CleanupStack::Pop( messageAddress ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::BccAddressArray -// Returns array of Bcc addresses and aliases. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const CMessageAddressArray& CMessageDataImpl::BccAddressArray() const - { - return *iBccAddresses; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::SetBodyTextL -// Set message body text. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::SetBodyTextL( const CRichText* aBodyText ) - { - iBodyText->Reset(); - - if ( aBodyText ) - { - // Save and restore the rich text object - CStreamStore* store = CBufStore::NewLC( KMDRichTextStoreGranularity ); - - TStreamId id = aBodyText->StoreL( *store ); - iBodyText->RestoreL( *store, id ); - - CleanupStack::PopAndDestroy( store ); - } - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::BodyText -// Returns message body text. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const CRichText* CMessageDataImpl::BodyText() const - { - return iBodyText; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AppendAttachmentHandleL -// Appends attachment handle to the array of attachment handles. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::AppendAttachmentHandleL( const RFile& aFileHandle ) - { - if ( !aFileHandle.SubSessionHandle() ) - { - User::Leave( KErrBadHandle ); - } - RFile tempHandle; - tempHandle.Duplicate( aFileHandle ); - CleanupClosePushL( tempHandle ); - iAttachmentHandles.AppendL( tempHandle ); - CleanupStack::Pop( ); - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::AttachmentHandleArray -// Returns array of attachment handles. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -const RArray& CMessageDataImpl::AttachmentHandleArray() const - { - return iAttachmentHandles; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::DataType -// Returns data type id. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUid CMessageDataImpl::DataType() const - { - return iDataType; - } - -// ----------------------------------------------------------------------------- -// CMessageDataImpl::ClearAddresses -// Clears all addressee arrays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMessageDataImpl::ClearAddresses() - { - iToAddresses->ResetAndDestroy(); - iCcAddresses->ResetAndDestroy(); - iBccAddresses->ResetAndDestroy(); - } - -// --------------------------------------------------------- -// CMessageDataImpl::ExternalizeL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::ExternalizeL( RWriteStream& aStream ) const - { - aStream.WriteUint32L( iDataType.iUid ); - - TInt length(0); - if ( iSubject ) - { - length = iSubject->Length(); - } - aStream.WriteUint32L( length); - - if ( length > 0) - { - aStream << iSubject->Des(); - } - - // Store text to a file store - - length = 0; - - if ( iBodyText->DocumentLength() > 0 ) - { - TStreamId streamId(0); - - RFs& fs = CCoeEnv::Static()->FsSession(); - CFileStore* theStore; - TParse fileStoreName; - - HBufC* filenameBuf = HBufC::NewLC(KMaxFileName); - TPtr fileName = filenameBuf->Des(); - - CreateTempPathL( fileName, fs ); - - length = fileName.Length(); - aStream.WriteUint32L( length ); - if (length) - { - aStream << fileName; // write temporary filename - } - - theStore = CDirectFileStore::ReplaceLC - ( fs, fileName, EFileRead|EFileWrite ); - theStore->SetTypeL( KDirectFileStoreLayoutUid ); - // externalize the rich text - streamId = iBodyText->StoreL( *theStore ); // Store and get ID - CleanupStack::PopAndDestroy( 2, filenameBuf ); // pop and destroy store, filenameBuf - aStream << streamId; - } - else - { - aStream.WriteUint32L( 0 ); // no file storage - } - - TUint32 count = iAttachments->Count(); - aStream << count; // compressed value - for ( TInt ii = 0; ii < count; ++ii ) - { - TPtrC16 text = iAttachments->MdcaPoint(ii); - - aStream.WriteUint32L( text.Length() ); - aStream << text ; - } - - ExternalizeArrayL( iToAddresses, aStream ); - ExternalizeArrayL( iBccAddresses, aStream ); - ExternalizeArrayL( iCcAddresses, aStream ); - - // Opaque data - length = 0; - if ( iOpaqueData ) - { - length = iOpaqueData->Length(); - } - aStream.WriteUint32L( length ); - if ( length > 0 ) - { - aStream << iOpaqueData->Des(); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::InternalizeL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::InternalizeL( RReadStream& aStream ) - { - TUint32 tmpVal; - tmpVal = aStream.ReadUint32L( ); - iDataType = TUid::Uid( tmpVal ); - - tmpVal = aStream.ReadInt32L( ); - if ( tmpVal ) - { - iSubject = HBufC::NewL( aStream, tmpVal ); - } - - // something in filestorage - tmpVal = aStream.ReadInt32L( ); - if (tmpVal) - { - HBufC* fileName = HBufC::NewLC( aStream, tmpVal ); - - TStreamId streamId; - aStream >> streamId; - - // Restore text from file store - RFs& fs = CCoeEnv::Static()->FsSession(); - CFileStore* theStore; - - theStore = CDirectFileStore::OpenLC( - fs, - fileName->Des(), - EFileRead|EFileShareReadersOnly ); - - if (theStore->Type()[0]!= KDirectFileStoreLayoutUid ) - { - User::Leave( KErrUnknown ); - } - // internalize from the store - iBodyText->RestoreL( *theStore, streamId ); - CleanupStack::PopAndDestroy( theStore ); // store - fs.Delete( *fileName ); - CleanupStack::PopAndDestroy( fileName ); - } - - - // Filepath attachments - TInt count = aStream.ReadUint32L( ); - HBufC16* buf; - for ( TInt ii = 0; ii < count; ++ii ) - { - tmpVal = aStream.ReadUint32L( ); // string length - buf = HBufC16::NewLC( aStream, tmpVal ); - iAttachments->AppendL( *buf ); - CleanupStack::PopAndDestroy( buf ); - } - - InternalizeArrayL( iToAddresses, aStream ); - InternalizeArrayL( iBccAddresses, aStream ); - InternalizeArrayL( iCcAddresses, aStream ); - - tmpVal = aStream.ReadInt32L( ); - if ( tmpVal ) - { - iOpaqueData = HBufC8::NewL( aStream, tmpVal ); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::ExternalizeArrayL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::ExternalizeArrayL( - CMessageAddressArray* anArray, - RWriteStream& aStream ) const - { - - TInt count = anArray->Count(); - aStream.WriteUint32L( count ); // compressed value - for ( TInt ii = 0; ii < count; ++ii ) - { - anArray->At(ii)->ExternalizeL( aStream ); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::InternalizeArrayL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::InternalizeArrayL( - CMessageAddressArray* anArray, - RReadStream& aStream ) - { - TInt count; - count = aStream.ReadUint32L(); - anArray->Reset(); - for ( TInt ii = 0; ii < count; ++ii ) - { - CMessageAddress* messageAddress = CMessageAddress::NewLC(); - messageAddress->InternalizeL( aStream ); - anArray->AppendL( messageAddress ); - CleanupStack::Pop( messageAddress ); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::CreateTempPathL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::CreateTempPathL( TDes16& aPath, RFs& aFs ) const - { - aPath.Zero(); - - TInt drive = EDriveD; -#ifdef RD_MULTIPLE_DRIVE - User::LeaveIfError( - DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRam, drive ) ); -#endif - TChar driveChar; - aFs.DriveToChar( drive, driveChar ); - - aPath.Append( driveChar ); - aPath.Append( KSenduiTempFile ); - - TTime time; - time.UniversalTime(); - - TFileName* tempDir = new (ELeave) TFileName(); - tempDir->Format( - aPath , - I64HIGH( time.Int64() ), - I64LOW( time.Int64() ) ); - aPath = *tempDir; - delete tempDir; - - TInt err = aFs.MkDirAll( aPath ); - if ( err && err != KErrAlreadyExists ) - { - User::Leave( err ); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::SetOpaqueDataL -// -// --------------------------------------------------------- -// -void CMessageDataImpl::SetOpaqueDataL( const TDesC8* aData ) - { - delete iOpaqueData; - iOpaqueData = NULL; - if ( aData ) - { - iOpaqueData = aData->AllocL(); - } - } - -// --------------------------------------------------------- -// CMessageDataImpl::OpaqueData -// -// --------------------------------------------------------- -// -const TPtrC8 CMessageDataImpl::OpaqueData() const - { - return iOpaqueData ? TPtrC8( *iOpaqueData ) : TPtrC8(); - } - - - -// End of File