1/*
2 This file is part of the KDE Baloo Project
3 SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7
8#include "baloosearchmodule.h"
9
10#include <QDBusConnection>
11#include <QUrl>
12#include <QTimer>
13
14#include <kpluginfactory.h>
15
16namespace
17{
18 inline bool isSearchUrl(const QUrl& url)
19 {
20 return url.scheme() == QLatin1String("baloosearch") ||
21 url.scheme() == QLatin1String("timeline") ||
22 url.scheme() == QLatin1String("tags");
23 }
24}
25
26using namespace Baloo;
27
28SearchModule::SearchModule(QObject* parent, const QList<QVariant>&)
29 : KDEDModule(parent)
30 , m_dirNotify(nullptr)
31{
32 QTimer::singleShot(msec: 0, receiver: this, SLOT(init()));
33}
34
35void SearchModule::init()
36{
37 m_dirNotify = new org::kde::KDirNotify(QString(), QString(),
38 QDBusConnection::sessionBus(), this);
39 connect(sender: m_dirNotify, signal: &OrgKdeKDirNotifyInterface::enteredDirectory,
40 context: this, slot: &SearchModule::registerSearchUrl);
41 connect(sender: m_dirNotify, signal: &OrgKdeKDirNotifyInterface::leftDirectory,
42 context: this, slot: &SearchModule::unregisterSearchUrl);
43
44 // FIXME: Listen to changes from Baloo!!
45 // Listen to dbChanged
46 QDBusConnection con = QDBusConnection::sessionBus();
47 con.connect(service: QString(), QStringLiteral("/files"), QStringLiteral("org.kde.baloo"),
48 QStringLiteral("updated"), receiver: this, SLOT(slotBalooFileDbChanged()));
49 con.connect(service: QString(), QStringLiteral("/files"), QStringLiteral("org.kde"),
50 QStringLiteral("changed"), receiver: this, SLOT(slotFileMetaDataChanged(QStringList)));
51}
52
53void SearchModule::registerSearchUrl(const QString& urlString)
54{
55 QUrl url(urlString);
56 if (isSearchUrl(url)) {
57 m_searchUrls << url;
58 }
59}
60
61void SearchModule::unregisterSearchUrl(const QString& urlString)
62{
63 QUrl url(urlString);
64 m_searchUrls.removeAll(t: url);
65}
66
67void SearchModule::slotBalooFileDbChanged()
68{
69 for (const QUrl& dirUrl : std::as_const(t&: m_searchUrls)) {
70 org::kde::KDirNotify::emitFilesAdded(directory: dirUrl);
71 }
72}
73
74void SearchModule::slotFileMetaDataChanged(const QStringList& list)
75{
76 QList<QUrl> localFileUrls;
77 localFileUrls.reserve(asize: list.size());
78 for (const QString& path : list) {
79 localFileUrls << QUrl::fromLocalFile(localfile: path);
80 }
81 org::kde::KDirNotify::emitFilesChanged(fileList: localFileUrls);
82 slotBalooFileDbChanged();
83}
84
85K_PLUGIN_CLASS_WITH_JSON(SearchModule, "baloosearchmodule.json")
86
87#include "baloosearchmodule.moc"
88#include "moc_baloosearchmodule.cpp"
89

source code of baloo/src/kioworkers/kded/baloosearchmodule.cpp