Auto-detect filename. Renamed 'filename' argument to 'filepath' for disambiguity. Added constructor for input stream. Use 'word' instead of 'string' for filename.

This commit is contained in:
Vincent Richard 2009-11-04 14:12:06 +00:00
parent 5341f2d1f7
commit b0fbd0edf0
4 changed files with 95 additions and 17 deletions

View File

@ -31,48 +31,93 @@
#include "vmime/contentDispositionField.hpp" #include "vmime/contentDispositionField.hpp"
#include "vmime/platform.hpp"
#include "vmime/utility/file.hpp"
namespace vmime namespace vmime
{ {
fileAttachment::fileAttachment(const string& filename, const mediaType& type) fileAttachment::fileAttachment(const string& filepath, const mediaType& type)
{ {
m_type = type; m_type = type;
setData(filename); setData(filepath);
m_encoding = encoding::decide(m_data); m_encoding = encoding::decide(m_data);
} }
fileAttachment::fileAttachment(const string& filename, const mediaType& type, const text& desc) fileAttachment::fileAttachment(const string& filepath, const mediaType& type, const text& desc)
{ {
m_type = type; m_type = type;
m_desc = desc; m_desc = desc;
setData(filename); setData(filepath);
m_encoding = encoding::decide(m_data); m_encoding = encoding::decide(m_data);
} }
fileAttachment::fileAttachment(const string& filename, const mediaType& type, fileAttachment::fileAttachment(const string& filepath, const mediaType& type,
const text& desc, const encoding& enc) const text& desc, const encoding& enc)
{ {
m_type = type; m_type = type;
m_desc = desc; m_desc = desc;
setData(filename); setData(filepath);
m_encoding = enc; m_encoding = enc;
} }
void fileAttachment::setData(const string& filename) fileAttachment::fileAttachment(ref <utility::inputStream> is, const word& filename, const mediaType& type)
{
if (!filename.isEmpty())
m_fileInfo.setFilename(filename);
m_type = type;
setData(is);
m_encoding = encoding::decide(m_data);
}
fileAttachment::fileAttachment(ref <utility::inputStream> is, const word& filename,
const mediaType& type, const text& desc)
{
if (!filename.isEmpty())
m_fileInfo.setFilename(filename);
m_type = type;
m_desc = desc;
setData(is);
m_encoding = encoding::decide(m_data);
}
fileAttachment::fileAttachment(ref <utility::inputStream> is, const word& filename,
const mediaType& type, const text& desc, const encoding& enc)
{
if (!filename.isEmpty())
m_fileInfo.setFilename(filename);
m_type = type;
m_desc = desc;
m_encoding = enc;
setData(is);
}
void fileAttachment::setData(const string& filepath)
{ {
std::ifstream* file = new std::ifstream(); std::ifstream* file = new std::ifstream();
file->open(filename.c_str(), std::ios::in | std::ios::binary); file->open(filepath.c_str(), std::ios::in | std::ios::binary);
if (!*file) if (!*file)
{ {
@ -82,6 +127,15 @@ void fileAttachment::setData(const string& filename)
ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(file, true); ref <utility::inputStream> is = vmime::create <utility::inputStreamPointerAdapter>(file, true);
setData(is);
utility::file::path path = platform::getHandler()->getFileSystemFactory()->stringToPath(filepath);
m_fileInfo.setFilename(path.getLastComponent());
}
void fileAttachment::setData(ref <utility::inputStream> is)
{
m_data = vmime::create <streamContentHandler>(is, 0); m_data = vmime::create <streamContentHandler>(is, 0);
} }
@ -94,7 +148,7 @@ void fileAttachment::generatePart(ref <bodyPart> part) const
dynamicCast <contentDispositionField>(); dynamicCast <contentDispositionField>();
if (m_fileInfo.hasSize()) cdf->setSize(utility::stringUtils::toString(m_fileInfo.getSize())); if (m_fileInfo.hasSize()) cdf->setSize(utility::stringUtils::toString(m_fileInfo.getSize()));
if (m_fileInfo.hasFilename()) cdf->setFilename(m_fileInfo.getFilename()); if (m_fileInfo.hasFilename() && !m_fileInfo.getFilename().isEmpty()) cdf->setFilename(m_fileInfo.getFilename());
if (m_fileInfo.hasCreationDate()) cdf->setCreationDate(m_fileInfo.getCreationDate()); if (m_fileInfo.hasCreationDate()) cdf->setCreationDate(m_fileInfo.getCreationDate());
if (m_fileInfo.hasModificationDate()) cdf->setModificationDate(m_fileInfo.getModificationDate()); if (m_fileInfo.hasModificationDate()) cdf->setModificationDate(m_fileInfo.getModificationDate());
if (m_fileInfo.hasReadDate()) cdf->setReadDate(m_fileInfo.getReadDate()); if (m_fileInfo.hasReadDate()) cdf->setReadDate(m_fileInfo.getReadDate());
@ -134,8 +188,9 @@ fileAttachment::fileInfo::~fileInfo()
} }
bool fileAttachment::fileInfo::hasFilename() const { return (m_filename != NULL); } bool fileAttachment::fileInfo::hasFilename() const { return (m_filename != NULL); }
const string& fileAttachment::fileInfo::getFilename() const { return (*m_filename); } const word& fileAttachment::fileInfo::getFilename() const { return (*m_filename); }
void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new string(name); } } void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } }
void fileAttachment::fileInfo::setFilename(const word& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } }
bool fileAttachment::fileInfo::hasCreationDate() const { return (m_creationDate != NULL); } bool fileAttachment::fileInfo::hasCreationDate() const { return (m_creationDate != NULL); }
const datetime& fileAttachment::fileInfo::getCreationDate() const { return (*m_creationDate); } const datetime& fileAttachment::fileInfo::getCreationDate() const { return (*m_creationDate); }

View File

@ -699,6 +699,12 @@ string& word::getBuffer()
} }
bool word::isEmpty() const
{
return m_buffer.empty();
}
void word::setBuffer(const string& buffer) void word::setBuffer(const string& buffer)
{ {
m_buffer = buffer; m_buffer = buffer;

View File

@ -41,9 +41,13 @@ class fileAttachment : public defaultAttachment
{ {
public: public:
fileAttachment(const string& filename, const mediaType& type); fileAttachment(const string& filepath, const mediaType& type);
fileAttachment(const string& filename, const mediaType& type, const text& desc); fileAttachment(const string& filepath, const mediaType& type, const text& desc);
fileAttachment(const string& filename, const mediaType& type, const text& desc, const encoding& enc); fileAttachment(const string& filepath, const mediaType& type, const text& desc, const encoding& enc);
fileAttachment(ref <utility::inputStream> is, const word& filename, const mediaType& type);
fileAttachment(ref <utility::inputStream> is, const word& filename, const mediaType& type, const text& desc);
fileAttachment(ref <utility::inputStream> is, const word& filename, const mediaType& type, const text& desc, const encoding& enc);
/** Stores information about a file attachment. /** Stores information about a file attachment.
*/ */
@ -65,7 +69,7 @@ public:
* *
* @return file name * @return file name
*/ */
const string& getFilename() const; const word& getFilename() const;
/** Set the value of the 'filename' property. /** Set the value of the 'filename' property.
* *
@ -73,6 +77,12 @@ public:
*/ */
void setFilename(const string& name); void setFilename(const string& name);
/** Set the value of the 'filename' property.
*
* @param name file name
*/
void setFilename(const word& name);
/** Check whether the 'creation-date' property is present. /** Check whether the 'creation-date' property is present.
* *
* @return true if the 'creation-date' property is set, * @return true if the 'creation-date' property is set,
@ -151,7 +161,7 @@ public:
private: private:
string* m_filename; word* m_filename;
unsigned int* m_size; unsigned int* m_size;
datetime* m_creationDate; datetime* m_creationDate;
datetime* m_modifDate; datetime* m_modifDate;
@ -163,7 +173,8 @@ public:
private: private:
void setData(const string& filename); void setData(const string& filepath);
void setData(ref <utility::inputStream> is);
fileInfo m_fileInfo; fileInfo m_fileInfo;

View File

@ -60,6 +60,12 @@ public:
*/ */
string& getBuffer(); string& getBuffer();
/** Tests whether this word is empty.
*
* @return true if the buffer is empty, false otherwise
*/
bool isEmpty() const;
/** Set the raw data for this encoded word. /** Set the raw data for this encoded word.
* *
* @param buffer raw data buffer * @param buffer raw data buffer