wvuing/wvuieng/EngSrc/CCAMessageContainer.h
changeset 0 094583676ce7
--- /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