diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgappfw/server/inc/ccsconversationcache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgappfw/server/inc/ccsconversationcache.h Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,307 @@ +/* + * 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* 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* 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* 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& 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* 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); + +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* 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