summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-24 12:32:55 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-24 12:32:55 +0200
commit53df06854ffdcf164c195884783cadf8f53fea2c (patch)
tree8d03cdb72fe3de590cd2f1e5d1138004dce46754 /examples
parent3e443520eaa3559c9f74134007f407b569f22443 (diff)
downloadsink-53df06854ffdcf164c195884783cadf8f53fea2c.tar.gz
sink-53df06854ffdcf164c195884783cadf8f53fea2c.zip
Validate subject and mime message
Diffstat (limited to 'examples')
-rw-r--r--examples/imapresource/imapresource.cpp53
1 files changed, 51 insertions, 2 deletions
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 @@
51 51
52using namespace Imap; 52using namespace Imap;
53 53
54class FolderUpdater : public Sink::Preprocessor
55{
56public:
57 FolderUpdater(const QByteArray &drafts) {}
58
59 void updatedIndexedProperties(Sink::ApplicationDomain::BufferAdaptor &newEntity)
60 {
61 const auto mimeMessagePath = newEntity.getProperty("mimeMessage").toString();
62 QFile f(mimeMessagePath);
63 if (!f.open(QIODevice::ReadOnly)) {
64 Warning() << "Failed to open the file: " << mimeMessagePath;
65 return;
66 }
67 auto mapped = f.map(0, qMin((qint64)8000, f.size()));
68 if (!mapped) {
69 Warning() << "Failed to map file";
70 return;
71 }
72
73 KMime::Message *msg = new KMime::Message;
74 msg->setHead(KMime::CRLFtoLF(QByteArray::fromRawData(reinterpret_cast<const char*>(mapped), f.size())));
75 msg->parse();
76
77 newEntity.setProperty("subject", msg->subject(true)->asUnicodeString());
78 newEntity.setProperty("sender", msg->from(true)->asUnicodeString());
79 newEntity.setProperty("senderName", msg->from(true)->asUnicodeString());
80 newEntity.setProperty("date", msg->date(true)->dateTime());
81 }
82
83 void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
84 {
85 updatedIndexedProperties(newEntity);
86 }
87
88 void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity,
89 Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
90 {
91 updatedIndexedProperties(newEntity);
92 }
93
94 void deletedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE
95 {
96 }
97
98 QSharedPointer<ImapFolderAdaptorFactory> mFolderAdaptorFactory;
99};
100
54ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline) 101ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPointer<Sink::Pipeline> &pipeline)
55 : Sink::GenericResource(instanceIdentifier, pipeline), 102 : Sink::GenericResource(instanceIdentifier, pipeline),
56 mMailAdaptorFactory(QSharedPointer<ImapMailAdaptorFactory>::create()), 103 mMailAdaptorFactory(QSharedPointer<ImapMailAdaptorFactory>::create()),
@@ -62,9 +109,11 @@ ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPo
62 mUser = config.value("user").toString(); 109 mUser = config.value("user").toString();
63 mPassword = config.value("password").toString(); 110 mPassword = config.value("password").toString();
64 111
65 // auto folderUpdater = new FolderUpdater(QByteArray()); 112 auto folderUpdater = new FolderUpdater(QByteArray());
113 folderUpdater->mFolderAdaptorFactory = mFolderAdaptorFactory;
114
66 addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory, 115 addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory,
67 QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); 116 QVector<Sink::Preprocessor*>() << folderUpdater << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>);
68 addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory, 117 addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory,
69 QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); 118 QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>);
70} 119}