diff -r d2c4c66342f3 -r d51193d814ea messagingfw/deprecate/senduiservices/datautils/src/CSendUiAttachment.cpp --- a/messagingfw/deprecate/senduiservices/datautils/src/CSendUiAttachment.cpp Tue Aug 31 15:41:11 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,300 +0,0 @@ -/* -* Copyright (c) 2002-2007 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 file path and handle attachments into single class. -* -*/ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef RD_MULTIPLE_DRIVE -#include -#endif -#include "CSendUiAttachment.h" - -// Temporary is file saved to RAM drive -_LIT( KSenduiTempFilePath, ":\\system\\temp\\sendui\\"); -_LIT( KSenduiTempFilePathFormat, "%x_%x" ); -_LIT16( KExtTextPlain_16, ".txt" ); -const TInt KSendUiMaxTemporaryFileNameLength = 15; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CSendUiAttachment::CSendUiAttachment() :CBase() - { - } - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// -CSendUiAttachment::~CSendUiAttachment() - { - if ( Type() == EAttachmentPath ) - { - RFile* file = MUTABLE_CAST( RFile*, iHandle ); // must close temporary file before deleting it - file->Close(); - delete file; - if ( iFlags & EAttachmentTemporary && iFileManager ) - { - // Remove temp file and directory - iFileManager->Delete( *iPath ); - iFileManager->RmDir( *iPath ); // In case of rubbish, empty the folder - } - if ( iFileManager ) - { - delete iFileManager; - } - delete iPath; - } - } -// ----------------------------------------------------------------------------- -// NewLC, Path -// ----------------------------------------------------------------------------- -// -EXPORT_C CSendUiAttachment* CSendUiAttachment::NewLC( const TDesC16* aPath, RFs& aRFs ) - { - CSendUiAttachment* self = new(ELeave)CSendUiAttachment( ); - CleanupStack::PushL( self ); - self->ConstructL( aPath, aRFs ); - return self; - } - -// ----------------------------------------------------------------------------- -// ConstructL -// ----------------------------------------------------------------------------- -// -void CSendUiAttachment::ConstructL( const TDesC16* aPath, RFs& aRFs ) - { - RFile* myfile = new(ELeave)RFile; - CleanupStack::PushL( myfile ); - TInt err = myfile->Open( aRFs, *aPath, EFileShareReadersOnly ); - - if ( err ) - { - User::LeaveIfError( myfile->Open( aRFs, *aPath, EFileShareAny ) ); - } - - iPath = aPath->AllocL(); - myfile->Size( iSize ); - iHandle = myfile; - CleanupStack::Pop( myfile ); - } -// ----------------------------------------------------------------------------- -// NewLC, file handle -// ----------------------------------------------------------------------------- -// -EXPORT_C CSendUiAttachment* CSendUiAttachment::NewLC( const RFile* aHandle ) - { - CSendUiAttachment* self = new(ELeave)CSendUiAttachment( ); - CleanupStack::PushL( self ); - self->iHandle = aHandle; - aHandle->Size( self->iSize ); - return self; - } - -// ----------------------------------------------------------------------------- -// NewLC, BodyText -// ----------------------------------------------------------------------------- -// -EXPORT_C CSendUiAttachment* CSendUiAttachment::NewLC( const CRichText& aBodyText, RFs& aRFs ) - { - CSendUiAttachment* self = new(ELeave)CSendUiAttachment( ); - CleanupStack::PushL( self ); - self->ConstructL( aBodyText, aRFs ); - return self; - } - -// ----------------------------------------------------------------------------- -// ConstructL, BodyText -// ----------------------------------------------------------------------------- -// -void CSendUiAttachment::ConstructL( const CRichText& aBodyText, RFs& aRFs ) - { - // character count * 2 = message size - TInt err = KErrNone; - TInt drive; -#ifdef RD_MULTIPLE_DRIVE - User::LeaveIfError( DriveInfo::GetDefaultDrive( - DriveInfo::EDefaultRam, drive ) ); -#else - drive = EDriveD; -#endif - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &aRFs, aBodyText.DocumentLength() * 2, drive ) ) - { - User::Leave( KErrDiskFull ); - } - - HBufC* buf = HBufC::NewLC( KMaxFileName ); - TPtr fileNameBuf = buf->Des(); - TChar driveLetter = TChar('A'); - driveLetter += drive; - fileNameBuf.Append( driveLetter ); - iFileManager = CFileMan::NewL( aRFs ); - - TFileName fileName; - TPtrC textSnippet; - TCharFormat charFormat; - aBodyText.GetChars( textSnippet, charFormat, 0 ); - - CMsgTextUtils::GetFileNameFromBuffer( - fileName, - textSnippet, - KSendUiMaxTemporaryFileNameLength, - &KExtTextPlain_16 ); - - CreateTempPathL( fileNameBuf, fileName, aRFs ); - - aBodyText.ExportAsTextL( fileNameBuf, CPlainText::EOrganiseByParagraph, 0 ); - - iPath = fileNameBuf.AllocL(); - CleanupStack::PopAndDestroy( buf ); - SetFlags( EAttachmentTemporary ); - - // Open handle - RFile* myfile = new(ELeave)RFile; - CleanupStack::PushL( myfile ); - err = myfile->Open( aRFs, *iPath, EFileShareReadersOnly ); - - if ( err ) - { - User::LeaveIfError( myfile->Open( aRFs, *iPath, EFileShareAny ) ); - } - - myfile->Size( iSize ); - iHandle = myfile; - CleanupStack::Pop( myfile ); - SetMimeType( TDataType( KMsgMimeTextPlain )); - } - -// ----------------------------------------------------------------------------- -// Fills the attachment array -// ----------------------------------------------------------------------------- -// -EXPORT_C CArrayPtrFlat* CSendUiAttachment::InitAttachmentArrayLCC( - const CDesC16Array& aPaths, - const RArray& aHandles, - RFs& aFSs ) - { - TInt i = 0; - if ( &aPaths ) - { - i += aPaths.Count(); - } - if ( &aHandles ) - { - i += aHandles.Count(); - } - - CArrayPtrFlat* attachments = new(ELeave)CArrayPtrFlat( i ? i : 1); - CleanupStack::PushL( attachments ); - CleanupResetAndDestroyPushL( *attachments ); - CSendUiAttachment* attachment; - - if ( &aPaths ) - { - for ( i = 0; i < aPaths.Count(); i++ ) - { - TPtrC16 tmp(aPaths.MdcaPoint( i ) ); - attachment = CSendUiAttachment::NewLC( &tmp, aFSs ); - attachments->AppendL( attachment ); - CleanupStack::Pop( attachment ); - } - } - if ( &aHandles != NULL ) - { - for ( i = 0; i < aHandles.Count(); i++ ) - { - attachment = CSendUiAttachment::NewLC( &(aHandles[i] )); - attachments->AppendL( attachment ); - CleanupStack::Pop( attachment ); - } - } - - return attachments; - } - -// ----------------------------------------------------------------------------- -// CreateTempPathL -// -// Creates temp path and unique file name under d:\system\temp\sendui -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void CSendUiAttachment::CreateTempPathL( - TDes16& aCompletePath, - TFileName& aTempFileName, - RFs& aRFs ) - { - aCompletePath.Append( KSenduiTempFilePath ); - - if ( aTempFileName.Length() == 0 ) - { - aCompletePath.Append( KSenduiTempFilePathFormat ); - - TTime time; - time.UniversalTime(); - - TFileName* tempDir = new(ELeave) TFileName(); - CleanupStack::PushL( tempDir ); - tempDir->Format( - aCompletePath , - I64HIGH( time.Int64() ), - I64LOW( time.Int64() ) ); - aCompletePath = *tempDir; - CleanupStack::PopAndDestroy( tempDir ); - } - else - { - aCompletePath.Append( aTempFileName ); - } - - TInt err = aRFs.MkDirAll( aCompletePath ); - // path may exists - if ( err && err != KErrAlreadyExists ) - { - User::LeaveIfError( err ); - } - } - -// ----------------------------------------------------------------------------- -// Type -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CSendUiAttachment::Type() - { - if ( iPath ) - { - return EAttachmentPath; - } - else - { - return EAttachmentHandle; - } - } - -// end of file