email/imum/Mtms/Src/EmailMsgSizerOperation.cpp
changeset 0 72b543305e3a
--- /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 <miutset.h>
+#include <s32file.h>
+#include <eikenv.h>
+#include <eikrutil.h>
+#include <eikbtgpc.h>
+#include <iapprefs.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <sendui.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfield.h>
+#include <AknQueryDialog.h>
+#include <aknnotedialog.h>
+#include <StringLoader.h>
+#include <mmsvattachmentmanager.h>          // MMsvAttachmentManager
+
+#include "ImumMtmLogging.h"
+#include "EmailMsgSizerOperation.h"
+
+// ----------------------------------------------------------------------------
+// TMsvAttachmentNamesArray::TMsvAttachmentNamesArray()
+// ----------------------------------------------------------------------------
+//
+TMsvAttachmentNamesArray::TMsvAttachmentNamesArray(
+    const CArrayFixFlat<CMsvAttachment>& 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;
+    }
+
+