summaryrefslogtreecommitdiffstats
path: root/examples/dummyresource/resourcefactory.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-25 15:42:21 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-25 15:42:21 +0100
commit60b4be31c40e7c4681f5ce462af84dd92872ec5f (patch)
tree7aefa949b29d72d28b6f34052954c45b7f96d997 /examples/dummyresource/resourcefactory.cpp
parent89aa339dd91765d67b4606938e60358f41d33884 (diff)
downloadsink-60b4be31c40e7c4681f5ce462af84dd92872ec5f.tar.gz
sink-60b4be31c40e7c4681f5ce462af84dd92872ec5f.zip
Separate the default index updater from other generic indexers
Diffstat (limited to 'examples/dummyresource/resourcefactory.cpp')
-rw-r--r--examples/dummyresource/resourcefactory.cpp53
1 files changed, 36 insertions, 17 deletions
diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp
index 2a5a3e8..e524c3f 100644
--- a/examples/dummyresource/resourcefactory.cpp
+++ b/examples/dummyresource/resourcefactory.cpp
@@ -52,7 +52,6 @@
52 * * range indexes like what date range an event affects. 52 * * range indexes like what date range an event affects.
53 * * group indexes like tree hierarchies as nested sets 53 * * group indexes like tree hierarchies as nested sets
54 */ 54 */
55template<typename DomainType>
56class IndexUpdater : public Akonadi2::Preprocessor { 55class IndexUpdater : public Akonadi2::Preprocessor {
57public: 56public:
58 IndexUpdater(const QByteArray &index, const QByteArray &type) 57 IndexUpdater(const QByteArray &index, const QByteArray &type)
@@ -64,21 +63,17 @@ public:
64 63
65 void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE 64 void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
66 { 65 {
67 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
68 add(newEntity.getProperty("remoteId"), uid, transaction); 66 add(newEntity.getProperty("remoteId"), uid, transaction);
69 } 67 }
70 68
71 void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE 69 void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
72 { 70 {
73 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
74 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
75 remove(oldEntity.getProperty("remoteId"), uid, transaction); 71 remove(oldEntity.getProperty("remoteId"), uid, transaction);
76 add(newEntity.getProperty("remoteId"), uid, transaction); 72 add(newEntity.getProperty("remoteId"), uid, transaction);
77 } 73 }
78 74
79 void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE 75 void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
80 { 76 {
81 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
82 remove(oldEntity.getProperty("remoteId"), uid, transaction); 77 remove(oldEntity.getProperty("remoteId"), uid, transaction);
83 } 78 }
84 79
@@ -92,6 +87,7 @@ private:
92 87
93 void remove(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction) 88 void remove(const QVariant &value, const QByteArray &uid, Akonadi2::Storage::Transaction &transaction)
94 { 89 {
90 //TODO hide notfound error
95 Index(mIndexIdentifier, transaction).remove(value.toByteArray(), uid); 91 Index(mIndexIdentifier, transaction).remove(value.toByteArray(), uid);
96 } 92 }
97 93
@@ -99,26 +95,49 @@ private:
99 QByteArray mBufferType; 95 QByteArray mBufferType;
100}; 96};
101 97
98template<typename DomainType>
99class DefaultIndexUpdater : public Akonadi2::Preprocessor {
100public:
101 void newEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
102 {
103 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
104 }
105
106 void modifiedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, const Akonadi2::ApplicationDomain::BufferAdaptor &newEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
107 {
108 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
109 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::index(uid, newEntity, transaction);
110 }
111
112 void deletedEntity(const QByteArray &uid, qint64 revision, const Akonadi2::ApplicationDomain::BufferAdaptor &oldEntity, Akonadi2::Storage::Transaction &transaction) Q_DECL_OVERRIDE
113 {
114 Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::removeIndex(uid, oldEntity, transaction);
115 }
116};
117
102DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) 118DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline)
103 : Akonadi2::GenericResource(instanceIdentifier, pipeline) 119 : Akonadi2::GenericResource(instanceIdentifier, pipeline)
104{ 120{
105 { 121 {
106 auto eventFactory = QSharedPointer<DummyEventAdaptorFactory>::create(); 122 QVector<Akonadi2::Preprocessor*> eventPreprocessors;
107 auto eventIndexer = new IndexUpdater<Akonadi2::ApplicationDomain::Event>("event.index.rid", ENTITY_TYPE_EVENT); 123 eventPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Event>;
108 mPipeline->setPreprocessors(ENTITY_TYPE_EVENT, QVector<Akonadi2::Preprocessor*>() << eventIndexer); 124 eventPreprocessors << new IndexUpdater("event.index.rid", ENTITY_TYPE_EVENT);
109 mPipeline->setAdaptorFactory(ENTITY_TYPE_EVENT, eventFactory); 125 mPipeline->setPreprocessors(ENTITY_TYPE_EVENT, eventPreprocessors);
126 mPipeline->setAdaptorFactory(ENTITY_TYPE_EVENT, QSharedPointer<DummyEventAdaptorFactory>::create());
110 } 127 }
111 { 128 {
112 auto mailFactory = QSharedPointer<DummyMailAdaptorFactory>::create(); 129 QVector<Akonadi2::Preprocessor*> mailPreprocessors;
113 auto mailIndexer = new IndexUpdater<Akonadi2::ApplicationDomain::Mail>("mail.index.rid", ENTITY_TYPE_MAIL); 130 mailPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Mail>;
114 mPipeline->setPreprocessors(ENTITY_TYPE_MAIL, QVector<Akonadi2::Preprocessor*>() << mailIndexer); 131 mailPreprocessors << new IndexUpdater("mail.index.rid", ENTITY_TYPE_MAIL);
115 mPipeline->setAdaptorFactory(ENTITY_TYPE_MAIL, mailFactory); 132 mPipeline->setPreprocessors(ENTITY_TYPE_MAIL, mailPreprocessors);
133 mPipeline->setAdaptorFactory(ENTITY_TYPE_MAIL, QSharedPointer<DummyMailAdaptorFactory>::create());
116 } 134 }
117 { 135 {
118 auto folderFactory = QSharedPointer<DummyFolderAdaptorFactory>::create(); 136 QVector<Akonadi2::Preprocessor*> folderPreprocessors;
119 auto folderIndexer = new IndexUpdater<Akonadi2::ApplicationDomain::Folder>("folder.index.rid", ENTITY_TYPE_FOLDER); 137 folderPreprocessors << new DefaultIndexUpdater<Akonadi2::ApplicationDomain::Folder>;
120 mPipeline->setPreprocessors(ENTITY_TYPE_FOLDER, QVector<Akonadi2::Preprocessor*>() << folderIndexer); 138 folderPreprocessors << new IndexUpdater("folder.index.rid", ENTITY_TYPE_FOLDER);
121 mPipeline->setAdaptorFactory(ENTITY_TYPE_FOLDER, folderFactory); 139 mPipeline->setPreprocessors(ENTITY_TYPE_FOLDER, folderPreprocessors);
140 mPipeline->setAdaptorFactory(ENTITY_TYPE_FOLDER, QSharedPointer<DummyFolderAdaptorFactory>::create());
122 } 141 }
123} 142}
124 143