--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/ImumDeleteMessagesLocally.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,220 @@
+/*
+* 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:
+* Operation to delete mail messages locally i.e. just remove body and
+* attachments from the flash but leave header. So don't delete message
+* from mail server. After operation user is able to fetch message again
+
+*
+*/
+
+
+// INCLUDE FILES
+#include <MTMStore.h>
+#include <msvstd.hrh>
+#include <mtmuibas.h>
+#include <msvuids.h>
+#include <imum.rsg>
+#include <coemain.h>
+#include <StringLoader.h>
+#include <eikenv.h>
+
+#include "ImumDeleteMessagesLocally.h"
+#include "EmailUtils.H"
+#include "ImumMtmLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+// minimum disk space needed when deleting messages locally
+const TInt KImumDiskSpaceForDelete = (2*1024);
+
+// LOCAL CONSTANTS AND MACROS
+const TInt KImumEntriesDoneReplaceIndex = 0;
+const TInt KImumTotalEntriesReplaceIndex = 1;
+
+// MODULE DATA STRUCTURES
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::CImumDeleteMessagesLocally()
+// ----------------------------------------------------------------------------
+//
+CImumDeleteMessagesLocally::CImumDeleteMessagesLocally(
+ CImumInternalApi& aMailboxApi,
+ TRequestStatus& aObserverRequestStatus,
+ TBool aDiskSpaceRequest )
+ :
+ CImCacheManager(aMailboxApi.MsvSession(), aObserverRequestStatus),
+ iDiskSpaceRequest( aDiskSpaceRequest )
+ {
+ IMUM_CONTEXT( CImumDeleteMessagesLocally::CImumDeleteMessagesLocally, 0, KImumMtmLog );
+ IMUM_IN();
+ IMUM_OUT();
+
+ }
+
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumDeleteMessagesLocally::ConstructL(
+ CMsvEntrySelection& aMessageSelection )
+ {
+ IMUM_CONTEXT( CImumDeleteMessagesLocally::ConstructL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ CImCacheManager::ConstructL();
+ iMessageSelection = aMessageSelection.CopyL();
+ if ( iDiskSpaceRequest )
+ {
+ CEikonEnv* env = CEikonEnv::Static();
+
+ // Create the file session and get access to current drive
+ iFileSession = env->FsSession();
+ iDriveNo = iMsvSession.CurrentDriveL();
+
+ // Try to reserve disk space and leave if it fails
+ User::LeaveIfError( MsvEmailMtmUiUtils::AcquireDiskSpace(
+ iFileSession,
+ iDriveNo,
+ KImumDiskSpaceForDelete ) );
+ }
+
+ TInt resourceId = (iMessageSelection->Count()>1) ?
+ R_IMAP4_PROGRESS_DELETING_LOCALLY_MANY : R_IMAP4_PROGRESS_DELETING_LOCALLY;
+
+ iProgressText = StringLoader::LoadL( resourceId );
+
+ StartL( *iMessageSelection, iObserverRequestStatus );
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumDeleteMessagesLocally* CImumDeleteMessagesLocally::NewL(
+ CMsvEntrySelection& aMessageSelection,
+ CImumInternalApi& aMailboxApi,
+ TRequestStatus& aObserverRequestStatus,
+ TBool aDiskSpaceRequest /* = ETrue */)
+ {
+ IMUM_STATIC_CONTEXT( CImumDeleteMessagesLocally::NewL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ CImumDeleteMessagesLocally* self =
+ new ( ELeave ) CImumDeleteMessagesLocally(
+ aMailboxApi,
+ aObserverRequestStatus,
+ aDiskSpaceRequest );
+
+ CleanupStack::PushL(self);
+ self->ConstructL( aMessageSelection );
+ CleanupStack::Pop(); // self
+ IMUM_OUT();
+
+ return self;
+ };
+
+
+// Destructor
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::~CImumDeleteMessagesLocally()
+// ----------------------------------------------------------------------------
+//
+CImumDeleteMessagesLocally::~CImumDeleteMessagesLocally()
+ {
+ IMUM_CONTEXT( CImumDeleteMessagesLocally::~CImumDeleteMessagesLocally, 0, KImumMtmLog );
+ IMUM_IN();
+
+ delete iProgressText;
+ delete iMessageSelection;
+
+ if ( iDiskSpaceRequest )
+ {
+ iFileSession.ReleaseReserveAccess( iDriveNo );
+ }
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::Filter()
+// ----------------------------------------------------------------------------
+//
+TBool CImumDeleteMessagesLocally::Filter() const
+ {
+ IMUM_CONTEXT( CImumDeleteMessagesLocally::Filter, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if ( iMessageSelection->Find( iCurrentEntry->Entry().Id() )
+ > KErrNotFound )
+ {
+ IMUM_OUT();
+ return ETrue;
+ }
+ IMUM_OUT();
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumDeleteMessagesLocally::DecodeProgress()
+// ----------------------------------------------------------------------------
+//
+TInt CImumDeleteMessagesLocally::DecodeProgress(const TDesC8& aProgress,
+ TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString,
+ TInt& aTotalEntryCount, TInt& aEntriesDone,
+ TInt& aCurrentEntrySize, TInt& aCurrentBytesTrans, TBool /*aInternal*/)
+ {
+ IMUM_CONTEXT( CImumDeleteMessagesLocally::DecodeProgress, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if( !aProgress.Length())
+ {
+ return KErrNone;
+ }
+
+ TPckgBuf<TImCacheManagerProgress> paramPack;
+ paramPack.Copy(aProgress);
+ const TImCacheManagerProgress& progress=paramPack();
+
+ aEntriesDone=progress.iMessagesProcessed;
+ aTotalEntryCount=iMessageSelection->Count();
+ aCurrentEntrySize=progress.iTotalMessages;
+ aCurrentBytesTrans=progress.iMessagesProcessed;
+
+ aReturnString.Copy( *iProgressText );
+ if ( iMessageSelection->Count()>1 )
+ {
+ TBuf<CBaseMtmUi::EProgressStringMaxLen> tempBuffer;
+ StringLoader::Format(
+ tempBuffer,
+ aReturnString,
+ KImumEntriesDoneReplaceIndex,
+ aEntriesDone );
+ StringLoader::Format(
+ aReturnString,
+ tempBuffer,
+ KImumTotalEntriesReplaceIndex,
+ aTotalEntryCount );
+ }
+ IMUM_OUT();
+ return KErrNone;
+ }
+
+
+// End of File
+
+