21 #include "convergedmessage.h" |
21 #include "convergedmessage.h" |
22 #include "s60qconversions.h" |
22 #include "s60qconversions.h" |
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 "ringbc.h" |
|
27 #include "msgcontacthandler.h" |
26 #include <ccsconversationentry.h> |
28 #include <ccsconversationentry.h> |
|
29 |
|
30 #include "debugtraces.h" |
|
31 |
27 #include <QFile> |
32 #include <QFile> |
28 #include <QFileInfo> |
33 #include <QFileInfo> |
29 |
34 #include <s32mem.h> |
30 // LOCAL CONSTANTS |
35 #include <ccsdefs.h> |
|
36 |
|
37 //CONSTANTS |
|
38 _LIT(KDbFileName, "c:[2002A542]conversations.db"); |
|
39 // preview sql query |
|
40 _LIT(KSelectConvMsgsStmt, "SELECT message_id, subject, body_text, preview_path, msg_property FROM conversation_messages WHERE message_id=:message_id "); |
31 |
41 |
32 //--------------------------------------------------------------- |
42 //--------------------------------------------------------------- |
33 // ConversationsModel::ConversationsModel |
43 // ConversationsModel::ConversationsModel |
34 // Constructor |
44 // Constructor |
35 //--------------------------------------------------------------- |
45 //--------------------------------------------------------------- |
36 ConversationsModel::ConversationsModel(ConversationMsgStoreHandler* msgStoreHandler, |
46 ConversationsModel::ConversationsModel(ConversationMsgStoreHandler* msgStoreHandler, |
37 QObject* parent) : |
47 QObject* parent) : |
38 QStandardItemModel(parent), mMsgStoreHandler(msgStoreHandler) |
48 QStandardItemModel(parent), mMsgStoreHandler(msgStoreHandler), iSqlDbOpen(EFalse) |
39 { |
49 { |
|
50 //Open SQL DB |
|
51 if (KErrNone == iSqlDb.Open(KDbFileName)) |
|
52 { |
|
53 iSqlDbOpen = ETrue; |
|
54 } |
40 iDataModelPluginLoader = new UniDataModelLoader; |
55 iDataModelPluginLoader = new UniDataModelLoader; |
41 iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::Mms); |
56 iMmsDataPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::Mms); |
42 iBioMsgPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg); |
57 iBioMsgPlugin = iDataModelPluginLoader->getDataModelPlugin(ConvergedMessage::BioMsg); |
43 } |
58 } |
44 |
59 |
318 } |
340 } |
319 else { |
341 else { |
320 // sms bodytext |
342 // sms bodytext |
321 item.setData(subject, BodyText); |
343 item.setData(subject, BodyText); |
322 } |
344 } |
|
345 |
|
346 QCRITICAL_WRITE("ConversationsModel::populateItem end."); |
323 } |
347 } |
324 |
348 |
325 //--------------------------------------------------------------- |
349 //--------------------------------------------------------------- |
326 // ConversationsModel::handleMMS |
350 // ConversationsModel::handleMMS |
327 // @see header |
351 // @see header |
328 //--------------------------------------------------------------- |
352 //--------------------------------------------------------------- |
329 void ConversationsModel::handleMMS(QStandardItem& item, const CCsConversationEntry& entry) |
353 void ConversationsModel::handleMMS(QStandardItem& item, const CCsConversationEntry& entry) |
330 { |
354 { |
331 iMmsDataPlugin->setMessageId(entry.EntryId()); |
355 //msg_id |
332 if (iMmsDataPlugin->attachmentCount() > 0) { |
356 int msgId = entry.EntryId(); |
333 item.setData(ConvergedMessage::Attachment, MessageProperty); |
357 |
334 } |
358 bool isEntryInDb = false; |
335 |
359 TInt err = KErrNone; |
336 int slideCount = iMmsDataPlugin->slideCount(); |
360 |
337 bool isBodyTextSet = false; |
361 //check if db is open and query db |
338 QString textContent; |
362 if (iSqlDbOpen) |
339 QStringList attachmentPaths; |
363 { |
340 |
364 RSqlStatement sqlSelectStmt; |
341 for (int i = 0; i < slideCount; ++i) { |
365 err = sqlSelectStmt.Prepare(iSqlDb, KSelectConvMsgsStmt); |
342 UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i); |
366 |
343 for (int index = 0; index < objectList.count(); ++index) { |
367 // move to fallback option |
344 attachmentPaths.append(objectList[index]->path()); |
368 if (KErrNone == err) |
345 if (!isBodyTextSet && objectList[index]->mimetype().contains("text")) { |
369 { |
346 QFile file(objectList[index]->path()); |
370 TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id")); |
347 if(file.open(QIODevice::ReadOnly)) |
371 TInt subjectIndex = sqlSelectStmt.ColumnIndex(_L("subject")); |
|
372 TInt bodyIndex = sqlSelectStmt.ColumnIndex(_L("body_text")); |
|
373 TInt previewPathIndex = sqlSelectStmt.ColumnIndex( |
|
374 _L("preview_path")); |
|
375 TInt msgpropertyIndex = sqlSelectStmt.ColumnIndex( |
|
376 _L("msg_property")); |
|
377 |
|
378 err = sqlSelectStmt.BindInt(msgIdIndex, msgId); |
|
379 |
|
380 // populate item |
|
381 if ((KErrNone == err) && (sqlSelectStmt.Next() == KSqlAtRow)) |
348 { |
382 { |
|
383 RBuf subjectBuffer; |
|
384 subjectBuffer.Create(sqlSelectStmt.ColumnSize(subjectIndex)); |
|
385 sqlSelectStmt.ColumnText(subjectIndex, subjectBuffer); |
|
386 |
|
387 item.setData( |
|
388 S60QConversions::s60DescToQString(subjectBuffer), |
|
389 Subject); |
|
390 subjectBuffer.Close(); |
|
391 |
|
392 RBuf bodyBuffer; |
|
393 bodyBuffer.Create(sqlSelectStmt.ColumnSize(bodyIndex)); |
|
394 sqlSelectStmt.ColumnText(bodyIndex, bodyBuffer); |
|
395 |
|
396 item.setData(S60QConversions::s60DescToQString(bodyBuffer), |
|
397 BodyText); |
|
398 bodyBuffer.Close(); |
|
399 |
|
400 RBuf previewPathBuffer; |
|
401 previewPathBuffer.Create(sqlSelectStmt.ColumnSize( |
|
402 previewPathIndex)); |
|
403 sqlSelectStmt.ColumnText(previewPathIndex, previewPathBuffer); |
|
404 |
|
405 //Rightnow set inside attachments |
|
406 item.setData(S60QConversions::s60DescToQString( |
|
407 previewPathBuffer), Attachments); |
|
408 previewPathBuffer.Close(); |
|
409 |
|
410 int msgProperty = 0; |
|
411 msgProperty = sqlSelectStmt.ColumnInt(msgpropertyIndex); |
|
412 item.setData(msgProperty, MessageProperty); |
|
413 |
|
414 //set flag to disable fallback option |
|
415 isEntryInDb = true; |
|
416 } |
|
417 } |
|
418 sqlSelectStmt.Close(); |
|
419 } |
|
420 |
|
421 //fallback option incase of db operation failure or enry not found in DB |
|
422 //populate from data plugins |
|
423 if (!isEntryInDb || err != KErrNone) |
|
424 { |
|
425 iMmsDataPlugin->setMessageId(entry.EntryId()); |
|
426 int msgProperty = 0; |
|
427 |
|
428 if (iMmsDataPlugin->attachmentCount() > 0) |
|
429 { |
|
430 msgProperty |= EPreviewAttachment; |
|
431 } |
|
432 |
|
433 //subject |
|
434 item.setData(iMmsDataPlugin->subject(), Subject); |
|
435 |
|
436 int slideCount = iMmsDataPlugin->slideCount(); |
|
437 bool isBodyTextSet = false; |
|
438 bool isAudioSet = false; |
|
439 bool isImageSet = false; |
|
440 bool isVideoSet = false; |
|
441 QString textContent; |
|
442 QString videoPath; |
|
443 QString imagePath; |
|
444 |
|
445 for (int i = 0; i < slideCount; ++i) |
|
446 { |
|
447 UniMessageInfoList objectList = iMmsDataPlugin->slideContent(i); |
|
448 for (int index = 0; index < objectList.count(); ++index) |
|
449 { |
|
450 if (!isBodyTextSet && objectList[index]->mimetype().contains( |
|
451 "text")) |
|
452 { |
|
453 QFile file(objectList[index]->path()); |
|
454 file.open(QIODevice::ReadOnly); |
349 textContent = file.readAll(); |
455 textContent = file.readAll(); |
350 item.setData(textContent, BodyText); |
456 item.setData(textContent, BodyText); |
351 isBodyTextSet = true; |
457 isBodyTextSet = true; |
352 file.close(); |
458 file.close(); |
353 } |
459 } |
|
460 if (!isImageSet && objectList[index]->mimetype().contains( |
|
461 "image")) |
|
462 { |
|
463 isImageSet = true; |
|
464 msgProperty |= EPreviewImage; |
|
465 imagePath = objectList[index]->path(); |
|
466 } |
|
467 if (!isAudioSet && objectList[index]->mimetype().contains( |
|
468 "audio")) |
|
469 { |
|
470 msgProperty |= EPreviewAudio; |
|
471 isAudioSet = true; |
|
472 } |
|
473 if (!isVideoSet && objectList[index]->mimetype().contains( |
|
474 "video")) |
|
475 { |
|
476 isVideoSet = true; |
|
477 msgProperty |= EPreviewVideo; |
|
478 videoPath = objectList[index]->path(); |
|
479 } |
354 } |
480 } |
355 } |
481 foreach(UniMessageInfo* slide,objectList) |
356 foreach(UniMessageInfo* slide,objectList) |
482 { |
357 { |
483 delete slide; |
358 delete slide; |
484 } |
359 } |
485 } |
360 } |
486 //populate item with the attachment list |
361 //populate item with the attachment list |
487 if (isVideoSet) |
362 item.setData(attachmentPaths.join("|"), Attachments); |
488 { |
363 if (entry.IsAttributeSet(ECsAttributeHighPriority)) { |
489 item.setData(videoPath, Attachments); |
|
490 } |
|
491 else if (isImageSet) |
|
492 { |
|
493 item.setData(imagePath, Attachments); |
|
494 } |
|
495 //populate msgProperty |
|
496 item.setData(msgProperty, MessageProperty); |
|
497 } |
|
498 |
|
499 // fill other attributes |
|
500 if (entry.IsAttributeSet(ECsAttributeHighPriority)) |
|
501 { |
364 item.setData(ConvergedMessage::High, MessagePriority); |
502 item.setData(ConvergedMessage::High, MessagePriority); |
365 } |
503 } |
366 else if (entry.IsAttributeSet(ECsAttributeLowPriority)) { |
504 else if (entry.IsAttributeSet(ECsAttributeLowPriority)) |
|
505 { |
367 item.setData(ConvergedMessage::Low, MessagePriority); |
506 item.setData(ConvergedMessage::Low, MessagePriority); |
368 } |
507 } |
369 //subject |
|
370 item.setData(iMmsDataPlugin->subject(), Subject); |
|
371 } |
508 } |
372 |
509 |
373 //--------------------------------------------------------------- |
510 //--------------------------------------------------------------- |
374 // ConversationsModel::handleMMSNotification |
511 // ConversationsModel::handleMMSNotification |
375 // @see header |
512 // @see header |
376 //--------------------------------------------------------------- |
513 //--------------------------------------------------------------- |
377 void ConversationsModel::handleMMSNotification(QStandardItem& item, |
514 void ConversationsModel::handleMMSNotification(QStandardItem& item, |
378 const CCsConversationEntry& entry) |
515 const CCsConversationEntry& entry) |
379 { |
516 { |
380 // set context to current entry |
517 // set context to current entry |
381 mMsgStoreHandler->setNotificationMessageId(entry.EntryId()); |
518 TRAPD(err, mMsgStoreHandler->setNotificationMessageIdL(entry.EntryId())); |
|
519 if(err != KErrNone) |
|
520 { |
|
521 return; |
|
522 } |
382 |
523 |
383 // fetch relevent info to show in CV |
524 // fetch relevent info to show in CV |
384 // msg size |
525 // msg size |
385 QString estimatedMsgSizeStr = |
526 QString estimatedMsgSizeStr = QString("%1").arg(0); |
386 mMsgStoreHandler->NotificationMsgSize(); |
527 estimatedMsgSizeStr.append(" Kb"); |
|
528 TRAP_IGNORE(estimatedMsgSizeStr = |
|
529 mMsgStoreHandler->NotificationMsgSizeL()); |
387 |
530 |
388 // msg class type |
531 // msg class type |
389 QString classInfoStr = mMsgStoreHandler->NotificationClass(); |
532 QString classInfoStr = mMsgStoreHandler->NotificationClass(); |
390 |
533 |
391 // notification expiry date |
534 // notification expiry date |
480 if (iBioMsgPlugin->attachmentCount() > 0) { |
624 if (iBioMsgPlugin->attachmentCount() > 0) { |
481 UniMessageInfoList attList = iBioMsgPlugin->attachmentList(); |
625 UniMessageInfoList attList = iBioMsgPlugin->attachmentList(); |
482 QString attachmentPath = attList[0]->path(); |
626 QString attachmentPath = attList[0]->path(); |
483 |
627 |
484 //get display-name and set as bodytext |
628 //get display-name and set as bodytext |
485 QString displayName = ConversationsEngineUtility::getVcardDisplayName(attachmentPath); |
629 QString displayName = |
|
630 MsgContactHandler::getVCardDisplayName( |
|
631 attachmentPath); |
486 item.setData(displayName, BodyText); |
632 item.setData(displayName, BodyText); |
487 |
633 |
488 // clear attachement list : its allocated at data model |
634 // clear attachement list : its allocated at data model |
489 while (!attList.isEmpty()) { |
635 while (!attList.isEmpty()) { |
490 delete attList.takeFirst(); |
636 delete attList.takeFirst(); |
491 } |
637 } |
492 } |
638 } |
493 } |
639 } |
494 else if (ConvergedMessage::VCal == msgSubType) { |
640 else if (ConvergedMessage::VCal == msgSubType) { |
495 //not supported |
641 //not supported |
|
642 } |
|
643 else if (ConvergedMessage::RingingTone == msgSubType) { |
|
644 if (iBioMsgPlugin->attachmentCount() > 0) { |
|
645 UniMessageInfoList attList = iBioMsgPlugin->attachmentList(); |
|
646 QString attachmentPath = attList[0]->path(); |
|
647 |
|
648 //get tone title, and set as bodytext |
|
649 RingBc ringBc; |
|
650 item.setData(ringBc.toneTitle(attachmentPath), BodyText); |
|
651 while (!attList.isEmpty()) { |
|
652 delete attList.takeFirst(); |
|
653 } |
|
654 } |
|
655 |
496 } |
656 } |
497 else { |
657 else { |
498 // description |
658 // description |
499 HBufC* description = entry.Description(); |
659 HBufC* description = entry.Description(); |
500 QString subject(""); |
660 QString subject(""); |