Baloo

kio_search.cpp
1/*
2 SPDX-FileCopyrightText: 2008-2010 Sebastian Trueg <trueg at kde.org>
3 SPDX-FileCopyrightText: 2012-2014 Vishesh Handa <me@vhanda.in>
4 SPDX-FileCopyrightText: 2020 Stefan BrĂ¼ns <bruns@kde.org>
5
6 SPDX-License-Identifier: GPL-2.0-or-later
7*/
8
9#include "kio_search.h"
10#include "../common/udstools.h"
11
12#include "query.h"
13#include "resultiterator.h"
14#include <sys/stat.h>
15
16#include <KLocalizedString>
17#include <KUser>
18#include <QCoreApplication>
19#include <QFileInfo>
20#include <QUrl>
21#include <QUrlQuery>
22
23using namespace Baloo;
24
25// Pseudo plugin class to embed meta data
26class KIOPluginForMetaData : public QObject
27{
29 Q_PLUGIN_METADATA(IID "org.kde.kio.worker.baloosearch" FILE "baloosearch.json")
30};
31
32namespace
33{
34
35KIO::UDSEntry statSearchFolder(const QUrl& url)
36{
37 KIO::UDSEntry uds;
38 uds.reserve(9);
39#ifdef Q_OS_WIN
41#else
42 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR);
43#endif
44 uds.fastInsert(KIO::UDSEntry::UDS_USER, KUser().loginName());
46 uds.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, QStringLiteral("inode/directory"));
47 uds.fastInsert(KIO::UDSEntry::UDS_ICON_OVERLAY_NAMES, QStringLiteral("baloo"));
48 uds.fastInsert(KIO::UDSEntry::UDS_DISPLAY_TYPE, i18n("Search Folder"));
50
51 QUrlQuery query(url);
52 QString title = query.queryItemValue(QStringLiteral("title"), QUrl::FullyDecoded);
53 if (!title.isEmpty()) {
56 }
57
58 return uds;
59}
60
61}
62
63SearchProtocol::SearchProtocol(const QByteArray& poolSocket, const QByteArray& appSocket)
64 : KIO::WorkerBase("baloosearch", poolSocket, appSocket)
65{
66}
67
68SearchProtocol::~SearchProtocol()
69{
70}
71
72KIO::WorkerResult SearchProtocol::listDir(const QUrl& url)
73{
74 Query q = Query::fromSearchUrl(url);
75
76 // Canonicalise the search base directory
77 const QString folder = q.includeFolder();
78 if (!folder.isEmpty()) {
79 const QString canonicalPath = QFileInfo(folder).canonicalFilePath();
80 if (!canonicalPath.isEmpty()) {
81 q.setIncludeFolder(canonicalPath);
82 }
83 }
84
85 q.setSortingOption(Query::SortNone);
86 ResultIterator it = q.exec();
87
88 UdsFactory udsf;
89
90 while (it.next()) {
91 KIO::UDSEntry uds = udsf.createUdsEntry(it.filePath());
92 if (uds.count()) {
93 listEntry(uds);
94 }
95 }
96
97 KIO::UDSEntry uds;
98 uds.reserve(5);
99 uds.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral("."));
101 uds.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, QStringLiteral("inode/directory"));
102#ifdef Q_OS_WIN
104#else
105 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR);
106#endif
107 uds.fastInsert(KIO::UDSEntry::UDS_USER, KUser().loginName());
108 listEntry(uds);
109
111}
112
113KIO::WorkerResult SearchProtocol::mimetype(const QUrl&)
114{
115 mimeType(QStringLiteral("inode/directory"));
117}
118
119KIO::WorkerResult SearchProtocol::stat(const QUrl& url)
120{
121 statEntry(statSearchFolder(url));
123}
124
125extern "C"
126{
127 Q_DECL_EXPORT int kdemain(int argc, char** argv)
128 {
129 QCoreApplication app(argc, argv);
130 app.setApplicationName(QStringLiteral("kio_baloosearch"));
131 Baloo::SearchProtocol worker(argv[2], argv[3]);
132 worker.dispatchLoop();
133 return 0;
134 }
135}
136
137#include "kio_search.moc"
@ SortNone
The results are returned in the most efficient order.
Definition query.h:109
void setIncludeFolder(const QString &folder)
Only files in this folder will be returned.
Definition query.cpp:151
void reserve(int size)
void fastInsert(uint field, const QString &value)
int count() const
void statEntry(const UDSEntry &_entry)
void listEntry(const UDSEntry &entry)
void mimeType(const QString &_type)
static WorkerResult pass()
QString i18n(const char *text, const TYPE &arg...)
Implements storage for docIds without any associated data Instantiated for:
Definition coding.cpp:11
KSERVICE_EXPORT KService::List query(FilterFunc filterFunc)
Q_OBJECTQ_OBJECT
bool isEmpty() const const
FullyDecoded
QString url(FormattingOptions options) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri May 2 2025 12:04:18 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.