messagingapp/msgui/appengine/src/conversationsmodel.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
equal deleted inserted replaced
23:238255e8b033 25:84d9eb65b26f
    23 #include "conversationsengineutility.h"
    23 #include "conversationsengineutility.h"
    24 #include "unidatamodelloader.h"
    24 #include "unidatamodelloader.h"
    25 #include "unidatamodelplugininterface.h"
    25 #include "unidatamodelplugininterface.h"
    26 #include <ccsconversationentry.h>
    26 #include <ccsconversationentry.h>
    27 #include <QFile>
    27 #include <QFile>
       
    28 #include <QFileInfo>
    28 
    29 
    29 // LOCAL CONSTANTS
    30 // LOCAL CONSTANTS
    30 const QString MMSStr("mms");
       
    31 
    31 
    32 //---------------------------------------------------------------
    32 //---------------------------------------------------------------
    33 // ConversationsModel::ConversationsModel
    33 // ConversationsModel::ConversationsModel
    34 // Constructor
    34 // Constructor
    35 //---------------------------------------------------------------
    35 //---------------------------------------------------------------
    36 ConversationsModel::ConversationsModel(
    36 ConversationsModel::ConversationsModel(ConversationMsgStoreHandler* msgStoreHandler,
    37     ConversationMsgStoreHandler* msgStoreHandler,
    37     QObject* parent) :
    38     QObject* parent): QStandardItemModel(parent),
    38     QStandardItemModel(parent), mMsgStoreHandler(msgStoreHandler)
    39     mMsgStoreHandler(msgStoreHandler)
    39 {
    40             {
    40     iDataModelPluginLoader = new UniDataModelLoader;
    41             iDataModelPluginLoader = new UniDataModelLoader;
    41     iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
    42             iDataModelPluginLoader->loadPlugins();
    42     iBioMsgPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
    43             iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(MMSStr);
    43 }
    44             }
       
    45 
       
    46 
    44 
    47 //---------------------------------------------------------------
    45 //---------------------------------------------------------------
    48 // ConversationsModel::~ConversationsModel
    46 // ConversationsModel::~ConversationsModel
    49 // Destructor
    47 // Destructor
    50 //---------------------------------------------------------------
    48 //---------------------------------------------------------------
    51 ConversationsModel::~ConversationsModel()
    49 ConversationsModel::~ConversationsModel()
    52     {
    50 {
    53     if(iDataModelPluginLoader)
    51     if (iDataModelPluginLoader) {
    54     {
       
    55         delete iDataModelPluginLoader;
    52         delete iDataModelPluginLoader;
    56         iDataModelPluginLoader = NULL;
    53         iDataModelPluginLoader = NULL;
    57     }
    54     }
    58     }
    55 }
    59 
    56 
    60 //---------------------------------------------------------------
    57 //---------------------------------------------------------------
    61 // ConversationsModel::data
    58 // ConversationsModel::data
    62 // @see header
    59 // @see header
    63 //---------------------------------------------------------------
    60 //---------------------------------------------------------------
    64 QVariant ConversationsModel::data(const QModelIndex & index , int role ) const
    61 QVariant ConversationsModel::data(const QModelIndex & index, int role) const
    65 {
    62 {
    66     QVariant value;
    63     QVariant value;
    67     QStandardItem* item = itemFromIndex(index);
    64     QStandardItem* item = itemFromIndex(index);
    68     switch(role)
    65     switch (role) {
    69     {
    66     case ConversationId:
    70         case ConversationId:
    67     {
    71         {
    68         value = item->data(ConversationId);
    72             value = item->data(ConversationId);
    69         break;
    73             break;
    70     }
    74         }
    71     case UnReadStatus:
    75         case UnReadStatus:
    72     {
    76         {
    73         value = item->data(UnReadStatus);
    77             value = item->data(UnReadStatus);
    74         break;
    78             break;
    75     }
    79         }
    76     case ContactId:
    80         case ContactId:
    77     {
    81         {
    78         value = item->data(ContactId);
    82             value = item->data(ContactId);
    79         break;
    83             break;
    80     }
    84         }
    81     case TimeStamp:
    85         case TimeStamp:
    82     {
    86         {
    83         value = item->data(TimeStamp);
    87             value = item->data(TimeStamp);
    84         break;
    88             break;
    85     }
    89         }
    86     case ConvergedMsgId:
    90         case ConvergedMsgId:
    87     {
    91         {
    88         value = item->data(ConvergedMsgId);
    92             value = item->data(ConvergedMsgId);
    89         break;
    93             break;
    90     }
    94         }
    91     case MessageProperty:
    95         case MessageProperty:
    92     {
    96         {
    93         value = item->data(MessageProperty);
    97             value = item->data(MessageProperty);
    94         break;
    98             break;
    95     }
    99         }
    96     case MessageType:
   100         case MessageType:
    97     {
   101         {
    98         value = item->data(MessageType);
   102             value = item->data(MessageType);
    99         break;
   103             break;
   100     }
   104         }
   101     case MessageSubType:
   105         case Subject:
   102     {
   106         {
   103         value = item->data(MessageSubType);
   107             value = item->data(Subject);
   104         break;
   108             break;
   105     }
   109         }
   106     case Subject:
   110         case BodyText:
   107     {
   111         {
   108         value = item->data(Subject);
   112             value = item->data(BodyText);
   109         break;
   113             break;
   110     }
   114         }
   111     case BodyText:
   115         case ConversationAddress:
   112     {
   116         {
   113         value = item->data(BodyText);
   117             value = item->data(ConversationAddress);
   114         break;
   118             break;
   115     }
   119         }
   116     case ConversationAddress:
   120         case Direction:
   117     {
   121         {
   118         value = item->data(ConversationAddress);
   122             value = item->data(Direction);
   119         break;
   123             break;
   120     }
   124         }
   121     case Direction:
   125         case SendingState:
   122     {
   126         {
   123         value = item->data(Direction);
   127             value = item->data(SendingState);
   124         break;
   128             break;
   125     }
   129         }
   126     case SendingState:
   130         case MessagePriority:
   127     {
   131         {
   128         value = item->data(SendingState);
   132             value = item->data(MessagePriority);
   129         break;
   133             break;
   130     }
   134         }
   131     case MessagePriority:
   135         case Attachments:
   132     {
   136         {
   133         value = item->data(MessagePriority);
   137             value = item->data(Attachments);
   134         break;
   138             break;
   135     }
   139         }
   136     case Attachments:
   140         case MessageLocation:
   137     {
   141         {
   138         value = item->data(Attachments);
   142             value = item->data(MessageLocation);
   139         break;
   143             break;
   140     }
   144         }
   141     case MessageLocation:
   145         case MessageStore:
   142     {
   146         {
   143         value = item->data(MessageLocation);
   147             value = item->data(MessageStore);
   144         break;
   148             break;
   145     }
   149         }
   146     case MessageStore:
   150         case ConversationAlias:
   147     {
   151         {
   148         value = item->data(MessageStore);
   152             value = item->data(ConversationAlias);
   149         break;
   153             break;
   150     }
   154         }
   151     case ConversationAlias:
   155         case UnreadCount:
   152     {
   156         {
   153         value = item->data(ConversationAlias);
   157 
   154         break;
   158             value = item->data(UnreadCount);
   155     }
   159             break;
   156     case UnreadCount:
   160         }
   157     {
   161         case FirstName: // Fall through start
   158         value = item->data(UnreadCount);
   162             value = item->data(FirstName);
   159         break;
   163             break;
   160     }
   164         case LastName:
   161     case DisplayName: // Fall through start
   165             value = item->data(LastName);
   162         value = item->data(DisplayName);
   166             break;
   163         break;    
   167         case NickName:
   164     case Avatar: // Fall througn end
   168             value = item->data(NickName);
   165         value = item->data(Avatar);
   169             break;
   166         break;
   170         case Avatar:    // Fall througn end
   167     case NotificationStatus:
   171             value = item->data(Avatar);
   168         value = item->data(NotificationStatus);
   172             break;
   169         break;
   173         default:
   170     default:
   174         {
   171     {
   175                 //No matching role found, set invalid variant
   172         //No matching role found, set invalid variant
   176                 value = QVariant();
   173         value = QVariant();
   177                 break;
   174         break;
   178         }
   175     }
   179       }
   176     }
   180         return value;
   177     return value;
   181 }
   178 }
   182 
   179 
   183 //---------------------------------------------------------------
   180 //---------------------------------------------------------------
   184 // ConversationsModel::addRow
   181 // ConversationsModel::addRow
   185 // @see header
   182 // @see header
   186 //---------------------------------------------------------------
   183 //---------------------------------------------------------------
   187 void ConversationsModel::addRow(
   184 void ConversationsModel::addRow(const CCsConversationEntry& entry, bool dynamicUpdate)
   188     const CCsConversationEntry& entry,
   185 {
   189     bool dynamicUpdate)
   186     int msgId = entry.EntryId();
   190 {
       
   191     int msgId = entry.EntryId();	
       
   192     //match, if found update else add item
   187     //match, if found update else add item
   193     QModelIndexList indexList = this->match(index(0, 0), 
   188     QModelIndexList indexList = this->match(index(0, 0), ConvergedMsgId, msgId, -1,
   194         ConvergedMsgId, 
   189         Qt::MatchExactly);
   195         msgId, -1, Qt::MatchExactly);
       
   196 
   190 
   197     // if not found, add new item
   191     // if not found, add new item
   198     if ( indexList.count() == 0 )
   192     if (indexList.count() == 0) {
   199     {    
       
   200         QStandardItem* item = new QStandardItem();
   193         QStandardItem* item = new QStandardItem();
   201         populateItem(*item,entry);
   194         populateItem(*item, entry);
   202         if(!dynamicUpdate)
   195         if (!dynamicUpdate) {
   203         {
   196             insertRow(0, item);
   204             insertRow(0,item);    
   197         }
   205         }
   198         else {
   206         else
       
   207         {    
       
   208             int i;
   199             int i;
   209             for( i= rowCount()-1; i >=0  ; --i)
   200             for (i = rowCount() - 1; i >= 0; --i) {
   210             {
   201                 QStandardItem* modelItem = this->item(i, 0);
   211                 QStandardItem* modelItem = this->item(i,0);
   202                 if (modelItem->data(ConvergedMsgId).toInt() < item->data(ConvergedMsgId).toInt()) {
   212                 if( modelItem->data(ConvergedMsgId).toInt() < 
   203                     if (i == rowCount() - 1) {
   213                         item->data(ConvergedMsgId).toInt())
       
   214                 {
       
   215                     if( i == rowCount()-1)
       
   216                     {
       
   217                         appendRow(item);
   204                         appendRow(item);
   218                     }
   205                     }
   219                     else
   206                     else {
   220                     {    
   207                         insertRow(i + 1, item);
   221                         insertRow(i+1,item);
       
   222                     }
   208                     }
   223                     return;
   209                     return;
   224                 }
   210                 }
   225             }
   211             }
   226             if( i == 0 )
   212             if (i == 0) {
   227             {
   213                 insertRow(0, item);
   228                 insertRow(0,item);
       
   229             }
   214             }
   230         }
   215         }
   231     }
   216     }
   232     else
   217     else {
   233     {
       
   234         // Update an existing item
   218         // Update an existing item
   235         QModelIndex index = indexList[0];
   219         QModelIndex index = indexList[0];
   236         QStandardItem* item = this->item(index.row(), 0);
   220         QStandardItem* item = this->item(index.row(), 0);
   237         populateItem(*item,entry);
   221         populateItem(*item, entry);
   238         }
   222     }
   239 }
   223 }
   240 
   224 
   241 //---------------------------------------------------------------
   225 //---------------------------------------------------------------
   242 // ConversationsModel::deleteRow
   226 // ConversationsModel::deleteRow
   243 // @see header
   227 // @see header
   244 //---------------------------------------------------------------
   228 //---------------------------------------------------------------
   245 void ConversationsModel::deleteRow(int msgId)
   229 void ConversationsModel::deleteRow(int msgId)
   246     {
   230 {
   247     //match, if found remove item
   231     //match, if found remove item
   248     QModelIndexList indexList = this->match(index(0, 0), 
   232     QModelIndexList indexList =
   249             ConvergedMsgId, 
   233         this->match(index(0, 0), ConvergedMsgId, msgId, 1, Qt::MatchExactly);
   250             msgId, 1, Qt::MatchExactly);
   234 
   251 
   235     if (indexList.count() == 1) {
   252     if( indexList.count() == 1 )
       
   253         {
       
   254         QModelIndex index = indexList[0];
   236         QModelIndex index = indexList[0];
   255         this->removeRow(index.row());
   237         this->removeRow(index.row());
   256         }
   238     }
   257     }
   239 }
   258 
       
   259 
   240 
   260 //---------------------------------------------------------------
   241 //---------------------------------------------------------------
   261 // ConversationsModel::populateItem
   242 // ConversationsModel::populateItem
   262 // @see header
   243 // @see header
   263 //---------------------------------------------------------------
   244 //---------------------------------------------------------------
   264 void ConversationsModel::populateItem(QStandardItem& item, 
   245 void ConversationsModel::populateItem(QStandardItem& item, const CCsConversationEntry& entry)
   265         const CCsConversationEntry& entry)
   246 {
   266     {
       
   267     int msgId = entry.EntryId();
   247     int msgId = entry.EntryId();
   268     // id
   248     // id
   269     item.setData(msgId, ConvergedMsgId);
   249     item.setData(msgId, ConvergedMsgId);
   270 
   250 
   271     // description
   251     // description
   272     HBufC* description = entry.Description();
   252     HBufC* description = entry.Description();
   273     QString subject("");
   253     QString subject("");
   274     if( description && description->Length())
   254     if (description && description->Length()) {
   275         {
   255         subject = (S60QConversions::s60DescToQString(*description));     
   276         subject = (S60QConversions::s60DescToQString(*description));
   256     }
   277         item.setData(subject, Subject); 
       
   278         }
       
   279 
   257 
   280     // time stamp 
   258     // time stamp 
   281     TTime unixEpoch(KUnixEpoch);
   259     TTime unixEpoch(KUnixEpoch);
   282     TTimeIntervalSeconds seconds;
   260     TTimeIntervalSeconds seconds;
   283     TTime timeStamp(entry.TimeStamp() );
   261     TTime timeStamp(entry.TimeStamp());
   284     timeStamp.SecondsFrom(unixEpoch, seconds);
   262     timeStamp.SecondsFrom(unixEpoch, seconds);
   285     item.setData(seconds.Int(), TimeStamp);
   263     item.setData(seconds.Int(), TimeStamp);
   286 
   264 
   287     //contact details
   265     //contact details
   288     HBufC* contact = entry.Contact();
   266     HBufC* contact = entry.Contact();
   289     if( contact && contact->Length())
   267     if (contact && contact->Length()) {
   290         {
       
   291         item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress);
   268         item.setData(S60QConversions::s60DescToQString(*contact), ConversationAddress);
   292         }
   269     }
   293 
   270 
   294     // message type.
   271     // message type.
   295     item.setData(ConversationsEngineUtility::messageType(entry.GetType()), MessageType);
   272     int msgType = ConversationsEngineUtility::messageType(entry.GetType());
       
   273     item.setData(msgType, MessageType);
       
   274 
       
   275     //message sub-type
       
   276     item.setData(ConversationsEngineUtility::messageSubType(entry.GetType()), MessageSubType);
       
   277 
   296     // unread status
   278     // unread status
   297     if(entry.IsAttributeSet(ECsAttributeUnread))
   279     if (entry.IsAttributeSet(ECsAttributeUnread)) {
   298     {    
   280         item.setData(true, UnReadStatus);
   299     item.setData(true,UnReadStatus);
   281     }
   300     }
   282     else {
   301     else
   283         item.setData(false, UnReadStatus);
   302     {
   284     }
   303     item.setData(false,UnReadStatus);
   285 
   304     }
       
   305     
       
   306     //sending state
   286     //sending state
   307     item.setData(entry.GetSendState(), SendingState);
   287     item.setData(entry.GetSendState(), SendingState);
   308     // direction
   288     // direction
   309     item.setData(entry.ConversationDir(), Direction);
   289     item.setData(entry.ConversationDir(), Direction);
   310 
   290 
   311     //location
   291     //location
   312     if(entry.ConversationDir() == ECsDirectionIncoming)
   292     if (entry.ConversationDir() == ECsDirectionIncoming) {
   313     {
       
   314         item.setData(ConvergedMessage::Inbox, MessageLocation);
   293         item.setData(ConvergedMessage::Inbox, MessageLocation);
   315     }
   294     }
   316     else if(entry.IsAttributeSet(ECsAttributeDraft))
   295     else if (entry.IsAttributeSet(ECsAttributeDraft)) {
   317     {
       
   318         item.setData(ConvergedMessage::Draft, MessageLocation);
   296         item.setData(ConvergedMessage::Draft, MessageLocation);
   319     }
   297     }
   320     else if(entry.IsAttributeSet(ECsAttributeSent))
   298     else if (entry.IsAttributeSet(ECsAttributeSent)) {
   321     {
       
   322         item.setData(ConvergedMessage::Sent, MessageLocation);
   299         item.setData(ConvergedMessage::Sent, MessageLocation);
   323     }
   300     }
   324     else
   301     else {
   325     {
       
   326         item.setData(ConvergedMessage::Outbox, MessageLocation);
   302         item.setData(ConvergedMessage::Outbox, MessageLocation);
   327     }
   303     }
   328 
   304 
   329     //message specific handling
   305     //message specific handling    
   330     TCsType msgType = entry.GetType();
   306     if (msgType == ConvergedMessage::Mms) {
   331     if(msgType == ECsMMS)
   307         handleMMS(item, entry);
   332     {
   308     }
   333         iMmsDataPlugin->setMessageId(entry.EntryId());
   309     else if(msgType == ConvergedMessage::MmsNotification) {
   334 
   310         item.setData(subject, Subject);
   335         if( iMmsDataPlugin->attachmentCount() > 0 )
   311         handleMMSNotification(item, entry);
   336         {
   312     }
   337         item.setData(ConvergedMessage::Attachment,MessageProperty);
   313     else if (msgType == ConvergedMessage::BT) {
   338         }
   314         handleBlueToothMessages(item, entry);
   339 
   315     }
   340         int slideCount = iMmsDataPlugin->slideCount();
   316     else if (msgType == ConvergedMessage::BioMsg) {
   341         bool isBodyTextSet = false;
   317         handleBioMessages(item, entry);
   342         QString textContent;
   318     }
   343         QStringList attachmentPaths;
   319     else {
   344 
   320         // sms bodytext
   345         for( int i=0; i < slideCount; ++i )
   321         item.setData(subject, BodyText);
   346         {
   322     }
   347             UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i);
   323 }
   348             for( int index=0; index < objectList.count() ; ++index )
   324 
   349             {
   325 //---------------------------------------------------------------
   350                 attachmentPaths.append(objectList[index]->path());
   326 // ConversationsModel::handleMMS
   351                 if( !isBodyTextSet && objectList[index]->mimetype().contains("text") )
   327 // @see header
       
   328 //---------------------------------------------------------------
       
   329 void ConversationsModel::handleMMS(QStandardItem& item, const CCsConversationEntry& entry)
       
   330 {
       
   331     iMmsDataPlugin->setMessageId(entry.EntryId());
       
   332     if (iMmsDataPlugin->attachmentCount() > 0) {
       
   333         item.setData(ConvergedMessage::Attachment, MessageProperty);
       
   334     }
       
   335 
       
   336     int slideCount = iMmsDataPlugin->slideCount();
       
   337     bool isBodyTextSet = false;
       
   338     QString textContent;
       
   339     QStringList attachmentPaths;
       
   340 
       
   341     for (int i = 0; i < slideCount; ++i) {
       
   342         UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i);
       
   343         for (int index = 0; index < objectList.count(); ++index) {
       
   344             attachmentPaths.append(objectList[index]->path());
       
   345             if (!isBodyTextSet && objectList[index]->mimetype().contains("text")) {
       
   346                 QFile file(objectList[index]->path());
       
   347                 if(file.open(QIODevice::ReadOnly))
   352                 {
   348                 {
   353                     QFile file(objectList[index]->path());
       
   354                     file.open(QIODevice::ReadOnly);
       
   355                     textContent = file.readAll();
   349                     textContent = file.readAll();
   356                     item.setData(textContent, BodyText);
   350                     item.setData(textContent, BodyText);
   357                     isBodyTextSet = true;
   351                     isBodyTextSet = true;
   358                     file.close();
   352                     file.close();
   359                 }
   353                 }
   360             }
   354             }
   361             foreach(UniMessageInfo* slide,objectList)
   355         }
   362                 {
   356         foreach(UniMessageInfo* slide,objectList)
       
   357             {
   363                 delete slide;
   358                 delete slide;
   364                 }
   359             }
   365         }
   360     }
   366         //populate item  with the attachment list
   361     //populate item  with the attachment list
   367         item.setData(attachmentPaths.join("|"),Attachments);
   362     item.setData(attachmentPaths.join("|"), Attachments);
   368         if(entry.IsAttributeSet(ECsAttributeHighPriority))
   363     if (entry.IsAttributeSet(ECsAttributeHighPriority)) {
       
   364         item.setData(ConvergedMessage::High, MessagePriority);
       
   365     }
       
   366     else if (entry.IsAttributeSet(ECsAttributeLowPriority)) {
       
   367         item.setData(ConvergedMessage::Low, MessagePriority);
       
   368     }
       
   369     //subject
       
   370     item.setData(iMmsDataPlugin->subject(), Subject);
       
   371 }
       
   372 
       
   373 //---------------------------------------------------------------
       
   374 // ConversationsModel::handleMMSNotification
       
   375 // @see header
       
   376 //---------------------------------------------------------------
       
   377 void ConversationsModel::handleMMSNotification(QStandardItem& item,
       
   378     const CCsConversationEntry& entry)
       
   379 {
       
   380     // set context to current entry
       
   381     mMsgStoreHandler->setNotificationMessageId(entry.EntryId());
       
   382     
       
   383     // fetch relevent info to show in CV
       
   384     // msg size
       
   385     QString estimatedMsgSizeStr = 
       
   386             mMsgStoreHandler->NotificationMsgSize();
       
   387     
       
   388     // msg class type
       
   389     QString classInfoStr = mMsgStoreHandler->NotificationClass();
       
   390     
       
   391     // notification expiry date
       
   392     //TODO: Need to do localization of digits used to show expiry time
       
   393     TTime expiryTime;
       
   394     QString expiryTimeStr;
       
   395     mMsgStoreHandler->NotificationExpiryDate(expiryTime, expiryTimeStr);
       
   396     
       
   397     // notification state e.g. waiting, retrieving etc
       
   398     QString statusStr;
       
   399     int status;
       
   400     mMsgStoreHandler->NotificationStatus(status, statusStr);
       
   401     
       
   402     // create data for bodytext role
       
   403     QString dataText;
       
   404     dataText.append("Size: "); // TODO: use logical str name
       
   405     dataText.append(estimatedMsgSizeStr);
       
   406     dataText.append(QChar::LineSeparator);
       
   407     dataText.append("Class: "); // TODO: use logical str name
       
   408     dataText.append(classInfoStr);
       
   409     dataText.append(QChar::LineSeparator);
       
   410     dataText.append("Expiry date: "); //TODO: use logical str name
       
   411     dataText.append(expiryTimeStr);
       
   412     if(!statusStr.isEmpty())
       
   413     {
       
   414         dataText.append(QChar::LineSeparator);
       
   415         dataText.append(statusStr);
       
   416         dataText.append(QChar::LineSeparator); //Temp fix to be removed
       
   417     }
       
   418 
       
   419     // set fetched data to roles
       
   420     item.setData(status, NotificationStatus);
       
   421     item.setData(dataText, BodyText);
       
   422 
       
   423     if (entry.IsAttributeSet(ECsAttributeHighPriority)) {
       
   424         item.setData(ConvergedMessage::High, MessagePriority);
       
   425     }
       
   426     else if (entry.IsAttributeSet(ECsAttributeLowPriority)) {
       
   427         item.setData(ConvergedMessage::Low, MessagePriority);
       
   428     }
       
   429 }
       
   430 
       
   431 //---------------------------------------------------------------
       
   432 // ConversationsModel::handleBlueToothMessages
       
   433 // @see header
       
   434 //---------------------------------------------------------------
       
   435 void ConversationsModel::handleBlueToothMessages(QStandardItem& item,
       
   436     const CCsConversationEntry& entry)
       
   437 {
       
   438     //TODO, needs to be revisited again, once BT team provides the solution for
       
   439     //BT received as Biomsg issue.
       
   440     QString description = S60QConversions::s60DescToQString(*(entry.Description()));
       
   441 
       
   442     if (description.contains(".vcf") || description.contains(".ics")) // "vCard"
       
   443     {
       
   444         //message sub-type
       
   445         item.setData(ConvergedMessage::VCard, MessageSubType);
       
   446 
       
   447         //parse vcf file to get the details
       
   448         QString displayName = ConversationsEngineUtility::getVcardDisplayName(description);
       
   449         item.setData(displayName, BodyText);
       
   450     }    
       
   451     else 
       
   452     {
       
   453         if (description.contains(".vcs")) // "vCalendar"
   369         {
   454         {
   370             item.setData(ConvergedMessage::High,MessagePriority);
   455             //message sub-type
   371         }
   456             item.setData(ConvergedMessage::VCal, MessageSubType);
   372         else if(entry.IsAttributeSet(ECsAttributeLowPriority))
   457         }
       
   458         else
   373         {
   459         {
   374             item.setData(ConvergedMessage::Low,MessagePriority);
   460             //message sub-type
   375         }
   461             item.setData(ConvergedMessage::None, MessageSubType);
   376     }
   462         }
   377     else
   463         //for BT messages we show filenames for all other (except vcard) messages
   378     {
   464         //get filename and set as body
   379         // sms bodytext
   465         QFileInfo fileinfo(description);
   380         item.setData(subject, BodyText);
   466         QString filename = fileinfo.fileName();
   381     }
   467         item.setData(filename, BodyText);
   382 
   468     }
   383     //presence
   469 }
   384     //TODO
   470 
   385     }
   471 //---------------------------------------------------------------
       
   472 // ConversationsModel::handleBioMessages
       
   473 // @see header
       
   474 //---------------------------------------------------------------
       
   475 void ConversationsModel::handleBioMessages(QStandardItem& item, const CCsConversationEntry& entry)
       
   476 {
       
   477     iBioMsgPlugin->setMessageId(entry.EntryId());
       
   478     int msgSubType = ConversationsEngineUtility::messageSubType(entry.GetType());
       
   479     if (ConvergedMessage::VCard == msgSubType) {
       
   480         if (iBioMsgPlugin->attachmentCount() > 0) {
       
   481             UniMessageInfoList attList = iBioMsgPlugin->attachmentList();
       
   482             QString attachmentPath = attList[0]->path();
       
   483 
       
   484             //get display-name and set as bodytext
       
   485             QString displayName = ConversationsEngineUtility::getVcardDisplayName(attachmentPath);
       
   486             item.setData(displayName, BodyText);
       
   487 
       
   488             // clear attachement list : its allocated at data model
       
   489             while (!attList.isEmpty()) {
       
   490                 delete attList.takeFirst();
       
   491             }
       
   492         }
       
   493     }
       
   494     else if (ConvergedMessage::VCal == msgSubType) {
       
   495         //not supported
       
   496     }
       
   497     else {
       
   498         // description
       
   499         HBufC* description = entry.Description();
       
   500         QString subject("");
       
   501         if (description && description->Length()) {
       
   502             subject = (S60QConversions::s60DescToQString(*description));
       
   503             item.setData(subject, BodyText);
       
   504         }
       
   505     }
       
   506 }
   386 
   507 
   387 //EOF
   508 //EOF