summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-17 13:23:21 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-17 13:23:21 +0100
commit95da068b4598497e2988085aefef4baf7291c33e (patch)
tree9356c89adee20bc703c07a16e92dd5c1e0e4bac1 /examples
parent4a6f45d645b011ac083581f965ce7951771a1f98 (diff)
downloadsink-95da068b4598497e2988085aefef4baf7291c33e.tar.gz
sink-95da068b4598497e2988085aefef4baf7291c33e.zip
Use domain adaptor in maildirresource
Diffstat (limited to 'examples')
-rw-r--r--examples/maildirresource/maildirresource.cpp60
-rw-r--r--examples/maildirresource/maildirresource.h5
2 files changed, 28 insertions, 37 deletions
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp
index 8770ff0..59fa3e3 100644
--- a/examples/maildirresource/maildirresource.cpp
+++ b/examples/maildirresource/maildirresource.cpp
@@ -44,11 +44,13 @@
44#define ENTITY_TYPE_FOLDER "folder" 44#define ENTITY_TYPE_FOLDER "folder"
45 45
46MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) 46MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline)
47 : Akonadi2::GenericResource(instanceIdentifier, pipeline) 47 : Akonadi2::GenericResource(instanceIdentifier, pipeline),
48 mMailAdaptorFactory(QSharedPointer<MaildirMailAdaptorFactory>::create()),
49 mFolderAdaptorFactory(QSharedPointer<MaildirFolderAdaptorFactory>::create())
48{ 50{
49 addType(ENTITY_TYPE_MAIL, QSharedPointer<MaildirMailAdaptorFactory>::create(), 51 addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory,
50 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>); 52 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>);
51 addType(ENTITY_TYPE_FOLDER, QSharedPointer<MaildirFolderAdaptorFactory>::create(), 53 addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory,
52 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>); 54 QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>);
53 auto config = ResourceConfig::getConfiguration(instanceIdentifier); 55 auto config = ResourceConfig::getConfiguration(instanceIdentifier);
54 mMaildirPath = config.value("path").toString(); 56 mMaildirPath = config.value("path").toString();
@@ -123,25 +125,16 @@ void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transac
123 125
124 KPIM::Maildir md(folder, folder == mMaildirPath); 126 KPIM::Maildir md(folder, folder == mMaildirPath);
125 127
126 flatbuffers::FlatBufferBuilder entityFbb; 128 Akonadi2::ApplicationDomain::Folder folder;
127 auto name = m_fbb.CreateString(md.name().toStdString()); 129 folder.setProperty("name", md.name());
128 auto icon = m_fbb.CreateString("folder"); 130 folder.setProperty("icon", "folder");
129 flatbuffers::Offset<flatbuffers::String> parent;
130
131 if (!md.isRoot()) { 131 if (!md.isRoot()) {
132 auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, md.parent().path(), synchronizationTransaction); 132 auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, md.parent().path(), synchronizationTransaction);
133 parent = m_fbb.CreateString(akonadiId.toStdString()); 133 folder.setProperty("parent", akonadiId);
134 } 134 }
135 135
136 auto builder = Akonadi2::ApplicationDomain::Buffer::FolderBuilder(m_fbb); 136 flatbuffers::FlatBufferBuilder entityFbb;
137 builder.add_name(name); 137 mFolderAdaptorFactory->createBuffer(folder, entityFbb);
138 if (!md.isRoot()) {
139 builder.add_parent(parent);
140 }
141 builder.add_icon(icon);
142 auto buffer = builder.Finish();
143 Akonadi2::ApplicationDomain::Buffer::FinishFolderBuffer(m_fbb, buffer);
144 Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize());
145 138
146 flatbuffers::FlatBufferBuilder fbb; 139 flatbuffers::FlatBufferBuilder fbb;
147 //This is the resource type and not the domain type 140 //This is the resource type and not the domain type
@@ -206,26 +199,19 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti
206 const auto flags = maildir.readEntryFlags(fileName); 199 const auto flags = maildir.readEntryFlags(fileName);
207 200
208 Trace() << "Found a mail " << filePath << fileName << msg->subject(true)->asUnicodeString(); 201 Trace() << "Found a mail " << filePath << fileName << msg->subject(true)->asUnicodeString();
202
203 Akonadi2::ApplicationDomain::Mail mail;
204 mail.setProperty("subject", msg->subject(true)->asUnicodeString());
205 mail.setProperty("sender", msg->from(true)->asUnicodeString());
206 mail.setProperty("senderName", msg->from(true)->asUnicodeString());
207 mail.setProperty("date", msg->date(true)->dateTime().toString());
208 mail.setProperty("folder", resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction));
209 mail.setProperty("mimeMessage", filepath);
210 mail.setProperty("unread", !(flags & KPIM::Maildir::Seen));
211 mail.setProperty("important", (flags.testFlag(KPIM::Maildir::Flagged)));
212
209 flatbuffers::FlatBufferBuilder entityFbb; 213 flatbuffers::FlatBufferBuilder entityFbb;
210 auto subject = m_fbb.CreateString(msg->subject(true)->asUnicodeString().toStdString()); 214 mMailAdaptorFactory->createBuffer(mail, entityFbb);
211 auto sender = m_fbb.CreateString(msg->from(true)->asUnicodeString().toStdString());
212 auto senderName = m_fbb.CreateString(msg->from(true)->asUnicodeString().toStdString());
213 auto date = m_fbb.CreateString(msg->date(true)->dateTime().toString().toStdString());
214 auto folder = m_fbb.CreateString(resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction).toStdString());
215 auto mimeMessage = m_fbb.CreateString(filepath.toStdString());
216
217 auto builder = Akonadi2::ApplicationDomain::Buffer::MailBuilder(m_fbb);
218 builder.add_subject(subject);
219 builder.add_sender(sender);
220 builder.add_senderName(senderName);
221 builder.add_unread(!(flags & KPIM::Maildir::Seen));
222 builder.add_important(flags & KPIM::Maildir::Flagged);
223 builder.add_date(date);
224 builder.add_folder(folder);
225 builder.add_mimeMessage(mimeMessage);
226 auto buffer = builder.Finish();
227 Akonadi2::ApplicationDomain::Buffer::FinishMailBuffer(m_fbb, buffer);
228 Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize());
229 215
230 flatbuffers::FlatBufferBuilder fbb; 216 flatbuffers::FlatBufferBuilder fbb;
231 //This is the resource type and not the domain type 217 //This is the resource type and not the domain type
diff --git a/examples/maildirresource/maildirresource.h b/examples/maildirresource/maildirresource.h
index a3e12d3..dbf849a 100644
--- a/examples/maildirresource/maildirresource.h
+++ b/examples/maildirresource/maildirresource.h
@@ -28,6 +28,9 @@
28//TODO: a little ugly to have this in two places, once here and once in Q_PLUGIN_METADATA 28//TODO: a little ugly to have this in two places, once here and once in Q_PLUGIN_METADATA
29#define PLUGIN_NAME "org.kde.maildir" 29#define PLUGIN_NAME "org.kde.maildir"
30 30
31class MaildirMailAdaptorFactory;
32class MaildirFolderAdaptorFactory;
33
31class MaildirResource : public Akonadi2::GenericResource 34class MaildirResource : public Akonadi2::GenericResource
32{ 35{
33public: 36public:
@@ -44,6 +47,8 @@ private:
44 void synchronizeMails(Akonadi2::Storage::Transaction &transaction, const QString &folder); 47 void synchronizeMails(Akonadi2::Storage::Transaction &transaction, const QString &folder);
45 QStringList listAvailableFolders(); 48 QStringList listAvailableFolders();
46 QString mMaildirPath; 49 QString mMaildirPath;
50 QSharedPointer<MaildirMailAdaptorFactory> mMailAdaptorFactory;
51 QSharedPointer<MaildirFolderAdaptorFactory> mFolderAdaptorFactory;
47}; 52};
48 53
49class MaildirResourceFactory : public Akonadi2::ResourceFactory 54class MaildirResourceFactory : public Akonadi2::ResourceFactory