diff -r 000000000000 -r 8466d47a6819 emailservices/emailstore/base_plugin/inc/baseplugindelayedopsprivate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailstore/base_plugin/inc/baseplugindelayedopsprivate.h Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2009 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: Support for executing asynchronously certain plugin +* operations. +*/ +#ifndef BASEPLUGINDELAYEDOPSPRIVATE_H +#define BASEPLUGINDELAYEDOPSPRIVATE_H + + +#include "baseplugindelayedops.h" + + +/** + * Lets the user enqueue and dequeue asynchronous jobs for handling + * plugin-related actions. + */ +NONSHARABLE_CLASS ( CDelayedOpsManager ) : + public CBase, + public MDelayedOpsManager + { + +public: + + static CDelayedOpsManager* NewL( CBasePlugin& aPlugin ); + + virtual ~CDelayedOpsManager(); + + // MDelayedOpsManager::EnqueueOpL + virtual void EnqueueOpL( CDelayedOp* aOp ); + + // MDelayedOpsManager::DequeueOpL + virtual void DequeueOp( const CDelayedOp& aOp ); + + // MDelayedOpsManager::Extension1 + virtual TInt Extension1( + TUint /*aExtensionId*/, TAny*& /*a0*/, TAny* /*a1*/ ); + + +private: + + CDelayedOpsManager( CBasePlugin& aPlugin ); + + void ConstructL(); + + void ExecutePendingOps(); + + CDelayedOpsManager( const CDelayedOpsManager& ); + CDelayedOpsManager& operator= ( const CDelayedOpsManager& ); + + +private: + CBasePlugin& iPlugin; + RPointerArray iDelayedOps; + + __LOG_DECLARATION + }; + + +/** + * + */ +NONSHARABLE_CLASS( CDelayedDeleteMessagesOp ) : public CDelayedOp + { + +public: + + static CDelayedDeleteMessagesOp* NewLC( + TMsgStoreId aMailBoxId, + TMsgStoreId aFolderId, + const RArray& aMessages ); + + static CDelayedDeleteMessagesOp* NewLC( + TMsgStoreId aMailBoxId, + TMsgStoreId aFolderId, + TMsgStoreId aMsgId ); + + virtual ~CDelayedDeleteMessagesOp(); + + //CDelayedOp::ExecuteOpL + virtual void ExecuteOpL(); + +private: + + void ConstructL( const RArray& aMessages ); + void ConstructL( TMsgStoreId aMsgId ); + + CDelayedDeleteMessagesOp( + TMsgStoreId aMailBoxId, + TMsgStoreId aFolderId ); + + CDelayedDeleteMessagesOp( const CDelayedDeleteMessagesOp& ); + CDelayedDeleteMessagesOp& operator= ( const CDelayedDeleteMessagesOp& ); + +private: + + TMsgStoreId iMailBoxId; + TMsgStoreId iFolderId; + RArray iMessages; + TBool iImmediateDelete; + + __LOG_DECLARATION + }; + + +/** + * This most likely needs "large-content" mode where the content buffer is not + * copied in memory but stored on a fast drive and then do a + * ReplaceContentWithFileL. + */ +NONSHARABLE_CLASS( CDelayedSetContentOp ) : public CDelayedOp + { + +public: + + static CDelayedSetContentOp* NewLC( + TMsgStoreId aMailBoxId, + TMsgStoreId aMessageId, + TMsgStoreId aMessagePartId, + const TDesC& aContent ); + + static CDelayedSetContentOp* NewLC( + TMsgStoreId aMailBoxId, + TMsgStoreId aMessageId, + TMsgStoreId aMessagePartId, + TInt aContentLength ); + + virtual ~CDelayedSetContentOp(); + + //CDelayedOp::ExecuteOpL + virtual void ExecuteOpL(); + +private: + + void ConstructL( const TDesC& aContent ); + void ConstructL(); + + CDelayedSetContentOp( + TMsgStoreId aMailBoxId, + TMsgStoreId aMessageId, + TMsgStoreId aMessagePartId ); + + CDelayedSetContentOp( + TMsgStoreId aMailBoxId, + TMsgStoreId aMessageId, + TMsgStoreId aMessagePartId, + TInt aContentLength ); + + CMsgStoreMessagePart* FetchMessagePartLC(); + + CDelayedSetContentOp( const CDelayedSetContentOp& ); + CDelayedSetContentOp& operator= ( const CDelayedSetContentOp& ); + +private: + + TMsgStoreId iMailBoxId; + TMsgStoreId iMessageId; + TMsgStoreId iMessagePartId; + HBufC* iContent; + TInt iContentLength; + TBool iStepOne; + + __LOG_DECLARATION + }; + + +#endif // BASEPLUGINDELAYEDOPSPRIVATE_H