From b8b096c44ffc63ed1fc4514a6b7f20bb87c1bfb8 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Fri, 15 Jul 2005 09:51:55 +0000 Subject: Added getName() to retrieve attachment filename. --- src/messageParser.cpp | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'src/messageParser.cpp') diff --git a/src/messageParser.cpp b/src/messageParser.cpp index 94fec668..a3b71375 100644 --- a/src/messageParser.cpp +++ b/src/messageParser.cpp @@ -153,6 +153,7 @@ void messageParser::findAttachments(const bodyPart& part) if (isAttachment) { // Determine the media type of this attachment + const contentTypeField* contTypeField = NULL; mediaType type; try @@ -161,6 +162,8 @@ void messageParser::findAttachments(const bodyPart& part) (*hdr.findField(fields::CONTENT_TYPE)); type = ctf.getValue(); + + contTypeField = &ctf; } catch (exceptions::no_such_field) { @@ -184,10 +187,43 @@ void messageParser::findAttachments(const bodyPart& part) // No description available. } + // Get the name/filename (if available) + word name; + + // -- try the 'filename' parameter of 'Content-Disposition' field + if (contentDispField != NULL) + { + try + { + name = contentDispField->getFilename(); + } + catch (exceptions::no_such_parameter) + { + // No 'filename' parameter + } + } + + // -- try the 'name' parameter of 'Content-Type' field + if (name.getBuffer().empty() && contTypeField != NULL) + { + try + { + ref prm = contTypeField-> + findParameter("name").dynamicCast (); + + if (prm != NULL) + name = prm->getValue(); + } + catch (exceptions::no_such_parameter) + { + // No attachment name available. + } + } + // Construct the attachment object ref attach = vmime::create (bdy.getContents()->clone().dynamicCast (), - bdy.getEncoding(), type, description); + bdy.getEncoding(), type, description, name); if (contentDispField != NULL) { -- cgit v1.2.3