summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-07-05 23:40:34 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-07-05 23:40:34 +0200
commit09fba6f07c87aec84c80ce65136f0b7333b0b0bd (patch)
tree4c55c16a69133659058953473ab8571da41b6aff
parent691a11e8865c43a3cadf8e64df0612a81b08bf15 (diff)
downloadsink-09fba6f07c87aec84c80ce65136f0b7333b0b0bd.tar.gz
sink-09fba6f07c87aec84c80ce65136f0b7333b0b0bd.zip
Keep notifier alive for notifications of new resources.
Necessary to get notifications for newly created resources.
-rw-r--r--common/notifier.cpp4
-rw-r--r--tests/notificationtest.cpp28
2 files changed, 32 insertions, 0 deletions
diff --git a/common/notifier.cpp b/common/notifier.cpp
index 1af65e9..1b7cbdb 100644
--- a/common/notifier.cpp
+++ b/common/notifier.cpp
@@ -49,6 +49,7 @@ public:
49 49
50 QList<QSharedPointer<ResourceAccess>> resourceAccess; 50 QList<QSharedPointer<ResourceAccess>> resourceAccess;
51 QList<std::function<void(const Notification &)>> handler; 51 QList<std::function<void(const Notification &)>> handler;
52 QSharedPointer<Sink::ResultEmitter<QSharedPointer<Sink::ApplicationDomain::SinkResource> > > mResourceEmitter;
52 QObject context; 53 QObject context;
53}; 54};
54 55
@@ -91,6 +92,9 @@ Notifier::Notifier(const Sink::Query &resourceQuery) : d(new Sink::Notifier::Pri
91 SinkTraceCtx(resourceCtx) << "Resource query complete"; 92 SinkTraceCtx(resourceCtx) << "Resource query complete";
92 }); 93 });
93 emitter->fetch({}); 94 emitter->fetch({});
95 if (resourceQuery.liveQuery()) {
96 d->mResourceEmitter = emitter;
97 }
94 result.first.exec(); 98 result.first.exec();
95} 99}
96 100
diff --git a/tests/notificationtest.cpp b/tests/notificationtest.cpp
index 3182d8e..2b54c26 100644
--- a/tests/notificationtest.cpp
+++ b/tests/notificationtest.cpp
@@ -135,6 +135,34 @@ private slots:
135 //Modification triggered during sync 135 //Modification triggered during sync
136 QCOMPARE(status.at(2), static_cast<int>(ApplicationDomain::SyncStatus::SyncSuccess)); 136 QCOMPARE(status.at(2), static_cast<int>(ApplicationDomain::SyncStatus::SyncSuccess));
137 } 137 }
138
139 void testNotifier()
140 {
141 QList<int> status;
142 Sink::Notifier notifier{Sink::Query{Sink::Query::LiveQuery}.resourceFilter("sink.dummy.instance2")};
143 notifier.registerHandler([&] (const Sink::Notification &notification) {
144 if (notification.type == Notification::Info) {
145 status << notification.code;
146 }
147 });
148
149 auto query = Query().resourceFilter("sink.dummy.instance2");
150 query.setType<ApplicationDomain::Mail>();
151 query.setFlags(Query::LiveQuery | Query::UpdateStatus);
152
153 auto resource = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::SinkResource>("", "sink.dummy.instance2");
154 resource.setResourceType("sink.dummy");
155 VERIFYEXEC(Store::create(resource));
156
157 VERIFYEXEC(Sink::Store::synchronize(query));
158 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance2"));
159
160 QTRY_COMPARE(status.size(), 2);
161 //Sync progress of item
162 QCOMPARE(status.at(0), static_cast<int>(ApplicationDomain::SyncStatus::SyncInProgress));
163 QCOMPARE(status.at(1), static_cast<int>(ApplicationDomain::SyncStatus::SyncSuccess));
164 }
165
138}; 166};
139 167
140QTEST_MAIN(NotificationTest) 168QTEST_MAIN(NotificationTest)