messagingapp/msgappfw/server/inc/ccsconversationcachehelper.h
changeset 31 ebfee66fde93
child 47 5b14749788d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/server/inc/ccsconversationcachehelper.h	Fri Jun 04 10:25:39 2010 +0100
@@ -0,0 +1,281 @@
+/*
+ * 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 class helps CS Cache in processing the data. The class 
+ *                takes up one conversation from plugin and resolve it by
+ *                either with help of ContactResolver or update inside cache
+ *
+ */
+
+#ifndef __C_CS_CONVERSATION_CACHE_HELPER_H
+#define __C_CS_CONVERSATION_CACHE_HELPER_H
+
+// FORWARD DECLARATIONS
+class CCsConversationCache;
+class CCsConversation;
+class CCsConversationEntry;
+class CCsConversationEvent;
+class CCsClientConversation;
+
+// states of cache helper class
+enum
+{
+    ECsProcessConversation,
+    ECsSpecialConversation,
+    ECsConversationFoundInCache,
+    ECsResolveConversation,
+};
+
+// CLASS DECLARATION
+/** 
+ * This class helps CS Cache in processing the data.
+ * Puts request to phonebook for contact resolution
+ */
+class CCsConversationCacheHelper : public CActive
+{
+
+public:
+
+    /**
+     * Two phase construction
+     * 
+     * @param aConversationCache, instance of CCsConversationCache
+     * @return CCsConversationCacheHelper newly created instance
+     */
+    static CCsConversationCacheHelper
+            * NewL(CCsConversationCache* aConversationCache);
+
+    /**
+     * Destructor
+     */
+    ~CCsConversationCacheHelper();
+
+    /**
+     * RunL implementation from CActive
+     */
+    void RunL();
+
+    /**
+     * DoCancel implementation from CActive
+     */
+    void DoCancel();
+
+    /**
+     * StartCacheUpdate
+     * this shall start looking at cache data and update if entry already exists
+     * shall put request to phonebook in case new data
+     */
+    void StartCacheUpdate();
+
+    /**
+     * IsNotifyRequiredL, returns true or false as if notify is required in 
+     * conversation UI 
+     * 
+     * @param aConversation CCsConversation object
+     * @param aConversationEntry CCsConversationEntry object
+     * @param event type
+     * @param previous unread message count
+     * 
+     * @return True/False for notification required
+     */
+    TBool IsNotifyRequiredL(CCsConversation* aConversation,
+                            CCsConversationEntry* aConversationEntry,
+                            TUint32 aEvent, TUint16 aPreviousUnreadMsgsCount);
+
+    /**
+     * ConversationList
+     * Returns the internal event list
+     * @return pointer to array of conversations
+     */
+    RPointerArray<CCsConversationEvent>* ConversationEventList();
+
+private:
+
+    /**
+     * Constructor
+     * 
+     * @param aConversationCache, instance of CCsConversationCache
+     */
+    CCsConversationCacheHelper(CCsConversationCache* aConversationCache);
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+    /**
+     * CreateSpecialConversationL
+     * This shall create all special type of Conversations like BT, Unknown Draft, IRDA etc.
+     * Pls note this shall be placed by order at starting of cache
+     */
+    void CreateSpecialConversationL();
+
+private:
+
+    /*
+     * HandleProcessConversationL
+     * Processes the Conversation and update cache
+     */
+    void HandleProcessConversationL();
+
+    /*
+     * HandleSpecialConversationL
+     * Handles the case when the conversation is a special conversation
+     * - BT/Drafts/IrDa
+     */
+    void HandleSpecialConversationL();
+
+    /*
+     * HandleConversationInCacheL
+     * Handle the case when the conversation is found in the cache
+     */
+    void HandleConversationInCacheL();
+
+    /**
+     * NeedsSpecialProcessing
+     * This function identifies if the conentry needs special processing
+     * Drafts message with NULL contact,Bluetooth/IRDA need this handling 
+     * 
+     * @param aConversationEntry, Conversation entry to be checked
+     * @return the conversation id for special cases or return 0  
+     */
+    TUint8 NeedsSpecialProcessing(CCsConversationEntry* aConversationEntry);
+
+    /**
+     * IssueRequest
+     * Make the active object alive
+     */
+    void IssueRequest();
+    
+    /**
+     * ResolveContact
+     * Resolve contact by match with phonebook
+     * @param aConverastionEvent consisting entry details
+     */
+    void ResolveContact(
+              CCsConversationEvent* aConverastionEvent);
+
+    /**
+     * AddConversationEntryL
+     * This will add new conversation Entry into the existing conversation in cache
+     * 
+     * @param aConEntry Conversation Entry to be added to the Conversation
+     * @param aConversationIndex position of conversation in  cache
+     */
+    void AddConversationEntryL(CCsConversationEntry *aConEntry,
+                               TInt aConversationIndex);
+
+    /**
+     * DeleteConversationEntryL
+     * Deletes the Conversation Entry from a particular Conversation
+     * 
+     * @param aConversationEntry conversation entry to be deleted
+     */
+    void DeleteConversationEntryL(CCsConversationEntry* aConversationEntry);
+
+    /**
+     * AddNewConversationL
+     * Adds a new conversation into cache with phonebook details and Conversation Entry
+     * 
+     * @param aConversationEntry instance of CCsConversationEntry
+     * @param aContactId pointer to contact Id
+     * @param aFirstName contact first name
+     * @param aLastName contact last name
+     */
+    void AddNewConversationL(CCsConversationEntry* aConversationEntry,
+                             TInt32 aContactId, const HBufC* aDisplayName);
+
+    /**
+     * GetPendingEventCount
+     * Gets the number of pending events inside cache 
+     * 
+     * @return  - number of events still to be processed
+     */
+    TInt GetPendingEventCount();
+
+    /**
+     * GetNextEvent, This function is to get the next event to be processed 
+     * from the pending cache event list
+     * 
+     * @return CCsConversationEvent instance
+     */
+    CCsConversationEvent* GetNextEvent();
+
+    /**
+     * FindEvent
+     * Finds the conversation Event in temporary event list
+     * 
+     * @param aConvEvent refenrence of  CCsConversationEvent event to be searched
+     * @return KErrNotFound or integer where event is located
+     */
+    TInt FindEvent(const CCsConversationEvent& aConvEvent);
+
+    /**  
+     * GetNextRowId
+     * Get the conversation list count where to add next conversation
+     * 
+     * @return index as where to add next conversation
+     */
+    TInt16 GetNextRowId();
+
+    /**
+     * DeleteEvent
+     * Deletes conversation event from temporary event list  
+     * @param aConvEvent refenrence of CCsConversationEvent
+     */
+    void DeleteEvent(const CCsConversationEvent& aConvEvent);
+
+private:
+
+    /** 
+     * iConversationEventList;
+     * Conversation event list in the cache
+     * Own
+     */
+    RPointerArray<CCsConversationEvent>* iConversationEventList;
+
+    /**
+     * Reference of Conversation Cache entry list
+     * Not Own
+     */
+    CCsConversationCache* iConversationCache;
+
+    /**
+     * Present Conversation event 
+     * this is now which is being processed
+     * Not Own
+     */
+    CCsConversationEvent* iConversationEvent;
+
+    /**
+     * State of the state machine 
+     * which process the temporary event list
+     */
+    TInt iState;
+
+    /** 
+     * iConversationIndex;
+     * this shall be used to generate row ids for storing conversation
+     * 
+     */
+    TInt iConversationIndex;
+
+    /** 
+     * iConversationIndex;
+     * this shall be used to generate row ids for storing conversation
+     * 
+     */
+    TInt iCurrentConversationIndex;
+};
+
+#endif // __C_CS_CONVERSATION_CACHE_HELPER_H