emailservices/psmruadapter/inc/CPsMruAdapter.h
branchRCL_3
changeset 8 e1b6206813b4
parent 0 8466d47a6819
child 22 d620048b4810
--- a/emailservices/psmruadapter/inc/CPsMruAdapter.h	Tue Feb 02 00:02:40 2010 +0200
+++ b/emailservices/psmruadapter/inc/CPsMruAdapter.h	Fri Feb 19 22:37:30 2010 +0200
@@ -22,13 +22,15 @@
 // INCLUDES
 #include <CPsDataPlugin.h>
 //<cmail>
-#include "MFSMailEventObserver.h"
+#include "mfsmaileventobserver.h"
 //</cmail>
 
 // FORWARD DECLARATION
 class CPsData;
 class CFSMailClient;
+class MDesCArray;
 
+class CDelayMailboxCreationHelper;
 // CLASS DECLARATION
 
 /**
@@ -39,24 +41,24 @@
 * @since S60 v3.2
 */
 class CPsMruAdapter : public CPsDataPlugin, public MFSMailEventObserver
-	{
-	public: 
-	
-	    /**
-	     * Two phase construction
-	     */
-	    static CPsMruAdapter* NewL(TAny* aPsDataPluginParameters);
-
-	    /**
-	     * Destructor
-	     */
-	    virtual ~CPsMruAdapter();
-
-	    /**
-	     * Returns the additional data for given item id
-	     * Returns NULL (in current implementation)
-	     */
-	    TAny* RequestForDataExtensionL( TInt ItemId );
+    {
+    public: 
+    
+        /**
+         * Two phase construction
+         */
+        static CPsMruAdapter* NewL(TAny* aPsDataPluginParameters);
+    
+        /**
+         * Destructor
+         */
+        virtual ~CPsMruAdapter();
+    
+        /**
+         * Returns the additional data for given item id
+         * Returns NULL (in current implementation)
+         */
+        TAny* RequestForDataExtensionL( TInt ItemId );
 
 // from base class CPsDataPlugin
 
@@ -97,92 +99,157 @@
         void EventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox, 
             TAny* aParam1, TAny* aParam2, TAny* aParam3 );
 
+        /**
+         * If problem with NewMailbox this function will be called 
+         * by CDelayMailboxCreationHelper to try it after some delay
+         */
+        TBool DeleayedMailboxCreationEventL();
+        
+        /**
+         * If problem with NewMailbox this function will be called 
+         * by CDelayMailboxCreationHelper to try it after some delay
+         */
+        void DeleayMailboxCreationEventL( TFSMailMsgId &aMailbox );
+        
 	private:
 
-	    /**
-	     * Constructor
-	     */
-		CPsMruAdapter();
-
-		/**
-		 * 2nd phase construtor
-		 */
-		void ConstructL(MDataStoreObserver* aObserverForDataStore,
-		    MStoreListObserver* aStoreListObserver);
-
-		/**
-		 * Updates given data store
-		 */  	    
-		TBool FillDataStoreL( TDesC& aDataStoreURI );
-
-		/**
-		 * Updates given data store
-		 */  	    	    
-		TBool FillDataStoreL( TFSMailMsgId& aId );
-
-		/**
-		 * Updates a list of supported data stores
-		 */  	    
-		void UpdateSupportedDataStoresList();	    
-
-		/**
-		 * Starts observing mailbox
-		 */
-		TBool AddMailboxObserverL( TFSMailMsgId& aId );
-		
-		/**
-		 * Stops observing mailbox
-		 */
-	    TBool RemoveMailboxObserver( TFSMailMsgId& aId );
-	    
-		/**
-		 * Stops all mailbox observers
-		 */
-	    void RemoveAllMailboxObservers();
-		
-		/**
-		 * Converts Uri to TFsMailMsgId
-		 */
-		TBool GetMailboxIdentifierFromUri( TDesC& aUri, TFSMailMsgId& aId );
-
-		/**
-		 * Converts TFsMailMsgId to Uri
-		 */
-	    TBool GetUriFromMailboxIdentifier( TFSMailMsgId& aId, HBufC& aUri );
-	    
-		/**
-	    * Updates given data store
-	    */  	    	    
-	    TBool FillDataStoreL( TFSMailMsgId& aId, TDesC& aDataStoreURI );	    
+        /**
+         * Constructor
+         */
+        CPsMruAdapter();
+        
+        /**
+         * 2nd phase construtor
+         */
+        void ConstructL(MDataStoreObserver* aObserverForDataStore,
+            MStoreListObserver* aStoreListObserver);
+        
+        /**
+         * Updates given data store
+         */  	    
+        TBool FillDataStoreL( TDesC& aDataStoreURI );
+        
+        /**
+         * Updates given data store
+         */  	    	    
+        TBool FillDataStoreL( TFSMailMsgId& aId );
+        
+        /**
+         * Updates a list of supported data stores
+         */  	    
+        void UpdateSupportedDataStoresList();	    
+        
+        /**
+         * Starts observing mailbox
+         */
+        TBool AddMailboxObserverL( TFSMailMsgId& aId );
+        
+        /**
+         * Stops observing mailbox
+         */
+        TBool RemoveMailboxObserver( TFSMailMsgId& aId );
+        
+        /**
+         * Stops all mailbox observers
+         */
+        void RemoveAllMailboxObservers();
+        
+        /**
+         * Converts Uri to TFsMailMsgId
+         */
+        TBool GetMailboxIdentifierFromUri( TDesC& aUri, TFSMailMsgId& aId );
+        
+        /**
+         * Converts TFsMailMsgId to Uri
+         */
+        TBool GetUriFromMailboxIdentifier( TFSMailMsgId& aId, HBufC& aUri );
+        
+        /**
+        * Updates given data store
+        */  	    	    
+        TBool FillDataStoreL( TFSMailMsgId& aId, TDesC& aDataStoreURI );	    
+        
+        /**
+        * Calls MDataStoreObserver::AddData for every mru email - used for trapping 
+        */  	    	    
+        void AddMruEmailsL( MDesCArray* aMruList, TDesC& aDataStoreURI );
 
     private: // data
 
-		/**
-		 * Holds the observer object to communicate add/modify/delete of contacts
-		 * Not owned.
-		 */
-		MDataStoreObserver* iDataStoreObserver;
-		
-		/**
-	    * An observer instance used to send the datastore to the adapter
-	    */
-		MStoreListObserver* iStoreListObserver;		
-			
-		/**
+        /**
+         * Holds the observer object to communicate add/modify/delete of contacts
+         * Not owned.
+         */
+        MDataStoreObserver* iDataStoreObserver;
+        
+        /**
+        * An observer instance used to send the datastore to the adapter
+        */
+        MStoreListObserver* iStoreListObserver;		
+        	
+        /**
         * Supported Uris(data stores)
         */
-    	RPointerArray<HBufC> iSupportedUris;	
-    	
-    	/**
-    	 * List of mailboxes currently being observed
-    	 */
-    	RArray<TFSMailMsgId> iObservedMailboxes;
-    	
-		/**
+        RPointerArray<HBufC> iSupportedUris;	
+        
+        /**
+         * List of mailboxes currently being observed
+         */
+        RArray<TFSMailMsgId> iObservedMailboxes;
+        
+        /**
         * Fs Email framework client
         */
-	    CFSMailClient* iMailClient;
-	};
-	
+        CFSMailClient* iMailClient;
+
+        /**
+        * Class for postponing the mailbox creation in MRU list - Event may come beforet the mailbox exists
+        */
+        CDelayMailboxCreationHelper *iDelayMailboxCreationPtr;
+        
+        /**
+        * This mailboxes should be handled by CDelayMailboxCreationHelper
+        */
+        RArray<TFSMailMsgId> iDelayedCreatedMailboxes;
+
+    }; // class CPsMruAdapter
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+
+// Helper class for thread synchronization 
+// used when mailbox is not ready when TFSEventNewMailbox event comes 
+// Waits 30*0.5 sec to try posponed mailbox registration
+
+// wait 500 ms to try adding the mailbox - because sync problems 
+#define KDelayToRunAddMailbox 500 
+// try it 15 second - 30 times
+#define KNumberOfDelayedTrials 30
+
+
+class CDelayMailboxCreationHelper : public CTimer
+    {
+    public:
+        static CDelayMailboxCreationHelper* NewLC( CPsMruAdapter *aPsMruAdapterPtr );
+        static CDelayMailboxCreationHelper* NewL( CPsMruAdapter *aPsMruAdapterPtr );
+        // d-tor
+        virtual ~CDelayMailboxCreationHelper();
+        // Start timer to call CPsMruAdapter::DeleayedMailboxCreationEventL by RunL 
+        void StartDelayedCall();	
+    protected:
+        // on timer event - calls CPsMruAdapter::DeleayedMailboxCreationEventL
+        virtual void RunL();
+        // when leave from RunL, if err handled return KErrNone
+        TInt RunError( TInt aError );
+        // two phase constr.
+        void ConstructL();
+    private:
+        CDelayMailboxCreationHelper( CPsMruAdapter *aPsMruAdapterPtr ); // EPriorityLow, EPriorityIdle
+        // callback not owning pointer assigned during construction
+        CPsMruAdapter *iPsMruAdapterPtr;
+        // unsuccessful calls still allowed counter
+        TInt iNumberOfDelayedTrials;
+    }; // class CDelayMailboxCreationHelper
 
 #endif // C_PS_MRU_ADAPTER_H