summaryrefslogtreecommitdiffstats
path: root/examples/dummyresource/resourcefactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dummyresource/resourcefactory.cpp')
-rw-r--r--examples/dummyresource/resourcefactory.cpp80
1 files changed, 27 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)