diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -56,6 +56,10 @@ baloo/baloolistener.cpp ) + qt5_add_dbus_interface(elisaLib_SOURCES + ${BALOO_DBUS_INTERFACES_DIR}/org.kde.baloo.main.xml + baloo/main) + qt5_add_dbus_interface(elisaLib_SOURCES ${BALOO_DBUS_INTERFACES_DIR}/org.kde.baloo.fileindexer.xml baloo/fileindexer) diff --git a/src/baloo/localbaloofilelisting.h b/src/baloo/localbaloofilelisting.h --- a/src/baloo/localbaloofilelisting.h +++ b/src/baloo/localbaloofilelisting.h @@ -67,6 +67,8 @@ void registeredToBaloo(QDBusPendingCallWatcher *watcher); + void registeredToBalooWatcher(QDBusPendingCallWatcher *watcher); + private: void registerToBaloo(); diff --git a/src/baloo/localbaloofilelisting.cpp b/src/baloo/localbaloofilelisting.cpp --- a/src/baloo/localbaloofilelisting.cpp +++ b/src/baloo/localbaloofilelisting.cpp @@ -24,6 +24,7 @@ #include "baloo/scheduler.h" #include "baloo/fileindexer.h" +#include "baloo/main.h" #include "baloowatcherapplicationadaptor.h" @@ -65,17 +66,23 @@ QDBusServiceWatcher mServiceWatcher; + QScopedPointer mBalooMainInterface; + QScopedPointer mBalooIndexer; QScopedPointer mBalooScheduler; + BalooWatcherApplicationAdaptor *mDbusAdaptor = nullptr; + QAtomicInt mStopRequest = 0; - BalooWatcherApplicationAdaptor *mDbusAdaptor = nullptr; + bool mIsRegisteredToBaloo = false; - bool mIsRegistered = false; + bool mIsRegisteringToBaloo = false; - bool mIsRegistering = false; + bool mIsRegisteredToBalooWatcher = false; + + bool mIsRegisteringToBalooWatcher = false; }; @@ -142,30 +149,68 @@ QDBusPendingReply<> reply = *watcher; if (reply.isError()) { - qDebug() << "LocalBalooFileListing::executeInit" << reply.error().name() << reply.error().message(); - d->mIsRegistered = false; + qDebug() << "LocalBalooFileListing::registeredToBaloo" << reply.error().name() << reply.error().message(); + d->mIsRegisteredToBaloo = false; + } else { + d->mIsRegisteredToBaloo = true; + + if (d->mIsRegisteredToBaloo && d->mIsRegisteredToBalooWatcher) { + triggerRefreshOfContent(); + } + } + + d->mIsRegisteringToBaloo = false; + + watcher->deleteLater(); +} + +void LocalBalooFileListing::registeredToBalooWatcher(QDBusPendingCallWatcher *watcher) +{ + qDebug() << "LocalBalooFileListing::registeredToBalooWatcher"; + + if (!watcher) { + return; + } + + QDBusPendingReply<> reply = *watcher; + if (reply.isError()) { + qDebug() << "LocalBalooFileListing::registeredToBalooWatcher" << reply.error().name() << reply.error().message(); + d->mIsRegisteredToBalooWatcher = false; } else { - d->mIsRegistered = true; + d->mIsRegisteredToBalooWatcher = true; + + if (d->mIsRegisteredToBaloo && d->mIsRegisteredToBalooWatcher) { + triggerRefreshOfContent(); + } } - d->mIsRegistering = false; + d->mIsRegisteringToBalooWatcher = false; watcher->deleteLater(); } void LocalBalooFileListing::registerToBaloo() { - if (d->mIsRegistering) { + if (d->mIsRegisteringToBaloo || d->mIsRegisteringToBalooWatcher) { qDebug() << "LocalBalooFileListing::registerToBaloo" << "already registering"; return; } qDebug() << "LocalBalooFileListing::registerToBaloo"; - d->mIsRegistering = true; + d->mIsRegisteringToBaloo = true; + d->mIsRegisteringToBalooWatcher = true; auto sessionBus = QDBusConnection::sessionBus(); + d->mBalooMainInterface.reset(new org::kde::baloo::main(QStringLiteral("org.kde.baloo"), QStringLiteral("/"), + sessionBus, this)); + + if (!d->mBalooMainInterface->isValid()) { + qDebug() << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/main interface"; + return; + } + d->mBalooIndexer.reset(new org::kde::baloo::fileindexer(QStringLiteral("org.kde.baloo"), QStringLiteral("/fileindexer"), sessionBus, this)); @@ -199,20 +244,13 @@ registeredToBaloo(pendingCallWatcher); } - QDBusMessage registerBalooWatcher = QDBusMessage::createMethodCall(QStringLiteral("org.kde.baloo"), - QStringLiteral("/"), - QStringLiteral("org.kde.baloo.main"), - QStringLiteral("registerBalooWatcher")); - - registerBalooWatcher.setArguments({QStringLiteral("org.mpris.MediaPlayer2.elisa/org/kde/BalooWatcherApplication")}); - - auto pendingCall = sessionBus.asyncCall(registerBalooWatcher); + auto pendingCall = d->mBalooMainInterface->registerBalooWatcher(QStringLiteral("org.mpris.MediaPlayer2.elisa/org/kde/BalooWatcherApplication")); qDebug() << "LocalBalooFileListing::registerToBaloo" << "call registerBalooWatcher"; auto pendingCallWatcher2 = new QDBusPendingCallWatcher(pendingCall); - connect(pendingCallWatcher2, &QDBusPendingCallWatcher::finished, this, &LocalBalooFileListing::registeredToBaloo); + connect(pendingCallWatcher2, &QDBusPendingCallWatcher::finished, this, &LocalBalooFileListing::registeredToBalooWatcher); if (pendingCallWatcher2->isFinished()) { - registeredToBaloo(pendingCallWatcher2); + registeredToBalooWatcher(pendingCallWatcher2); } } @@ -229,7 +267,8 @@ qDebug() << "LocalBalooFileListing::serviceOwnerChanged" << serviceName << oldOwner << newOwner; if (serviceName == QStringLiteral("org.kde.baloo") && !newOwner.isEmpty()) { - d->mIsRegistered = false; + d->mIsRegisteredToBaloo = false; + d->mIsRegisteredToBalooWatcher = false; registerToBaloo(); } } @@ -248,7 +287,8 @@ qDebug() << "LocalBalooFileListing::serviceUnregistered" << serviceName; if (serviceName == QStringLiteral("org.kde.baloo")) { - d->mIsRegistered = false; + d->mIsRegisteredToBaloo = false; + d->mIsRegisteredToBalooWatcher = false; } }