--- 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 <s32file.h>
-#include <txtrich.h>
-#include <eikenv.h>
-#include <s32mem.h>
-#include <s32std.h>
-#include <msvstore.h>
-#include <SenduiConsts.h>
-
-#ifdef RD_MULTIPLE_DRIVE
-#include <driveinfo.h>
-#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<RFile>& 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