1/*
2 This file is part of the KDE Baloo Project
3 SPDX-FileCopyrightText: 2015 Pinak Ahuja <pinak.ahuja@gmail.com>
4 SPDX-FileCopyrightText: 2015 Vishesh Handa <vhanda@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7*/
8
9#include "monitorcommand.h"
10#include "indexerstate.h"
11
12#include <QDBusConnection>
13#include <QDBusServiceWatcher>
14
15using namespace Baloo;
16
17MonitorCommand::MonitorCommand(QObject *parent)
18 : QObject(parent)
19 , m_out(stdout)
20 , m_err(stderr)
21 , m_indexerDBusInterface(nullptr)
22 , m_schedulerDBusInterface(nullptr)
23 , m_dbusServiceWatcher(nullptr)
24
25{
26 m_dbusServiceWatcher = new QDBusServiceWatcher(
27 QStringLiteral("org.kde.baloo"), QDBusConnection::sessionBus(),
28 QDBusServiceWatcher::WatchForOwnerChange, this
29 );
30 connect(sender: m_dbusServiceWatcher, signal: &QDBusServiceWatcher::serviceRegistered,
31 context: this, slot: &MonitorCommand::balooIsAvailable);
32 connect(sender: m_dbusServiceWatcher, signal: &QDBusServiceWatcher::serviceUnregistered,
33 context: this, slot: &MonitorCommand::balooIsNotAvailable);
34
35 m_indexerDBusInterface = new org::kde::baloo::fileindexer(QStringLiteral("org.kde.baloo"),
36 QStringLiteral("/fileindexer"),
37 QDBusConnection::sessionBus(),
38 this
39 );
40 connect(sender: m_indexerDBusInterface, signal: &org::kde::baloo::fileindexer::startedIndexingFile,
41 context: this, slot: &MonitorCommand::startedIndexingFile);
42 connect(sender: m_indexerDBusInterface, signal: &org::kde::baloo::fileindexer::finishedIndexingFile,
43 context: this, slot: &MonitorCommand::finishedIndexingFile);
44
45 m_schedulerDBusInterface = new org::kde::baloo::scheduler(QStringLiteral("org.kde.baloo"),
46 QStringLiteral("/scheduler"),
47 QDBusConnection::sessionBus(),
48 this
49 );
50 connect(sender: m_schedulerDBusInterface, signal: &org::kde::baloo::scheduler::stateChanged,
51 context: this, slot: &MonitorCommand::stateChanged);
52
53 if (m_indexerDBusInterface->isValid() && m_schedulerDBusInterface->isValid()) {
54 m_err << i18n("Press ctrl+c to stop monitoring\n");
55 m_err.flush();
56 balooIsAvailable();
57 stateChanged(state: m_schedulerDBusInterface->state());
58 const QString currentFile = m_indexerDBusInterface->currentFile();
59 if (!currentFile.isEmpty()) {
60 startedIndexingFile(filePath: currentFile);
61 }
62 } else {
63 balooIsNotAvailable();
64 }
65}
66
67void MonitorCommand::balooIsNotAvailable()
68{
69 m_indexerDBusInterface->unregisterMonitor();
70 m_err << i18n("Waiting for file indexer to start\n");
71 m_err << i18n("Press Ctrl+C to stop monitoring\n");
72 m_err.flush();
73}
74
75void MonitorCommand::balooIsAvailable()
76{
77 m_indexerDBusInterface->registerMonitor();
78 m_err << i18n("File indexer is running\n");
79 m_err.flush();
80}
81
82int MonitorCommand::exec(const QCommandLineParser& parser)
83{
84 Q_UNUSED(parser);
85 return QCoreApplication::instance()->exec();
86}
87
88void MonitorCommand::startedIndexingFile(const QString& filePath)
89{
90 if (!m_currentFile.isEmpty()) {
91 m_out << '\n';
92 }
93 m_currentFile = filePath;
94 m_out << i18nc("currently indexed file", "Indexing: %1", filePath);
95 m_out.flush();
96}
97
98void MonitorCommand::finishedIndexingFile(const QString& filePath)
99{
100 Q_UNUSED(filePath);
101
102 m_currentFile.clear();
103 m_out << i18n(": Ok\n");
104 m_out.flush();
105}
106
107void MonitorCommand::stateChanged(int state)
108{
109 m_out << stateString(state) << '\n';
110 m_out.flush();
111}
112
113#include "moc_monitorcommand.cpp"
114

source code of baloo/src/tools/balooctl/monitorcommand.cpp