diff -r 000000000000 -r 72b543305e3a email/imum/Mtms/Src/EmailMsgSizerOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Mtms/Src/EmailMsgSizerOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,337 @@ +/* +* Copyright (c) 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: +* Class implementation file +* +*/ + + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // MMsvAttachmentManager + +#include "ImumMtmLogging.h" +#include "EmailMsgSizerOperation.h" + +// ---------------------------------------------------------------------------- +// TMsvAttachmentNamesArray::TMsvAttachmentNamesArray() +// ---------------------------------------------------------------------------- +// +TMsvAttachmentNamesArray::TMsvAttachmentNamesArray( + const CArrayFixFlat& aAttachmentList) + : + iAttachments(aAttachmentList) + { + IMUM_CONTEXT( TMsvAttachmentNamesArray::TMsvAttachmentNamesArray, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + } + + +// ---------------------------------------------------------------------------- +// TMsvAttachmentNamesArray::MdcaCount() +// ---------------------------------------------------------------------------- +// +TInt TMsvAttachmentNamesArray::MdcaCount() const + { + return iAttachments.Count(); + } + + +// ---------------------------------------------------------------------------- +// TMsvAttachmentNamesArray::MdcaPoint() +// ---------------------------------------------------------------------------- +// +TPtrC16 TMsvAttachmentNamesArray::MdcaPoint(TInt aIndex) const + { + return TPtrC( iAttachments[aIndex].AttachmentName() ); + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::NewL() +// ---------------------------------------------------------------------------- +// +CEmailMsgSizerOperation* CEmailMsgSizerOperation::NewL( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + TMsvId aMsgId, + TUid aMtm) + { + IMUM_STATIC_CONTEXT( CEmailMsgSizerOperation::NewL, 0, mtm, KImumMtmLog ); + IMUM_IN(); + + CEmailMsgSizerOperation* sizer = new(ELeave) CEmailMsgSizerOperation( + aMailboxApi, aObserverRequestStatus, aMtm); + CleanupStack::PushL(sizer); + sizer->ConstructL(aMsgId); + CleanupStack::Pop(); + + IMUM_OUT(); + + return sizer; + } + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::~CEmailMsgSizerOperation() +// ---------------------------------------------------------------------------- +// +CEmailMsgSizerOperation::~CEmailMsgSizerOperation() + { + IMUM_CONTEXT( CEmailMsgSizerOperation::~CEmailMsgSizerOperation, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + delete iEmailMsg; + delete iMsgEntry; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::ProgressL() +// ---------------------------------------------------------------------------- +// +const TDesC8& CEmailMsgSizerOperation::ProgressL() + { + return iProgress; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::TotalMessageSize() +// ---------------------------------------------------------------------------- +// +TInt32 CEmailMsgSizerOperation::TotalMessageSize() const + { + return iMsgEntry->Entry().iSize; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::BodyTextSizeL() +// ---------------------------------------------------------------------------- +// +TInt32 CEmailMsgSizerOperation::BodyTextSizeL() const + { + return TotalMessageSize() - SizeOfAllAttachmentsL(); + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::SizeOfAllAttachmentsL() +// ---------------------------------------------------------------------------- +// +TInt32 CEmailMsgSizerOperation::SizeOfAllAttachmentsL() const + { + IMUM_CONTEXT( CEmailMsgSizerOperation::SizeOfAllAttachmentsL, 0, KImumMtmLog ); + IMUM_IN(); + + TInt32 size = 0; + + MMsvAttachmentManager& attachments = iEmailMsg->AttachmentManager(); + for( TInt i = attachments.AttachmentCount(); --i >= 0; ) + { + size += GetSizeL( i, attachments ); + } + + IMUM_OUT(); + return size; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::AttachmentSizeL() +// ---------------------------------------------------------------------------- +// +TInt32 CEmailMsgSizerOperation::AttachmentSizeL( + TMsvId aAttachmentId ) const + { + IMUM_CONTEXT( CEmailMsgSizerOperation::AttachmentSizeL, 0, KImumMtmLog ); + IMUM_IN(); + + TInt32 size = 0; + MMsvAttachmentManager& attachments = iEmailMsg->AttachmentManager(); + + // Search through the whole list of attachments + TInt i = attachments.AttachmentCount(); + while ( --i >= 0 && !size ) + { + // Create the object of the info item + CMsvAttachment* attachment = attachments.GetAttachmentInfoL( i ); + CleanupStack::PushL( attachment ); + + // if id of the attachment matches with the id provided, + // increase the size + if( attachment->Id() == aAttachmentId ) + { + size = attachment->Size(); + } + + CleanupStack::PopAndDestroy( attachment ); + attachment = NULL; + } + + User::LeaveIfError( i ); + // Leaves with KErrNotFound (-1) if attachment not found, + // or no attachments. + + IMUM_OUT(); + return size; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::HasAttachmentLargerThanL() +// ---------------------------------------------------------------------------- +// +TBool CEmailMsgSizerOperation::HasAttachmentLargerThanL( TInt32 aSize ) const + { + IMUM_CONTEXT( CEmailMsgSizerOperation::HasAttachmentLargerThanL, 0, KImumMtmLog ); + IMUM_IN(); + + TBool foundBigger = EFalse; + MMsvAttachmentManager& attachments = iEmailMsg->AttachmentManager(); + for( TInt i = attachments.AttachmentCount(); + --i >= 0 && !foundBigger; + foundBigger = GetSizeL( i, attachments ) > aSize ) {}; + + IMUM_OUT(); + return foundBigger; + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::DoCancel() +// ---------------------------------------------------------------------------- +// +void CEmailMsgSizerOperation::DoCancel() + { + IMUM_CONTEXT( CEmailMsgSizerOperation::DoCancel, 0, KImumMtmLog ); + IMUM_IN(); + + IMUM3(0,"Cancelling operation with iStatus (0x%x) with errorcode (%d) and msg object (0x%x)", iStatus.Int(), iProgress().iErrorCode, iEmailMsg); + + if(iEmailMsg) + { + iEmailMsg->Cancel(); + iProgress().iErrorCode = KErrCancel; + + // if not already completed, then + TRequestStatus* status = &iObserverRequestStatus; + User::RequestComplete(status, KErrCancel); + } + + IMUM_OUT(); + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::RunL() +// ---------------------------------------------------------------------------- +// +void CEmailMsgSizerOperation::RunL() + { + IMUM_CONTEXT( CEmailMsgSizerOperation::RunL, 0, KImumMtmLog ); + IMUM_IN(); + + iProgress().iErrorCode = iStatus.Int(); + TRequestStatus* status = &iObserverRequestStatus; + User::RequestComplete(status, KErrNone); + + IMUM_OUT(); + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::CEmailMsgSizerOperation() +// ---------------------------------------------------------------------------- +// +CEmailMsgSizerOperation::CEmailMsgSizerOperation( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + TUid aMtm) + : + CMsvOperation(aMailboxApi.MsvSession(), KSizerOpPriority, aObserverRequestStatus) + { + IMUM_CONTEXT( CEmailMsgSizerOperation::CEmailMsgSizerOperation, 0, KImumMtmLog ); + IMUM_IN(); + + CActiveScheduler::Add(this); + iMtm = aMtm; + IMUM_OUT(); + } + + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::ConstructL() +// ---------------------------------------------------------------------------- +// +void CEmailMsgSizerOperation::ConstructL(TMsvId aMsgId) + { + IMUM_CONTEXT( CEmailMsgSizerOperation::ConstructL, 0, KImumMtmLog ); + IMUM_IN(); + + // Create and start the CImEmailMessage active object. + iMsgEntry = iMsvSession.GetEntryL(aMsgId); + iEmailMsg = CImEmailMessage::NewL(*iMsgEntry); + iStatus = KRequestPending; + iEmailMsg->GetAttachmentsListL( + iStatus, + aMsgId, + CImEmailMessage::EAllAttachments, + CImEmailMessage::EThisMessageAndEmbeddedMessages); + SetActive(); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CEmailMsgSizerOperation::GetSizeL() +// ---------------------------------------------------------------------------- +// +TInt CEmailMsgSizerOperation::GetSizeL( + const TInt aIndex, + MMsvAttachmentManager& aList ) const + { + IMUM_CONTEXT( CEmailMsgSizerOperation::GetSizeL, 0, KImumMtmLog ); + IMUM_IN(); + + TInt size = 0; + + // Create the object of the info item + CMsvAttachment* attachment = aList.GetAttachmentInfoL( aIndex ); + CleanupStack::PushL( attachment ); + + size = attachment->Size(); + + CleanupStack::PopAndDestroy( attachment ); + attachment = NULL; + + IMUM_OUT(); + return size; + } + +