emailservices/emailserver/cmailhandlerplugin/inc/cmailpluginproxy.h
branchRCL_3
changeset 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailserver/cmailhandlerplugin/inc/cmailpluginproxy.h	Fri Feb 19 22:37:30 2010 +0200
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2009 - 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: This file defines class CMailMessageDetails.
+*
+*/
+
+#ifndef CMAILPLUGINPROXY_H_
+#define CMAILPLUGINPROXY_H_
+
+#include <e32def.h>
+#include <e32base.h>
+#include <emailobserverplugin.h>
+#include <memailobserverlistener.h>
+#include <memailmailboxdata.h>
+
+class CMailExternalAccount;
+class CMailCpsIf;
+
+/**
+ * Class that represents the 3rd party email widget plugin to the rest of the cps logic
+ * Also takes care of all the email accounts that the plugin handles
+ * @lib cmailhandlerplugin.lib
+ * @since S60 v9.2
+ */
+NONSHARABLE_CLASS( CMailPluginProxy ) : public CBase, public EmailInterface::MEmailObserverListener
+    {
+public:
+    static CMailPluginProxy* NewL(
+        const TInt aPluginId,
+        CMailCpsIf& aPublisher );
+
+    virtual ~CMailPluginProxy();
+    
+    // From MEmailObserverListener
+    /**
+     * Called by 3rd party plugins when there are chnages in the data to be published
+     * @param aData offers access to all the necessary data needed for publishing data on widget
+     */
+    void EmailObserverEvent( EmailInterface::MEmailData& aData );
+
+    /**
+     * Accessor for the plugin id
+     * @return this plugin's 'implementation id'
+     */
+    TInt PluginId();
+        
+    /**
+     * Whether this plugin handles the specified contentId (i.e. email account)
+     * @param aContentId specifying a widget instance and a mailbox related to it
+     * @return boolean
+     */
+    TBool HasAccount( const TDesC& aContentId );
+    
+    /**
+     * Looks up the data related to trigger event, and launches the specified application
+     * @param aContentId content id of the widget that received the key press
+     */
+    void LaunchExtAppL( const TDesC& aContentId );
+    
+    /**
+     * Picks the accounts that belong to this plugin, and updates the data
+     * publishing of them all
+     * @param aAccounts list of external accounts
+     */
+    void SelectAndUpdateAccountsL( RPointerArray<CMailExternalAccount>& aAccounts );
+
+    /**
+     * Handles updating of one account/widget data based on contentId
+     * @param aContentId content id of the widget
+     */
+    void UpdateAccountL( const TDesC& aContentId );
+
+private:
+
+    void ConstructL();
+
+    CMailPluginProxy(
+        const TInt aPluginId,
+        CMailCpsIf& aPublisher );
+
+    void RemoveAccountsL();
+    
+    void ResetAccountL( const TDesC& aContentId );
+
+    void ResetMessageRowL( const TInt aWidgetInstanceId, const TInt aRow );
+
+    void SelectOwnAccountsL( RPointerArray<CMailExternalAccount>& aAccounts );
+    
+    TInt ResolveWidgetInstance( const TDesC& aContentId );
+
+    TInt GetMailboxId( const TDesC& aContentId );
+
+    void PublishAccountsL();
+
+    void PublishAccountL( const TInt aWidgetInstanceId, const TInt aMailboxId );
+
+    void PublishAccountL( const TInt aWidgetInstanceId, EmailInterface::MMailboxData& aMailboxData );
+
+    void PublishFirstRowL( const TInt aWidgetInstanceId, EmailInterface::MMailboxData& aMailboxData );
+    
+    void PublishMessageRowL( const TInt aWidgetInstanceId, EmailInterface::MMessageData& aMessageData, const TInt aRow );
+    
+    HBufC* ConstructMailboxNameWithMessageCountLC( EmailInterface::MMailboxData& aMailboxData );
+    
+    TInt ResolveIndicatorIcon( EmailInterface::MMailboxData& aMailboxData );
+
+    EmailInterface::MMailboxData& GetMailboxDataL( TInt aMailboxId );
+    
+    TInt UnreadCountL( EmailInterface::MMailboxData& aMailboxData );
+    
+private: // data
+    // identifier of the plugin
+    TInt iPluginId;
+    // plugin instance where rest of the data is buffered
+    EmailInterface::CEmailObserverPlugin* iPlugin;
+    // reference to publisher interface
+    CMailCpsIf& iPublisher;
+    // array of accounts that have widget and this plugin is responsible for
+    RPointerArray<CMailExternalAccount> iAccounts;
+    };
+
+#endif /* CMAILPLUGINPROXY_H_ */