Fixed bugs with message count notification.
This commit is contained in:
parent
26940950c3
commit
90b9650ede
@ -1214,11 +1214,26 @@ void IMAPFolder::expunge()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_messageCount -= nums.size();
|
||||||
|
|
||||||
// Notify message expunged
|
// Notify message expunged
|
||||||
events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums);
|
events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums);
|
||||||
|
|
||||||
m_messageCount -= nums.size();
|
|
||||||
notifyMessageCount(event);
|
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);
|
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() ;
|
for (std::list <IMAPFolder*>::iterator it = m_store->m_folders.begin() ;
|
||||||
it != m_store->m_folders.end() ; ++it)
|
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_messageCount = count;
|
||||||
|
|
||||||
|
events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums);
|
||||||
|
|
||||||
(*it)->notifyMessageCount(event);
|
(*it)->notifyMessageCount(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -634,14 +634,21 @@ void POP3Folder::status(int& count, int& unseen)
|
|||||||
for (int i = oldCount + 1, j = 0 ; i <= count ; ++i, ++j)
|
for (int i = oldCount + 1, j = 0 ; i <= count ; ++i, ++j)
|
||||||
nums[j] = i;
|
nums[j] = i;
|
||||||
|
|
||||||
|
// Notify message count changed
|
||||||
events::messageCountEvent event(this, events::messageCountEvent::TYPE_ADDED, nums);
|
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() ;
|
for (std::list <POP3Folder*>::iterator it = m_store->m_folders.begin() ;
|
||||||
it != m_store->m_folders.end() ; ++it)
|
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_messageCount = count;
|
||||||
|
|
||||||
|
events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums);
|
||||||
|
|
||||||
(*it)->notifyMessageCount(event);
|
(*it)->notifyMessageCount(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,6 +125,8 @@ void maildirFolder::open(const int mode, bool /* failIfModeIsNotAvailable */)
|
|||||||
else if (!exists())
|
else if (!exists())
|
||||||
throw exceptions::illegal_state("Folder already exists");
|
throw exceptions::illegal_state("Folder already exists");
|
||||||
|
|
||||||
|
scanFolder();
|
||||||
|
|
||||||
m_open = true;
|
m_open = true;
|
||||||
m_mode = mode;
|
m_mode = mode;
|
||||||
}
|
}
|
||||||
@ -257,9 +259,6 @@ const bool maildirFolder::isOpen() const
|
|||||||
|
|
||||||
void maildirFolder::scanFolder()
|
void maildirFolder::scanFolder()
|
||||||
{
|
{
|
||||||
if (!isOpen())
|
|
||||||
throw exceptions::illegal_state("Folder not open");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
utility::fileSystemFactory* fsf = platformDependant::getHandler()->getFileSystemFactory();
|
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);
|
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() ;
|
for (std::list <maildirFolder*>::iterator it = m_store->m_folders.begin() ;
|
||||||
it != m_store->m_folders.end() ; ++it)
|
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_messageCount = m_messageCount;
|
||||||
(*it)->m_unreadMessageCount = unseen;
|
(*it)->m_unreadMessageCount = m_unreadMessageCount;
|
||||||
|
|
||||||
|
events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums);
|
||||||
|
|
||||||
(*it)->notifyMessageCount(event);
|
(*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);
|
m_messageInfos.erase(m_messageInfos.begin() + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify message expunged
|
|
||||||
events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums);
|
|
||||||
|
|
||||||
m_messageCount -= nums.size();
|
m_messageCount -= nums.size();
|
||||||
m_unreadMessageCount -= unreadCount;
|
m_unreadMessageCount -= unreadCount;
|
||||||
|
|
||||||
|
// Notify message expunged
|
||||||
|
events::messageCountEvent event(this, events::messageCountEvent::TYPE_REMOVED, nums);
|
||||||
|
|
||||||
notifyMessageCount(event);
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user