diff -r d189ee25cf9d -r 3533d4323edc emailservices/emailserver/cmailhandlerplugin/inc/cmailcpshandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailserver/cmailhandlerplugin/inc/cmailcpshandler.h Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,502 @@ +/* +* Copyright (c) 2008 - 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: Class to handle content publishing for widget +* +*/ + + +#ifndef __CMAILCPSHANDLER_H__ +#define __CMAILCPSHANDLER_H__ + +#include +#include // base class +#include + +// FSMailServer classes (base classes and callback interfaces) +#include "fsnotificationhandlerbase.h" +#include "fsnotificationhandlernotifierinitiator.h" +#include "fsnotificationhandlernotifierinitiatorobserver.h" +// Member classes +#include "cmailcpssettings.h" // MMailCpsSettingsCallback + +class CMailCpsIf; +class CFSMailBox; +class CMailMailboxDetails; +class CMailCpsSettings; +class CMailExternalAccount; +class CMailPluginProxy; +class CEmailObserverPlugin; +class CMailCpsUpdateHelper; + +/** + * CMail ContentPublishingService Handler class + * Class implementing a handler functionality towards rest of the MailServer + * + * @lib fsmailserver.exe + * @since S60 v5.1 + */ +NONSHARABLE_CLASS( CMailCpsHandler ) : + public CFSNotificationHandlerBase, + public MMailCpsSettingsCallback, + public EmailInterface::MEmailObserverListener + { +public: + + /** + * Two-phased constructor. + * @param aOwner Owner and manager of this handler. + */ + static CMailCpsHandler* NewL( MFSNotificationHandlerMgr& aOwner ); + + /** + * Destructor. + */ + virtual ~CMailCpsHandler(); + + /** + * From MMailCpsSettingsCallback + */ + virtual void SettingsChangedCallback(); + + /** + * + */ + void SetUpdateNeeded( const TFSMailMsgId aMailbox ); + + /** + * Wraps all "Update*" methods + */ + void UpdateFullL(); + + /** + * Method that actually does the full update. + * Used by CMailCpsUpdateHelper. + */ + void DoUpdateFullL(); + + /** + * + */ + void UpdateMailboxesL(TInt aInstance, const TDesC& aContentId); + + /** + * + */ + void LaunchWidgetSettingsL( const TDesC& aContentId ); + + /** + * + */ + void LaunchEmailUIL( const TDesC& aContentId ); + + /** + * + */ + void LaunchEmailWizardL( const TDesC& aContentId ); + /** + * Launches an application based on the given contentId + * This method is for external (3rd party) accounts + * @param aContentId specifies the widget that was pressed by the user + */ + void LaunchExtAppL( const TDesC& aContentId ); + + /** + * + */ + void DissociateWidgetFromSettingL( const TDesC& aContentId ); + + /** + * Return total number of mailboxes (native+3rd party) in the system + */ + TInt TotalMailboxCountL(); + + /** + * Return total number of native mailboxes in the system + */ + TInt TotalIntMailboxCount(); + + /** + * Return total number of 3rd party mailboxes in the system + */ + TInt TotalExtMailboxCountL(); + + /** + * Gets correct localised format for time (or date) string + */ + static HBufC* GetMessageTimeStringL( TTime aMessageTime ); + + // From MEmailObserverListener + void EmailObserverEvent( EmailInterface::MEmailData& aData ); + + /** + * + */ + void SetWaitingForNewMailbox( const TDesC& aContentId ); + + /** + * + */ + void CleanWaitingForNewMailbox(); + + /** + * + */ + void SetWaitingForNewWidget( const TFSMailMsgId aMailbox ); + + /** + * + */ + void CleanWaitingForNewWidget(); + + /** + * + */ + TFSMailMsgId WaitingForNewWidget(); + + /** + * + */ + void AssociateWidgetToSetting( const TDesC& aContentId, + const TFSMailMsgId aMailbox ); + + /** + * + */ + TBool Associated( const TDesC& aContentId ); + + /** + * + */ + void DisplayHSPageFullNoteL(); + + /** + * get count of unread messages in inbox + * @param aMailbox mailbox id + */ + TInt GetUnreadCountL( TFSMailMsgId aMailbox); + +protected: + /** + * From CFSNotificationHandlerBase + * see baseclass for details + */ + virtual TBool CapabilitiesToContinueL( + TFSMailEvent aEvent, + TFSMailMsgId aMailbox, + TAny* aParam1, + TAny* aParam2, + TAny* aParam3 ) const; + + /** + * From CFSNotificationHandlerBase + * see baseclass for details + */ + virtual void HandleEventL( + TFSMailEvent aEvent, + TFSMailMsgId aMailbox, + TAny* aParam1, + TAny* aParam2, + TAny* aParam3 ); + +private: + /** + * Constructor + * @param aOwner reference to owning class. CpsHandler is just one of + * the handlers running in MailServer process. + */ + CMailCpsHandler( MFSNotificationHandlerMgr& aOwner ); + void ConstructL(); + + // Initialization methods + /** + * Resets everything + */ + void Reset(); + + /** + * Initializes native accounts + */ + void InitializeL(); + + /** + * Initializes external accounts + */ + void InitializeExternalAccountsL(); + + // Creation methods + /** + * Creates an instance of mailboxdetails based on parameters + * @param aMailbox mailbox + * @return pointer to instance of CMailMailboxDetails. + * Caller gets ownership of the returned object. + */ + CMailMailboxDetails* CreateMailboxDetailsL( CFSMailBox& aMailbox ); + + /** + * Finds mailbox details instance from the local array + * @param aMailbox mailbox id + * @return pointer to instance of CMailMailboxDetails + */ + CMailMailboxDetails* FindMailboxDetails( TFSMailMsgId aMailbox ); + + /** + * + */ + void CMailCpsHandler::UpdateMailboxNameL( const TInt aMailBoxNumber, + const TInt aWidgetInstance, + const TInt aRowNumber ); + + /** + * Handles publishing of message details + */ + void UpdateMessagesL( const TInt aMailBoxNumber, + const TInt aWidgetInstance, + const TInt aMessageNumber, + const TInt aFirstRow ); + + /** + * + */ + void UpdateEmptyMessagesL( const TInt aWidgetInstance, + const TInt aFirstRow ); + + /** + * Handles publishing of mailbox icon + */ + void UpdateMailBoxIconL( const TInt aMailBoxNumber, + const TInt aWidgetInstance, + const TInt aRowNumber ); + + /** + * Handles publishing of unseen icon + */ + void UpdateIndicatorIconL( const TInt aMailBoxNumber, + const TInt aWidgetInstance, + const TInt aRowNumber ); + + // Event handling subroutines + /** + * handles new mailbox event + * @param aMailbox mailbox id + */ + void HandleNewMailboxEventL( const TFSMailMsgId aMailbox ); + + /** + * Handles mailbox renamed event. + * @param aMailbox mailbox id + */ + void HandleMailboxRenamedEventL( const TFSMailMsgId aMailbox ); + + /** + * handles mailbox deleted event + * @param aMailbox mailbox id + */ + void HandleMailboxDeletedEventL( const TFSMailMsgId aMailbox ); + + /** + * handles new mail event + * @param aMailbox mailbox id + * @param aParam1 contains event specific parameters + * @param aParam2 contains event specific parameters + */ + void HandleNewMailEventL( TFSMailMsgId aMailbox, TAny* aParam1, TAny* aParam2 ); + + /** + * handles mail deleted event + * @param aMailbox mailbox id + * @param aParam1 contains event specific parameters + * @param aParam2 contains event specific parameters + */ + void HandleMailDeletedEventL( TFSMailMsgId aMailbox, TAny* aParam1, TAny* aParam2 ); + + /** + * get count of unseen messages in inbox + * @param aMailbox mailbox id + */ + TInt GetUnseenCountL( TFSMailMsgId aMailbox); + + /** + * Tells if outbox is empty + * @param aMailbox mailbox id + */ + TBool IsOutboxEmptyL( TFSMailMsgId aMailbox); + + /** + * From CFSNotificationHandlerBase + * Not used + */ + virtual void TurnNotificationOn(); + + /** + * From CFSNotificationHandlerBase + * Not used + */ + virtual void TurnNotificationOff(); + + /** + * + */ + TInt GetMailIcon( CFSMailMessage* aMsg ); + + /** + * + */ + TInt GetUnreadMsgIcon( CFSMailMessage* aMsg ); + + /** + * + */ + TInt GetReadMsgIcon( CFSMailMessage* aMsg ); + + /** + * + */ + TInt GetUnreadCalMsgIcon( CFSMailMessage* aMsg ); + + /** + * + */ + TInt GetReadCalMsgIcon( CFSMailMessage* aMsg ); + + /** + * + */ + TBool IsValidDisplayName(const TDesC& aDisplayName); + + /** + * + */ + void PublishMessageL( TInt aWidgetInstance, CFSMailMessage& aMessage, + const TDesC& aSenderName, + const TDesC& aSubject, + const TDesC& aTime, TInt aFirstRow); + + /** + * Checks if the given message is already know/published + * @param aMailbox specifies the mailboxdetails object where duplicate is searched from + * @param aMsgId Id of the new message + * @return ETrue if duplicate, EFalse if new message + */ + TBool IsDuplicate( const CMailMailboxDetails& aMailbox, const TFSMailMsgId& aMsgId ); + + // + // Private methods related to 3rd party email widget publishers + // + /** + * Removes all plugin proxies (and plugins) that are not listed in aAccounts + * @param aAccounts up-to-date list of external (3rd party) email accounts + * that are specified in settings + */ + void RemoveUnusedPluginsL( RPointerArray& aAccounts ); + + /** + * Goes through the array of external accounts and instantiates (newly added) + * 3rd party plugins + * @param aAccounts up-to-date list of external (3rd party) email accounts + * that are specified in settings + */ + void AddNewPluginsL( RPointerArray& aAccounts ); + + /** + * Goes through the array of existing 3rd party plugin (proxies) and + * lets them take the accounts given in the param array. + * Plugin proxies also update the widget data. + * @param aAccounts up-to-date list of external (3rd party) email accounts + * that are specified in settings + */ + void SelectAndUpdateExtAccountsL( RPointerArray& aAccounts ); + + /** + * Checks whether aAccounts array has entries relating to plugin with id aPluginId + * @param aPluginId 3rd party plugin identifier (implementation uid) + * @param aAccounts array of 3rd party email account information + * @return true or false + */ + TBool IsPluginInArray( const TInt aPluginId, RPointerArray& aAccounts ); + + /** + * Checks whether aPlugins array has entries relating to plugin with id aPluginId + * @param aPluginId 3rd party plugin identifier (implementation uid) + * @param aPlugins array of plugin proxies + * @return true or false + */ + TBool IsPluginInArray( const TInt aPluginId, RPointerArray& aPlugins ); + + /** + * Goes through iExternalPlugins array and finds correct entry + * @param aContentId specifying a widget/account + * @return correct plugin proxy instance pointer (ownership not transferred) + * if not found, NULL is retuned + */ + CMailPluginProxy* GetExtPluginL( const TDesC& aContentId ); + +private: // data + CEikonEnv* iEnv; + // pointer to liw wrapper that handles actual publishing + CMailCpsIf* iLiwIf; + // pointer to settings class that handles settings loading and observing logic + CMailCpsSettings* iSettings; + // local cache of mailbox details + RPointerArray iAccountsArray; + // array of plugin proxies. One plugin proxy handles one 3rd party plugin and its accounts + RPointerArray iExternalPlugins; + // tells if email wizard is started from widget and it is still running + // and to which widget next added account is added. + HBufC* iWaitingForNewMailbox; + // + TFSMailMsgId iWaitingForNewWidget; + // + CAknGlobalNote* iQuery; + // Helper for limiting rate of updates to Homescreen widget + CMailCpsUpdateHelper* iUpdateHelper; + }; + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- + +// Helper class for limiting rate of updates to Homescreen widget + +// Don't make widget updates more often than this delay (milliseconds) +#define KMailCpsHandlerUpdateDelay 1000 + +class CMailCpsUpdateHelper : public CTimer + { + public: + static CMailCpsUpdateHelper* NewLC( CMailCpsHandler *aHandler ); + static CMailCpsUpdateHelper* NewL( CMailCpsHandler *aHandler ); + + virtual ~CMailCpsUpdateHelper(); + + // Notify that Homescreen widget(s) should be updated + void UpdateL(); + + protected: + void ConstructL(); + virtual void RunL(); + TInt RunError( TInt aError ); + + private: + CMailCpsUpdateHelper( CMailCpsHandler *aHandler ); + + // Performs the update, resets the timer, etc. + void DoUpdateL(); + + // Handler to use to do updates (not owned) + CMailCpsHandler *iCpsHandler; + // Whether or not an update is pending + TBool iPending; + }; + + +#endif //__CMAILCPSHANDLER_H__