diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssosplugin/inc/ipsplgeventhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssosplugin/inc/ipsplgeventhandler.h Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,456 @@ +/* +* 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 classes MIpsPlgPropertyObserver, CMBoxEventObserver, CIPSAccountInfo, CIpsPlgEventHandler +* +*/ + + +#ifndef IPSPLGEVENTHANDLER_H +#define IPSPLGEVENTHANDLER_H + + +#include "ipsplgsettingsobserver.h" +#include "ipsplgpropertywatcher.h" +#include + +class CIpsPlgSosBasePlugin; +class CMsvSession; +class CRepository; +class CIpsPlgSettingsObserver; +class CIpsPlgSyncStateObserver; +class CIpsSetDataApi; +/** +* MIpsPlgPropertyObserver +* +*/ +class MIpsPlgPropertyObserver + { +public: + virtual void HandlePropertyEventL( + TInt aEvent, + TInt aMailbox, + TInt aPluginId , + TInt aError ) = 0; + }; + +/** +* Helper class to store observer references +*/ +class CMBoxEventObserver : public CBase + { +public: + CMBoxEventObserver( + MFSMailEventObserver& aObserver, + const TFSMailMsgId& aMBoxId ) : + iObserver( aObserver ), + iMBoxId( aMBoxId ) { } + + MFSMailEventObserver& iObserver; + const TFSMailMsgId iMBoxId; + }; + +/** +* Helper class to keep track of accounts +*/ +class CIPSAccountInfo : public CBase + { +public: + + static CIPSAccountInfo* NewL( + const TDesC& aName, + const TFSMailMsgId& aMBoxId ); + + virtual ~CIPSAccountInfo(); + + HBufC* iName; + const TFSMailMsgId iMBoxId; + +private: + + CIPSAccountInfo( const TFSMailMsgId& aMBoxId ); + + void ConstructL( const TDesC& aName ); + }; + +/** + * + * @lib ipssosplugin.lib + * @since + */ +class CIpsPlgEventHandler : public CBase, + public MMsvSessionObserver, + public MIpsPlgSettingsObserverCallback, + public MIpsPlgPropertyObserver, + public MFSMailExceptionEventCallback + { + +public://from MFSMailExceptionEventCallback + + void ExceptionEventCallbackL( TFSMailMsgId aMailboxId, TInt aEventType, TBool aResponse ); + +public: //from MIpsPlgPropertyObserver + void HandlePropertyEventL( + TInt aEvent, TInt aMailbox, TInt aPluginId, TInt aError ); + +public: // from MMsvSessionObserver + + virtual void HandleSessionEventL( + TMsvSessionEvent aEvent, + TAny* aArg1, TAny* aArg2, TAny* aArg3); + +public: //from MIpsPlgSettingsObserverCallback + + virtual void SettingsChangedL( TFSMailMsgId aAccount ); + +public: + + /** + * Two-phased constructor. + */ + static CIpsPlgEventHandler* NewL( + CIpsPlgSosBasePlugin& aBasePlugin ); + + /** + * Destructor. + */ + virtual ~CIpsPlgEventHandler(); + + /** + * Sets msv session pointer, and does initialization that need + * valid session + * @param aSession valid msv session pointer + */ + void CompleteConstructL( CMsvSession* aSession ); + + /** + * Add observer for common plugin events like changes in mailboxes + * @param aObserver interface to observer object + */ + void AddPluginObserverL( MFSMailEventObserver* aObserver ); + + /** + * Removes plugin observer + * @param aObserver indicates object to be removed + */ + void RemovePluginObserver( MFSMailEventObserver* aObserver ); + + /** + * Sets observer to mailbox events like changes in messages and folders + * under mailbox + * @param aMailboxId FS mailbox id, corresponds + * imap/pop msv service entry id + * @param aObserver interface to observer object + * @param aKey key to mailbox settings + */ + void SubscribeMailboxEventsL( + const TFSMailMsgId& aMailboxId, + MFSMailEventObserver& aObserver, + TUint32 aKey ); + + /** + * Removes mailbox event observer + * @param aMailboxId fs mailbox id + * @param aObserver observer object to be removed + */ + void UnsubscribeMailboxEvents( + const TFSMailMsgId& aMailboxId, + MFSMailEventObserver& aObserver ); + + /** + * Signal event to all plugin instances via p&s (property) api + * @param aMailboxId entry id to mailbox + * @param aEvent event enumeration + * @param aError error code + * @return error code from RProperty::Set function + */ + TInt SetNewPropertyEvent( TInt aMailbox, TInt aEvent, TInt aError ); + + /** + * Adds property observer, p&s (property) events are signaled to these + * observers + * @param aObservers interface to observer object + * @return error code from RProperty::Define function + */ + TInt RegisterPropertyObserverL( MIpsPlgPropertyObserver* aObserver ); + + /** + * Removes property observer + * @param aObserver pointer to observer to be removed, if null or + * unregisterd observer then function simply returns + */ + void UnRegisterPropertyObserver( MIpsPlgPropertyObserver* aObserver ); + + /** + * Used by CIpsPlgPropetyWatcher active object + * @param aEvent property event + */ + void NotifyPropertyEventL( TIpsPlgPropertyEvent aEvent ); + + /** + * used to inform ui offline state if connection attempt + * was not successfull + * @param aAccount FS mailbox id + */ + void SignalMailboxOfflineStateL( const TFSMailMsgId& aAccount ); + + /** + * Send user password query request to fs email ui + * @param aMbox entry id of mailbox service + * @param aCallback callback interface to connection operation, defaut NULL + */ + void QueryUsrPassL( TMsvId aMbox, MIpsPlgConnectOpCallback* aCallback=NULL ); + + /** + * Send user password (=credentials) set signal to all plugin + * instances via p&s (property) mechanism + * @param aMailboxId entry id of mailbox + * @param aCancelled indicates is user cancelled password dialog + */ + void SignalCredientialsSetL( TInt aMailboxId, TBool aCancelled ); + +private: + + /** + * Checks the source type of event and also + * checks is the event from IPS type ( imap/pop ) entry + * + * @param aSourceType return parameted indicating is the source: + * -service + * -message + * -folder + * + * @return ETrue if event is from IPS source + */ + TBool IsEventFromIpsSourceL( TAny* aArg1, + TUid& aSourceType, + TMsvEntry& aEntry ); + + /** + * Passes events to FS framework after a delay. + * NOTE: delay not implemented until there is proof to its necessity + */ + void SendDelayedEventL( + TFSMailEvent aEvent, + TFSMailMsgId aMailbox, + TAny* aArg1, + TAny* aArg2, + TAny* aArg3 ); + + /** + * gets TMsvIds of all IPS mail accouts for later use. + * @param aAccounts Reference to list of accounts + */ + void IPSAccountsL(); + + /** + * + * + */ + void HandleEntriesCreatedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 ); + + /** + * + * + */ + void HandleEntriesMovedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 ); + + /** + * + * + */ + void HandleEntriesDeletedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 ); + + /** + * + * + */ + void HandleEntriesChangedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 ); + + // + /** + * + * + */ + void HandleMediaChangedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 ); + + /** + * + * + */ + TUid MtmId() const; + // + + /** + * + * + */ + TBool IsConnectionChangeL( TAny* aArg1, TAny* aArg2 ); + + /** + * + * + */ + TBool IsAccountNameChangeL( TAny* aArg1, TAny* aArg2 ); + + /** + * Relays connection state change events to framework. + * It is protocol plugin's responsibility to choose correct + * event to pass to framework. + */ + + void RelayConnectionEventL( + TFSMailMsgId aMBoxId, + TSSMailSyncState aNewState ); + + + /** + * Appends settings observer for each mailbox + * @param aSettingKey central repository key to observe. + */ + void AppendSettingsObserverL( + TFSMailMsgId aAccount, + TUint32 aSettingKey ); + + /** + * Removes mailbox's settings observer + * @param aMailboxId mailbox who's settings observer is to be removed. + */ + void RemoveSettingsObserver( TFSMailMsgId aMailboxId ); + + MFSMailEventObserver* MailboxObserverL( + TFSMailMsgId aMailbox ); + void MailboxObserversL( + TFSMailMsgId aMailbox, + RPointerArray& aObservers ); + + /** + * Constructor + */ + CIpsPlgEventHandler( + CIpsPlgSosBasePlugin& aBasePlugin ); + + /** + * Constructor for leaving methods + */ + void ConstructL( ); + + /** + * Checks for duplicate accounts + */ + TBool AccountExistsL( const TMsvEntry& aEntry ); + + /** + * Founds correct msg entries that are directly under folder. + * Parent is a inbox or subscribed folder in IMAP, and service + * in POP + */ + void FindCorrectDeletedEntryAndParentL( + const TMsvEmailEntry& aParent, + const CMsvEntrySelection& aDeletedIds, + TFSMailMsgId& aFSParent, + RArray& aFSDeletedArray ); + + + /** + * Saves last signalled sync status to settings + */ + void SaveSyncStatusL( TMsvId aMailboxId, TInt aState ); + + /** + * Appends folder id to array if not already in there + */ + void SetFolderIdToArrayL( TMsvId aNewId ); + + /** + * Checks if folder exists in the array and removes it. + * Returns true in case of folder id, + * otherwise we have a message deleted. + */ + TBool MatchFolderIdFound( TMsvId aDeletedId ); + + /** + * Passes root folders to recursive function + */ + void CollectSubscribedFoldersL( TMsvId aMailboxId ); + + /** + * Sets property event and defines property if not yet defined + */ + TInt SetProperty( TIpsPlgPropertyEvent aEvent ); + + /** + * Signal sync started event via p&s api to all plugin instances + */ + void SignalStartSyncL( const TFSMailMsgId& aAccount ); + + /** + * Signal sync completed event via p&s api to all plugin instances + */ + void SignalSyncCompletedL( const TFSMailMsgId& aAccount, TInt aError ); + +private: // datak + + inline TFSMailMsgId SymId2FsId( TMsvId aId, TUint aMtmUid ); + + inline TFSMailMsgId SymId2FsId( const TMsvEntry& aEntry ); + + /** + * Fills RArray FSMessage objects created from CMsvEntrySelection + */ + inline void FillFSMessageArray( + RArray& aFSArray, + const CMsvEntrySelection* aSelection, + TUint aMtmUid ); + + CRepository* iCenRep; + CIpsSetDataApi* iSettingsApi; + + // not owned + CMsvSession* iSession; + + CIpsPlgSosBasePlugin& iBasePlugin; + + //not owned. + MFSMailEventObserver* iPluginObserver; + + RPointerArray iMBoxObservers; + + RPointerArray iIPSAccounts; + + RPointerArray iIPSSettingsObservers; + + TBool iIsConnected; + + CIpsPlgSettingsObserver* iSettingsObserver; + + RPointerArray iPropertyObservers; + + CIpsPlgPropertyWatcher* iPropertyWatcher; + + TPckgBuf iPropertyBuf; + + // base plugin id + TUint iPluginId; + + //not owned + MIpsPlgConnectOpCallback* iConnOpCallback; + + RArray iImapFolderIds; + + }; + + +#endif // IPSPLGEVENTHANDLER_H + +// End of file