messagingapp/msgui/appengine/src/conversationssummarymodel.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
equal deleted inserted replaced
23:238255e8b033 25:84d9eb65b26f
    18 #include "conversationssummarymodel.h"
    18 #include "conversationssummarymodel.h"
    19 #include "conversationsenginedefines.h"
    19 #include "conversationsenginedefines.h"
    20 #include "conversationsengineutility.h"
    20 #include "conversationsengineutility.h"
    21 #include "s60qconversions.h"
    21 #include "s60qconversions.h"
    22 #include "convergedmessage.h"
    22 #include "convergedmessage.h"
       
    23 #include "unidatamodelloader.h"
       
    24 #include "unidatamodelplugininterface.h"
    23 
    25 
    24 #include <ccsclientconversation.h>
    26 #include <ccsclientconversation.h>
    25 #include <ccsconversationentry.h>
    27 #include <ccsconversationentry.h>
       
    28 #include <QFile>
       
    29 #include <QFileInfo>
    26 
    30 
    27 //---------------------------------------------------------------
    31 //---------------------------------------------------------------
    28 // ConversationsSummaryModel::ConversationsSummaryModel
    32 // ConversationsSummaryModel::ConversationsSummaryModel
    29 // @see header
    33 // @see header
    30 //---------------------------------------------------------------
    34 //---------------------------------------------------------------
    78             value = item->data(UnreadCount);
    82             value = item->data(UnreadCount);
    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         }
       
    90         case SendingState:
       
    91         {
       
    92             value = item->data(SendingState);
       
    93             break;
    86         }
    94         }
    87         case MessageProperty:
    95         case MessageProperty:
    88         {
    96         {
    89             value = item->data(MessageProperty);
    97             value = item->data(MessageProperty);
    90             break;
    98             break;
    91         }
    99         }
    92         case MessageType:
   100         case MessageType:
    93         {
   101         {
    94             value = item->data(MessageType);                    
   102             value = item->data(MessageType);
       
   103             break;
       
   104         }
       
   105         case MessageSubType:
       
   106         {
       
   107             value = item->data(MessageSubType);
    95             break;
   108             break;
    96         }
   109         }
    97         case Subject:
   110         case Subject:
    98         {
   111         {
    99             
       
   100             value = item->data(Subject);
   112             value = item->data(Subject);
   101             break;
   113             break;
   102         }
   114         }
   103         case BodyText:
   115         case BodyText:
   104         {
   116         {
   108         case ConversationAddress:
   120         case ConversationAddress:
   109         {
   121         {
   110             value = item->data(ConversationAddress);
   122             value = item->data(ConversationAddress);
   111             break;
   123             break;
   112         }
   124         }
   113         case FirstName:
   125         case DisplayName:
   114         {
   126         {
   115             value = item->data(FirstName);
   127             value = item->data(DisplayName);
   116             break;
       
   117         }
       
   118         case LastName:
       
   119         {
       
   120             value = item->data(LastName);
       
   121             break;
       
   122         }
       
   123         case NickName:
       
   124         {
       
   125             value = item->data(NickName);
       
   126             break;
   128             break;
   127         }
   129         }
   128         case Avatar:
   130         case Avatar:
   129         {
   131         {
   130             value = item->data(Avatar);
   132             value = item->data(Avatar);
       
   133             break;
       
   134         }
       
   135         case Direction:
       
   136         {
       
   137             value = item->data(Direction);
   131             break;
   138             break;
   132         }
   139         }
   133         default:
   140         default:
   134         {
   141         {
   135             //No matching role found, set invalid variant.
   142             //No matching role found, set invalid variant.
   195 //---------------------------------------------------------------
   202 //---------------------------------------------------------------
   196 void ConversationsSummaryModel::populateItem(QStandardItem& item, 
   203 void ConversationsSummaryModel::populateItem(QStandardItem& item, 
   197         const CCsClientConversation& conversation)
   204         const CCsClientConversation& conversation)
   198     {
   205     {
   199     //get entry
   206     //get entry
   200     CCsConversationEntry* conEntry = conversation.GetConversationEntry();   
   207     CCsConversationEntry* conEntry = conversation.GetConversationEntry(); 
   201     
   208     //error scenario
   202     // id 
   209     if(conEntry == NULL)
       
   210         return;
       
   211     
       
   212     // message details
       
   213     // conversation-id 
   203     item.setData(conversation.GetConversationEntryId(), ConversationId);
   214     item.setData(conversation.GetConversationEntryId(), ConversationId);
   204 
   215     // message-id
   205     // message details
   216     item.setData(conEntry->EntryId(), ConvergedMsgId);	
   206     item.setData(conEntry->EntryId(), ConvergedMsgId);
   217     // send status
   207     item.setData(ConversationsEngineUtility::messageType(conEntry->GetType()), MessageType);
   218     item.setData(conEntry->GetSendState(),SendingState);
   208     
   219     // direction
   209     // description
   220     item.setData(conEntry->ConversationDir(), Direction);
   210     HBufC* body = conEntry->Description();
   221     //msg-type
   211     if( body && body->Length())
   222     int msgType = ConversationsEngineUtility::messageType(conEntry->GetType());
       
   223     item.setData(msgType, MessageType);
       
   224     //message sub-type   
       
   225     item.setData(ConversationsEngineUtility::messageSubType(conEntry->GetType()), MessageSubType);
       
   226 
       
   227     //handle BT messages, needs to be revisited again, once vcal/vcard over BT issue is fixed
       
   228     if(ConvergedMessage::BT == msgType)
       
   229     {
       
   230         handleBlueToothMessages(item, *conEntry);
       
   231     }
       
   232     else if(msgType == ConvergedMessage::BioMsg)
       
   233     {
       
   234         handleBioMessages(item, *conEntry);
       
   235     }
       
   236     else
       
   237     {       
       
   238         // description
       
   239         HBufC* body = conEntry->Description();
       
   240         if( body && body->Length())
   212         {     
   241         {     
   213         QString bodytext(S60QConversions::s60DescToQString(*body));
   242             QString bodytext(S60QConversions::s60DescToQString(*body));
   214         item.setData(bodytext, BodyText); 
   243             item.setData(bodytext, BodyText); 
   215         item.setData(bodytext, Subject );
   244             item.setData(bodytext, Subject );
   216         }
   245         }
   217 
   246     }
       
   247 
       
   248     
   218     // time stamp
   249     // time stamp
   219     TTime unixEpoch(KUnixEpoch);
   250     TTime unixEpoch(KUnixEpoch);
   220     TTimeIntervalSeconds seconds;
   251     TTimeIntervalSeconds seconds;
   221     TTime timeStamp(conEntry->TimeStamp() );
   252     TTime timeStamp(conEntry->TimeStamp() );
   222     timeStamp.SecondsFrom(unixEpoch, seconds);       
   253     timeStamp.SecondsFrom(unixEpoch, seconds);       
   224 
   255 
   225     // unread count 
   256     // unread count 
   226     item.setData(conversation.GetUnreadMessageCount(), UnreadCount);
   257     item.setData(conversation.GetUnreadMessageCount(), UnreadCount);
   227 
   258 
   228     // contact details
   259     // contact details
   229     HBufC* firstname = conversation.GetFirstName(); 
   260     HBufC* disName = conversation.GetDisplayName(); 
   230     QString displayName("");
   261     QString displayName("");
   231     //first name
   262     //display name
   232     if(firstname && firstname->Length())
   263     if(disName && disName->Length())
   233         {
   264         {
   234     displayName = S60QConversions::s60DescToQString(*firstname);
   265         displayName = S60QConversions::s60DescToQString(*disName);
   235     item.setData(displayName,FirstName); 
   266         item.setData(displayName,DisplayName); 
   236         }
   267         }
   237     //last name
   268     
   238     HBufC* lastname = conversation.GetLastName();
       
   239     if( lastname &&  lastname->Length())
       
   240         {          
       
   241     item.setData(S60QConversions::s60DescToQString(*lastname),LastName);
       
   242         }
       
   243     //nick name
       
   244     HBufC* nickname = conversation.GetNickName();
       
   245     if (nickname && nickname->Length())
       
   246     {
       
   247         item.setData(S60QConversions::s60DescToQString(*nickname), NickName);
       
   248     }
       
   249 
       
   250     // contact number
   269     // contact number
   251     HBufC* contactno = conEntry->Contact();
   270     HBufC* contactno = conEntry->Contact();
   252     QString contactNumber("");
   271     QString contactNumber("");
   253     if ( contactno && contactno->Length() )
   272     if ( contactno && contactno->Length() )
   254         {
   273         {
   262     
   281     
   263     // unread status        
   282     // unread status        
   264     item.setData(conEntry->IsAttributeSet(ECsAttributeUnread),UnReadStatus);      
   283     item.setData(conEntry->IsAttributeSet(ECsAttributeUnread),UnReadStatus);      
   265     }
   284     }
   266 
   285 
       
   286 
       
   287 //---------------------------------------------------------------
       
   288 // ConversationsModel::handleBlueToothMessages
       
   289 // @see header
       
   290 //---------------------------------------------------------------
       
   291 void ConversationsSummaryModel::handleBlueToothMessages(QStandardItem& item,
       
   292     const CCsConversationEntry& entry)
       
   293 {
       
   294     //TODO, needs to be revisited again, once BT team provides the solution for
       
   295     //BT received as Biomsg issue.
       
   296     QString description = S60QConversions::s60DescToQString(*(entry.Description()));
       
   297 
       
   298     if (description.contains(".vcf") || description.contains(".ics")) // "vCard"
       
   299     {
       
   300         //message sub-type
       
   301         item.setData(ConvergedMessage::VCard, MessageSubType);
       
   302 
       
   303         //parse vcf file to get the details
       
   304         QString displayName = ConversationsEngineUtility::getVcardDisplayName(description);
       
   305         item.setData(displayName, BodyText);
       
   306     }
       
   307     else 
       
   308     {
       
   309         if (description.contains(".vcs")) // "vCalendar"
       
   310         {
       
   311             //message sub-type
       
   312             item.setData(ConvergedMessage::VCal, MessageSubType);
       
   313         }
       
   314         else
       
   315         {
       
   316             //message sub-type
       
   317             item.setData(ConvergedMessage::None, MessageSubType);
       
   318         }
       
   319         //for BT messages we show filenames for all other (except vcard) messages
       
   320         //get filename and set as body
       
   321         QFileInfo fileinfo(description);
       
   322         QString filename = fileinfo.fileName();
       
   323         item.setData(filename, BodyText);
       
   324     }
       
   325 }
       
   326 
       
   327 //---------------------------------------------------------------
       
   328 // ConversationsSummaryModel::handleBioMessages
       
   329 // @see header
       
   330 //---------------------------------------------------------------
       
   331 void ConversationsSummaryModel::handleBioMessages(QStandardItem& item, const CCsConversationEntry& entry)
       
   332 {
       
   333     UniDataModelLoader* pluginLoader = new UniDataModelLoader;
       
   334     UniDataModelPluginInterface* bioMsgPlugin = pluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg);
       
   335     bioMsgPlugin->setMessageId(entry.EntryId());
       
   336     
       
   337     int msgSubType = ConversationsEngineUtility::messageSubType(entry.GetType());
       
   338     if (ConvergedMessage::VCard == msgSubType) {
       
   339         if (bioMsgPlugin->attachmentCount() > 0) {
       
   340             UniMessageInfoList attList = bioMsgPlugin->attachmentList();
       
   341             QString attachmentPath = attList[0]->path();
       
   342 
       
   343             //get display-name and set as bodytext
       
   344             QString displayName = ConversationsEngineUtility::getVcardDisplayName(attachmentPath);
       
   345             item.setData(displayName, BodyText);
       
   346 
       
   347             // clear attachement list : its allocated at data model
       
   348             while (!attList.isEmpty()) {
       
   349                 delete attList.takeFirst();
       
   350             }
       
   351         }
       
   352     }
       
   353     else if (ConvergedMessage::VCal == msgSubType) {
       
   354         //not supported
       
   355     }
       
   356     else {
       
   357         // description
       
   358         HBufC* description = entry.Description();
       
   359         QString subject("");
       
   360         if (description && description->Length()) {
       
   361             subject = (S60QConversions::s60DescToQString(*description));
       
   362             item.setData(subject, BodyText);
       
   363         }
       
   364     }
       
   365     
       
   366     delete pluginLoader;
       
   367 }
   267 // EOF
   368 // EOF