emailuis/nmailuiengine/src/nmmessagelistmodel.cpp
changeset 30 759dc5235cdb
parent 27 9ba4404ef423
child 44 c2d07d913565
--- a/emailuis/nmailuiengine/src/nmmessagelistmodel.cpp	Thu May 27 12:43:55 2010 +0300
+++ b/emailuis/nmailuiengine/src/nmmessagelistmodel.cpp	Fri Jun 11 13:27:14 2010 +0300
@@ -41,6 +41,8 @@
   mCurrentFolderType(NmFolderInbox),
   mIgnoreFolderIds(false)
 {
+    NM_FUNCTION;
+    
     // Check for setting whether dividers are active
     // mDividersActive = ...
     // update also the test cases
@@ -52,6 +54,8 @@
 */
 NmMessageListModel::~NmMessageListModel()
 {
+    NM_FUNCTION;
+    
     clear();
 }
 
@@ -62,6 +66,8 @@
 */
 QVariant NmMessageListModel::data(const QModelIndex &index, int role) const
 {
+    NM_FUNCTION;
+    
     QVariant qVariant;
 
     if (index.isValid()){
@@ -91,6 +97,8 @@
         const NmId folderId,
         const QList<NmMessageEnvelope*> &messageEnvelopeList)
 {
+    NM_FUNCTION;
+
     // Store the current mailbox and folder IDs.
     mCurrentMailboxId = mailboxId;
     mCurrentFolderId = folderId;
@@ -107,18 +115,29 @@
     int childCount(0);
 
     for (int i(0); i < messageEnvelopeList.count(); i++) {
-        NmMessageEnvelope* nextMessage = messageEnvelopeList[i];
-
-        if (mDividersActive &&
-            !messagesBelongUnderSameDivider(insertedMessage, nextMessage)) {
-            insertDividerIntoModel(nextMessage, parentCount);
-            parentCount++;
-            childCount = 0;
+        NmMessageEnvelope *nextMessage = messageEnvelopeList[i];
+        // imap and pop is using common sent, outbox or draft folder
+        // for all mailboxes, here we want to filter out messages that
+        // are not under this mailbox
+        bool insert(true);
+        if (nextMessage 
+            && (NmFolderSent == mCurrentFolderType
+             || NmFolderOutbox == mCurrentFolderType
+             || NmFolderDrafts == mCurrentFolderType)) {
+            insert = (mCurrentMailboxId == nextMessage->mailboxId());  
         }
-
-        insertMessageIntoModel(nextMessage, childCount, false);
-        insertedMessage = nextMessage;
-        childCount++;
+        if (insert) {
+            if (mDividersActive &&
+                !messagesBelongUnderSameDivider(insertedMessage, nextMessage)) {
+                insertDividerIntoModel(nextMessage, parentCount);
+                parentCount++;
+                childCount = 0;
+            }
+    
+            insertMessageIntoModel(nextMessage, childCount, false);
+            insertedMessage = nextMessage;
+            childCount++;
+        }
     }
 }
 
@@ -130,6 +149,8 @@
     NmMessageEnvelope *messageForDivider,
     int parentRow)
 {
+    NM_FUNCTION;
+    
     mParentPtr = createTitleDividerItem(messageForDivider);
     insertRow(parentRow,mParentPtr);
     mParentPtr->callEmitDataChanged();
@@ -142,6 +163,8 @@
 void NmMessageListModel::insertMessageIntoModel(
 		NmMessageEnvelope *messageEnvelope, int childRow, bool emitSignal)
 {
+    NM_FUNCTION;
+    
     NmMessageListModelItem *mailItem = createMessageItem(messageEnvelope);
     if (mParentPtr) {
         // Add under parent divider
@@ -164,6 +187,8 @@
     const NmMessageEnvelope *message1,
     const NmMessageEnvelope *message2) const
 {
+    NM_FUNCTION;
+    
     bool retVal(false);
     // First check pointer validity
     if (message1 && message2) {
@@ -188,11 +213,10 @@
 */
 void NmMessageListModel::handleMessageEvent(NmMessageEvent event,
                                             const NmId &folderId,
-                                            const QList<NmId> &messageIds)
+                                            const QList<NmId> &messageIds,
+                                            const NmId &mailboxId)
 {
-    NMLOG(QString("nmmessagelistmodel::handleMessageEvent()"));
-    
-    NmId mailboxId = mCurrentMailboxId;
+    NM_FUNCTION;
     const int idCount = messageIds.count();
 
     // Folder ID does not concern us if this model instance is used for e.g.
@@ -214,8 +238,9 @@
             // the current mailbox.
             mCurrentFolderId = folderId; 
         }
-
-        if (mCurrentFolderId != folderId) {
+        // MailboxId checking here is done because we want to filter out messages
+        // that belongs to other mailboxes in case of imap/pop sent, outbox or draft folder
+        if (mCurrentFolderId != folderId || mCurrentMailboxId != mailboxId) {
             // The event does not concern the folder currently being displayed.
             // Thus, ignore it.
             return;
@@ -256,7 +281,8 @@
     const NmId &folderId,
     const NmId &msgId)
 {
-    NMLOG(QString("NmMessageListModel::insertNewMessageIntoModel"));
+    NM_FUNCTION;
+    
     // envelope ownership is here
     NmMessageEnvelope *newMsgEnve = mDataManager.envelopeById(mailboxId, folderId, msgId);
     if (newMsgEnve) {
@@ -320,7 +346,8 @@
 int NmMessageListModel::getInsertionIndex(
     const NmMessageEnvelope &envelope) const
 {
-    // NMLOG(QString("nmailuiengine: getInsertionIndex"));
+    NM_FUNCTION;
+    
     int ret(NmNotFoundError);
     
     // Date+descending sort mode based comparison.
@@ -353,6 +380,8 @@
 */
 int NmMessageListModel::dividerInsertionIndex(int messageIndex)
 {
+    NM_FUNCTION;
+    
     bool found(false);
     int ret(NmNoError);
     QModelIndex index;
@@ -376,6 +405,8 @@
 NmMessageListModelItem *NmMessageListModel::createTitleDividerItem(
 		NmMessageEnvelope *messageForDivider)
 {
+    NM_FUNCTION;
+    
     NmMessageListModelItem *item = new NmMessageListModelItem();
     item->setItemType(NmMessageListModelItem::NmMessageItemTitleDivider);
 
@@ -405,7 +436,8 @@
 NmMessageListModelItem *NmMessageListModel::createMessageItem(
 		NmMessageEnvelope *envelope)
 {
-
+    NM_FUNCTION;
+    
     NmMessageListModelItem *mailItem = new NmMessageListModelItem();
     mailItem->setEnvelope(*envelope);
     mailItem->setItemType(NmMessageListModelItem::NmMessageItemMessage);
@@ -418,6 +450,8 @@
 */
 bool NmMessageListModel::dividersActive()
 {
+    NM_FUNCTION;
+    
     return mDividersActive;
 }
 
@@ -426,6 +460,8 @@
 */
 void NmMessageListModel::setDividers(bool active)
 {
+    NM_FUNCTION;
+    
     mDividersActive = active;
 }
 
@@ -436,6 +472,8 @@
     NmEnvelopeProperties property,
     const QList<NmId> &messageIds)
 {
+    NM_FUNCTION;
+    
     for (int i(0); i < messageIds.count(); i++) {
         updateEnvelope(property, messageIds[i]);
     }
@@ -447,6 +485,8 @@
 */
 NmId NmMessageListModel::currentMailboxId()
 {
+    NM_FUNCTION;
+    
     return mCurrentMailboxId;
 }
 
@@ -460,6 +500,8 @@
 */
 void NmMessageListModel::setIgnoreFolderIds(bool ignore)
 {
+    NM_FUNCTION;
+    
     mIgnoreFolderIds = ignore;
 }
 
@@ -469,6 +511,8 @@
 */
 void NmMessageListModel::removeMessageFromModel(const NmId &msgId)
 {
+    NM_FUNCTION;
+    
     QList<QStandardItem*> items = findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
     int count(items.count());
     bool found(false);
@@ -521,6 +565,8 @@
 */
 void NmMessageListModel::removeItem(int row, NmMessageListModelItem &item)
 {
+    NM_FUNCTION;
+    
     QStandardItem *parent = item.parent();
     removeRow(row, indexFromItem(parent));
 }
@@ -530,6 +576,8 @@
 */
 NmMessageListModelItem *NmMessageListModel::itemFromModel(const NmId &messageId)
 {
+    NM_FUNCTION;
+    
     QList<QStandardItem*> items = findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
     int count(items.count());
     bool found(false);
@@ -553,6 +601,8 @@
 */
 bool NmMessageListModel::changed(const NmMessageEnvelope &first, const NmMessageEnvelope &second)
 {
+    NM_FUNCTION;
+    
     return first != second;
 }
 
@@ -563,6 +613,8 @@
         const NmId &folderId,
         const NmId &msgId)
 {
+    NM_FUNCTION;
+    
     NmMessageListModelItem *item = itemFromModel(msgId);
     // envelope ownership is here
     NmMessageEnvelope *newEnvelope = mDataManager.envelopeById(mailboxId, folderId, msgId);
@@ -582,6 +634,8 @@
 */
 void NmMessageListModel::updateEnvelope(NmEnvelopeProperties property, const NmId &msgId)
 {
+    NM_FUNCTION;
+    
     NmMessageListModelItem *item = itemFromModel(msgId);
     if (item) {
         bool changed(false);