diff options
Diffstat (limited to 'src/messaging/pop3')
-rw-r--r-- | src/messaging/pop3/POP3Folder.cpp | 99 | ||||
-rw-r--r-- | src/messaging/pop3/POP3Store.cpp | 17 |
2 files changed, 58 insertions, 58 deletions
diff --git a/src/messaging/pop3/POP3Folder.cpp b/src/messaging/pop3/POP3Folder.cpp index 6f4cb237..0f0a5369 100644 --- a/src/messaging/pop3/POP3Folder.cpp +++ b/src/messaging/pop3/POP3Folder.cpp @@ -191,7 +191,7 @@ const bool POP3Folder::isOpen() const } -message* POP3Folder::getMessage(const int num) +ref <message> POP3Folder::getMessage(const int num) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); @@ -200,11 +200,11 @@ message* POP3Folder::getMessage(const int num) else if (num < 1 || num > m_messageCount) throw exceptions::message_not_found(); - return new POP3Message(this, num); + return vmime::create <POP3Message>(this, num); } -std::vector <message*> POP3Folder::getMessages(const int from, const int to) +std::vector <ref <message> > POP3Folder::getMessages(const int from, const int to) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); @@ -213,40 +213,30 @@ std::vector <message*> POP3Folder::getMessages(const int from, const int to) else if (to < from || from < 1 || to < 1 || from > m_messageCount || to > m_messageCount) throw exceptions::message_not_found(); - std::vector <message*> v; + std::vector <ref <message> > v; for (int i = from ; i <= to ; ++i) - v.push_back(new POP3Message(this, i)); + v.push_back(vmime::create <POP3Message>(this, i)); return (v); } -std::vector <message*> POP3Folder::getMessages(const std::vector <int>& nums) +std::vector <ref <message> > POP3Folder::getMessages(const std::vector <int>& nums) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); else if (!isOpen()) throw exceptions::illegal_state("Folder not open"); - std::vector <message*> v; + std::vector <ref <message> > v; - try + for (std::vector <int>::const_iterator it = nums.begin() ; it != nums.end() ; ++it) { - for (std::vector <int>::const_iterator it = nums.begin() ; it != nums.end() ; ++it) - { - if (*it < 1|| *it > m_messageCount) - throw exceptions::message_not_found(); + if (*it < 1|| *it > m_messageCount) + throw exceptions::message_not_found(); - v.push_back(new POP3Message(this, *it)); - } - } - catch (std::exception& e) - { - for (std::vector <message*>::iterator it = v.begin() ; it != v.end() ; ++it) - delete (*it); - - throw; + v.push_back(vmime::create <POP3Message>(this, *it)); } return (v); @@ -264,35 +254,35 @@ const int POP3Folder::getMessageCount() } -folder* POP3Folder::getFolder(const folder::path::component& name) +ref <folder> POP3Folder::getFolder(const folder::path::component& name) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); - return new POP3Folder(m_path / name, m_store); + return vmime::create <POP3Folder>(m_path / name, m_store); } -std::vector <folder*> POP3Folder::getFolders(const bool /* recursive */) +std::vector <ref <folder> > POP3Folder::getFolders(const bool /* recursive */) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); if (m_path.isEmpty()) { - std::vector <folder*> v; - v.push_back(new POP3Folder(folder::path::component("INBOX"), m_store)); + std::vector <ref <folder> > v; + v.push_back(vmime::create <POP3Folder>(folder::path::component("INBOX"), m_store)); return (v); } else { - std::vector <folder*> v; + std::vector <ref <folder> > v; return (v); } } -void POP3Folder::fetchMessages(std::vector <message*>& msg, const int options, +void POP3Folder::fetchMessages(std::vector <ref <message> >& msg, const int options, utility::progressionListener* progress) { if (!m_store) @@ -306,10 +296,10 @@ void POP3Folder::fetchMessages(std::vector <message*>& msg, const int options, if (progress) progress->start(total); - for (std::vector <message*>::iterator it = msg.begin() ; + for (std::vector <ref <message> >::iterator it = msg.begin() ; it != msg.end() ; ++it) { - dynamic_cast <POP3Message*>(*it)->fetch(this, options); + (*it).dynamicCast <POP3Message>()->fetch(this, options); if (progress) progress->progress(++current, total); @@ -339,10 +329,10 @@ void POP3Folder::fetchMessages(std::vector <message*>& msg, const int options, std::map <int, string> result; parseMultiListOrUidlResponse(response, result); - for (std::vector <message*>::iterator it = msg.begin() ; + for (std::vector <ref <message> >::iterator it = msg.begin() ; it != msg.end() ; ++it) { - POP3Message* m = dynamic_cast <POP3Message*>(*it); + ref <POP3Message> m = (*it).dynamicCast <POP3Message>(); std::map <int, string>::const_iterator x = result.find(m->m_num); @@ -384,10 +374,10 @@ void POP3Folder::fetchMessages(std::vector <message*>& msg, const int options, std::map <int, string> result; parseMultiListOrUidlResponse(response, result); - for (std::vector <message*>::iterator it = msg.begin() ; + for (std::vector <ref <message> >::iterator it = msg.begin() ; it != msg.end() ; ++it) { - POP3Message* m = dynamic_cast <POP3Message*>(*it); + ref <POP3Message> m = (*it).dynamicCast <POP3Message>(); std::map <int, string>::const_iterator x = result.find(m->m_num); @@ -402,14 +392,14 @@ void POP3Folder::fetchMessages(std::vector <message*>& msg, const int options, } -void POP3Folder::fetchMessage(message* msg, const int options) +void POP3Folder::fetchMessage(ref <message> msg, const int options) { if (!m_store) throw exceptions::illegal_state("Store disconnected"); else if (!isOpen()) throw exceptions::illegal_state("Folder not open"); - dynamic_cast <POP3Message*>(msg)->fetch(this, options); + msg.dynamicCast <POP3Message>()->fetch(this, options); if (options & FETCH_SIZE) { @@ -442,7 +432,7 @@ void POP3Folder::fetchMessage(message* msg, const int options) std::istringstream iss(string(it, response.end())); iss >> size; - dynamic_cast <POP3Message*>(msg)->m_size = size; + msg.dynamicCast <POP3Message>()->m_size = size; } } } @@ -473,7 +463,7 @@ void POP3Folder::fetchMessage(message* msg, const int options) if (it != response.end()) { - dynamic_cast <POP3Message*>(msg)->m_uid = + msg.dynamicCast <POP3Message>()->m_uid = string(it, response.end()); } } @@ -488,19 +478,22 @@ const int POP3Folder::getFetchCapabilities() const } -folder* POP3Folder::getParent() +ref <folder> POP3Folder::getParent() { - return (m_path.isEmpty() ? NULL : new POP3Folder(m_path.getParent(), m_store)); + if (m_path.isEmpty()) + return NULL; + else + return vmime::create <POP3Folder>(m_path.getParent(), m_store); } -const store* POP3Folder::getStore() const +weak_ref <const store> POP3Folder::getStore() const { return (m_store); } -store* POP3Folder::getStore() +weak_ref <store> POP3Folder::getStore() { return (m_store); } @@ -556,7 +549,9 @@ void POP3Folder::deleteMessage(const int num) std::vector <int> nums; nums.push_back(num); - events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, nums); + events::messageChangedEvent event + (thisRef().dynamicCast <folder>(), + events::messageChangedEvent::TYPE_FLAGS, nums); notifyMessageChanged(event); } @@ -604,7 +599,9 @@ void POP3Folder::deleteMessages(const int from, const int to) for (int i = from ; i <= to2 ; ++i) nums.push_back(i); - events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, nums); + events::messageChangedEvent event + (thisRef().dynamicCast <folder>(), + events::messageChangedEvent::TYPE_FLAGS, nums); notifyMessageChanged(event); } @@ -654,7 +651,9 @@ void POP3Folder::deleteMessages(const std::vector <int>& nums) } // Notify message flags changed - events::messageChangedEvent event(this, events::messageChangedEvent::TYPE_FLAGS, list); + events::messageChangedEvent event + (thisRef().dynamicCast <folder>(), + events::messageChangedEvent::TYPE_FLAGS, list); notifyMessageChanged(event); } @@ -680,7 +679,7 @@ void POP3Folder::rename(const folder::path& /* newPath */) } -void POP3Folder::addMessage(vmime::message* /* msg */, const int /* flags */, +void POP3Folder::addMessage(ref <vmime::message> /* msg */, const int /* flags */, vmime::datetime* /* date */, utility::progressionListener* /* progress */) { throw exceptions::operation_not_supported(); @@ -750,7 +749,9 @@ void POP3Folder::status(int& count, int& unseen) nums[j] = i; // Notify message count changed - events::messageCountEvent event(this, events::messageCountEvent::TYPE_ADDED, nums); + events::messageCountEvent event + (thisRef().dynamicCast <folder>(), + events::messageCountEvent::TYPE_ADDED, nums); notifyMessageCount(event); @@ -762,7 +763,9 @@ void POP3Folder::status(int& count, int& unseen) { (*it)->m_messageCount = count; - events::messageCountEvent event(*it, events::messageCountEvent::TYPE_ADDED, nums); + events::messageCountEvent event + ((*it)->thisRef().dynamicCast <folder>(), + events::messageCountEvent::TYPE_ADDED, nums); (*it)->notifyMessageCount(event); } diff --git a/src/messaging/pop3/POP3Store.cpp b/src/messaging/pop3/POP3Store.cpp index f1a4d45e..1407df35 100644 --- a/src/messaging/pop3/POP3Store.cpp +++ b/src/messaging/pop3/POP3Store.cpp @@ -41,7 +41,7 @@ namespace messaging { namespace pop3 { -POP3Store::POP3Store(session* sess, authenticator* auth) +POP3Store::POP3Store(ref <session> sess, ref <authenticator> auth) : store(sess, getInfosInstance(), auth), m_socket(NULL), m_authentified(false), m_timeoutHandler(NULL) { @@ -63,30 +63,30 @@ const string POP3Store::getProtocolName() const } -folder* POP3Store::getDefaultFolder() +ref <folder> POP3Store::getDefaultFolder() { if (!isConnected()) throw exceptions::illegal_state("Not connected"); - return new POP3Folder(folder::path(folder::path::component("INBOX")), this); + return vmime::create <POP3Folder>(folder::path(folder::path::component("INBOX")), this); } -folder* POP3Store::getRootFolder() +ref <folder> POP3Store::getRootFolder() { if (!isConnected()) throw exceptions::illegal_state("Not connected"); - return new POP3Folder(folder::path(), this); + return vmime::create <POP3Folder>(folder::path(), this); } -folder* POP3Store::getFolder(const folder::path& path) +ref <folder> POP3Store::getFolder(const folder::path& path) { if (!isConnected()) throw exceptions::illegal_state("Not connected"); - return new POP3Folder(path, this); + return vmime::create <POP3Folder>(path, this); } @@ -244,11 +244,8 @@ void POP3Store::internalDisconnect() sendRequest("QUIT"); m_socket->disconnect(); - - delete (m_socket); m_socket = NULL; - delete (m_timeoutHandler); m_timeoutHandler = NULL; m_authentified = false; |