ipsservices/ipssosplugin/inc/ipsplgeventhandler.h
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /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 <e32property.h>
+
+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 );
+    
+    //<cmail>    
+    /**
+    *
+    *
+    */
+    void HandleMediaChangedL( TAny* aArg1, TAny* aArg2, TAny* aArg3 );
+    
+    /**
+    *
+    *
+    */
+    TUid MtmId() const;
+    //</cmail>
+    
+    /**
+    *
+    *
+    */
+    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<MFSMailEventObserver>& 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<TFSMailMsgId>& 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<TFSMailMsgId>& aFSArray,
+            const CMsvEntrySelection* aSelection,
+            TUint aMtmUid );
+
+    CRepository*                            iCenRep;
+    CIpsSetDataApi*                         iSettingsApi;
+
+    // not owned
+    CMsvSession*                            iSession;
+
+    CIpsPlgSosBasePlugin&                   iBasePlugin;
+
+    //not owned.
+    MFSMailEventObserver*                   iPluginObserver;
+
+    RPointerArray<CMBoxEventObserver>       iMBoxObservers;
+
+    RPointerArray<CIPSAccountInfo>          iIPSAccounts;
+
+    RPointerArray<CIpsPlgSettingsObserver>  iIPSSettingsObservers;
+
+    TBool                                   iIsConnected;
+
+    CIpsPlgSettingsObserver*                iSettingsObserver;
+
+    RPointerArray<MIpsPlgPropertyObserver>  iPropertyObservers;
+
+    CIpsPlgPropertyWatcher*                 iPropertyWatcher;
+
+    TPckgBuf<TIpsPlgPropertyEvent>          iPropertyBuf;
+
+    // base plugin id
+    TUint                                   iPluginId;
+
+    //not owned
+    MIpsPlgConnectOpCallback*               iConnOpCallback;
+
+    RArray<TMsvId>                          iImapFolderIds;
+
+    };
+
+
+#endif // IPSPLGEVENTHANDLER_H
+
+// End of file