diff -r 780f926bc26c -r f83bd4ae1fe3 emailservices/emailclientapi/inc/emailclientapiimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailclientapi/inc/emailclientapiimpl.h Thu Jun 24 14:32:18 2010 +0300 @@ -0,0 +1,232 @@ +/* +* Copyright (c) 2010 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: Definition of Email API main interface. +* +*/ + +#ifndef EMAILCLIENTAPIIMPL_H +#define EMAILCLIENTAPIIMPL_H + + +#include +#include "emailapiutils.h" +#include "cfsmailcommon.h" +#include "mfsmaileventobserver.h" +#include +#include "emailclientpluginmanager.h" + + +using namespace EmailInterface; + +class CFSMailBox; +class MEmailEventObserver; +class CVwsSessionWrapper; +class CFSMailPlugin; +class TFSMailMsgId; +class CEmailMailboxCache; +class CFSMailClient; + +/** +* "Framework" class including plugin management +* @since S60 v5.2 +*/ +NONSHARABLE_CLASS( CEmailClientApi ) : public CBase, public MEmailClientApi +{ +public: + /** + * Constructor + * @return + */ + static CEmailClientApi* NewL(); + + /** + * + */ + CEmailClientApi(); + +public: // from MEmailInterface + TEmailTypeId InterfaceId() const; + + void Release(); + +public: // from MEmailClientApi + + /** @see MEmailClientApi */ + MEmailMailbox* MailboxL( const TMailboxId& aId ); + + /** @see MEmailClientApi */ + MEmailMailbox* MailboxL( const TPtrC& aAddress ); + + /** + * Gets all mailboxes in pointer array. It is recommended to free other + * mailboxes besides needed one to optimise memory usage. + */ + TInt GetMailboxesL( RMailboxPtrArray& aMailboxes ); + + /** + */ + void LaunchEmailL( const TLaunchPolicy aPolicy ); + +public: // new methods + + /** + * Gets array of mailbox ids + * @param aMailboxes mailbox ids from all plugins + * @return number of mailboxes returned in aMailboxes + */ + TInt GetMailboxIdsL( REmailMailboxIdArray& aMailboxes ); + +private: + + /** + * Constructor + */ + void ConstructL(); + + /** + * Destructor + */ + ~CEmailClientApi(); + + /** + * Push ECom implementation info to cleanup operation to cleanup stack + */ + void CleanupImplInfoPushL( RPointerArray& aArray ); + + /** + * Cleanup operation for ECom implementation info + */ + static void CleanupImplInfo( TAny* aAny ); + + + // Group of methods for book keeping of loaded protocol plugins by this object. + // In certain situations it is preferable to have a plugin in memory + // instead of loading/unloading frequently. + + /** Increases plugin reference count if CEmailClientApi already doesn't + * have active instance. When plugin is needed internally, this method + * should be accessor to a plugin. Counterpart is ReleasePlugin() when + * CEmailClientApi doesn't itself need plugin any more. + */ + CFSMailPlugin* UsePlugin( CPluginData& aPluginData ); + + /** + * For finding plugin data + */ + TInt IndexOfLoadedPluginData( const TPluginData& aPluginData ) const; + + /** + * Used in comparing plugin data in array (part of find algorithm) + */ + static TBool PluginDataEquals( const TPluginData& a1, const TPluginData& a2 ); + + /** + * This object doesn't need related protocol plugin + */ + void ReleasePlugin( CPluginData& aPluginData ); + + /** + * This object doesn't need any protocol plugin + */ + void ReleaseAllPlugins(); + + /** + * Return mailbox cache, creates it when called first time + */ + CEmailMailboxCache& MailboxInfoCacheL(); + + /** + * Caches mailbox ids and their mapping to related plugin data for quick + * lookup. When a mailbox with specific id is next time asked, related + * protocol plugin is already known. + */ + void UpdateMailboxInfoCacheL(); + + /** + * Internal, used from UpdateMailboxInfoCacheL + */ + TBool CachePluginMailboxesL( + CPluginData& aPluginData, + CFSMailPlugin& aPlugin ); + +private: + typedef RPointerArray RPluginDataArray; + + /** + * Iterator for CPluginData elements in an array + */ + class TPluginIterator + { + public: + // constructor + inline TPluginIterator( RPluginDataArray& aArray ) : + iArray( aArray ), iIndex( 0 ) {} + + /** + * return next element + */ + CPluginData* Next(); + private: + // iterator array + RPluginDataArray& iArray; + // current iterator index + TInt iIndex; + }; + +private: + // plugin data array for all protocol plugins + RPluginDataArray iPluginDataArray; + + // singleton instance counter + TInt iInstanceCounter; + + // book keeping of loaded plugins + RArray iLoadedPluginsArray; + + // Mailbox ids are cached when first time listed. Related plugin uid + // is include in the cache. + CEmailMailboxCache* iMailboxCache; + + CFSMailClient* iMailClient; + +}; + +/** +* Email application launcher. +*/ +NONSHARABLE_CLASS( CEmailLauncher ) : public CBase +{ +public: + static CEmailLauncher* NewL(); + + ~CEmailLauncher(); + + /** + * + */ + void LaunchL( const TMailboxId& aMailboxId ); +private: + + CEmailLauncher(); + + void ConstructL(); + + // Owned window server session. + CVwsSessionWrapper* iViewSrvSession; +}; + + +#endif // EMAILCLIENTAPIIMPL_H + +// End of file