diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-17 12:00:02 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-17 12:00:02 +0100 |
commit | d3db7afcc31d850c3e3249ee188c18d2293de164 (patch) | |
tree | 9a3cab7b061ae448d78c92b2a3f0b580f90f0285 /examples/dummyresource | |
parent | d0341c3f3c7134f4f5912dd00f187ef33b6aa849 (diff) | |
download | sink-d3db7afcc31d850c3e3249ee188c18d2293de164.tar.gz sink-d3db7afcc31d850c3e3249ee188c18d2293de164.zip |
Use the domain adaptor in the synchornization code of the dummy
resource as well.
The code is easier to read that way, depends less on flatbuffers,
and there is no measurable impact on performance.
Diffstat (limited to 'examples/dummyresource')
-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 |