diff options
Diffstat (limited to 'examples/dummyresource/resourcefactory.cpp')
-rw-r--r-- | examples/dummyresource/resourcefactory.cpp | 80 |
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 | ||
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) |