diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-11-25 15:42:21 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-11-25 15:42:21 +0100 |
commit | 60b4be31c40e7c4681f5ce462af84dd92872ec5f (patch) | |
tree | 7aefa949b29d72d28b6f34052954c45b7f96d997 /examples/dummyresource/resourcefactory.cpp | |
parent | 89aa339dd91765d67b4606938e60358f41d33884 (diff) | |
download | sink-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.cpp | 53 |
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 | */ |
55 | template<typename DomainType> | ||
56 | class IndexUpdater : public Akonadi2::Preprocessor { | 55 | class IndexUpdater : public Akonadi2::Preprocessor { |
57 | public: | 56 | public: |
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 | ||
98 | template<typename DomainType> | ||
99 | class DefaultIndexUpdater : public Akonadi2::Preprocessor { | ||
100 | public: | ||
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 | |||
102 | DummyResource::DummyResource(const QByteArray &instanceIdentifier, const QSharedPointer<Akonadi2::Pipeline> &pipeline) | 118 | DummyResource::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 | ||