diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssosplugin/inc/ipsplgsosbaseplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssosplugin/inc/ipsplgsosbaseplugin.h Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,693 @@ +/* +* Copyright (c) 2007 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: This file defines class CIpsPlgSosBasePlugin. +* +*/ + + +#ifndef IPSPLGSOSBASEPLUGIN_H +#define IPSPLGSOSBASEPLUGIN_H + +// +#include "CFSMailPlugin.h" +#include "MFSMailRequestObserver.h" +// +#include + +#include "ipsplgsosbaseplugin.hrh" +#include "ipsplgcommon.h" +#include "ipsplgsingleopwatcher.h" +#include "ipsplgtimeroperation.h" + +class CMsvSession; +class CIpsPlgTimerOperation; +class CIpsPlgMsgMapper; +class CImEmailMessage; +class CIpsPlgMruList; +class CIpsPlgSettingsObserver; +class CRepository; +class CIpsPlgSearch; +class CIpsSetDataApi; +class CIpsPlgSmtpService; +class CIpsPlgSyncStateHandler; +class CIpsPlgEventHandler; + +/** + * FreestyleIpsServices plugin class + * + * @lib ipssosplugin.lib + * @since FSEmail 2.0 + */ +class CIpsPlgSosBasePlugin : + public CFSMailPlugin, + public MIpsPlgSingleOpWatcher, + public MFSMailRequestObserver, // a dummy observer + public MIpsPlgTimerOperationCallBack + { + +public: + + /** + * ~CIpsPlgSosBasePlugin + * Destructor + */ + IMPORT_C virtual ~CIpsPlgSosBasePlugin(); + +public: //from MIpsPlgSingleOpWatcher + + /** + * + */ + void OpCompleted( + CIpsPlgSingleOpWatcher& aOpWatcher, + TInt aCompletionCode ); + +public: //from MFSMailRequestObserver + + /** + * no real implementation for this. we're just a dummy observer, + * so we can internally run our own operations, like DisconnectL + */ + virtual void RequestResponseL( TFSProgress aEvent, TInt aRequestId ); + +public: // from MIpsPlgTimerOperationCallBack + + /** + * Called when activity timer fires + */ + virtual void HandleTimerFiredL( const TFSMailMsgId& aMailboxId ); + +public: // from CFSMailPlugin + + virtual void SetMailboxName( + const TFSMailMsgId& aMailboxId, + const TDesC& aMailboxName ); + + virtual TFSMailBoxStatus GetMailBoxStatus( + const TFSMailMsgId& aMailBoxId ); + + virtual TFSMailMsgId SpecifiedSendingMailbox(); + + virtual void ListMailBoxesL( RArray& aMailboxes); + + virtual CFSMailBox* GetMailBoxByUidL( const TFSMailMsgId& aMailBoxId); + + virtual void DeleteMailBoxByUidL( + const TFSMailMsgId& aMailBoxId, + MFSMailRequestObserver& aOperationObserver, + const TInt aRequestId ); + + virtual TDesC& GetBrandingIdL( const TFSMailMsgId& aMailBoxId); + + virtual void MoveMessagesL( + const TFSMailMsgId& aMailBoxId, + const RArray& aMessageIds, + const TFSMailMsgId& aSourceFolderId, + const TFSMailMsgId& aDestinationFolderId ); + + virtual TInt MoveMessagesL( + const TFSMailMsgId& aMailBoxId, + const RArray& aMessageIds, + const TFSMailMsgId& aSourceFolderId, + const TFSMailMsgId& aDestinationFolderId, + MFSMailRequestObserver& aOperationObserver, + TInt aRequestId ); + + virtual void CopyMessagesL( + const TFSMailMsgId& aMailBoxId, + const RArray& aMessageIds, + RArray& aNewMessages, + const TFSMailMsgId& aSourceFolderId, + const TFSMailMsgId& aDestinationFolderId ); + + virtual MDesCArray* GetMrusL( const TFSMailMsgId& aMailBoxId ); + + virtual void SetMrusL( + const TFSMailMsgId& aMailBoxId, + MDesCArray* aNewMruList ); + + virtual const TFSProgress GetLastSyncStatusL( + const TFSMailMsgId& aMailBoxId ); + + virtual TInt CancelSyncL( const TFSMailMsgId& aMailBoxId ); + + // FOLDER HANDLING + + virtual CFSMailFolder* GetFolderByUidL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId ); + + virtual CFSMailFolder* CreateFolderL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId, + const TDesC& aFolderName, + const TBool aSync ); + + virtual void DeleteFolderByUidL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId); + + // MESSAGE FETCH AND STORE + + virtual MFSMailIterator* ListMessagesL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId, + const TFSMailDetails aDetails, + const RArray& aSorting ); + + virtual CFSMailMessage* GetMessageByUidL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailDetails aDetails); + + virtual void DeleteMessagesByUidL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId, + const RArray& aMessages ); + + // MESSAGE STORE OPERATIONS + + virtual CFSMailMessage* CreateMessageToSendL( + const TFSMailMsgId& aMailBoxId ); + + virtual CFSMailMessage* CreateForwardMessageL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aOriginalMessageId, + const TDesC& aHeaderDescriptor ); + + virtual CFSMailMessage* CreateReplyMessageL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aOriginalMessageId, + const TBool aReplyToAll, + const TDesC& aHeaderDescriptor ); + + virtual void StoreMessageL( + const TFSMailMsgId& aMailBoxId, + CFSMailMessage& aMessage ); + + virtual void GetMessagesL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aFolderId, + const RArray& aMessageIds, + RPointerArray& aMessageList, + const TFSMailDetails aDetails ); + + virtual void ChildPartsL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentId, + RPointerArray& aParts); + + virtual CFSMailMessagePart* NewChildPartL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentPartId, + const TFSMailMsgId& aInsertBefore, + const TDesC& aContentType); + + virtual CFSMailMessagePart* NewChildPartFromFileL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentPartId, + const TDesC& aContentType, + const TDesC& aFilePath ); + + /** + * Creates attachment based on file handle + * @param aMailBoxId specifies the mailbox + * @param aParentFolderId specifies the folder where message is + * @param aMessageId specifies message + * @param aParentPartId + * @param aContentType mime type + * @param aFile handle to open file + */ + virtual CFSMailMessagePart* NewChildPartFromFileL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentPartId, + const TDesC& aContentType, + RFile& aFile ); + + virtual CFSMailMessagePart* CopyMessageAsChildPartL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentPartId, + const TFSMailMsgId& aInsertBefore, + const CFSMailMessage& aMessage); + + virtual void RemoveChildPartL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aParentPartId, + const TFSMailMsgId& aPartId); + + virtual CFSMailMessagePart* MessagePartL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId); + + virtual TInt GetMessagePartFileL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId, + RFile& aFileHandle); + + virtual void CopyMessagePartFileL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId, + const TDesC& aFilePath); + + virtual void GetContentToBufferL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId, + TDes& aBuffer, + const TUint aStartOffset); + + virtual void SetContentL( + const TDesC& aBuffer, + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId); + + virtual void RemovePartContentL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const RArray& aPartIds); + + virtual void SetPartContentFromFileL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + const TFSMailMsgId& aMessagePartId, + const TDesC& aFilePath); + + virtual void StoreMessagePartL( + const TFSMailMsgId& aMailBoxId, + const TFSMailMsgId& aParentFolderId, + const TFSMailMsgId& aMessageId, + CFSMailMessagePart& aMessagePart); + + virtual void UnregisterRequestObserver( TInt aRequestId ); + + // MESSAGE SENDING + + virtual void SendL(TFSMailMsgId aMessageId ); + + virtual void SendMessageL( CFSMailMessage& aMessage ); + + // OPERATION HANDLING + + virtual void GoOnlineL( const TFSMailMsgId& aMailBoxId ); + + virtual void GoOfflineL( const TFSMailMsgId& aMailBoxId ); + + virtual TFSProgress StatusL(const TInt aRequestId); + + virtual void CancelL(const TInt aRequestId); + + // Search API + + virtual void SearchL( + const TFSMailMsgId& aMailBoxId, + const RArray& aFolderIds, + const RPointerArray& aSearchStrings, + const TFSMailSortCriteria& aSortCriteria, + MFSMailBoxSearchObserver& aSearchObserver ); + + virtual void CancelSearch( const TFSMailMsgId& aMailBoxId ); + + virtual void ClearSearchResultCache( const TFSMailMsgId& aMailBoxId ); + + virtual void AddObserverL(MFSMailEventObserver& aObserver); + + virtual void RemoveObserver(MFSMailEventObserver& aObserver); + + virtual void SubscribeMailboxEventsL(const TFSMailMsgId& aMailBoxId, + MFSMailEventObserver& aObserver); + + virtual void UnsubscribeMailboxEvents( + const TFSMailMsgId& aMailBoxId, + MFSMailEventObserver& aObserver); + + virtual TSSMailSyncState CurrentSyncState( + const TFSMailMsgId& aMailBoxId); + + virtual TInt WizardDataAvailableL( ); + + /** + * reads connection id from plugin + * + * @param aConnectionId reference to connection id + * @return KErrNone or error code + */ + virtual TInt GetConnectionId( TFSMailMsgId aMailBoxId, TUint32& aConnectionId ); + + /** + * checks from plugin if connection is allowed when roaming + * + * @param aConnectionAllowed + * @return KErrNone or error code + */ + virtual TInt IsConnectionAllowedWhenRoaming( + TFSMailMsgId aMailBoxId, + TBool& aConnectionAllowed ); + + virtual void AuthenticateL( + MFSMailRequestObserver& aOperationObserver, + TInt aRequestId ); + + virtual void SetCredentialsL( + const TFSMailMsgId& aMailBoxId, + const TDesC& aUsername, + const TDesC& aPassword ); + +public: + + /** + * Function to identify which protocol plugin we are working with + * @return MTM id + * @since FSEmail 2.0 + */ + TUid MtmId() const; + + /** + * Returns the implementation ID of the plugin + * + * @return Implementation ID of the plugin + * @since FSEmail 2.0 + */ + TUint PluginId() const; + + /** + * Disconnects mailbox + * + * @param aMailbox unique mailbox id + * @param FSObserver can be pointed at this class (dummy observer) + * @param aRequestId FS async operation request id, can be zero (dummy) + * @param aRemoveAccountAlso boolean to indicate should accound be + * removed afted disconnect, default is EFalse + * @since FSEmail 2.0 + */ + virtual void DisconnectL( + const TFSMailMsgId& aMailBoxId, + MFSMailRequestObserver& aObserver, + const TInt aRequestId, + TBool aRemoveAccountAlso = EFalse ); + + /** + * Fetch content of new mail, used in event handler + * needed because imap idle + * + * @param aMailbox unique mailbox id + * @param aNewId msv id of new mail + * @param aParentId new mail's parent entry id + * @since FSEmail 2.0 + */ + virtual void PopulateNewMailL( + const TFSMailMsgId& aMailboxId, + TMsvId aNewId, + TMsvId aParentId ) = 0; + + /** + * Gets reference to activity timer object, used when clearing + * activity timer in operation complete function (online operation) + * activity timer disconnects mailbox if no operations are running in + * certain period of time + * + * @param aMailbox unique mailbox id + * @return reference to mailbox's activity timer object + * @since FSEmail 2.0 + */ + CIpsPlgTimerOperation& ActivityTimerL( const TFSMailMsgId& aMailBoxId ); + + /* + * Gets reference to sync state handler class + * @return reference to sync state handler + * @since FSEmail 2.0 + */ + CIpsPlgSyncStateHandler& GetSyncStateHandler(); + + /** + * This is called after msv session ready event comes from msv server + * @since FSEmail 2.0 + */ + void CompleteConstructL(); + + + /** + * called if session terminated event is sent by msv server + * @since FSEmail 2.0 + */ + void SessionTerminated(); + + /** + * Does checks to see is connection attempt possible and allowed + * @param aMailboxId mailbox to do the checks to + * @param aReason (possible) reason code if EFalse is returned + * @return EFalse if can't proceed with connect + * @since FSEmail 2.0 + */ + TBool CanConnectL( const TFSMailMsgId& aMailboxId, + TInt& aReason ); + + /* + * Gludge type check is plugin instance running under ui process + * needed in event handler + * @since FSEmail 2.0 + */ + TBool IsUnderUiProcess(); + +protected: + + /* + * Constructor + * @param aFSPluginId uint of fs plugin implementation, imap or pop + */ + CIpsPlgSosBasePlugin( const TUint aFSPluginId ); + + /* + * Called in subclasses ConstructL functions + */ + void BaseConstructL(); + + /** + * passes completion event to protocol plugin + * If certain operation completion requires special handling, + * protocol plugin should keep the id of the operation + * so it can know, that this certain operation has completed. + */ + virtual void HandleOpCompletedL( + CIpsPlgSingleOpWatcher& aOpWatcher, + TInt aCompletionCode ) = 0; + + /** + * Sends pending messages from outbox, if user manually start + * send-receive operation. + */ + void EmptyOutboxL( const TFSMailMsgId& aMailBoxId ); + + /** + * Checks if offline mode is activated + */ + TBool OfflineModeSetL(); + + /** + * Checks if given local feature is turned on + */ + TBool CIpsPlgSosBasePlugin::LocalFeatureL( + const TUid& aCenRepUid, + const TUint32 aKeyId, + const TUint32 aFlag ); + + /** + * Checks if we are roaming and are we allowed to + * connect if we are. + */ + TBool RoamingCheckL(); + + /** + * Check network registration status i.e. are we in gsm or wlan network + */ + TInt RegistrationStatusL(); + + /** + * Called from Imap Plugin's MoveMessagesL if destination folder + * is draft folder. + */ + void MoveMessagesToDraftL( + const TFSMailMsgId& aMailBoxId, + const RArray& aMessageIds, + const TFSMailMsgId& aSourceFolderId, + const TFSMailMsgId& aDestinationFolderId ); + +private: + + /** + * Returns a cached entry objects or creates new objects and keeps them + * in the cache. + * Returned objects should not be deleted in the calling method. + * Pointers are set NULL in the case of error. + * Pointers are valid until the method is called next time + * Method should be used only for entries representing messages (not + * folders or attachements). + */ + void GetMessageEntryL( + TMsvId aId, + CMsvEntry*& aMessageEntry, + CImEmailMessage*& aImEmailMessage ); + + /* + * Cleans up the cached messages entries that have accessed with + * GetMessageEntryL() + */ + void CleanCachedMessageEntries(); + + /** + * Cancel all online operations, use before disconnect + */ + void CancelAllOnlineOperations( const TFSMailMsgId& aMailboxId ); + + /** + * Checks is there any connect operations running, meaning + * that we are "connected" state + */ + TBool ConnOpRunning( const TFSMailMsgId& aMailBoxId ); + + /** + * Cancel, delete and remove operation from iOperations array. + * Send Sync Completed event to plugin if operation is sync op + */ + void DeleteAndRemoveOperation( + const TInt aOpArrayIndex, TInt aCompleteCode ); + +private: + + /** + * Maps symbian msv api's folder type to fs folder type + */ + TFSFolderType GetFolderType( + CMsvEntry* aEntry, + TFSMailMsgId aFolderId ); + + /** + * Set folders to blocklist in online, offline or in both cases. + * Operations (move/copy) allowed only between remote folders + * (+IMAP inbox) in online mode and Outbox->Drafts + */ + void BlockCopyMoveFromFoldersL( + CMsvEntry* aFolderEntry, + TFSMailMsgId aFolderId, + CFSMailFolder& aFSMailFolder ); + + /** + * Set IMEI code to service's TEntry.iDescription + */ + void StoreIMEIToMailboxL( const TMsvId aMailboxId ); + + /** + * Deletes the activity timer related to the specified mailbox, if it exists. + * If no timer is found, method returns silently + * @param aMailBoxId specifies the mailbox + */ + void DeleteActivityTimer( const TFSMailMsgId& aMailBoxId ); + +protected: // internal enumerations and data structures + + enum TSyncStatesInCenRep + { + ESyncFinishedSuccessfully = 103, + ESyncError, + ESyncCancelled + }; + +private: + + CIpsPlgSosBasePlugin(); + +protected: + + // uint of fs plugin implementation, pop of imap + const TUint iFSPluginId; + + // Symbian message server session + CMsvSession* iSession; + + // Message mapper instance + CIpsPlgMsgMapper* iMsgMapper; + + //array of operation watchers + RPointerArray iOperations; + + //array of activity timers + RPointerArray iActivitytimers; + + // contains smtp protocol related functions + CIpsPlgSmtpService* iSmtpService; + + // Cached Symbian message data structures + CMsvEntry* iCachedEntry; + CImEmailMessage* iCachedEmailMessage; + + // read and write most recent used address list + CIpsPlgMruList* iMruList; + + // Search Engine + CIpsPlgSearch* iSearch; + + // interface to mailbox settings + CIpsSetDataApi* iSettingsApi; + + // maps symbian events to fs events + CIpsPlgEventHandler* iEventHandler; + + // keeps track is sync started in some plugin instance + // or in always online needed when mailbox status is asked + CIpsPlgSyncStateHandler* iSyncStateHandler; + + RConnectionMonitor iConMon; + + // flag indicates is msv session ready + TBool iSessionOk; + + TBuf iIMEI; + + // branding id i.e. "yahoo.com" or "google" + HBufC* iBrandingId; + + // flag indicates is instance under FSEmail.exe + TBool iIsUnderUiProcess; + + // delete draft synchronously + CActiveSchedulerWait iWait; + // + }; + +#endif /* IPSPLGSOSBASEPLUGIN_H */ + +// End of File