summaryrefslogtreecommitdiffstats
path: root/examples/dummyresource
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-17 12:00:02 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-17 12:00:02 +0100
commitd3db7afcc31d850c3e3249ee188c18d2293de164 (patch)
tree9a3cab7b061ae448d78c92b2a3f0b580f90f0285 /examples/dummyresource
parentd0341c3f3c7134f4f5912dd00f187ef33b6aa849 (diff)
downloadsink-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.cpp80
-rw-r--r--examples/dummyresource/resourcefactory.h8
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
46DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) 46DummyResource::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
57void DummyResource::createEvent(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) 60void 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
76QString DummyResource::resolveRemoteId(const QByteArray &bufferType, const QString &remoteId, Akonadi2::Storage::Transaction &transaction) 71QString 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
89void DummyResource::createMail(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) 84void 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
111void DummyResource::createFolder(const QByteArray &ridBuffer, const QMap<QString, QVariant> &data, flatbuffers::FlatBufferBuilder &entityFbb, Akonadi2::Storage::Transaction &transaction) 97void 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
135void 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) 109void 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
32class DummyEventAdaptorFactory;
33class DummyMailAdaptorFactory;
34class DummyFolderAdaptorFactory;
35
32class DummyResource : public Akonadi2::GenericResource 36class DummyResource : public Akonadi2::GenericResource
33{ 37{
34public: 38public:
@@ -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
47class DummyResourceFactory : public Akonadi2::ResourceFactory 55class DummyResourceFactory : public Akonadi2::ResourceFactory