aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/messaging/IMAPFolder.cpp25
-rw-r--r--src/messaging/POP3Folder.cpp9
-rw-r--r--src/messaging/maildirFolder.cpp43
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 <IMAPFolder*>::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 <IMAPFolder*>::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 <POP3Folder*>::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 <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());
+ }
+ }
}