diff options
-rw-r--r-- | examples/dummyresource/resourcefactory.cpp | 80 | ||||
-rw-r--r-- | examples/dummyresource/resourcefactory.h | 8 |
2 files changed, 35 insertions, 53 deletions
diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp index 51000a7..6bb87f6 100644 --- a/examples/dummyresource/resourcefactory.cpp +++ b/examples/dummyresource/resourcefactory.cpp | |||
@@ -44,33 +44,28 @@ | |||
44 | #define ENTITY_TYPE_FOLDER "folder" | 44 | #define ENTITY_TYPE_FOLDER "folder" |
45 | 45 | ||
46 | DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) | 46 | DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) |
47 | : Akonadi2::GenericResource(instanceIdentifier, pipeline) | 47 | : Akonadi2::GenericResource(instanceIdentifier, pipeline), |
48 | mEventAdaptorFactory(QSharedPointer<DummyEventAdaptorFactory>::create()), | ||
49 | mMailAdaptorFactory(QSharedPointer<DummyMailAdaptorFactory>::create()), | ||
50 | mFolderAdaptorFactory(QSharedPointer<DummyFolderAdaptorFactory>::create()) | ||
48 | { | 51 | { |
49 | addType(ENTITY_TYPE_MAIL, QSharedPointer<DummyMailAdaptorFactory>::create(), | 52 | addType(ENTITY_TYPE_MAIL, mMailAdaptorFactory, |
50 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>); | 53 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>); |
51 | addType(ENTITY_TYPE_FOLDER, QSharedPointer<DummyFolderAdaptorFactory>::create(), | 54 | addType(ENTITY_TYPE_FOLDER, mFolderAdaptorFactory, |
52 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>); | 55 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>); |
53 | addType(ENTITY_TYPE_EVENT, QSharedPointer<DummyEventAdaptorFactory>::create(), | 56 | addType(ENTITY_TYPE_EVENT, mEventAdaptorFactory, |
54 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Event>); | 57 | QVector<Akonadi2::Preprocessor*>() << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Event>); |
55 | } | 58 | } |
56 | 59 | ||
57 | void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) | 60 | void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) |
58 | { | 61 | { |
59 | //Map the source format to the buffer format (which happens to be an exact copy here) | ||
60 | auto summary = m_fbb.CreateString(data.value("summary").toString().toStdString()); | ||
61 | auto rid = m_fbb.CreateString(std::string(ridBuffer.constData(), ridBuffer.size())); | ||
62 | auto description = m_fbb.CreateString(std::string(ridBuffer.constData(), ridBuffer.size())); | ||
63 | static uint8_t rawData[100]; | 62 | static uint8_t rawData[100]; |
64 | auto attachment = Akonadi2::EntityBuffer::appendAsVector(m_fbb, rawData, 100); | 63 | Akonadi2::ApplicationDomain::Event event; |
65 | 64 | event.setProperty("summary", data.value("summary").toString()); | |
66 | auto builder = DummyCalendar::DummyEventBuilder(m_fbb); | 65 | event.setProperty("remoteId", ridBuffer); |
67 | builder.add_summary(summary); | 66 | event.setProperty("description", data.value("description").toString()); |
68 | builder.add_remoteId(rid); | 67 | event.setProperty("attachment", QByteArray::fromRawData(reinterpret_cast<const char*>(rawData), 100)); |
69 | builder.add_description(description); | 68 | mEventAdaptorFactory->createBuffer(event, entityFbb); |
70 | builder.add_attachment(attachment); | ||
71 | auto buffer = builder.Finish(); | ||
72 | DummyCalendar::FinishDummyEventBuffer(m_fbb, buffer); | ||
73 | Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize(), 0, 0); | ||
74 | } | 69 | } |
75 | 70 | ||
76 | QString DummyResource::resolveRemoteId(const QByteArray &bufferType, const QString &remoteId, Akonadi2::Storage::Transaction &transaction) | 71 | QString DummyResource::resolveRemoteId(const QByteArray &bufferType, const QString &remoteId, Akonadi2::Storage::Transaction &transaction) |
@@ -88,48 +83,27 @@ QString DummyResource::resolveRemoteId(const QByteArray &bufferType, const QStri | |||
88 | 83 | ||
89 | void DummyResource::createMail(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) | 84 | void DummyResource::createMail(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) |
90 | { | 85 | { |
91 | //Map the source format to the buffer format (which happens to be an almost exact copy here) | 86 | Akonadi2::ApplicationDomain::Mail mail; |
92 | auto subject = m_fbb.CreateString(data.value("subject").toString().toStdString()); | 87 | mail.setProperty("subject", data.value("subject").toString()); |
93 | auto sender = m_fbb.CreateString(data.value("senderEmail").toString().toStdString()); | 88 | mail.setProperty("senderEmail", data.value("senderEmail").toString()); |
94 | auto senderName = m_fbb.CreateString(data.value("senderName").toString().toStdString()); | 89 | mail.setProperty("senderName", data.value("senderName").toString()); |
95 | auto date = m_fbb.CreateString(data.value("date").toDateTime().toString().toStdString()); | 90 | mail.setProperty("date", data.value("date").toString()); |
96 | auto folder = m_fbb.CreateString(resolveRemoteId(ENTITY_TYPE_FOLDER, data.value("parentFolder").toString(), transaction).toStdString()); | 91 | mail.setProperty("folder", resolveRemoteId(ENTITY_TYPE_FOLDER, data.value("parentFolder").toString(), transaction)); |
97 | 92 | mail.setProperty("unread", data.value("unread").toBool()); | |
98 | auto builder = Akonadi2::ApplicationDomain::Buffer::MailBuilder(m_fbb); | 93 | mail.setProperty("important", data.value("important").toBool()); |
99 | builder.add_subject(subject); | 94 | mMailAdaptorFactory->createBuffer(mail, entityFbb); |
100 | builder.add_sender(sender); | ||
101 | builder.add_senderName(senderName); | ||
102 | builder.add_unread(data.value("unread").toBool()); | ||
103 | builder.add_important(data.value("important").toBool()); | ||
104 | builder.add_date(date); | ||
105 | builder.add_folder(folder); | ||
106 | auto buffer = builder.Finish(); | ||
107 | Akonadi2::ApplicationDomain::Buffer::FinishMailBuffer(m_fbb, buffer); | ||
108 | Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize()); | ||
109 | } | 95 | } |
110 | 96 | ||
111 | void DummyResource::createFolder(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) | 97 | void DummyResource::createFolder(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) |
112 | { | 98 | { |
113 | //Map the source format to the buffer format (which happens to be an exact copy here) | 99 | Akonadi2::ApplicationDomain::Folder folder; |
114 | auto name = m_fbb.CreateString(data.value("name").toString().toStdString()); | 100 | folder.setProperty("name", data.value("name").toString()); |
115 | auto icon = m_fbb.CreateString(data.value("icon").toString().toStdString()); | 101 | folder.setProperty("icon", data.value("icon").toString()); |
116 | flatbuffers::Offset<flatbuffers::String> parent; | ||
117 | bool hasParent = false; | ||
118 | if (!data.value("parent").toString().isEmpty()) { | 102 | if (!data.value("parent").toString().isEmpty()) { |
119 | hasParent = true; | ||
120 | auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, data.value("parent").toString(), transaction); | 103 | auto akonadiId = resolveRemoteId(ENTITY_TYPE_FOLDER, data.value("parent").toString(), transaction); |
121 | parent = m_fbb.CreateString(akonadiId.toStdString()); | 104 | folder.setProperty("parent", akonadiId); |
122 | } | 105 | } |
123 | 106 | mFolderAdaptorFactory->createBuffer(folder, entityFbb); | |
124 | auto builder = Akonadi2::ApplicationDomain::Buffer::FolderBuilder(m_fbb); | ||
125 | builder.add_name(name); | ||
126 | if (hasParent) { | ||
127 | builder.add_parent(parent); | ||
128 | } | ||
129 | builder.add_icon(icon); | ||
130 | auto buffer = builder.Finish(); | ||
131 | Akonadi2::ApplicationDomain::Buffer::FinishFolderBuffer(m_fbb, buffer); | ||
132 | Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize()); | ||
133 | } | 107 | } |
134 | 108 | ||
135 | void DummyResource::synchronize(const QString &bufferType, const QMap<QString, QMap<QString, QVariant> > &data, Akonadi2::Storage::Transaction &transaction, std::function<void(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &)> createEntity) | 109 | void DummyResource::synchronize(const QString &bufferType, const QMap<QString, QMap<QString, QVariant> > &data, Akonadi2::Storage::Transaction &transaction, std::function<void(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &)> createEntity) |
diff --git a/examples/dummyresource/resourcefactory.h b/examples/dummyresource/resourcefactory.h index dc248c0..3216e13 100644 --- a/examples/dummyresource/resourcefactory.h +++ b/examples/dummyresource/resourcefactory.h | |||
@@ -29,6 +29,10 @@ | |||
29 | //TODO: a little ugly to have this in two places, once here and once in Q_PLUGIN_METADATA | 29 | //TODO: a little ugly to have this in two places, once here and once in Q_PLUGIN_METADATA |
30 | #define PLUGIN_NAME "org.kde.dummy" | 30 | #define PLUGIN_NAME "org.kde.dummy" |
31 | 31 | ||
32 | class DummyEventAdaptorFactory; | ||
33 | class DummyMailAdaptorFactory; | ||
34 | class DummyFolderAdaptorFactory; | ||
35 | |||
32 | class DummyResource : public Akonadi2::GenericResource | 36 | class DummyResource : public Akonadi2::GenericResource |
33 | { | 37 | { |
34 | public: | 38 | public: |
@@ -42,6 +46,10 @@ private: | |||
42 | void createMail(const QByteArray &rid, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &); | 46 | void createMail(const QByteArray &rid, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &); |
43 | void createFolder(const QByteArray &rid, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &); | 47 | void createFolder(const QByteArray &rid, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &); |
44 | void synchronize(const QString &bufferType, const QMap<QString, QMap<QString, QVariant> > &data, Akonadi2::Storage::Transaction &transaction, std::function<void(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &)> createEntity); | 48 | void synchronize(const QString &bufferType, const QMap<QString, QMap<QString, QVariant> > &data, Akonadi2::Storage::Transaction &transaction, std::function<void(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &)> createEntity); |
49 | |||
50 | QSharedPointer<DummyEventAdaptorFactory> mEventAdaptorFactory; | ||
51 | QSharedPointer<DummyMailAdaptorFactory> mMailAdaptorFactory; | ||
52 | QSharedPointer<DummyFolderAdaptorFactory> mFolderAdaptorFactory; | ||
45 | }; | 53 | }; |
46 | 54 | ||
47 | class DummyResourceFactory : public Akonadi2::ResourceFactory | 55 | class DummyResourceFactory : public Akonadi2::ResourceFactory |