diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 60 | ||||
-rw-r--r-- | examples/maildirresource/maildirresource.h | 5 |
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 | ||
46 | MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) | 46 | MaildirResource::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 | ||
31 | class MaildirMailAdaptorFactory; | ||
32 | class MaildirFolderAdaptorFactory; | ||
33 | |||
31 | class MaildirResource : public Akonadi2::GenericResource | 34 | class MaildirResource : public Akonadi2::GenericResource |
32 | { | 35 | { |
33 | public: | 36 | public: |
@@ -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 | ||
49 | class MaildirResourceFactory : public Akonadi2::ResourceFactory | 54 | class MaildirResourceFactory : public Akonadi2::ResourceFactory |