--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,307 @@
+/*
+ * Copyright (c) 2009 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:
+ *
+ */
+
+//SYSTEM INCLUDES
+#include <ccsrequesthandler.h>
+#include <ccsconversationentry.h>
+#include <ccsclientconversation.h>
+#include <s60qconversions.h>
+
+//USER INCLUDES
+#include "msghistoryprivate.h"
+#include "msghistoryimpl.h"
+#include <msgitem.h>
+
+// CONSTANTS
+_LIT(KUnixEpoch, "19700000:000000.000000");
+
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::MsgHistoryPrivate
+// @see header
+//---------------------------------------------------------------
+MsgHistoryPrivate::MsgHistoryPrivate( MsgHistoryImpl* ptr )
+:q_ptr(ptr)
+ {
+ handler = CCSRequestHandler::NewL();
+ handler->RequestResultsEventL(this);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::MsgHistoryPrivate
+// @see header
+//---------------------------------------------------------------
+MsgHistoryPrivate::~MsgHistoryPrivate()
+ {
+ if ( handler )
+ delete handler;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::GetMessagingHistory
+// @see header
+//---------------------------------------------------------------
+TBool MsgHistoryPrivate::GetMessagingHistory( const TInt aContactId )
+ {
+ TRAPD(err, handler->GetMessagingHistoryL(aContactId));
+ if ( err == KErrNone )
+ return ETrue;
+
+ return EFalse;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::ClearMessagingHistory
+// @see header
+//---------------------------------------------------------------
+TBool MsgHistoryPrivate::ClearMessagingHistory( const TInt aContactId )
+ {
+ TRAPD(err, handler->ClearMessagingHistoryL(aContactId));
+ if ( err == KErrNone )
+ return ETrue;
+
+ return EFalse;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::MarkReadMessagingHistory
+// @see header
+//---------------------------------------------------------------
+TBool MsgHistoryPrivate::MarkReadMessagingHistory( const TInt aContactId )
+ {
+ TRAPD(err, handler->MarkMessagingHistoryReadL(aContactId));
+ if ( err == KErrNone )
+ return ETrue;
+
+ return EFalse;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::Subscribe
+// @see header
+//---------------------------------------------------------------
+TBool MsgHistoryPrivate::Subscribe( const TInt aContactId )
+ {
+ TInt conversationId = -1;
+ TRAPD(err,
+ conversationId = handler->GetConversationIdL(aContactId));
+ CCsClientConversation* clientConversation = CCsClientConversation::NewL();
+ clientConversation->SetConversationEntryId(conversationId);
+ //set dummy entry
+ CCsConversationEntry *entry = CCsConversationEntry::NewL();
+ clientConversation->SetConversationEntryL(entry);
+
+ handler->RequestConversationChangeEventL(this, clientConversation);
+ if ( clientConversation )
+ delete clientConversation;
+ if( entry )
+ delete entry;
+ if ( err == KErrNone )
+ return ETrue;
+
+ return EFalse;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::UnSubscribe
+// @see header
+//---------------------------------------------------------------
+TBool MsgHistoryPrivate::UnSubscribe( const TInt aContactId )
+ {
+ TInt conversationId = -1;
+ TRAPD(err,
+ conversationId = handler->GetConversationIdL(aContactId));
+ CCsClientConversation* clientConversation = CCsClientConversation::NewL();
+ clientConversation->SetConversationEntryId(conversationId);
+ //set dummy entry
+ CCsConversationEntry *entry = CCsConversationEntry::NewL();
+ clientConversation->SetConversationEntryL(entry);
+
+ handler->RemoveConversationChangeEventL(this, clientConversation);
+ if ( clientConversation )
+ delete clientConversation;
+ if( entry )
+ delete entry;
+ if ( err == KErrNone )
+ return ETrue;
+
+ return EFalse;
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::ConversationList
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::ConversationList
+( RPointerArray<CCsClientConversation>& /*aClientConversationList*/ )
+ {
+ // No implementation required.
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::Conversations
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::Conversations
+( RPointerArray<CCsConversationEntry>& aConversationEntryList )
+ {
+ QList<MsgItem> msgs;
+
+ for(TInt i=aConversationEntryList.Count()-1; i >= 0; --i )
+ {
+ MsgItem item;
+ PopulateMsgItem(item,*(aConversationEntryList[i]));
+ msgs.append(item);
+ }
+ //emit signal
+ q_ptr->messagesReadyEvent(msgs);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::AddConversation
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::AddConversation
+( const CCsConversationEntry& aConversationEntry )
+ {
+ MsgItem item;
+ PopulateMsgItem(item, aConversationEntry);
+ q_ptr->messageAddedEvent(item);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::ModifyConversation
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::ModifyConversation
+( const CCsConversationEntry& aConversationEntry )
+ {
+ MsgItem item;
+ PopulateMsgItem(item, aConversationEntry);
+ q_ptr->messageChangedEvent(item);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::DeleteConversation
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::DeleteConversation
+( const CCsConversationEntry& aConversationEntry )
+ {
+ MsgItem item;
+ PopulateMsgItem(item, aConversationEntry);
+ q_ptr->messageDeletedEvent(item);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::RefreshConversation
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::RefreshConversation()
+ {
+ // No implementation required.
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::populateMsgItem
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::PopulateMsgItem
+(MsgItem& item, const CCsConversationEntry& entry)
+ {
+ // id
+ item.setId(entry.EntryId());
+
+ // message type.
+ item.setType((MsgItem::MsgType)entry.GetType());
+
+ // description
+ HBufC* description = entry.Description();
+ if( description && description->Length())
+ {
+ item.setBody(S60QConversions::s60DescToQString(*description));
+ }
+
+ // time stamp
+ TTime unixEpoch(KUnixEpoch);
+ TTimeIntervalSeconds seconds;
+ TTime timeStamp(entry.TimeStamp() );
+ timeStamp.SecondsFrom(unixEpoch, seconds);
+ item.setTimeStamp(seconds.Int());
+
+ //contact details
+ HBufC* contact = entry.Contact();
+ if( contact && contact->Length())
+ {
+ item.setPhoneNumber(S60QConversions::s60DescToQString(*contact));
+ }
+
+ //sending state
+ item.setState((MsgItem::MsgState)entry.GetSendState());
+
+ // direction
+ item.setDirection((MsgItem::MsgDirection)entry.ConversationDir());
+
+ //attributes
+ SetMsgAttributes(item, entry);
+ }
+
+//---------------------------------------------------------------
+// MsgHistoryPrivate::SetMsgAttributes
+// @see header
+//---------------------------------------------------------------
+void MsgHistoryPrivate::SetMsgAttributes
+(MsgItem& item, const CCsConversationEntry& entry)
+ {
+ //draft
+ if(entry.IsAttributeSet(ECsAttributeDraft))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeDraft);
+ }
+ //sent
+ if(entry.IsAttributeSet(ECsAttributeSent))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeSent);
+ }
+ //new
+ if(entry.IsAttributeSet(ECsAttributeNew))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeNew);
+ }
+ //unread
+ if(entry.IsAttributeSet(ECsAttributeUnread))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeUnread);
+ }
+ //High priority
+ if(entry.IsAttributeSet(ECsAttributeHighPriority))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeHighPriority);
+ }
+ //low priority
+ if(entry.IsAttributeSet(ECsAttributeLowPriority))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeLowPriority);
+ }
+ //attachment
+ if(entry.IsAttributeSet(ECsAttributeAttachment))
+ {
+ item.changeAttributes(MsgItem::MsgAttributeAttachment);
+ }
+ }
+
+//EOF