diff -r 478bc57ad291 -r 64e38f08e49c emailuis/nmailuiengine/src/nmmessagelistmodel.cpp --- 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(folderId) = - mDataManager.getStandardFolderId(mailboxId, NmFolderInbox); + const_cast(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.