1 /*
2 This file is part of the KDE project
3 SPDX-FileCopyrightText: 2007-2010 Sebastian Trueg <trueg@kde.org>
4 SPDX-FileCopyrightText: 2012-2014 Vishesh Handa <me@vhanda.in>
5 SPDX-FileCopyrightText: 2020 Benjamin Port <benjamin.port@enioka.com>
6
7 SPDX-License-Identifier: LGPL-2.0-only
8 */
9
10 #include "kcm.h"
11 #include "fileexcludefilters.h"
12
13 #include <KAboutData>
14 #include <KFormat>
15 #include <KLocalizedString>
16 #include <KPluginFactory>
17 #include <QStandardPaths>
18
19 #include <QDBusConnection>
20 #include <QDBusMessage>
21 #include <QDBusPendingCall>
22 #include <QDir>
23 #include <QProcess>
24 #include <QPushButton>
25
26 #include <Baloo/IndexerConfig>
27 #include <baloo/baloosettings.h>
28 #include <baloodata.h>
29
30 K_PLUGIN_FACTORY_WITH_JSON(KCMColorsFactory, "kcm_baloofile.json", registerPlugin<Baloo::ServerConfigModule>(); registerPlugin<BalooData>();)
31
balooDatabaseLocation()32 static QString balooDatabaseLocation()
33 {
34 // First consult the environment variable, in case the index has been
35 // relocated manually
36 QString location = QString::fromLocal8Bit(qgetenv("BALOO_DB_PATH"));
37 if (location.isEmpty()) {
38 location = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/baloo/index");
39 } else {
40 location.append(QLatin1String("/index"));
41 }
42 return location;
43 }
44
45 using namespace Baloo;
46
ServerConfigModule(QObject * parent,const QVariantList & args)47 ServerConfigModule::ServerConfigModule(QObject *parent, const QVariantList &args)
48 : KQuickAddons::ManagedConfigModule(parent, args)
49 , m_data(new BalooData(this))
50 , m_filteredFolderModel(new FilteredFolderModel(m_data->settings(), this))
51 {
52 qmlRegisterType<FilteredFolderModel>();
53 qmlRegisterType<BalooSettings>();
54
55 KAboutData *about = new KAboutData(QStringLiteral("kcm_baloofile"),
56 i18n("File Search"),
57 QStringLiteral("0.1"),
58 QString(),
59 KAboutLicense::GPL,
60 i18n("Copyright 2007-2010 Sebastian Trüg"));
61
62 about->addAuthor(i18n("Sebastian Trüg"), QString(), QStringLiteral("trueg@kde.org"));
63 about->addAuthor(i18n("Vishesh Handa"), QString(), QStringLiteral("vhanda@kde.org"));
64 about->addAuthor(i18n("Tomaz Canabrava"), QString(), QStringLiteral("tcnaabrava@kde.org"));
65
66 setAboutData(about);
67 setButtons(Help | Apply | Default);
68
69 connect(balooSettings(), &BalooSettings::excludedFoldersChanged, m_filteredFolderModel, &FilteredFolderModel::updateDirectoryList);
70 connect(balooSettings(), &BalooSettings::foldersChanged, m_filteredFolderModel, &FilteredFolderModel::updateDirectoryList);
71 m_filteredFolderModel->updateDirectoryList();
72 }
73
~ServerConfigModule()74 ServerConfigModule::~ServerConfigModule()
75 {
76 }
77
load()78 void ServerConfigModule::load()
79 {
80 ManagedConfigModule::load();
81 }
82
save()83 void ServerConfigModule::save()
84 {
85 ManagedConfigModule::save();
86
87 // Update Baloo config or start Baloo
88 if (balooSettings()->indexingEnabled()) {
89 // Update the baloo_file's config cache - if it not yet running,
90 // the DBus call goes nowhere
91 Baloo::IndexerConfig config;
92 config.refresh();
93
94 // Trying to start baloo when it is already running is fine
95 const QString exe = QStandardPaths::findExecutable(QStringLiteral("baloo_file"));
96 QProcess::startDetached(exe, QStringList());
97 } else {
98 QDBusMessage message =
99 QDBusMessage::createMethodCall(QStringLiteral("org.kde.baloo"), QStringLiteral("/"), QStringLiteral("org.kde.baloo.main"), QStringLiteral("quit"));
100
101 QDBusConnection::sessionBus().asyncCall(message);
102 }
103 }
104
filteredModel() const105 FilteredFolderModel *ServerConfigModule::filteredModel() const
106 {
107 return m_filteredFolderModel;
108 }
109
balooSettings() const110 BalooSettings *ServerConfigModule::balooSettings() const
111 {
112 return m_data->settings();
113 }
114
deleteIndex()115 void ServerConfigModule::deleteIndex()
116 {
117 QFile(balooDatabaseLocation()).remove();
118 }
119
rawIndexFileSize()120 int ServerConfigModule::rawIndexFileSize()
121 {
122 return QFile(balooDatabaseLocation()).size();
123 }
124
prettyIndexFileSize()125 QString ServerConfigModule::prettyIndexFileSize()
126 {
127 return KFormat().formatByteSize(rawIndexFileSize());
128 }
129
130 #include "kcm.moc"
131