aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/maildir/maildirMessage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/maildir/maildirMessage.cpp')
-rw-r--r--src/net/maildir/maildirMessage.cpp203
1 files changed, 9 insertions, 194 deletions
diff --git a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp
index b6c12053..e63d5edf 100644
--- a/src/net/maildir/maildirMessage.cpp
+++ b/src/net/maildir/maildirMessage.cpp
@@ -28,6 +28,8 @@
#include "vmime/net/maildir/maildirMessage.hpp"
+#include "vmime/net/maildir/maildirMessagePart.hpp"
+#include "vmime/net/maildir/maildirMessageStructure.hpp"
#include "vmime/net/maildir/maildirFolder.hpp"
#include "vmime/net/maildir/maildirUtils.hpp"
#include "vmime/net/maildir/maildirStore.hpp"
@@ -45,193 +47,6 @@ namespace net {
namespace maildir {
-//
-// maildirPart
-//
-
-class maildirStructure;
-
-class maildirPart : public part
-{
-public:
-
- maildirPart(ref <maildirPart> parent, const int number, const bodyPart& part);
- ~maildirPart();
-
-
- ref <const structure> getStructure() const;
- ref <structure> getStructure();
-
- weak_ref <const maildirPart> getParent() const { return (m_parent); }
-
- const mediaType& getType() const { return (m_mediaType); }
- int getSize() const { return (m_size); }
- int getNumber() const { return (m_number); }
-
- ref <const header> getHeader() const
- {
- if (m_header == NULL)
- throw exceptions::unfetched_object();
- else
- return m_header;
- }
-
- header& getOrCreateHeader()
- {
- if (m_header != NULL)
- return (*m_header);
- else
- return (*(m_header = vmime::create <header>()));
- }
-
- int getHeaderParsedOffset() const { return (m_headerParsedOffset); }
- int getHeaderParsedLength() const { return (m_headerParsedLength); }
-
- int getBodyParsedOffset() const { return (m_bodyParsedOffset); }
- int getBodyParsedLength() const { return (m_bodyParsedLength); }
-
- void initStructure(const bodyPart& part);
-
-private:
-
- ref <maildirStructure> m_structure;
- weak_ref <maildirPart> m_parent;
- ref <header> m_header;
-
- int m_number;
- int m_size;
- mediaType m_mediaType;
-
- int m_headerParsedOffset;
- int m_headerParsedLength;
-
- int m_bodyParsedOffset;
- int m_bodyParsedLength;
-};
-
-
-
-//
-// maildirStructure
-//
-
-class maildirStructure : public structure
-{
-public:
-
- maildirStructure()
- {
- }
-
- maildirStructure(ref <maildirPart> parent, const bodyPart& part)
- {
- vmime::ref <maildirPart> mpart = vmime::create <maildirPart>(parent, 0, part);
- mpart->initStructure(part);
-
- m_parts.push_back(mpart);
- }
-
- maildirStructure(ref <maildirPart> parent, const std::vector <ref <const vmime::bodyPart> >& list)
- {
- for (unsigned int i = 0 ; i < list.size() ; ++i)
- {
- vmime::ref <maildirPart> mpart = vmime::create <maildirPart>(parent, i, *list[i]);
- mpart->initStructure(*list[i]);
-
- m_parts.push_back(mpart);
- }
- }
-
-
- ref <const part> getPartAt(const size_t x) const
- {
- return m_parts[x];
- }
-
- ref <part> getPartAt(const size_t x)
- {
- return m_parts[x];
- }
-
- size_t getPartCount() const
- {
- return m_parts.size();
- }
-
-
- static ref <maildirStructure> emptyStructure()
- {
- return m_emptyStructure;
- }
-
-private:
-
- static ref <maildirStructure> m_emptyStructure;
-
- std::vector <ref <maildirPart> > m_parts;
-};
-
-
-ref <maildirStructure> maildirStructure::m_emptyStructure = vmime::create <maildirStructure>();
-
-
-
-maildirPart::maildirPart(ref <maildirPart> parent, const int number, const bodyPart& part)
- : m_parent(parent), m_header(NULL), m_number(number)
-{
- m_headerParsedOffset = part.getHeader()->getParsedOffset();
- m_headerParsedLength = part.getHeader()->getParsedLength();
-
- m_bodyParsedOffset = part.getBody()->getParsedOffset();
- m_bodyParsedLength = part.getBody()->getParsedLength();
-
- m_size = part.getBody()->getContents()->getLength();
-
- m_mediaType = part.getBody()->getContentType();
-}
-
-
-maildirPart::~maildirPart()
-{
-}
-
-
-void maildirPart::initStructure(const bodyPart& part)
-{
- if (part.getBody()->getPartList().size() == 0)
- m_structure = NULL;
- else
- {
- m_structure = vmime::create <maildirStructure>
- (thisRef().dynamicCast <maildirPart>(),
- part.getBody()->getPartList());
- }
-}
-
-
-ref <const structure> maildirPart::getStructure() const
-{
- if (m_structure != NULL)
- return m_structure;
- else
- return maildirStructure::emptyStructure();
-}
-
-
-ref <structure> maildirPart::getStructure()
-{
- if (m_structure != NULL)
- return m_structure;
- else
- return maildirStructure::emptyStructure();
-}
-
-
-
-//
-// maildirMessage
-//
-
maildirMessage::maildirMessage(ref <maildirFolder> folder, const int num)
: m_folder(folder), m_num(num), m_size(-1), m_flags(FLAG_UNDEFINED),
m_expunged(false), m_structure(NULL)
@@ -282,7 +97,7 @@ bool maildirMessage::isExpunged() const
}
-ref <const structure> maildirMessage::getStructure() const
+ref <const messageStructure> maildirMessage::getStructure() const
{
if (m_structure == NULL)
throw exceptions::unfetched_object();
@@ -291,7 +106,7 @@ ref <const structure> maildirMessage::getStructure() const
}
-ref <structure> maildirMessage::getStructure()
+ref <messageStructure> maildirMessage::getStructure()
{
if (m_structure == NULL)
throw exceptions::unfetched_object();
@@ -337,11 +152,11 @@ void maildirMessage::extract(utility::outputStream& os,
}
-void maildirMessage::extractPart(ref <const part> p, utility::outputStream& os,
+void maildirMessage::extractPart(ref <const messagePart> p, utility::outputStream& os,
utility::progressListener* progress, const int start,
const int length, const bool peek) const
{
- ref <const maildirPart> mp = p.dynamicCast <const maildirPart>();
+ ref <const maildirMessagePart> mp = p.dynamicCast <const maildirMessagePart>();
extractImpl(os, progress, mp->getBodyParsedOffset(), mp->getBodyParsedLength(),
start, length, peek);
@@ -395,11 +210,11 @@ void maildirMessage::extractImpl(utility::outputStream& os, utility::progressLis
}
-void maildirMessage::fetchPartHeader(ref <part> p)
+void maildirMessage::fetchPartHeader(ref <messagePart> p)
{
ref <maildirFolder> folder = m_folder.acquire();
- ref <maildirPart> mp = p.dynamicCast <maildirPart>();
+ ref <maildirMessagePart> mp = p.dynamicCast <maildirMessagePart>();
ref <utility::fileSystemFactory> fsf = platform::getHandler()->getFileSystemFactory();
@@ -508,7 +323,7 @@ void maildirMessage::fetch(ref <maildirFolder> msgFolder, const int options)
// Extract structure
if (options & folder::FETCH_STRUCTURE)
{
- m_structure = vmime::create <maildirStructure>(null, msg);
+ m_structure = vmime::create <maildirMessageStructure>(null, msg);
}
// Extract some header fields or whole header