diff --git a/src/tools/balooctl/monitorcommand.cpp b/src/tools/balooctl/monitorcommand.cpp index 72b4d93e..08bbb08c 100644 --- a/src/tools/balooctl/monitorcommand.cpp +++ b/src/tools/balooctl/monitorcommand.cpp @@ -1,97 +1,98 @@ /* * This file is part of the KDE Baloo Project * Copyright (C) 2015 Pinak Ahuja * Copyright (C) 2015 Vishesh Handa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #include "monitorcommand.h" #include #include using namespace Baloo; MonitorCommand::MonitorCommand(QObject *parent) : QObject(parent) , m_out(stdout) , m_err(stderr) , m_dbusInterface(nullptr) + , m_dbusServiceWatcher(nullptr) { - QString waitMessage(i18nc("Application", "Waiting for %1 to start", "Baloo")); - QString runningMessage(i18nc("Application", "%1 is running", "Baloo")); - QString diedMessage(i18nc("Application", "%1 died", "Baloo")); - QString killMessage(i18n("Press ctrl+c to exit monitor")); + m_dbusServiceWatcher = new QDBusServiceWatcher( + QStringLiteral("org.kde.baloo"), QDBusConnection::sessionBus() + ); + connect(m_dbusServiceWatcher, &QDBusServiceWatcher::serviceRegistered, + this, &MonitorCommand::balooIsAvailable); + connect(m_dbusServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, + this, &MonitorCommand::balooIsNotAvailable); + m_dbusInterface = new org::kde::baloo::fileindexer(QStringLiteral("org.kde.baloo"), QStringLiteral("/fileindexer"), QDBusConnection::sessionBus(), this ); - - m_err << killMessage << endl; - if (!m_dbusInterface->isValid()) { - m_err << waitMessage << endl; - } - while (!m_dbusInterface->isValid()) { - QThread::msleep(50); - m_dbusInterface->disconnect(); - delete m_dbusInterface; - m_dbusInterface = new org::kde::baloo::fileindexer(QStringLiteral("org.kde.baloo"), - QStringLiteral("/fileindexer"), - QDBusConnection::sessionBus(), - this - ); - }; - - m_err << runningMessage << endl; - m_dbusInterface->registerMonitor(); connect(m_dbusInterface, &org::kde::baloo::fileindexer::startedIndexingFile, this, &MonitorCommand::startedIndexingFile); connect(m_dbusInterface, &org::kde::baloo::fileindexer::finishedIndexingFile, this, &MonitorCommand::finishedIndexingFile); + + if (m_dbusInterface->isValid()) { + m_err << i18n("Press ctrl+c to stop monitoring") << endl; + balooIsAvailable(); + } else { + balooIsNotAvailable(); + } - auto balooWatcher = new QDBusServiceWatcher(QStringLiteral("org.kde.baloo"), QDBusConnection::sessionBus()); - balooWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration); - connect(balooWatcher, &QDBusServiceWatcher::serviceUnregistered, [this, diedMessage]() { - m_out << diedMessage << endl; - //TODO: Wait again for dbus interface - QCoreApplication::exit(0); - }); + m_dbusServiceWatcher->setWatchMode(QDBusServiceWatcher::WatchForOwnerChange); +} + +void MonitorCommand::balooIsNotAvailable() +{ + m_dbusInterface->unregisterMonitor(); + m_err << i18n("Waiting for file indexer to start") << endl; + m_err << i18n("Press ctrl+c to stop monitoring") << endl; +} + +void MonitorCommand::balooIsAvailable() +{ + m_dbusInterface->registerMonitor(); + m_err << i18n("File indexer is running") << endl; } int MonitorCommand::exec(const QCommandLineParser& parser) { Q_UNUSED(parser); return QCoreApplication::instance()->exec(); } void MonitorCommand::startedIndexingFile(const QString& filePath) { m_currentFile = filePath; m_out << i18nc("currently indexed file", "Indexing: %1", filePath); } void MonitorCommand::finishedIndexingFile(const QString& filePath) { Q_UNUSED(filePath); m_currentFile.clear(); m_out << i18n(": Ok") << endl; } diff --git a/src/tools/balooctl/monitorcommand.h b/src/tools/balooctl/monitorcommand.h index d6350021..8ca05da1 100644 --- a/src/tools/balooctl/monitorcommand.h +++ b/src/tools/balooctl/monitorcommand.h @@ -1,62 +1,65 @@ /* * This file is part of the KDE Baloo Project * Copyright (C) 2015 Pinak Ahuja * Copyright (C) 2015 Vishesh Handa * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #ifndef MONITOR_H #define MONITOR_H #include "command.h" #include "fileindexerinterface.h" #include #include #include namespace Baloo { class MonitorCommand : public QObject, public Command { Q_OBJECT public: explicit MonitorCommand(QObject* parent = nullptr); QString command() Q_DECL_OVERRIDE { return QStringLiteral("monitor"); } QString description() Q_DECL_OVERRIDE { return i18n("CLI interface for monitoring Baloo"); } int exec(const QCommandLineParser& parser) Q_DECL_OVERRIDE; private Q_SLOTS: void startedIndexingFile(const QString& filePath); void finishedIndexingFile(const QString& filePath); + void balooIsAvailable(); + void balooIsNotAvailable(); private: QTextStream m_out; QTextStream m_err; org::kde::baloo::fileindexer* m_dbusInterface; QString m_currentFile; + QDBusServiceWatcher* m_dbusServiceWatcher; }; } #endif // MONITOR_H