aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/messaging/POP3Folder.cpp61
-rw-r--r--src/messaging/POP3Message.cpp9
2 files changed, 68 insertions, 2 deletions
diff --git a/src/messaging/POP3Folder.cpp b/src/messaging/POP3Folder.cpp
index c70005c6..e0bac1a8 100644
--- a/src/messaging/POP3Folder.cpp
+++ b/src/messaging/POP3Folder.cpp
@@ -540,6 +540,24 @@ void POP3Folder::deleteMessage(const int num)
if (!m_store->isSuccessResponse(response))
throw exceptions::command_error("DELE", response);
+
+ // Update local flags
+ for (std::map <POP3Message*, int>::iterator it =
+ m_messages.begin() ; it != m_messages.end() ; ++it)
+ {
+ POP3Message* msg = (*it).first;
+
+ if (msg->getNumber() == num)
+ msg->m_deleted = true;
+ }
+
+ // Notify message flags changed
+ std::vector <int> nums;
+ nums.push_back(num);
+
+ events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, nums);
+
+ notifyMessageChanged(event);
}
@@ -568,6 +586,26 @@ void POP3Folder::deleteMessages(const int from, const int to)
if (!m_store->isSuccessResponse(response))
throw exceptions::command_error("DELE", response);
}
+
+ // Update local flags
+ for (std::map <POP3Message*, int>::iterator it =
+ m_messages.begin() ; it != m_messages.end() ; ++it)
+ {
+ POP3Message* msg = (*it).first;
+
+ if (msg->getNumber() >= from && msg->getNumber() <= to2)
+ msg->m_deleted = true;
+ }
+
+ // Notify message flags changed
+ std::vector <int> nums;
+
+ for (int i = from ; i <= to2 ; ++i)
+ nums.push_back(i);
+
+ events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, nums);
+
+ notifyMessageChanged(event);
}
@@ -595,6 +633,29 @@ void POP3Folder::deleteMessages(const std::vector <int>& nums)
if (!m_store->isSuccessResponse(response))
throw exceptions::command_error("DELE", response);
}
+
+ // Sort message list
+ std::vector <int> list;
+
+ list.resize(nums.size());
+ std::copy(nums.begin(), nums.end(), list.begin());
+
+ std::sort(list.begin(), list.end());
+
+ // Update local flags
+ for (std::map <POP3Message*, int>::iterator it =
+ m_messages.begin() ; it != m_messages.end() ; ++it)
+ {
+ POP3Message* msg = (*it).first;
+
+ if (std::binary_search(list.begin(), list.end(), msg->getNumber()))
+ msg->m_deleted = true;
+ }
+
+ // Notify message flags changed
+ events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, list);
+
+ notifyMessageChanged(event);
}
diff --git a/src/messaging/POP3Message.cpp b/src/messaging/POP3Message.cpp
index d9ef2989..3c84368c 100644
--- a/src/messaging/POP3Message.cpp
+++ b/src/messaging/POP3Message.cpp
@@ -29,7 +29,7 @@ namespace messaging {
POP3Message::POP3Message(POP3Folder* folder, const int num)
- : m_folder(folder), m_num(num), m_size(-1), m_header(NULL)
+ : m_folder(folder), m_num(num), m_size(-1), m_deleted(false), m_header(NULL)
{
m_folder->registerMessage(this);
}
@@ -79,7 +79,12 @@ const bool POP3Message::isExpunged() const
const int POP3Message::getFlags() const
{
- return (FLAG_RECENT);
+ int flags = FLAG_RECENT;
+
+ if (m_deleted)
+ flags |= FLAG_DELETED;
+
+ return (flags);
}