diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/appengine/src/conversationssummarymodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/appengine/src/conversationssummarymodel.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,267 @@ +/* + * 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: + * + */ + +#include "conversationssummarymodel.h" +#include "conversationsenginedefines.h" +#include "conversationsengineutility.h" +#include "s60qconversions.h" +#include "convergedmessage.h" + +#include +#include + +//--------------------------------------------------------------- +// ConversationsSummaryModel::ConversationsSummaryModel +// @see header +//--------------------------------------------------------------- +ConversationsSummaryModel::ConversationsSummaryModel(QObject* parent) +:QStandardItemModel(parent) + { + } + +//--------------------------------------------------------------- +// ConversationsSummaryModel::~ConversationsSummaryModel +// @see header +//--------------------------------------------------------------- +ConversationsSummaryModel::~ConversationsSummaryModel() +{ + +} + +//--------------------------------------------------------------- +// ConversationsSummaryModel::data +// @see header +//--------------------------------------------------------------- +QVariant ConversationsSummaryModel::data(const QModelIndex & index , + int role ) const +{ + QVariant value; + QStandardItem* item = itemFromIndex(index); + switch(role) + { + case ConversationId: + { + value = item->data(ConversationId); + break; + } + case UnReadStatus: + { + value = item->data(UnReadStatus); + break; + } + case ContactId: + { + value = item->data(ContactId); + break; + } + case ConvergedMsgId: + { + value = item->data(ConvergedMsgId); + break; + } + case UnreadCount: + { + value = item->data(UnreadCount); + break; + } + case TimeStamp: + { + value = item->data(TimeStamp); + break; + + } + case MessageProperty: + { + value = item->data(MessageProperty); + break; + } + case MessageType: + { + value = item->data(MessageType); + break; + } + case Subject: + { + + value = item->data(Subject); + break; + } + case BodyText: + { + value = item->data(BodyText); + break; + } + case ConversationAddress: + { + value = item->data(ConversationAddress); + break; + } + case FirstName: + { + value = item->data(FirstName); + break; + } + case LastName: + { + value = item->data(LastName); + break; + } + case NickName: + { + value = item->data(NickName); + break; + } + case Avatar: + { + value = item->data(Avatar); + break; + } + default: + { + //No matching role found, set invalid variant. + value = QVariant(); + break; + } + } + return value; +} + + +//--------------------------------------------------------------- +// ConversationsSummaryModel::addRow +// @see header +//--------------------------------------------------------------- +void ConversationsSummaryModel::addRow( + const CCsClientConversation& conversation) + { + int convId = conversation.GetConversationEntryId(); + + //match convId in model, if found update else add item + QModelIndexList indexList = this->match(index(0, 0), + ConversationId, + convId, 1, Qt::MatchExactly); + + // if not found, add new item + if ( indexList.count() == 0 ) + { + QStandardItem* item = new QStandardItem(); + populateItem(*item,conversation); + appendRow(item); + } + else + { + // Update an existing item + QModelIndex index = indexList[0]; + QStandardItem* item = this->item(index.row(), 0); + populateItem(*item,conversation); + } + } + +//--------------------------------------------------------------- +// ConversationsSummaryModel::deleteRow +// @see header +//--------------------------------------------------------------- +void ConversationsSummaryModel::deleteRow(qint64 convId) + { + //match, if found remove item + QModelIndexList indexList = this->match(index(0, 0), + ConversationId, + convId, 1, Qt::MatchExactly); + + if( indexList.count() == 1 ) + { + QModelIndex index = indexList[0]; + this->removeRow(index.row()); + } + } + +//--------------------------------------------------------------- +// ConversationsSummaryModel::populateItem +// @see header +//--------------------------------------------------------------- +void ConversationsSummaryModel::populateItem(QStandardItem& item, + const CCsClientConversation& conversation) + { + //get entry + CCsConversationEntry* conEntry = conversation.GetConversationEntry(); + + // id + item.setData(conversation.GetConversationEntryId(), ConversationId); + + // message details + item.setData(conEntry->EntryId(), ConvergedMsgId); + item.setData(ConversationsEngineUtility::messageType(conEntry->GetType()), MessageType); + + // description + HBufC* body = conEntry->Description(); + if( body && body->Length()) + { + QString bodytext(S60QConversions::s60DescToQString(*body)); + item.setData(bodytext, BodyText); + item.setData(bodytext, Subject ); + } + + // time stamp + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + TTime timeStamp(conEntry->TimeStamp() ); + timeStamp.SecondsFrom(unixEpoch, seconds); + item.setData(seconds.Int(), TimeStamp); + + // unread count + item.setData(conversation.GetUnreadMessageCount(), UnreadCount); + + // contact details + HBufC* firstname = conversation.GetFirstName(); + QString displayName(""); + //first name + if(firstname && firstname->Length()) + { + displayName = S60QConversions::s60DescToQString(*firstname); + item.setData(displayName,FirstName); + } + //last name + HBufC* lastname = conversation.GetLastName(); + if( lastname && lastname->Length()) + { + item.setData(S60QConversions::s60DescToQString(*lastname),LastName); + } + //nick name + HBufC* nickname = conversation.GetNickName(); + if (nickname && nickname->Length()) + { + item.setData(S60QConversions::s60DescToQString(*nickname), NickName); + } + + // contact number + HBufC* contactno = conEntry->Contact(); + QString contactNumber(""); + if ( contactno && contactno->Length() ) + { + contactNumber = S60QConversions::s60DescToQString(*contactno); + } + item.setData(contactNumber, ConversationAddress); + + //set the contactId + int contactId = conversation.GetContactId(); + item.setData(contactId, ContactId); + + // unread status + item.setData(conEntry->IsAttributeSet(ECsAttributeUnread),UnReadStatus); + } + +// EOF