diff options
Diffstat (limited to 'src/net/pop3/POP3Folder.cpp')
-rw-r--r-- | src/net/pop3/POP3Folder.cpp | 173 |
1 files changed, 20 insertions, 153 deletions
diff --git a/src/net/pop3/POP3Folder.cpp b/src/net/pop3/POP3Folder.cpp index 9dc4589b..6a652de0 100644 --- a/src/net/pop3/POP3Folder.cpp +++ b/src/net/pop3/POP3Folder.cpp @@ -230,62 +230,36 @@ ref <message> POP3Folder::getMessage(const int num) } -std::vector <ref <message> > POP3Folder::getMessages(const int from, const int to) +std::vector <ref <message> > POP3Folder::getMessages(const messageSet& msgs) { ref <POP3Store> store = m_store.acquire(); - const int to2 = (to == -1 ? m_messageCount : to); - if (!store) throw exceptions::illegal_state("Store disconnected"); else if (!isOpen()) throw exceptions::illegal_state("Folder not open"); - else if (to2 < from || from < 1 || to2 < 1 || from > m_messageCount || to2 > m_messageCount) - throw exceptions::message_not_found(); - - std::vector <ref <message> > v; - ref <POP3Folder> thisFolder = thisRef().dynamicCast <POP3Folder>(); - - for (int i = from ; i <= to2 ; ++i) - v.push_back(vmime::create <POP3Message>(thisFolder, i)); - - return (v); -} - - -ref <message> POP3Folder::getMessageByUID(const message::uid& /* uid */) -{ - throw exceptions::operation_not_supported(); -} - - -std::vector <ref <message> > POP3Folder::getMessagesByUID(const std::vector <message::uid>& /* uids */) -{ - throw exceptions::operation_not_supported(); -} + if (msgs.isNumberSet()) + { + const std::vector <int> numbers = POP3Utils::messageSetToNumberList(msgs); -std::vector <ref <message> > POP3Folder::getMessages(const std::vector <int>& nums) -{ - ref <POP3Store> store = m_store.acquire(); + std::vector <ref <message> > messages; + ref <POP3Folder> thisFolder = thisRef().dynamicCast <POP3Folder>(); - if (!store) - throw exceptions::illegal_state("Store disconnected"); - else if (!isOpen()) - throw exceptions::illegal_state("Folder not open"); + for (std::vector <int>::const_iterator it = numbers.begin() ; it != numbers.end() ; ++it) + { + if (*it < 1|| *it > m_messageCount) + throw exceptions::message_not_found(); - std::vector <ref <message> > v; - ref <POP3Folder> thisFolder = thisRef().dynamicCast <POP3Folder>(); + messages.push_back(vmime::create <POP3Message>(thisFolder, *it)); + } - for (std::vector <int>::const_iterator it = nums.begin() ; it != nums.end() ; ++it) + return messages; + } + else { - if (*it < 1|| *it > m_messageCount) - throw exceptions::message_not_found(); - - v.push_back(vmime::create <POP3Message>(thisFolder, *it)); + throw exceptions::operation_not_supported(); } - - return (v); } @@ -560,99 +534,11 @@ void POP3Folder::onStoreDisconnected() } -void POP3Folder::deleteMessage(const int num) +void POP3Folder::deleteMessages(const messageSet& msgs) { ref <POP3Store> store = m_store.acquire(); - if (!store) - throw exceptions::illegal_state("Store disconnected"); - else if (!isOpen()) - throw exceptions::illegal_state("Folder not open"); - - POP3Command::DELE(num)->send(store->getConnection()); - - ref <POP3Response> response = - POP3Response::readResponse(store->getConnection()); - - if (!response->isSuccess()) - throw exceptions::command_error("DELE", response->getFirstLine()); - - // 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); - - ref <events::messageChangedEvent> event = - vmime::create <events::messageChangedEvent> - (thisRef().dynamicCast <folder>(), - events::messageChangedEvent::TYPE_FLAGS, nums); - - notifyMessageChanged(event); -} - - -void POP3Folder::deleteMessages(const int from, const int to) -{ - ref <POP3Store> store = m_store.acquire(); - - if (from < 1 || (to < from && to != -1)) - throw exceptions::invalid_argument(); - - if (!store) - throw exceptions::illegal_state("Store disconnected"); - else if (!isOpen()) - throw exceptions::illegal_state("Folder not open"); - - const int to2 = (to == -1 ? m_messageCount : to); - - for (int i = from ; i <= to2 ; ++i) - { - POP3Command::DELE(i)->send(store->getConnection()); - - ref <POP3Response> response = - POP3Response::readResponse(store->getConnection()); - - if (!response->isSuccess()) - throw exceptions::command_error("DELE", response->getFirstLine()); - } - - // 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); - - ref <events::messageChangedEvent> event = - vmime::create <events::messageChangedEvent> - (thisRef().dynamicCast <folder>(), - events::messageChangedEvent::TYPE_FLAGS, nums); - - notifyMessageChanged(event); -} - - -void POP3Folder::deleteMessages(const std::vector <int>& nums) -{ - ref <POP3Store> store = m_store.acquire(); + const std::vector <int> nums = POP3Utils::messageSetToNumberList(msgs); if (nums.empty()) throw exceptions::invalid_argument(); @@ -702,14 +588,7 @@ void POP3Folder::deleteMessages(const std::vector <int>& nums) } -void POP3Folder::setMessageFlags(const int /* from */, const int /* to */, - const int /* flags */, const int /* mode */) -{ - throw exceptions::operation_not_supported(); -} - - -void POP3Folder::setMessageFlags(const std::vector <int>& /* nums */, +void POP3Folder::setMessageFlags(const messageSet& /* msgs */, const int /* flags */, const int /* mode */) { throw exceptions::operation_not_supported(); @@ -736,19 +615,7 @@ void POP3Folder::addMessage(utility::inputStream& /* is */, const int /* size */ } -void POP3Folder::copyMessage(const folder::path& /* dest */, const int /* num */) -{ - throw exceptions::operation_not_supported(); -} - - -void POP3Folder::copyMessages(const folder::path& /* dest */, const int /* from */, const int /* to */) -{ - throw exceptions::operation_not_supported(); -} - - -void POP3Folder::copyMessages(const folder::path& /* dest */, const std::vector <int>& /* nums */) +void POP3Folder::copyMessages(const folder::path& /* dest */, const messageSet& /* msgs */) { throw exceptions::operation_not_supported(); } |