From 53df06854ffdcf164c195884783cadf8f53fea2c Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 24 May 2016 12:32:55 +0200 Subject: Validate subject and mime message --- examples/imapresource/imapresource.cpp | 53 ++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 6adfeb3..61031d8 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -51,6 +51,53 @@ using namespace Imap; +class FolderUpdater : public Sink::Preprocessor +{ +public: + FolderUpdater(const QByteArray &drafts) {} + + void updatedIndexedProperties(Sink::ApplicationDomain::BufferAdaptor &newEntity) + { + const auto mimeMessagePath = newEntity.getProperty("mimeMessage").toString(); + QFile f(mimeMessagePath); + if (!f.open(QIODevice::ReadOnly)) { + Warning() << "Failed to open the file: " << mimeMessagePath; + return; + } + auto mapped = f.map(0, qMin((qint64)8000, f.size())); + if (!mapped) { + Warning() << "Failed to map file"; + return; + } + + KMime::Message *msg = new KMime::Message; + msg->setHead(KMime::CRLFtoLF(QByteArray::fromRawData(reinterpret_cast(mapped), f.size()))); + msg->parse(); + + newEntity.setProperty("subject", msg->subject(true)->asUnicodeString()); + newEntity.setProperty("sender", msg->from(true)->asUnicodeString()); + newEntity.setProperty("senderName", msg->from(true)->asUnicodeString()); + newEntity.setProperty("date", msg->date(true)->dateTime()); + } + + void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + updatedIndexedProperties(newEntity); + } + + void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, + Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + updatedIndexedProperties(newEntity); + } + + void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + } + + QSharedPointer mFolderAdaptorFactory; +}; + ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPointer &pipeline) : Sink::GenericResource(instanceIdentifier, pipeline), mMailAdaptorFactory(QSharedPointer::create()), @@ -62,9 +109,11 @@ ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPo mUser = config.value("user").toString(); mPassword = config.value("password").toString(); - // auto folderUpdater = new FolderUpdater(QByteArray()); + auto folderUpdater = new FolderUpdater(QByteArray()); + folderUpdater->mFolderAdaptorFactory = mFolderAdaptorFactory; + addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory, - QVector() << new DefaultIndexUpdater); + QVector() << folderUpdater << new DefaultIndexUpdater); addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory, QVector() << new DefaultIndexUpdater); } -- cgit v1.2.3