messagingapp/msgappfw/server/inc/ccsconversationcache.h
changeset 31 ebfee66fde93
child 44 36f374c67aa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/server/inc/ccsconversationcache.h	Fri Jun 04 10:25:39 2010 +0100
@@ -0,0 +1,314 @@
+/*
+ * 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:  CS Conversation Cache class. This shall cache
+ *                the conversation/messages from plugins and responds 
+ *                to the server request
+ *
+ */
+
+#ifndef __C_CS_CONVERSATION_CACHE_H
+#define __C_CS_CONVERSATION_CACHE_H
+
+// SYSTEM INCLUDE FILES
+
+//USER INCLUDES
+#include "mcscontactsmanagerobserver.h"
+
+// FORWARD DECLARATIONS
+class CCsConversation;
+class CCsConversationEntry;
+class CCsConversationEvent;
+class CCsClientConversation;
+class CCsServer;
+class CCsSession;
+class CCsConversationCacheHelper;
+class CCsContactsManager;
+class CCsContactDetail;
+
+// CLASS DECLARATION
+/** 
+ * CS Conversation Cache main class.
+ * This caches all the conversation from plugins. This is the actual cache of 
+ * server data. Also,Resolves contacts in phonebook and related functionality.
+ */
+class CCsConversationCache : public CBase, public MCsContactsManagerObserver
+{
+
+public:
+
+    /**
+     * Two phase construction
+     * 
+     * @param aContactManager CCsContactsManager object reference
+     * @param aCsServer CCsServer object refernce
+     * @return instance of CCsConversationCache
+     */
+    static CCsConversationCache* NewL(CCsContactsManager* aContactManager,
+                                      CCsServer* aCsServer);
+
+    /**
+     * Destructor
+     */
+    ~CCsConversationCache();
+
+    /**  
+     * GetConversationListL
+     * Get Conversation list with contact details and latest conversation
+     * for all stored conversations
+     * This API can be used to prepare conversation list
+     * 
+     * @param aClientConversationList list of CCsClientConversations 
+     */
+    void
+            GetConversationListL(
+                                 RPointerArray<CCsClientConversation>* aClientConversationList);
+
+    /**
+     * GetConversationUnreadListL
+     * Get Conversation list with contact details and unread conversation
+     * for all stored conversations
+     * This API can be used to prepare conversation list
+     *
+     * @param aClientConversationList list of CCsClientConversations
+     */
+    void GetConversationUnreadListL(
+            RPointerArray<CCsClientConversation>* aClientConversationList);
+
+    /**
+     * GetConversationsL
+     * Gets the Conversation Entries of a given Client Conversation
+     * 
+     * @param aClientConversation object of CCsClientConversation
+     * for which the Converstion entries needs to be fetched
+     * @param aConversationEntryList list of CCsConversationEntries
+     */
+    void
+            GetConversationsL(
+                              const CCsClientConversation* aClientConversation,
+                              RPointerArray<CCsConversationEntry>* aConversationEntryList);
+
+    /**
+     * HandleConversations
+     * Handle the conversation notification from plugin
+     * 
+     * @param aConversationEntryLists array of conversation entries from pugin
+     * @param aConversationEven an Unsigned number specifying the 
+     * event type   add, update or delete
+     */
+    void
+            HandleConversations(
+                                const RPointerArray<CCsConversationEntry>& aConversationEntryLists,
+                                const TUint32 aConversationEvent);
+
+    /**
+     * Gets the total number of unread conversation entries in all the
+     * Client Conversations.
+     *
+     * @return Total number of unread conversation entries.
+     */
+    TUint32 GetTotalUnreadCount();
+
+public:
+
+    // --------------From MCsContactsManagerObserver--------------------
+
+    /**
+     * HandleAddContact
+     * This asynchronous callback is invoked when the new contact is added.
+     */
+    void HandleAddContact(CCsContactDetail& aDetail);
+
+    /**
+     * HandleContactChange
+     * This asynchronous callback is invoked when the contact is changed.
+     */
+    void HandleContactChange(CCsContactDetail& aDetail);
+
+    /**
+     * HandleDeleteContact
+     * This asynchronous callback is invoked when the contact is deleted.
+     */
+    void HandleDeleteContact(CCsContactDetail& aDetail);
+
+    // ----- public API's ---------------  
+    /**
+     * MarkConversationAsDeleted
+     * Marks a conversation as being deleted.
+     * 
+     * @param aConversationId Conversation Id.
+     * @param aDeleted ETrue if conversation is being deleted else EFalse
+     */
+    void MarkConversationAsDeleted(TInt aConversationId, TBool aDeleted);
+
+    /**
+     * IsDeleted
+     * Check if a conversation is being deleted.
+     * 
+     * @param aConversationId Conversation Id.
+     * @return ETrue if deleted.
+     */
+    TBool IsDeleted(TInt aConversationId);
+
+    /**
+     * ConversationList
+     * Returns the internal conversation list
+     * @return pointer to array of conversations
+     */
+    RPointerArray<CCsConversation>* ConversationList();
+
+    /**
+     * ContactsManager
+     * This returns the handle of contact manager
+     * @return instance of CCsContactsManager
+     */
+    CCsContactsManager* ContactsManager() const;
+
+    /**
+     * Get conversation id for a contact id.
+     * @param aContactId The contact id.
+     * @return The conversation id.
+     */
+    TInt GetConversationIdL(TInt aContactId);
+	
+    /**
+     * Get conversation id for a contact address
+     * @param aContactAddress contact address
+     * @return The conversation id
+     */
+    TInt GetConversationIdFromAddressL(TDesC& aContactAddress);
+    
+    /**
+     * Get conversation from message-id
+     * @param aMessageId Message id
+     * @return CCsClientConversation The conversation 
+     */
+    CCsClientConversation* GetConversationFromMessageIdL(TInt aMessageId);
+
+private:
+
+    /**
+     * private Constructor
+     * 
+     * @param aContactsManager instance of CCsContactsManager
+     * @param aCsServer instance of CCsServer
+     */
+    CCsConversationCache(CCsContactsManager* aContactsManager,
+                         CCsServer* aCsServer);
+
+    /**
+     * ConstructL
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private:
+
+    /**  
+     * NotifyL
+     * Sends notification to client
+     * 
+     * @param aconversation, details of CCsClientConversation
+     * @param aEvent an integer to specify the type of event
+     * - add modify or delete
+     */
+    void NotifyL(CCsClientConversation* aconversation, TUint32 aEvent);
+
+    /**
+     * CachingCompleted
+     * Sends the Caching Completed Event to the server,
+     * as the temp list became zero.
+     */
+    void CachingCompletedL();
+
+    /**
+     * FindConversation 
+     * Finds the conversation depending on the Contact Id
+     * 
+     * @param aContactId given contact link Integer Id
+     * @return KErrNotFound or integer where find found
+     */
+    TInt FindConversation(TInt32 aContactId);
+
+    /**
+     * FindConversation
+     * Find an associated conversation for a contact.
+     * Contact specified in as a phone number
+     * 
+     * @param aPhoneNumber phone number
+     * @return KErrNotFound or integer where find found
+     */
+    TInt FindConversation(TDesC& aPhoneNumber);
+
+    /**
+     * Redo the contact resolving for the contact at this index
+     * 
+     * @param index from where to pick conversation for redo the resolving
+     */
+    void RedoResolvingL(TInt aIndex);
+
+    /**
+     * CreateClientConvL
+     * create CCsConversation from CCsConversation and CCsConversationEntry
+     * 
+     * @param aConversation  CCsConversation object
+     * @param aConversationEntry CCsConversationEntry object
+     * @return instance of CCsClientConversation
+     */
+    CCsClientConversation
+            * CreateClientConvLC(const CCsConversation* aConversation,
+                                 const CCsConversationEntry* aConversationEntry);
+
+private:
+
+    /**
+     * iCsServer
+     * Reference to server (not owned)
+     */
+    CCsServer* iCsServer;
+
+    /**
+     * iContactsManager 
+     * Contact manager for contact mapping
+     * Not Owned
+     */
+    CCsContactsManager* iContactsManager;
+
+    /**
+     * iConversationList
+     * Conversation Cache entry list
+     * Own
+     */
+    RPointerArray<CCsConversation>* iConversationList;
+
+private:
+    //Friend classes
+
+    friend class CCsConversationCacheHelper;
+
+    /** iConversationCacheHelper
+     * This shall be cache helper, an active object which process over all the 
+     * conversation and checks cache for add/update/delete data
+     * In case of new entries, it shall be resolved by Contact Resolver class
+     * 
+     * Own
+     */
+    CCsConversationCacheHelper* iConversationCacheHelper;
+
+    /**
+     * The amount of digits to be used in contact matching
+     */
+    TInt iMatchDigitCount;
+};
+
+#endif // __C_CS_CONVERSATION_CACHE_H