From 90b9650ede514a6cbc01a7e7501df3c9afed7c8f Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Fri, 17 Dec 2004 17:02:18 +0000 Subject: [PATCH] Fixed bugs with message count notification. --- src/messaging/IMAPFolder.cpp | 25 +++++++++++++++++-- src/messaging/POP3Folder.cpp | 9 ++++++- src/messaging/maildirFolder.cpp | 43 +++++++++++++++++++++++++-------- 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/messaging/IMAPFolder.cpp b/src/messaging/IMAPFolder.cpp index 7544dc2c..0cbb860a 100644 --- a/src/messaging/IMAPFolder.cpp +++ b/src/messaging/IMAPFolder.cpp @@ -1214,11 +1214,26 @@ void IMAPFolder::expunge() } } + m_messageCount -= nums.size(); + // Notify message expunged events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums); - m_messageCount -= nums.size(); notifyMessageCount(event); + + // Notify folders with the same path + for (std::list ::iterator it = m_store->m_folders.begin() ; + it != m_store->m_folders.end() ; ++it) + { + if ((*it) != this && (*it)->getFullPath() == m_path) + { + (*it)->m_messageCount = m_messageCount; + + events::messageCountEvent event(*it, events::messageCountEvent::TYPE_REMOVED, nums); + + (*it)->notifyMessageCount(event); + } + } } @@ -1474,12 +1489,18 @@ void IMAPFolder::status(int& count, int& unseen) events::messageCountEvent event(this, events::messageCountEvent::TYPE_ADDED, nums); + notifyMessageCount(event); + + // Notify folders with the same path for (std::list ::iterator it = m_store->m_folders.begin() ; it != m_store->m_folders.end() ; ++it) { - if ((*it)->getFullPath() == m_path) + if ((*it) != this && (*it)->getFullPath() == m_path) { (*it)->m_messageCount = count; + + events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums); + (*it)->notifyMessageCount(event); } } diff --git a/src/messaging/POP3Folder.cpp b/src/messaging/POP3Folder.cpp index e820ab3f..e45e811c 100644 --- a/src/messaging/POP3Folder.cpp +++ b/src/messaging/POP3Folder.cpp @@ -634,14 +634,21 @@ void POP3Folder::status(int& count, int& unseen) for (int i = oldCount + 1, j = 0 ; i <= count ; ++i, ++j) nums[j] = i; + // Notify message count changed events::messageCountEvent event(this, events::messageCountEvent::TYPE_ADDED, nums); + notifyMessageCount(event); + + // Notify folders with the same path for (std::list ::iterator it = m_store->m_folders.begin() ; it != m_store->m_folders.end() ; ++it) { - if ((*it)->getFullPath() == m_path) + if ((*it) != this && (*it)->getFullPath() == m_path) { (*it)->m_messageCount = count; + + events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums); + (*it)->notifyMessageCount(event); } } diff --git a/src/messaging/maildirFolder.cpp b/src/messaging/maildirFolder.cpp index bfb6e5b1..d7855251 100644 --- a/src/messaging/maildirFolder.cpp +++ b/src/messaging/maildirFolder.cpp @@ -125,6 +125,8 @@ void maildirFolder::open(const int mode, bool /* failIfModeIsNotAvailable */) else if (!exists()) throw exceptions::illegal_state("Folder already exists"); + scanFolder(); + m_open = true; m_mode = mode; } @@ -257,9 +259,6 @@ const bool maildirFolder::isOpen() const void maildirFolder::scanFolder() { - if (!isOpen()) - throw exceptions::illegal_state("Folder not open"); - try { utility::fileSystemFactory* fsf = platformDependant::getHandler()->getFileSystemFactory(); @@ -788,17 +787,23 @@ void maildirFolder::status(int& count, int& unseen) events::messageCountEvent event(this, events::messageCountEvent::TYPE_ADDED, nums); + notifyMessageCount(event); + + // Notify folders with the same path for (std::list ::iterator it = m_store->m_folders.begin() ; it != m_store->m_folders.end() ; ++it) { - if ((*it)->getFullPath() == m_path) + if ((*it) != this && (*it)->getFullPath() == m_path) { - (*it)->m_messageCount = count; - (*it)->m_unreadMessageCount = unseen; + (*it)->m_messageCount = m_messageCount; + (*it)->m_unreadMessageCount = m_unreadMessageCount; + + events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums); (*it)->notifyMessageCount(event); - (*it)->scanFolder(); + (*it)->m_messageInfos.resize(m_messageInfos.size()); + std::copy(m_messageInfos.begin(), m_messageInfos.end(), (*it)->m_messageInfos.begin()); } } } @@ -861,13 +866,31 @@ void maildirFolder::expunge() m_messageInfos.erase(m_messageInfos.begin() + i); } - // Notify message expunged - events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums); - m_messageCount -= nums.size(); m_unreadMessageCount -= unreadCount; + // Notify message expunged + events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums); + notifyMessageCount(event); + + // Notify folders with the same path + for (std::list ::iterator it = m_store->m_folders.begin() ; + it != m_store->m_folders.end() ; ++it) + { + if ((*it) != this && (*it)->getFullPath() == m_path) + { + (*it)->m_messageCount = m_messageCount; + (*it)->m_unreadMessageCount = m_unreadMessageCount; + + events::messageCountEvent event(*it, events::messageCountEvent::TYPE_REMOVED, nums); + + (*it)->notifyMessageCount(event); + + (*it)->m_messageInfos.resize(m_messageInfos.size()); + std::copy(m_messageInfos.begin(), m_messageInfos.end(), (*it)->m_messageInfos.begin()); + } + } }