williamr@2: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Client MTM for the POP3 protocol williamr@2: // williamr@2: // williamr@2: williamr@2: williamr@2: #if !defined (__POPCMTM_H__) williamr@2: #define __POPCMTM_H__ williamr@2: williamr@2: #if !defined (__MIUTMSG_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined (__MIUTPARS_H__) williamr@2: #include //TImMessageField williamr@2: #endif williamr@2: #if !defined (__POP3CMDS_H__) williamr@2: #include // KPOP3MTMConnect etc williamr@2: #endif williamr@2: #if !defined (__POP3SET_H__) williamr@2: #include // KPOP3MTMConnect etc williamr@2: #endif williamr@2: williamr@2: class CImPOP3GetMail; williamr@2: class CImEmailAutoSend; williamr@2: williamr@4: // Pop3 Client MTM // williamr@2: class CPop3ClientMtm : public CBaseMtm williamr@2: /** POP3 client MTM interface. williamr@2: williamr@2: Most of the functions in this class are implementations of the virtual functions williamr@2: defined by the base class CBaseMtm. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: /** williamr@2: @deprecated williamr@2: */ williamr@2: williamr@2: public: williamr@2: enum TImPopcNewEmailHeaderType williamr@2: { williamr@2: EForwardedEmail, williamr@2: EReplyToEmail, williamr@2: EReceiptToEmail williamr@2: }; williamr@2: williamr@2: public: williamr@2: IMPORT_C static CPop3ClientMtm* NewL(CRegisteredMtmDll& aRegisteredMtmDll, CMsvSession& aMsvSession); williamr@2: ~CPop3ClientMtm(); williamr@2: williamr@2: void SaveMessageL(); williamr@2: void LoadMessageL(); williamr@2: williamr@2: IMPORT_C void StoreSettingsL(); williamr@2: IMPORT_C void RestoreSettingsL(); williamr@2: williamr@2: CMsvOperation* ReplyL (TMsvId aId, TMsvPartList aPartlist, TRequestStatus& aCompletionStatus); williamr@2: CMsvOperation* ForwardL(TMsvId aId, TMsvPartList aPartList, TRequestStatus& aCompletionStatus); williamr@2: williamr@2: TUint ValidateMessage(TMsvPartList aPartList); williamr@2: TMsvPartList Find(const TDesC& aTextToFind, TMsvPartList aPartList); williamr@2: williamr@2: void AddAddresseeL(const TDesC& aRealAddress); williamr@2: void AddAddresseeL(const TDesC& aRealAddress, const TDesC& aAlias); williamr@2: void RemoveAddressee(TInt aIndex); williamr@2: williamr@2: IMPORT_C void SetSettingsL(const CImPop3Settings& aSettings); williamr@2: IMPORT_C const CImPop3Settings& Settings() const; williamr@2: williamr@2: // --- RTTI functions --- williamr@2: TInt QueryCapability(TUid aCapability, TInt& aResponse); williamr@2: void InvokeSyncFunctionL(TInt aFunctionId, const CMsvEntrySelection& aSelection, TDes8& aParameter); williamr@2: CMsvOperation* InvokeAsyncFunctionL(TInt aFunctionId, const CMsvEntrySelection& aSelection, TDes8& aParameter, TRequestStatus& aCompletionStatus); williamr@2: williamr@2: // Attachment functions to support the SendAs API williamr@2: IMPORT_C virtual void AddAttachmentL(const TDesC& aFilePath, const TDesC8& aMimeType, TUint aCharset, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void AddAttachmentL(RFile& aFile, const TDesC8& aMimeType, TUint aCharset, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void AddLinkedAttachmentL(const TDesC& aFilePath, const TDesC8& aMimeType, TUint aCharset, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void AddEntryAsAttachmentL(TMsvId aAttachmentId, TRequestStatus& aStatus); williamr@2: EXPORT_C virtual void CreateAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, const TDesC8& aMimeType, TUint aCharset, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void CreateMessageL(TMsvId aServiceId); williamr@2: williamr@2: IMPORT_C virtual TMsvId DefaultServiceL() const; williamr@2: IMPORT_C virtual void RemoveDefaultServiceL(); williamr@2: IMPORT_C virtual void ChangeDefaultServiceL(const TMsvId& aService); williamr@2: williamr@2: protected: williamr@2: CPop3ClientMtm(CRegisteredMtmDll& aRegisteredMtmDll, CMsvSession& aMsvSession); williamr@2: void ConstructL(); williamr@2: void ContextEntrySwitched(); williamr@2: williamr@2: private: williamr@2: TBool ValidateAddress(const TPtrC& anAddress); williamr@2: void SendOnNextConnectionL(); williamr@2: TMsvPartList DoFindL(const TDesC& aTextToFind, TMsvPartList aPartList); williamr@2: CMsvEntrySelection* FilteredChildrenLC(TBool aNewOnly, TInt aMaxEmailSize); williamr@2: CMsvEntrySelection* FilteredSelectionLC(TInt aMaxEmailSize, const CMsvEntrySelection& aSelection); williamr@2: williamr@2: williamr@2: williamr@2: private: williamr@2: CImPop3Settings* iImPop3Settings; williamr@2: TImMessageField iTImMessageField; williamr@2: CImHeader* iHeader; williamr@2: williamr@2: HBufC* iEmailAddressFormatString; // defines format of email address used by "Send as" API eg _LIT("/"%S/" <%S>") williamr@2: CImEmailOperation* iImEmailOperation; williamr@2: CImPOP3GetMail* iImPOP3GetMail; williamr@2: }; williamr@2: williamr@2: williamr@2: class CImPOP3GetMail : public CMsvOperation williamr@2: /** Encapsulates an operation to copy/move POP3 emails from the remote inbox to williamr@2: any local folder. williamr@2: williamr@2: Functionality is provided to: williamr@2: williamr@2: 1. copy/move any new emails williamr@2: williamr@2: 2. copy/move a selection of emails williamr@2: williamr@2: 3. copy/move all emails williamr@2: williamr@2: 4. in the Remote Inbox to a local folder. williamr@2: williamr@2: There are three cases for copying/moving the emails from the Remote Inbox: williamr@2: williamr@2: 1. the user is connected to the account so just copy/move the emails williamr@2: williamr@2: 2. the user is not connected to the account so connect, copy/move the emails, williamr@2: and then disconnect williamr@2: williamr@2: 3. the user is not connected to the account so connect, copy/move the emails, williamr@2: and then stay online williamr@2: williamr@2: Objects of this type are returned from CPop3ClientMtm::InvokeAsyncFunctionL() williamr@2: when a suitable get command is requested. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** Defines types of get mail operation. */ williamr@2: enum TImPOP3GetMailType williamr@2: { williamr@2: /** Connect and copy new mail and stay online. */ williamr@2: EConnectAndCopyNewMailAndStayOnline, williamr@2: /** Connect and copy new mail and disconnect. */ williamr@2: EConnectAndCopyNewMailAndDisconnect, williamr@2: /** Connect and move new mail and stay online. */ williamr@2: EConnectAndMoveNewMailAndStayOnline, williamr@2: /** Connect and move new mail and disconnect. */ williamr@2: EConnectAndMoveNewMailAndDisconnect, williamr@2: /** Connect and copy mail selection and stay online. */ williamr@2: EConnectAndCopyMailSelectionAndStayOnline, williamr@2: /** Connect and copy mail selection and disconnect. */ williamr@2: EConnectAndCopyMailSelectionAndDisconnect, williamr@2: /** Connect and move mail selection and stay online. */ williamr@2: EConnectAndMoveMailSelectionAndStayOnline, williamr@2: /** Connect and move mail selection and disconnect. */ williamr@2: EConnectAndMoveMailSelectionAndDisconnect, williamr@2: /** Connect and copy all mail and stay online. */ williamr@2: EConnectAndCopyAllMailAndStayOnline, williamr@2: /** Connect and copy all mail and disconnect. */ williamr@2: EConnectAndCopyAllMailAndDisconnect, williamr@2: /** Connect and move all mail and stay online. */ williamr@2: EConnectAndMoveAllMailAndStayOnline, williamr@2: /** Connect and move all mail and disconnect. */ williamr@2: EConnectAndMoveAllMailAndDisconnect williamr@2: }; williamr@2: williamr@2: public: williamr@2: IMPORT_C CMsvOperation* GetMailL(CPop3ClientMtm& aPop3ClientMtm, TRequestStatus& aObserverRequestStatus, const CMsvEntrySelection& aMsvEntrySelection, TDes8& aPop3GetMailInfo, TImPOP3GetMailType aPOP3GetMailType); williamr@2: IMPORT_C const TDesC8& FinalProgress(); williamr@2: IMPORT_C ~CImPOP3GetMail(); williamr@2: void DoCancel(); williamr@2: void RunL(); williamr@2: const TDesC8& ProgressL(); williamr@2: private: williamr@2: CImPOP3GetMail(CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus, CPop3ClientMtm& aPop3ClientMtm, TImPOP3GetMailType aPOP3GetMailType); williamr@2: void ConstructL(const CMsvEntrySelection& aMsvEntrySelection, TDes8& aPop3GetMailInfo); williamr@2: void SelectNextStateL(); // selects next state to go to williamr@2: void ChangeStateL(); // initiates the next state operation williamr@2: void SelectAndChangeToNextStateL(); williamr@2: void RequestComplete(TInt aError); williamr@2: void Complete(); williamr@2: void ConnectToMailboxL(); williamr@2: void CopyMoveNewMessagesL(TBool aCopy); williamr@2: void CopyMoveMessageSelectionL(TBool aCopy); williamr@2: void CopyMoveAllMessagesL(TBool aCopy); williamr@2: void DisconnectFromMailboxL(); williamr@2: void ResetProgress(); williamr@2: void StoreProgressL(); williamr@2: private: williamr@2: enum TImPOP3GetMailState williamr@2: { williamr@2: EConnectToMailbox, williamr@2: ECopyNewMessages, williamr@2: EMoveNewMessages, williamr@2: ECopyMessageSelection, williamr@2: EMoveMessageSelection, williamr@2: ECopyAllMessages, williamr@2: EMoveAllMessages, williamr@2: EDisconnectFromMailbox, williamr@2: EFinished williamr@2: }; williamr@2: williamr@2: CPop3ClientMtm& iPop3ClientMtm; williamr@2: CMsvEntrySelection* iMsvEntrySelection; williamr@2: CMsvOperation* iMsvOperation; williamr@2: williamr@2: TPop3Progress iProgress; williamr@2: TPop3Progress iErrorProgress; williamr@2: TImPOP3GetMailState iState; williamr@2: TImPOP3GetMailType iPOP3GetMailType; williamr@2: TPckgBuf iProgressBuf; williamr@2: TPckgBuf iPop3GetMailInfo; williamr@2: }; williamr@2: williamr@2: #endif // __POPCMTM_H__