emailuis/nmailuiengine/src/nmmessagelistmodel.cpp
changeset 72 64e38f08e49c
parent 53 bf7eb7911fc5
child 76 38bf5461e270
--- a/emailuis/nmailuiengine/src/nmmessagelistmodel.cpp	Thu Sep 02 20:15:00 2010 +0300
+++ b/emailuis/nmailuiengine/src/nmmessagelistmodel.cpp	Fri Sep 17 08:27:21 2010 +0300
@@ -119,24 +119,24 @@
         // 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());  
-        }
-        if (insert) {
-            if (mDividersActive &&
-                !messagesBelongUnderSameDivider(insertedMessage, nextMessage)) {
-                insertDividerIntoModel(nextMessage, parentCount);
-                parentCount++;
-                childCount = 0;
+        if (nextMessage) {
+            bool insert(true);
+            if (NmFolderSent == mCurrentFolderType
+                || NmFolderOutbox == mCurrentFolderType
+                || NmFolderDrafts == mCurrentFolderType) {
+                insert = (mCurrentMailboxId == nextMessage->mailboxId());  
             }
-    
+            if (insert) {
+                if (mDividersActive &&
+                    !messagesBelongUnderSameDivider(insertedMessage, nextMessage)) {
+                    insertDividerIntoModel(nextMessage, parentCount);
+                    parentCount++;
+                    childCount = 0;
+                }
             insertMessageIntoModel(nextMessage, childCount, false);
             insertedMessage = nextMessage;
             childCount++;
+            }
         }
     }
 }
@@ -218,6 +218,7 @@
 {
     NM_FUNCTION;
     const int idCount = messageIds.count();
+    NmId inFolderId = mDataManager.getStandardFolderId(mailboxId, NmFolderInbox);    
 
     // Folder ID does not concern us if this model instance is used for e.g.
     // searching messages.
@@ -225,14 +226,13 @@
         if (folderId == 0) {
             // Const cast is used here because also the input parameter has to
             // be changed.
-            const_cast<NmId&>(folderId) =
-                mDataManager.getStandardFolderId(mailboxId, NmFolderInbox);
+            const_cast<NmId&>(folderId) = inFolderId;
             NmUiStartParam *startParam =
                 new NmUiStartParam(NmUiViewMessageList, mailboxId, folderId);
             emit setNewParam(startParam);
         }
 
-        if (mCurrentFolderId == 0) {
+        if (mCurrentFolderId == 0 && folderId == inFolderId) {
             // Folder ID was not known at time when the mailbox opened and we
             // know that because of events the subscription is valid only for
             // the current mailbox.
@@ -282,6 +282,32 @@
     }
 }
 
+/*!
+    Handles the folder deleted events.
+
+    \param folderId The folder deleted
+    \param mailboxId A related mailbox
+*/
+void NmMessageListModel::handleFolderDeletedEvent(
+                        const NmId &folderId,
+                        const NmId &mailboxId)
+{
+    NM_FUNCTION;
+
+    // Folder ID does not concern us if this model instance is used for e.g.
+    // searching messages.
+    if (!mIgnoreFolderIds 
+    	  && mCurrentMailboxId == mailboxId 
+    	  && mCurrentFolderId == folderId) {
+        clear();
+        mCurrentFolderId = 0;        
+        // Go to inbox, but set folderId as 0 to indicate out-of-sync-state.
+        NmUiStartParam *startParam =
+            new NmUiStartParam(NmUiViewMessageList, mailboxId, mCurrentFolderId);
+        emit setNewParam(startParam);
+    }
+}
+
 
 /*!
     Function inserts new message into correct position to model.