diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCAMessageContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCAMessageContainer.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,416 @@ +/* +* Copyright (c) 2004 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: Container class for messages. +* +*/ + + +#ifndef __CCAMESSAGECONTAINER_H__ +#define __CCAMESSAGECONTAINER_H__ + +#include "MCAMessagesReadInterface.h" +#include "MCAMessagesWriteInterface.h" +#include "MCAMessageContainerInfo.h" +#include "MCAContentProcessObserver.h" + +// FORWARD CLASS DECLERATIONS +class MCABufferMemoryHandler; +class MCAChatObserver; +class MCALoggerWriteInterface; +class MCALoggerMessage; + +// CLASS DECLARATION + +/** + * Container class for messages. + * + * @lib CAEngine.dll + * @since 3.0 + */ + +class CCAMessageContainer : public CBase, + public MCAMessagesReadInterface, + public MCAMessagesWriteInterface, + public MCAMessageContainerInfo, + public MCAContentProcessObserver + { + public: // Construction + + /** + * Construction + * @param aIdentifier, Identifier of container + * @param aMemoryHandler Handles memory + * @param aType Type of container. EGroupContainer, EChatContainer + * @return Pointer to new created instance of CCAMessageContainer + */ + static CCAMessageContainer* NewL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCABufferMemoryHandler& aMemoryHandler, + TContainerType aType ); + + /** + * Construction + * @param aIdentifier, Identifier of container + * @param aMemoryHandler Handles memory + * @param aType Type of container. EGroupContainer, EChatContainer + * @return Pointer to new created instance of CCAMessageContainer + */ + static CCAMessageContainer* NewLC( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCABufferMemoryHandler& aMemoryHandler, + TContainerType aType ); + + /** + * Destruction + */ + ~CCAMessageContainer(); + + private: // Construction + + /** + * Constructor + * @param aMemoryHandler Handles memory + */ + CCAMessageContainer( MCABufferMemoryHandler& aMemoryHandler ); + + /** + * Constructor + * @param aIdentifier, Identifier of container + * @param aType Type of container. EGroupContainer, EChatContainer + */ + void ConstructL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + TContainerType aType ); + + private: // Methods from MCAMessagesReadInterface + + /** + * @see MCAMessagesReadInterface + */ + TInt UnreadCount( TUnreadFilter aUnreadFilter = EUnreadAll ) const; + + /** + * @see MCAMessagesReadInterface + */ + TInt MessageCount() const; + + /** + * @see MCAMessagesReadInterface + */ + void Read( TReadType aReadType, TInt aReadAmount = 0 ); + + /** + * @see MCAMessagesReadInterface + */ + MCAMessage& Message( TInt aIndex ) const; + + /** + * @see MCAMessagesReadInterface + */ + MCAMessage& ReadNextUnread(); + + /** + * @see MCAMessagesReadInterface + */ + MCAMessage& ReadUnreadFromIndex( TInt aIndex ); + + /** + * @see MCAMessagesReadInterface + */ + void SetObserver( MCAMessageObserver* aObserver ); + + /** + * @see MCAMessagesReadInterface + */ + TPtrC Name() const; + + /** + * @see MCAMessagesReadInterface + */ + void DeleteMessage( TInt aIndex ); + + /** + * @see MCAMessagesReadInterface + */ + void StartLoggingL( const TDesC& aLogFilename ); + + /** + * @see MCAMessagesReadInterface + */ + void EndLoggingL(); + + /** + * @see MCAMessagesReadInterface + */ + TBool IsLoggingOn() const; + + /** + * @see MCAMessagesReadInterface + */ + TInt FindIndex( TInt aOperationCode ) const; + + /** + * @see MCAMessagesReadInterface + */ + TInt FindIndex( MCAMessage& aMessage ) const; + + /** + * @see MCAMessagesReadInterface + */ + MCAMessageContainerInfo& TargetId(); + + /** + * @see MCAMessagesReadInterface + */ + void Lock( TBool aLocked ); + + //fix - refer Ui Spec Approved Version 1.0 + //(Instant Messaging NG 001 151006.pdf) + //Section 10.2.10 Pg 131 - + //"In case user has saved the image already or sent it + //by himself, this option(save) is not available." + + /** + * Added newly - Plz dont remove while merging + * @see MCAMessagesReadInterface + */ + void ReLoggingL( MCALoggerMessageHeader& aFile ); + + /** + * Added newly - Plz dont remove while merging + * @see MCAMessagesReadInterface + */ + void EndReLoggingL(); + + private: // Methods from MCAMessagesWriteInterface + + /** + * @see MCAMessagesWriteInterface + */ + void AppendL( MCAMessage* aMessage, TBool aSharedOwnership ); + + /** + * @see MCAMessagesWriteInterface + */ + void SetScreenNameL( const TDesC& aScreenName ); + + /** + * @see MCAMessagesWriteInterface + */ + const TDesC& OwnScreenName() const; + + /** + * @see MCAMessagesWriteInterface + */ + void LockBufferMemoryHandling( TBool aLocked ); + + /** + * @see MCAMessagesWriteInterface + */ + TTime Time(); + + private: // From MCAMessageContainerInfo + + /** + * @see MCAMessageContainerInfo + */ + const TDesC& ServerAddress() const; + + /** + * @see MCAMessageContainerInfo + */ + const TDesC& UserId() const; + + /** + * @see MCAMessageContainerInfo + */ + const TDesC& Target() const; + + /** + * @see MCAMessageContainerInfo + */ + const TDesC& ScreenName() const; + + /** + * @see MCAMessageContainerInfo + */ + void SetAddToContactAsked( TBool aIsAsked ); + + /** + * @see MCAMessageContainerInfo + */ + TBool IsAddToContactAsked() const; + + private: // From MCAContentProcessObserver + + /** + * @see MCAContentProcessObserver + */ + void HandleProcessingComplete( MCAContentProcessor& aProcessor, + MCAMessage& aMessage, TInt aStatus ); + + public: // New methods + + /** + * Ordering function for ordering Message containers + * @param aSourceA First compare item. + * @param aSourceB Second compare item. + * @return -1, 0 or +1, like CompareC. + */ + static TInt OrderUid( const CCAMessageContainer& aSourceA, + const CCAMessageContainer& aSourceB ); + + /** + * Type of container + * @return Type of container. EGroupContainer, EChatContainer + */ + TContainerType ContainerType() const; + + /** + * Change identifier + * @param aNewId, new identifier + * @param aType, new type. If ENoneContainer, Resolved automaticly. + */ + void ChangeIdL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCAMessagesReadInterface::TContainerType aType ); + + /** + * Get recipient of message identified by operation code. + * aStatus updated to KErrNone if success. KErrNotFound if not. + * @param aOperationCode, Identifier for getting right message. + * @param aStatus. Status of operation. KErrNone/KErrNotFound + * @return Message recipient + */ + const TDesC& MessageRecipient( TInt aOperationCode, TInt& aStatus ) const; + + /** + * Set chat observer. + * @param aObserver. Observer to set. + */ + void SetChatObserver( MCAChatObserver* aObserver ); + + private: // New helper methods + + /** + * Resolve type of container by identifier. + * @param aType, new type. If ENoneContainer, Resolved automaticly. + */ + void ResolveType( TContainerType aType ); + + /** + * Make log. + * @param aMessage Message to log. + */ + void MakeLogL( MCALoggerMessage& aMessage ); + + /** + * Notify contact for pending count change. + */ + void NotifyContactForPending() const; + + /** + * Returns target id to be used for + * comparisons. + * @since S60 v3.1 + * @return Target id. + */ + const TDesC& ComparableTarget() const; + + public: + + /** + * Get count of all messages. Unread and read. + * @return Count of messages + */ + TInt AllMessagesCount() const; + + /** + * Access to any message. Also unread. + * @param aIndex Index of message + * @return Reference to message. + */ + MCAMessage& MessageFromAll( TInt aIndex ) const; + + /** + * Delete from all messages. Unread and read messages available. + * @param aIndex. Index of message. + */ + void DeleteMessageFromAll( TInt aIndex ); + + /** + * Is container locked or not. ETrue locked, EFalse not. + * @return Locked status. + */ + TBool IsLocked() const; + + /** + * Sizes of messages in container in bytes. + * @since S60 v3.1 + * @return Size in bytes. + */ + TInt ContainerSizeInBytes() const; + + private: // Member data + + /// Chat group id / conversation party id + HBufC* iServerAddress; + HBufC* iUserId; + HBufC* iTargetId; + HBufC* iDecodedTargetId; + + /// Screen name of user corresponding the container. + HBufC* iScreenName; + + /// Offset to last unread message + TInt iUnreadOffset; + + /// Array of messages. + RPointerArray< MCAMessage > iMessageContainer; + + /// Reference to memory handler + MCABufferMemoryHandler& iMemoryHandler; + + /// Observer class + MCAMessageObserver* iObserver; + + /// Type of container + TContainerType iContainerType; + + /// Not own. Chat observer + MCAChatObserver* iChatObserver; + + // Owns. Write interface for logging. + MCALoggerWriteInterface* iLogger; + + // Tells if add to contacts is asked + TBool iAddToContactAsked; + + // Locked status + TBool iLocked; + + // Buffer memory handling locked + TBool iMemoryHandlingLocked; + + // Size of contained messages in bytes + TInt iContainerSizeInBytes; + }; + +#endif // __CCAMESSAGECONTAINER_H__ + +// End of File