From 09fba6f07c87aec84c80ce65136f0b7333b0b0bd Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 5 Jul 2017 23:40:34 +0200 Subject: Keep notifier alive for notifications of new resources. Necessary to get notifications for newly created resources. --- common/notifier.cpp | 4 ++++ tests/notificationtest.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) 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: QList> resourceAccess; QList> handler; + QSharedPointer > > mResourceEmitter; QObject context; }; @@ -91,6 +92,9 @@ Notifier::Notifier(const Sink::Query &resourceQuery) : d(new Sink::Notifier::Pri SinkTraceCtx(resourceCtx) << "Resource query complete"; }); emitter->fetch({}); + if (resourceQuery.liveQuery()) { + d->mResourceEmitter = emitter; + } result.first.exec(); } 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: //Modification triggered during sync QCOMPARE(status.at(2), static_cast(ApplicationDomain::SyncStatus::SyncSuccess)); } + + void testNotifier() + { + QList status; + Sink::Notifier notifier{Sink::Query{Sink::Query::LiveQuery}.resourceFilter("sink.dummy.instance2")}; + notifier.registerHandler([&] (const Sink::Notification ¬ification) { + if (notification.type == Notification::Info) { + status << notification.code; + } + }); + + auto query = Query().resourceFilter("sink.dummy.instance2"); + query.setType(); + query.setFlags(Query::LiveQuery | Query::UpdateStatus); + + auto resource = ApplicationDomain::ApplicationDomainType::createEntity("", "sink.dummy.instance2"); + resource.setResourceType("sink.dummy"); + VERIFYEXEC(Store::create(resource)); + + VERIFYEXEC(Sink::Store::synchronize(query)); + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance2")); + + QTRY_COMPARE(status.size(), 2); + //Sync progress of item + QCOMPARE(status.at(0), static_cast(ApplicationDomain::SyncStatus::SyncInProgress)); + QCOMPARE(status.at(1), static_cast(ApplicationDomain::SyncStatus::SyncSuccess)); + } + }; QTEST_MAIN(NotificationTest) -- cgit v1.2.3