void QMessage::appendAttachments(const QStringList &fileNames) { if (d_ptr->_type == QMessage::Email) { ModestEngine::instance()->retrieveMessageMimeInformation(*(QMessage*)this); } if (!fileNames.isEmpty()) { d_ptr->_modified = true; QMessageContentContainerPrivate *container(((QMessageContentContainer *)(this))->d_ptr); if (container->_attachments.isEmpty()) { QMessageContentContainerId existingBodyId(bodyId()); if (existingBodyId == QMessageContentContainerPrivate::bodyContentId()) { // The body content is in the message itself - move it to become the first attachment QMessageContentContainer newBody(*this); newBody.setDerivedMessage(0); container->setContentType("multipart", "mixed", ""); d_ptr->_bodyId = container->prependContent(newBody); } else { // This message is now multipart container->setContentType("multipart", "mixed", ""); } container->_available = true; } foreach (const QString &filename, fileNames) { QMessageContentContainer attachment; if (attachment.d_ptr->createAttachment(filename)) { container->appendContent(attachment); } }
void QMessage::setBody(const QString &body, const QByteArray &mimeType) { QByteArray mainType("text"); QByteArray subType("plain"); QByteArray charset; QString mime = QString(mimeType); int index = mimeType.indexOf("/"); if (index != -1) { mainType = mimeType.left(index).trimmed(); subType = mimeType.mid(index + 1).trimmed(); index = subType.indexOf(";"); if (index != -1) { QString remainder = subType.mid(index + 1); subType = subType.left(index).trimmed(); QRegExp charsetPattern("charset=(\\S+)"); index = charsetPattern.indexIn(remainder); if (index != -1) { charset = charsetPattern.cap(1).toLatin1(); } } } if (charset.isEmpty()) { charset = QMessage::preferredCharsetFor(body); if (charset.isEmpty()) { charset = "UTF-8"; } } QMessageContentContainerPrivate *container(((QMessageContentContainer *)(this))->d_ptr); QMessageContentContainerId existingBodyId(bodyId()); if (existingBodyId.isValid()) { if (existingBodyId == QMessageContentContainerPrivate::bodyContentId()) { // The body content is in the message itself container->setContent(body, mainType, subType, charset); } else { // The body content is in the first attachment QMessageContentContainerPrivate *attachmentContainer(container->attachment(existingBodyId)->d_ptr); attachmentContainer->setContent(body, mainType, subType, charset); } } else { if (container->_attachments.isEmpty()) { // Put the content directly into the message container->setContent(body, mainType, subType, charset); d_ptr->_bodyId = QMessageContentContainerPrivate::bodyContentId(); } else { // Add the body as the first attachment QMessageContentContainer newBody; newBody.d_ptr->setContent(body, mainType, subType, charset); d_ptr->_bodyId = container->prependContent(newBody); } } d_ptr->_modified = true; }
QMessageContentContainerIdList QMessage::attachmentIds() const { QMessageContentContainerIdList ids; QMessageContentContainerId msgBodyId(bodyId()); foreach (const QMessageContentContainerId &contentId, contentIds()) { if (contentId != msgBodyId) { ids.append(contentId); } } return ids; }
QMessageContentContainerIdList QMessage::attachmentIds() const { QMessageContentContainerIdList ids; if (d_ptr->_type == QMessage::Email) { ModestEngine::instance()->retrieveMessageMimeInformation(*(QMessage*)this); } QMessageContentContainerId msgBodyId(bodyId()); foreach (const QMessageContentContainerId &contentId, contentIds()) { if (contentId != msgBodyId) { ids.append(contentId); } } return ids; }