messagingapp/msgui/appengine/src/conversationsmodel.cpp
changeset 52 12db4185673b
parent 44 36f374c67aa8
child 70 a15d9966050f
equal deleted inserted replaced
44:36f374c67aa8 52:12db4185673b
    45 _LIT(KSelectConvMsgsStmt, "SELECT message_id, msg_processingstate, subject, body_text, preview_path, msg_property, preview_icon FROM conversation_messages WHERE message_id=:message_id ");
    45 _LIT(KSelectConvMsgsStmt, "SELECT message_id, msg_processingstate, subject, body_text, preview_path, msg_property, preview_icon FROM conversation_messages WHERE message_id=:message_id ");
    46 
    46 
    47 //selecet preview-icon query
    47 //selecet preview-icon query
    48 _LIT(KSelectPreviewIconStmt,"SELECT  message_id, preview_icon FROM conversation_messages WHERE message_id = :message_id ");
    48 _LIT(KSelectPreviewIconStmt,"SELECT  message_id, preview_icon FROM conversation_messages WHERE message_id = :message_id ");
    49 
    49 
       
    50 //selecet vcard-path query
       
    51 _LIT(KSelectVCardStmt,"SELECT  message_id, msg_processingstate, preview_path FROM conversation_messages WHERE message_id = :message_id ");
       
    52 
    50 // preview-cache max cost (items)
    53 // preview-cache max cost (items)
    51 const int CACHE_COST =  50;
    54 const int CACHE_COST =  50;
    52 //Preview thumbnail size
    55 //Preview thumbnail size
    53 const int KWidth = 9.5 * 6.7;
    56 const int KWidth = 9.5 * 6.7;
    54 const int KHeight = 9.5 * 6.7;
    57 const int KHeight = 9.5 * 6.7;
   433                 if (msgProcessingState == EPreviewMsgProcessed)
   436                 if (msgProcessingState == EPreviewMsgProcessed)
   434                     {
   437                     {
   435                     // use entry to populate model only when,
   438                     // use entry to populate model only when,
   436                     // entry is present in DB and its processing is over.
   439                     // entry is present in DB and its processing is over.
   437                     RBuf subjectBuffer;
   440                     RBuf subjectBuffer;
   438                     subjectBuffer.Create(sqlSelectStmt.ColumnSize(
   441                     if( subjectBuffer.Create(
   439                             subjectIndex));
   442                             sqlSelectStmt.ColumnSize(
   440                     sqlSelectStmt.ColumnText(subjectIndex, subjectBuffer);
   443                                     subjectIndex)) == KErrNone)
   441 
   444                     {
   442                     item.setData(XQConversions::s60DescToQString(
   445                         sqlSelectStmt.ColumnText(subjectIndex, subjectBuffer);
   443                             subjectBuffer), Subject);
   446                         item.setData(
   444                     subjectBuffer.Close();
   447                                 XQConversions::s60DescToQString(
   445 
   448                                         subjectBuffer), Subject);
       
   449                         subjectBuffer.Close();
       
   450                     }
       
   451                     
   446                     RBuf bodyBuffer;
   452                     RBuf bodyBuffer;
   447                     bodyBuffer.Create(sqlSelectStmt.ColumnSize(bodyIndex));
   453                     if (bodyBuffer.Create(
   448                     sqlSelectStmt.ColumnText(bodyIndex, bodyBuffer);
   454                             sqlSelectStmt.ColumnSize(
   449 
   455                                     bodyIndex)) == KErrNone)
   450                     item.setData(
   456                     {
   451                             XQConversions::s60DescToQString(bodyBuffer),
   457                        sqlSelectStmt.ColumnText(bodyIndex, bodyBuffer);
   452                             BodyText);
   458                        item.setData(
   453                     bodyBuffer.Close();
   459                                XQConversions::s60DescToQString(
       
   460                                        bodyBuffer), BodyText);
       
   461                        bodyBuffer.Close();
       
   462                     }
   454 
   463 
   455                     RBuf previewPathBuffer;
   464                     RBuf previewPathBuffer;
   456                     previewPathBuffer.Create(sqlSelectStmt.ColumnSize(
   465                     QString attachmentPath;
   457                             previewPathIndex));
   466                     if (previewPathBuffer.Create(
   458                     sqlSelectStmt.ColumnText(previewPathIndex,
   467                             sqlSelectStmt.ColumnSize(
   459                             previewPathBuffer);
   468                                     previewPathIndex)) == KErrNone)
   460 
   469                     {
   461                     //Rightnow set inside attachments
   470                         sqlSelectStmt.ColumnText(
   462                     QString attachmentPath(XQConversions::s60DescToQString(
   471                                 previewPathIndex,
   463                             previewPathBuffer));
   472                                 previewPathBuffer);
   464 
   473 
   465                     item.setData(attachmentPath, Attachments);
   474                         //Rightnow set inside attachments
   466                     previewPathBuffer.Close();
   475                         attachmentPath = XQConversions::s60DescToQString(
   467 
   476                                 previewPathBuffer);
       
   477                         item.setData(attachmentPath, Attachments);
       
   478                         previewPathBuffer.Close();
       
   479                     }
       
   480                     
   468                     int msgProperty = 0;
   481                     int msgProperty = 0;
   469                     msgProperty = sqlSelectStmt.ColumnInt(msgpropertyIndex);
   482                     msgProperty = sqlSelectStmt.ColumnInt(msgpropertyIndex);
   470                     item.setData(msgProperty, MessageProperty);
   483                     item.setData(msgProperty, MessageProperty);
   471 
   484 
   472                     RSqlColumnReadStream stream;
   485                     RSqlColumnReadStream stream;
   553                 if (!isBodyTextSet && objectList[index]->mimetype().contains(
   566                 if (!isBodyTextSet && objectList[index]->mimetype().contains(
   554                     "text"))
   567                     "text"))
   555                 {
   568                 {
   556                     QFile file(objectList[index]->path());
   569                     QFile file(objectList[index]->path());
   557                     file.open(QIODevice::ReadOnly);
   570                     file.open(QIODevice::ReadOnly);
   558                     textContent = file.readAll();
   571                     QByteArray textArray;
       
   572                     textArray = file.readAll();
       
   573                     char *data = new char[textArray.size()+1];
       
   574                     strcpy(data,textArray.data());
       
   575                     //This is needed since MMS text content 
       
   576                     //is stored in UTF8 format
       
   577                     textContent = textContent.fromUtf8(data,strlen(data));
       
   578                     delete []data;
   559                     item.setData(textContent, BodyText);
   579                     item.setData(textContent, BodyText);
   560                     isBodyTextSet = true;
   580                     isBodyTextSet = true;
   561                     file.close();
   581                     file.close();
   562                 }
   582                 }
   563                 if (!isVideoSet && !isImageSet && objectList[index]->mimetype().contains(
   583                 if (!isVideoSet && !isImageSet && objectList[index]->mimetype().contains(
   661     {
   681     {
   662         return;
   682         return;
   663     }
   683     }
   664 
   684 
   665     // fetch relevent info to show in CV
   685     // fetch relevent info to show in CV
   666     // msg size
       
   667     QString estimatedMsgSizeStr = QString("%1").arg(0);
       
   668     estimatedMsgSizeStr.append(" Kb");
       
   669     TRAP_IGNORE(estimatedMsgSizeStr =
       
   670             mMsgStoreHandler->NotificationMsgSizeL());
       
   671 
       
   672     // msg class type
       
   673     QString classInfoStr = mMsgStoreHandler->NotificationClass();
       
   674 
       
   675     // notification expiry date
       
   676     //TODO: Need to do localization of digits used to show expiry time
       
   677     TTime expiryTime;
       
   678     QString expiryTimeStr;
       
   679     mMsgStoreHandler->NotificationExpiryDate(expiryTime, expiryTimeStr);
       
   680 
       
   681     // notification state e.g. waiting, retrieving etc
   686     // notification state e.g. waiting, retrieving etc
   682     QString statusStr;
   687     QString statusStr;
   683     int status;
   688     int status;
   684     mMsgStoreHandler->NotificationStatus(status, statusStr);
   689     mMsgStoreHandler->NotificationStatus(status, statusStr);
   685 
   690 
   686     // create data for bodytext role
   691     // create data for bodytext role
   687     QString dataText;
   692     QString dataText;
   688     dataText.append("Size: "); // TODO: use logical str name
   693     dataText.append(mMsgStoreHandler->NotificationMsgSize());
   689     dataText.append(estimatedMsgSizeStr);
       
   690     dataText.append(QChar::LineSeparator);
   694     dataText.append(QChar::LineSeparator);
   691     dataText.append("Class: "); // TODO: use logical str name
   695     dataText.append(mMsgStoreHandler->NotificationClass());
   692     dataText.append(classInfoStr);
       
   693     dataText.append(QChar::LineSeparator);
   696     dataText.append(QChar::LineSeparator);
   694     dataText.append("Expiry date: "); //TODO: use logical str name
   697     dataText.append(mMsgStoreHandler->NotificationExpiryDate());
   695     dataText.append(expiryTimeStr);
       
   696     if(!statusStr.isEmpty())
   698     if(!statusStr.isEmpty())
   697     {
   699     {
   698         dataText.append(QChar::LineSeparator);
   700         dataText.append(QChar::LineSeparator);
   699         dataText.append(statusStr);
   701         dataText.append(statusStr);
   700         dataText.append(QChar::LineSeparator); //Temp fix to be removed
       
   701     }
   702     }
   702 
   703 
   703     // set fetched data to roles
   704     // set fetched data to roles
   704     item.setData(status, NotificationStatus);
   705     item.setData(status, NotificationStatus);
   705     item.setData(dataText, BodyText);
   706     item.setData(dataText, BodyText);
   716 // ConversationsModel::handleBlueToothMessages
   717 // ConversationsModel::handleBlueToothMessages
   717 // @see header
   718 // @see header
   718 //---------------------------------------------------------------
   719 //---------------------------------------------------------------
   719 void ConversationsModel::handleBlueToothMessages(QStandardItem& item,
   720 void ConversationsModel::handleBlueToothMessages(QStandardItem& item,
   720     const CCsConversationEntry& entry)
   721     const CCsConversationEntry& entry)
   721 {
   722     {
   722     //TODO, needs to be revisited again, once BT team provides the solution for
   723     int msgSubType = ConversationsEngineUtility::messageSubType(
   723     //BT received as Biomsg issue.
   724             entry.GetType());
   724     QString description = XQConversions::s60DescToQString(*(entry.Description()));
   725     
   725 
   726     if (msgSubType == ConvergedMessage::VCard)
   726     if (description.contains(".vcf") || description.contains(".ics")) // "vCard"
   727         {
   727     {
   728         handleVCard(item, entry.EntryId());
   728         //message sub-type
   729         }
   729         item.setData(ConvergedMessage::VCard, MessageSubType);
       
   730 
       
   731         //parse vcf file to get the details
       
   732         QString displayName = MsgContactHandler::getVCardDisplayName(
       
   733                 description);
       
   734         item.setData(displayName, BodyText);
       
   735     }
       
   736     else
   730     else
   737     {
   731         {
   738         if (description.contains(".vcs")) // "vCalendar"
   732         QString description = XQConversions::s60DescToQString(
   739         {
   733                 *(entry.Description()));
       
   734 
       
   735         if (msgSubType == ConvergedMessage::VCal) // "vCalendar"
       
   736             {
   740             //message sub-type
   737             //message sub-type
   741             item.setData(ConvergedMessage::VCal, MessageSubType);
   738             item.setData(ConvergedMessage::VCal, MessageSubType);
   742         }
   739             }
   743         else
   740         else
   744         {
   741             {
   745             //message sub-type
   742             //message sub-type
   746             item.setData(ConvergedMessage::None, MessageSubType);
   743             item.setData(ConvergedMessage::None, MessageSubType);
   747         }
   744             }
   748         //for BT messages we show filenames for all other (except vcard) messages
   745         //for BT messages we show filenames for all other (except vcard) messages
   749         //get filename and set as body
   746         //get filename and set as body
   750         QFileInfo fileinfo(description);
   747         QFileInfo fileinfo(description);
   751         QString filename = fileinfo.fileName();
   748         QString filename = fileinfo.fileName();
   752         item.setData(filename, BodyText);
   749         item.setData(filename, BodyText);
   753     }
   750         }
   754 }
   751     }
   755 
   752 
   756 //---------------------------------------------------------------
   753 //---------------------------------------------------------------
   757 // ConversationsModel::handleBioMessages
   754 // ConversationsModel::handleBioMessages
   758 // @see header
   755 // @see header
   759 //---------------------------------------------------------------
   756 //---------------------------------------------------------------
   760 void ConversationsModel::handleBioMessages(QStandardItem& item, const CCsConversationEntry& entry)
   757 void ConversationsModel::handleBioMessages(QStandardItem& item, const CCsConversationEntry& entry)
   761 {
   758 {
   762     iBioMsgPlugin->setMessageId(entry.EntryId());
       
   763     int msgSubType = ConversationsEngineUtility::messageSubType(entry.GetType());
   759     int msgSubType = ConversationsEngineUtility::messageSubType(entry.GetType());
   764     if (ConvergedMessage::VCard == msgSubType) {
   760     if (ConvergedMessage::VCard == msgSubType)
   765         if (iBioMsgPlugin->attachmentCount() > 0) {
   761         {
   766             UniMessageInfoList attList = iBioMsgPlugin->attachmentList();
   762         handleVCard(item, entry.EntryId());
   767             QString attachmentPath = attList[0]->path();
   763         }
   768 
       
   769             //get display-name and set as bodytext
       
   770             QString displayName =
       
   771                     MsgContactHandler::getVCardDisplayName(
       
   772                             attachmentPath);
       
   773             item.setData(displayName, BodyText);
       
   774             item.setData(attachmentPath, Attachments);
       
   775 
       
   776             // clear attachement list : its allocated at data model
       
   777             while (!attList.isEmpty()) {
       
   778                 delete attList.takeFirst();
       
   779             }
       
   780         }
       
   781     }
       
   782     else if (ConvergedMessage::VCal == msgSubType) {
   764     else if (ConvergedMessage::VCal == msgSubType) {
   783         //not supported
   765         //not supported
   784     }
   766     }
   785     else if (ConvergedMessage::RingingTone == msgSubType) {
   767     else if (ConvergedMessage::RingingTone == msgSubType) {
       
   768         iBioMsgPlugin->setMessageId(entry.EntryId());
   786         if (iBioMsgPlugin->attachmentCount() > 0) {
   769         if (iBioMsgPlugin->attachmentCount() > 0) {
   787             UniMessageInfoList attList = iBioMsgPlugin->attachmentList();
   770             UniMessageInfoList attList = iBioMsgPlugin->attachmentList();
   788             QString attachmentPath = attList[0]->path();
   771             QString attachmentPath = attList[0]->path();
   789 
   772 
   790             //get tone title, and set as bodytext
   773             //get tone title, and set as bodytext
   961     QCRITICAL_WRITE("ConversationsModel::updatePreviewIcon end.")
   944     QCRITICAL_WRITE("ConversationsModel::updatePreviewIcon end.")
   962 
   945 
   963 }
   946 }
   964 
   947 
   965 //---------------------------------------------------------------
   948 //---------------------------------------------------------------
       
   949 // ConversationsModel::handleVCard()
       
   950 // @see header
       
   951 //---------------------------------------------------------------
       
   952 void ConversationsModel::handleVCard(QStandardItem& item, int msgId)
       
   953     {
       
   954     //sql query to get vcard-path from DB
       
   955     bool vCardParsed = false;
       
   956 
       
   957     if (iSqlDbOpen)
       
   958         {
       
   959         RSqlStatement sqlSelectVcardStmt;
       
   960         TInt err = sqlSelectVcardStmt.Prepare(iSqlDb, KSelectVCardStmt);
       
   961 
       
   962         QCRITICAL_WRITE_FORMAT("Error from Prepare()", err)
       
   963 
       
   964         if (err == KErrNone)
       
   965             {
       
   966             //msg_id
       
   967             TInt msgIdIndex = sqlSelectVcardStmt.ParameterIndex(
       
   968                     _L(":message_id"));
       
   969             sqlSelectVcardStmt.BindInt(msgIdIndex, msgId);
       
   970             // state
       
   971             TInt msgProcessingStateIndex = sqlSelectVcardStmt.ColumnIndex(
       
   972                     _L("msg_processingstate"));
       
   973            
       
   974             // get vacrd-path from DB
       
   975             err = sqlSelectVcardStmt.Next();
       
   976             QCRITICAL_WRITE_FORMAT("Error from Next()", err)
       
   977 
       
   978             if (err == KSqlAtRow)
       
   979                 {
       
   980                 int msgProcessingState = 0;
       
   981                 msgProcessingState = sqlSelectVcardStmt.ColumnInt(
       
   982                         msgProcessingStateIndex);
       
   983                 if (msgProcessingState == EPreviewMsgProcessed)
       
   984                     {
       
   985                     //path-index
       
   986                     TInt previewPathIndex = sqlSelectVcardStmt.ColumnIndex(
       
   987                             _L("preview_path"));
       
   988 
       
   989                     //Get vcard-path data from path-index
       
   990                     RSqlColumnReadStream stream;
       
   991                     err = stream.ColumnBinary(sqlSelectVcardStmt,
       
   992                             previewPathIndex);
       
   993 
       
   994                     QCRITICAL_WRITE_FORMAT("Error from ColumnBinary()", err)
       
   995 
       
   996                     if (err == KErrNone)
       
   997                     {
       
   998                         RBuf vCardPathBuffer;
       
   999                         if (vCardPathBuffer.Create(
       
  1000                                 sqlSelectVcardStmt.ColumnSize(
       
  1001                                 previewPathIndex)) == KErrNone)
       
  1002                         {
       
  1003                             sqlSelectVcardStmt.ColumnText(
       
  1004                                     previewPathIndex,
       
  1005                                     vCardPathBuffer);
       
  1006 
       
  1007                             //set inside attachments
       
  1008                             QString attachmentPath(
       
  1009                                     XQConversions::s60DescToQString(
       
  1010                                             vCardPathBuffer));
       
  1011                             item.setData(attachmentPath, Attachments);
       
  1012 
       
  1013                             //get display-name and set as bodytext
       
  1014                             QString displayName =
       
  1015                                     MsgContactHandler::getVCardDisplayName(
       
  1016                                             attachmentPath);
       
  1017                             item.setData(displayName, BodyText);
       
  1018 
       
  1019                             vCardPathBuffer.Close();
       
  1020                             vCardParsed = true;
       
  1021                             
       
  1022                             QCRITICAL_WRITE("vcard parsing complete.")
       
  1023                         }
       
  1024                     }
       
  1025                     //close stream
       
  1026                     stream.Close();
       
  1027                     }
       
  1028                 }
       
  1029             }
       
  1030         sqlSelectVcardStmt.Close();
       
  1031         }
       
  1032 
       
  1033     // fallback, if not parsed in DB, parse from store
       
  1034     if (!vCardParsed)
       
  1035         {
       
  1036         iBioMsgPlugin->setMessageId(msgId);
       
  1037 
       
  1038         if (iBioMsgPlugin->attachmentCount() > 0)
       
  1039             {
       
  1040             UniMessageInfoList attList = iBioMsgPlugin->attachmentList();
       
  1041             QString attachmentPath = attList[0]->path();
       
  1042 
       
  1043             //get display-name and set as bodytext
       
  1044             QString displayName = MsgContactHandler::getVCardDisplayName(
       
  1045                     attachmentPath);
       
  1046             item.setData(displayName, BodyText);
       
  1047             item.setData(attachmentPath, Attachments);
       
  1048 
       
  1049             // clear attachement list : its allocated at data model
       
  1050             while (!attList.isEmpty())
       
  1051                 {
       
  1052                 delete attList.takeFirst();
       
  1053                 }
       
  1054             }
       
  1055         }
       
  1056     }
       
  1057 
       
  1058 //---------------------------------------------------------------
   966 // ConversationsModel::clearModel()
  1059 // ConversationsModel::clearModel()
   967 // @see header
  1060 // @see header
   968 //---------------------------------------------------------------
  1061 //---------------------------------------------------------------
   969 void ConversationsModel::clearModel()
  1062 void ConversationsModel::clearModel()
   970 {
  1063 {
   971     clear();
  1064     clear();
   972     previewIconCache.clear();
  1065     previewIconCache.clear();
   973 }
  1066 }
   974 
  1067 
       
  1068 //---------------------------------------------------------------
       
  1069 // ConversationsModel::emitConversationViewEmpty()
       
  1070 // @see header
       
  1071 //---------------------------------------------------------------
   975 void ConversationsModel:: emitConversationViewEmpty()
  1072 void ConversationsModel:: emitConversationViewEmpty()
   976 {
  1073 {
   977     emit conversationViewEmpty();
  1074     emit conversationViewEmpty();
   978 }
  1075 }
   979 //EOF
  1076 //EOF