aboutsummaryrefslogtreecommitdiffstats
path: root/src/messaging/maildirFolder.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2004-12-17 17:02:18 +0000
committerVincent Richard <[email protected]>2004-12-17 17:02:18 +0000
commit90b9650ede514a6cbc01a7e7501df3c9afed7c8f (patch)
tree0de1be429125a4bae8740be5cbec9bafbe248aaf /src/messaging/maildirFolder.cpp
parentUpdated function doc. (diff)
downloadvmime-90b9650ede514a6cbc01a7e7501df3c9afed7c8f.tar.gz
vmime-90b9650ede514a6cbc01a7e7501df3c9afed7c8f.zip
Fixed bugs with message count notification.
Diffstat (limited to 'src/messaging/maildirFolder.cpp')
-rw-r--r--src/messaging/maildirFolder.cpp43
1 files changed, 33 insertions, 10 deletions
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 <maildirFolder*>::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 <maildirFolder*>::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());
+ }
+ }
}