diff -r 238255e8b033 -r 84d9eb65b26f email/pop3andsmtpmtm/imapservermtm/inc/IMPSMTM.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/imapservermtm/inc/IMPSMTM.H Mon May 03 12:29:07 2010 +0300 @@ -0,0 +1,284 @@ +// Copyright (c) 1998-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: +// + +#ifndef __IMPSMTM_H__ +#define __IMPSMTM_H__ + +#include +#include + +#include +#include +#include "mimapsessionobserver.h" + +#include + +// Forward declarations +class CImImap4Session; +class CImImap4FolderSync; +class CImImap4Synchronise; +class CImap4ServerMtm; +class CImImap4Compound; +class CImap4OffLineControl; +class CImap4Utils; + +//****************** +// MActiveWrapperObserver - A Mixin class which provides mechanism to communicate to CActiveOwner +//****************** +class MActiveWrapperObserver +/** +@internalComponent +@released +*/ + { +public: + virtual void RequestCompleted(TInt aChildActiveObjectID, TInt aError)=0; + virtual void Activate()=0; + virtual void NonCompletedFailureOnSession(TInt aId)=0; + }; + +//******************* +// CActiveWrapper - The wrapper class which owns a CmsgActive and signals its Cactive parent +//******************* + +// CActiveWrapper is the 'thin' CActive object which wraps each of your CMsgActive objects +class CActiveWrapper : public CActive, public MImapSessionObserver +/** +@internalComponent +@released +*/ + { +public: + static CActiveWrapper* NewL(TInt aID); + void StartL(MActiveWrapperObserver* aManager); + ~CActiveWrapper(); + TRequestStatus* SessionStatus(); + void SetEntry(CMsvServerEntry* aEntry); + + // Return of current imap4session + CImImap4Session* GetImap4Session(); + +protected: + void RunL(); + void DoCancel(); + void DoComplete(TInt aStatus); + +private: + CActiveWrapper(TInt aID); + void ConstructL(); + + // From MImapSessionObserver + void NonCompletedFailure(); +private: + TInt iID; // my unique ID which my parent uses to identify me + MActiveWrapperObserver* iParentPtr; // handle to my parent (and hence its Completed() function) + +protected: + // The session which CActiveWrapper owns + CImImap4Session* iSession; + + // Class for compound operations + CImImap4Compound* iCompound; + + // Full synchronise class (only ever instantiated on primary session) + CImImap4Synchronise* iFullSync; + +private: + friend class CImap4ServerMtm; + }; + +// package buffer for progress info. +typedef TPckgBuf TImap4ProgressBuf; + +// States that MTM can be in +/** +@internalComponent +@released +*/ +enum TMtmState + { + EMtmStateIdle=0, + EMtmStateCopyToLocal, + EMtmStateCopyFromLocal, + EMtmStateCopyWithinService, + EMtmStateMoveToLocal, + EMtmStateMoveFromLocal, + EMtmStateMoveWithinService, + EMtmStateDeleteAfterMove, + EMtmStateDelete, + EMtmStateDeleteFolder, + EMtmStateCreateFolder, + EMtmStateRenameFolder, + EMtmStatePrimaryConnect, + EMtmStateSecondaryConnect, + EMtmStateForegroundSync, + EMtmStateMiscCommand, + EMtmStateWaitingForBackgroundToFinish, + EMtmStateSyncCompleted, + EMtmStatePopulate, + EMtmStateLogging, + EMtmStateOffLineDelete, + EMtmStateOffLineUndelete, + EMtmStateOffLineCopyToLocal, + EMtmStateOffLineMoveToLocal, + EMtmStateOffLineCopyFromLocal, + EMtmStateOffLineMoveFromLocal, + EMtmStateOffLineCopyWithinService, + EMtmStateOffLineMoveWithinService, + EMtmStateOffLinePopulate, + EMtmStateSecondarySessionIdle + }; + +class CImap4ServerMtm : public CBaseServerMtm, public MActiveWrapperObserver +/** +@internalTechnology +@released +*/ + { +public: + IMPORT_C static CImap4ServerMtm* NewL(CRegisteredMtmDll& aRegisteredMtmDll,CMsvServerEntry* aEntry); + ~CImap4ServerMtm(); + + void CopyToLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void CopyFromLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void CopyWithinServiceL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void MoveToLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void MoveFromLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void MoveWithinServiceL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus); + void DeleteAllL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus); + void CreateL(TMsvEntry aNewEntry, TRequestStatus& aStatus); + void ChangeL(TMsvEntry aNewEntry, TRequestStatus& aStatus); + // + void StartCommandL(CMsvEntrySelection& aSelection, TInt aCommand, const TDesC8& aParameter, TRequestStatus& aStatus); + // + TBool CommandExpected(); + // + const TDesC8& Progress(); + + // What state we're in + enum + { + EBothIdle=0, + EPrimaryBusy, + EBothBusy, + ESecondaryBusy + }; +protected: + void DoCancel(); + void DoRunL(); + void DoComplete(TInt aError); + + // From MActiveWrapperObserver + void RequestCompleted(TInt aId, TInt aCode); + void Activate(); + void NonCompletedFailureOnSession(TInt aId); + +private: + CImap4ServerMtm(CRegisteredMtmDll& aRegisteredMtmDll,CMsvServerEntry* aEntry); + void ConstructL(); + TInt CheckSelectionL(const CMsvEntrySelection& aSelection, + CMsvEntrySelection* aLocalCopy, + const TBool aMessages, + const TBool aParts, + const TBool aFolders, + const TBool aIsInService); +// void SaveOperationL(CImOffLineOperation& aOperation); + void MessageErrorL(const TMsvId aMessageId, const TInt aError); + TInt SetLocalSubscription(const TMsvId aFolder, const TBool aSubscribed); + void MtmCommandL(const TInt aType,const CMsvEntrySelection& aSelection, TMsvId aDestination, TRequestStatus& aStatus); + void MarkOnOrOfflineL(const TBool aOnline); + void ChangeVisibilityL(TMsvId aParent, TBool aInvisible); + void ChangeVisibilityL(TMsvId aParent, TBool aInvisible, TBool aRecurse, TUid aType); + void PropagateInvisibleFlagL(TMsvId aId); + void GoneOffline(); + + // Set entry, leave if error (not related to setentry() which sets iEntry) + void SetEntryL(const TMsvId aId); + + // Change entry, leave if error + void ChangeEntryL(const TMsvEntry& aEntry); + + // Get children, leave if error + void GetChildrenL(CMsvEntrySelection& aSelection); + + void DeleteEntryL(TMsvId aId); + void UndeleteAllL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus); + + // now used instead of ChangeL + TBool RenameFolderL(TMsvId aId, const TImap4RenameFolder& aRename); + + // load or reload service settings + void LoadSettingsL(TMsvId aId); + + void ClearNewFlagL(TMsvId aParent); + + TBool PruneMessages(const CMsvEntrySelection& aSelection); + TBool IsPartialPopulate(TDes8& aParameter); + +private: + TInt iProgressMsgsToDo; + TInt iProgressMsgsDone; + TInt iProgressErrorCode; + TImap4ProgressBuf iProgressBuf; + + TImap4GenericProgress::TImap4GenericProgressState iLastSessionState; + TImap4GenericProgress::TImap4GenericProgressOp iRequestedOperation; + + TMsvId iServiceId; + + // Copy of the service's settings + CImImap4Settings* iServiceSettings; + + // Internal state for multipart operations + TMtmState iState; + TMtmState iSavedState; + TInt iLastCommand; + CMsvEntrySelection* iSelection; + CMsvEntrySelection* iOneSelection; + TMsvId iDestination; + + // The two sessions that we can deal with + CActiveWrapper* iPrimarySession; + CActiveWrapper* iSecondarySession; + + // the object that manages our offline operations + CImap4OffLineControl* iOffLineControl; + + // The session the last command was issued to + CActiveWrapper* iCurrentSession; + TInt iId; + TInt iCode; + + // State of sessions + //TInt iSessionState; + TBool iBackgroundSyncInProgress; + TBool iBatchInProgress; + + // Can we be deleted now? + TBool iCanBeDeletedNow; + + // Should we clear New flag on messages? + TBool iClearNewFlagOnNextSync; + + TRequestStatus* iRequest; + + TImap4GetMailOptions iGetMailOptions; + + CImap4Utils* iUtils; + + TInt iTotalSize; + TImImap4GetPartialMailInfo iPartialMailInfo; + }; +#endif