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