diff options
| author | Vincent Richard <[email protected]> | 2013-10-16 19:47:24 +0200 |
|---|---|---|
| committer | Vincent Richard <[email protected]> | 2013-10-16 19:47:24 +0200 |
| commit | 29954e5e50e5668a5f38f944573b9be6401ed433 (patch) | |
| tree | 5c79750d6cae628b11b0d5427f5a56367149061f /src/mailboxList.cpp | |
| parent | Merge branch 'master' of https://github.com/kisli/vmime (diff) | |
| download | vmime-29954e5e50e5668a5f38f944573b9be6401ed433.tar.gz vmime-29954e5e50e5668a5f38f944573b9be6401ed433.zip | |
Fixed group parsing in mailboxList.
Diffstat (limited to 'src/mailboxList.cpp')
| -rw-r--r-- | src/mailboxList.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/mailboxList.cpp b/src/mailboxList.cpp index 03a225f8..f0f40ca8 100644 --- a/src/mailboxList.cpp +++ b/src/mailboxList.cpp @@ -22,6 +22,7 @@ // #include "vmime/mailboxList.hpp" +#include "vmime/mailboxGroup.hpp" #include "vmime/exception.hpp" @@ -200,7 +201,36 @@ void mailboxList::parseImpl (const parsingContext& ctx, const string& buffer, const string::size_type position, const string::size_type end, string::size_type* newPosition) { - m_list.parse(ctx, buffer, position, end, newPosition); + m_list.removeAllAddresses(); + + string::size_type pos = position; + + while (pos < end) + { + ref <address> parsedAddress = address::parseNext(ctx, buffer, pos, end, &pos, NULL); + + if (parsedAddress != NULL) + { + if (parsedAddress->isGroup()) + { + ref <mailboxGroup> group = parsedAddress.staticCast <mailboxGroup>(); + + for (size_t i = 0 ; i < group->getMailboxCount() ; ++i) + { + m_list.appendAddress(group->getMailboxAt(i)); + } + } + else + { + m_list.appendAddress(parsedAddress); + } + } + } + + setParsedBounds(position, end); + + if (newPosition) + *newPosition = end; } |
