--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/utils/src/ccsconversationentry.cpp Tue Aug 31 15:11:31 2010 +0300
@@ -0,0 +1,413 @@
+/*
+* 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: Client side class to hold the conversation entry.
+ *
+*/
+
+
+// SYSTEM INCLUDE FILES
+#include <ccsconversationentry.h>
+
+// USER INCLUDE FILES
+#include "ccsdebug.h"
+
+// CONSTANTS
+const TInt KMaxDescrSize = 1500; // Message body restricted to this size
+
+// ============================== MEMBER FUNCTIONS ============================
+
+// ----------------------------------------------------------------------------
+// CCsConEntry::CCsConEntry
+// Default constructor
+// ----------------------------------------------------------------------------
+CCsConversationEntry::CCsConversationEntry()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::ConstructL
+// Two phase construction
+// ----------------------------------------------------------------------------
+void CCsConversationEntry::ConstructL()
+ {
+ iEntryID = 0;
+ iTimeStamp = 0;
+ iContact = NULL;
+ iConversationDir = ECsDirectionUnknown;
+ iDescription = NULL;
+ iConversationType = ECsUnknown;
+ iConversationAttrib = ECsAttributeNone;
+ iConversationStatus = ECsSendStateUnknown;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::NewL
+// Two Phase constructor
+// ----------------------------------------------------------------------------
+EXPORT_C CCsConversationEntry* CCsConversationEntry::NewL()
+ {
+ CCsConversationEntry* self = new (ELeave) CCsConversationEntry();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::~CCsConversationEntry
+// Destructor
+// ----------------------------------------------------------------------------
+EXPORT_C CCsConversationEntry::~CCsConversationEntry()
+ {
+ // delete the iContact if its allocated
+ if(iContact)
+ {
+ delete iContact;
+ iContact = NULL;
+ }
+
+ // delete the iDescription if its allocated
+ if(iDescription)
+ {
+ delete iDescription;
+ iDescription = NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConEntry::EntryId
+// Returns the EntryId of the object
+// ----------------------------------------------------------------------------
+EXPORT_C TInt CCsConversationEntry::EntryId() const
+{
+return iEntryID;
+}
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetEntryId
+// Sets the entryID of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetEntryId(const TInt aEnryId)
+ {
+ iEntryID = aEnryId;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::TimeStamp
+// Provides the Conversation TimeStamp of this object
+// ----------------------------------------------------------------------------
+EXPORT_C TInt64 CCsConversationEntry::TimeStamp() const
+ {
+ return iTimeStamp;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetTimeStampL
+// Sets the Conversation TimeStamp of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetTimeStampL(const TInt64 aTimeStamp)
+ {
+ iTimeStamp = aTimeStamp;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::Contact
+// Provides the Conversation contact of this object
+// ----------------------------------------------------------------------------
+EXPORT_C HBufC* CCsConversationEntry::Contact() const
+ {
+ return iContact;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetContactL
+// Sets the Conversation contact of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetContactL(const TDesC& aContact)
+{
+ iContact = aContact.AllocL();
+}
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::ConversationDir
+// Provides the Conversation direction of this object
+// ----------------------------------------------------------------------------
+EXPORT_C TCsDirection CCsConversationEntry::ConversationDir() const
+ {
+ return iConversationDir;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetConversationDir
+// Sets the Conversation direction of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetConversationDir(
+ const TCsDirection aConversationDir)
+ {
+ iConversationDir = aConversationDir;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::GetType
+// Provides the conversation flags of the object
+// ----------------------------------------------------------------------------
+EXPORT_C TCsType CCsConversationEntry::GetType() const
+ {
+ return iConversationType;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetType
+// Sets the conversation flags of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetType(const TCsType& aCsConversationType)
+ {
+ iConversationType = aCsConversationType;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::GetSendState
+// Provides the conversation status of this object
+// ----------------------------------------------------------------------------
+EXPORT_C TCsSendState CCsConversationEntry::GetSendState() const
+ {
+ return iConversationStatus;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetSendState
+// Sets the conversation status of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetSendState(const TCsSendState& aCsConversationStatus)
+ {
+ iConversationStatus = aCsConversationStatus;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::Description
+// Provides the Conversation description(body) of this object
+// ----------------------------------------------------------------------------
+EXPORT_C HBufC* CCsConversationEntry::Description() const
+ {
+ return iDescription;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::SetDescriptionL
+// Sets the Conversation description of this object
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::SetDescriptionL(const TDesC& aDescription)
+{
+
+ TInt descrLength = aDescription.Length();
+ if (descrLength > KMaxDescrSize)
+ descrLength = KMaxDescrSize;
+ iDescription = HBufC::NewL(descrLength);
+ iDescription->Des().Copy(aDescription.Left(descrLength));
+
+}
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::ChangeAttributes
+// Sets or Clears the given attribute(s).
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::ChangeAttributes( TUint16 aSetAttributes,
+ TUint16 aClearAttributes )
+ {
+ // Set attribute(s)
+ iConversationAttrib |= aSetAttributes;
+
+ // Clear atttibute(s)
+ iConversationAttrib &= ~aClearAttributes;
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::IsAttributeSet
+// Checks if the give attribute is set.
+// ----------------------------------------------------------------------------
+EXPORT_C TBool CCsConversationEntry::IsAttributeSet(TCsAttribute aAttribute ) const
+ {
+ return ( iConversationAttrib & aAttribute );
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::CloneL
+// Provides the clone of this object
+// ----------------------------------------------------------------------------
+EXPORT_C CCsConversationEntry* CCsConversationEntry::CloneL() const
+ {
+ CCsConversationEntry* cloneObject = CCsConversationEntry::NewL();
+ CleanupStack::PushL(cloneObject);
+
+ if (iContact)
+ cloneObject->SetContactL(*iContact);
+
+ cloneObject->SetConversationDir(iConversationDir);
+ cloneObject->SetType(iConversationType);
+ cloneObject->SetEntryId(iEntryID);
+ cloneObject->SetSendState(iConversationStatus);
+ cloneObject->ChangeAttributes(iConversationAttrib, ECsAttributeNone);
+ if(iDescription)
+ cloneObject->SetDescriptionL(*iDescription);
+ cloneObject->SetTimeStampL(iTimeStamp);
+
+ CleanupStack::Pop(cloneObject);
+ return cloneObject;
+ }
+
+//------------------------------------------------------------------------------
+// CCsConversationEntry::ExternalizeL
+// Writes CCsConversationEntry variable to the stream
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::ExternalizeL(RWriteStream& aStream) const
+ {
+ // write iEntryId into the stream
+ aStream.WriteInt32L(iEntryID);
+
+ // write iTimeStamp
+ aStream.WriteReal64L(iTimeStamp);
+
+ // write iConversationAttrib
+ aStream.WriteUint16L(iConversationAttrib);
+
+ if (iContact)
+ {
+ // write iContact length
+ aStream.WriteInt8L(iContact->Length());
+ // write iContact
+ aStream << *iContact;
+ }
+ else
+ {
+ // write 0 contact len
+ aStream.WriteInt8L(0);
+ }
+
+ // write iConDir length
+ aStream.WriteUint8L(iConversationDir);
+
+ if (iDescription)
+ {
+ // write iDescription length
+ aStream.WriteUint16L(iDescription->Length());
+ // write iDescription
+ aStream << *iDescription;
+ }
+ else
+ {
+ // write 0 iDescription len
+ aStream.WriteUint16L(0);
+ }
+
+ // write iConversationType
+ aStream.WriteUint8L(iConversationType);
+
+ // write iConversationStatus
+ aStream.WriteUint8L(iConversationStatus);
+ }
+
+// ----------------------------------------------------------------------------
+// CCsConversationEntry::InternalizeL
+// Initializes CCsConversationEntry from stream
+// ----------------------------------------------------------------------------
+EXPORT_C void CCsConversationEntry::InternalizeL(RReadStream& aStream)
+ {
+ // Read iEntryID length
+ iEntryID = aStream.ReadInt32L();
+
+ // read iTimeStamp
+ iTimeStamp = aStream.ReadReal64L();
+
+ // read iConversationAttrib
+ iConversationAttrib = aStream.ReadUint16L();
+
+ // Read iContact length
+ TInt lenContact = aStream.ReadInt8L();
+
+ if (lenContact > 0)
+ {
+ // read iContact
+ iContact = HBufC::NewL(aStream, lenContact);
+ }
+ else
+ iContact = NULL;
+
+ // Read iConversationDir
+ iConversationDir =
+ static_cast<TCsDirection> (aStream.ReadUint8L());
+
+ // Read iDescription length
+ TInt lenDescription = aStream.ReadUint16L();
+
+ if (lenDescription > 0)
+ {
+ // read iDescription
+ iDescription = HBufC::NewL(aStream, lenDescription);
+ }
+
+ // Read iConversationType
+ iConversationType =
+ static_cast<TCsType> (aStream.ReadUint8L());
+
+ // Read iConversationStatus
+ iConversationStatus =
+ static_cast<TCsSendState> (aStream.ReadUint8L());
+ }
+
+//-----------------------------------------------------------------------------
+// CCsConversationEntry::Compare
+// Compare to conversation entry object based on timestamp
+//----------------------------------------------------------------------------
+EXPORT_C TInt CCsConversationEntry::Compare(
+ const CCsConversationEntry& aFirst,
+ const CCsConversationEntry& aSecond)
+ {
+
+ if (aFirst.EntryId() < aSecond.EntryId())
+ return -1;
+ if (aFirst.EntryId() > aSecond.EntryId())
+ return 1;
+ return 0;
+ }
+
+//-----------------------------------------------------------------------------
+// CCsConversationEntry::CompareById
+// Compare to conversation entry object based on Entry Ids
+//----------------------------------------------------------------------------
+EXPORT_C TBool CCsConversationEntry::CompareById(
+ const CCsConversationEntry& aFirst,
+ const CCsConversationEntry& aSecond)
+ {
+ if (aFirst.EntryId() == aSecond.EntryId())
+ return ETrue;
+
+ return EFalse;
+ }
+
+//-----------------------------------------------------------------------------
+// CCsConversationEntry::CompareByUnreadAttrib
+// Compare to conversation entry object based on their unread attribute.
+//----------------------------------------------------------------------------
+EXPORT_C TBool CCsConversationEntry::CompareByUnreadAttrib(
+ const CCsConversationEntry& aFirst,
+ const CCsConversationEntry& aSecond)
+ {
+ if (aFirst.IsAttributeSet(ECsAttributeUnread) ==
+ aSecond.IsAttributeSet(ECsAttributeUnread))
+ return ETrue;
+
+ return EFalse;
+ }
+
+//EOF