File indexing completed on 2024-05-19 11:33:07
0001 /* 0002 SPDX-FileCopyrightText: 2008-2010 Sebastian Trueg <trueg at kde.org> 0003 SPDX-FileCopyrightText: 2012-2014 Vishesh Handa <me@vhanda.in> 0004 SPDX-FileCopyrightText: 2020 Stefan BrĂ¼ns <bruns@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "kio_search.h" 0010 #include "../common/udstools.h" 0011 0012 #include "query.h" 0013 #include "resultiterator.h" 0014 #include <sys/stat.h> 0015 0016 #include <QUrl> 0017 #include <QUrlQuery> 0018 #include <KUser> 0019 #include <QCoreApplication> 0020 #include <KLocalizedString> 0021 0022 using namespace Baloo; 0023 0024 // Pseudo plugin class to embed meta data 0025 class KIOPluginForMetaData : public QObject 0026 { 0027 Q_OBJECT 0028 Q_PLUGIN_METADATA(IID "org.kde.kio.worker.baloosearch" FILE "baloosearch.json") 0029 }; 0030 0031 namespace 0032 { 0033 0034 KIO::UDSEntry statSearchFolder(const QUrl& url) 0035 { 0036 KIO::UDSEntry uds; 0037 uds.reserve(9); 0038 #ifdef Q_OS_WIN 0039 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, _S_IREAD ); 0040 #else 0041 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR); 0042 #endif 0043 uds.fastInsert(KIO::UDSEntry::UDS_USER, KUser().loginName()); 0044 uds.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); 0045 uds.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, QStringLiteral("inode/directory")); 0046 uds.fastInsert(KIO::UDSEntry::UDS_ICON_OVERLAY_NAMES, QStringLiteral("baloo")); 0047 uds.fastInsert(KIO::UDSEntry::UDS_DISPLAY_TYPE, i18n("Search Folder")); 0048 uds.fastInsert(KIO::UDSEntry::UDS_URL, url.url()); 0049 0050 QUrlQuery query(url); 0051 QString title = query.queryItemValue(QStringLiteral("title"), QUrl::FullyDecoded); 0052 if (!title.isEmpty()) { 0053 uds.fastInsert(KIO::UDSEntry::UDS_NAME, title); 0054 uds.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, title); 0055 } 0056 0057 return uds; 0058 } 0059 0060 } 0061 0062 SearchProtocol::SearchProtocol(const QByteArray& poolSocket, const QByteArray& appSocket) 0063 : KIO::WorkerBase("baloosearch", poolSocket, appSocket) 0064 { 0065 } 0066 0067 SearchProtocol::~SearchProtocol() 0068 { 0069 } 0070 0071 KIO::WorkerResult SearchProtocol::listDir(const QUrl& url) 0072 { 0073 Query q = Query::fromSearchUrl(url); 0074 0075 q.setSortingOption(Query::SortNone); 0076 ResultIterator it = q.exec(); 0077 0078 UdsFactory udsf; 0079 0080 while (it.next()) { 0081 KIO::UDSEntry uds = udsf.createUdsEntry(it.filePath()); 0082 if (uds.count()) { 0083 listEntry(uds); 0084 } 0085 } 0086 0087 KIO::UDSEntry uds; 0088 uds.reserve(5); 0089 uds.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral(".")); 0090 uds.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); 0091 uds.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, QStringLiteral("inode/directory")); 0092 #ifdef Q_OS_WIN 0093 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, _S_IREAD ); 0094 #else 0095 uds.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR); 0096 #endif 0097 uds.fastInsert(KIO::UDSEntry::UDS_USER, KUser().loginName()); 0098 listEntry(uds); 0099 0100 return KIO::WorkerResult::pass(); 0101 } 0102 0103 KIO::WorkerResult SearchProtocol::mimetype(const QUrl&) 0104 { 0105 mimeType(QStringLiteral("inode/directory")); 0106 return KIO::WorkerResult::pass(); 0107 } 0108 0109 KIO::WorkerResult SearchProtocol::stat(const QUrl& url) 0110 { 0111 statEntry(statSearchFolder(url)); 0112 return KIO::WorkerResult::pass(); 0113 } 0114 0115 extern "C" 0116 { 0117 Q_DECL_EXPORT int kdemain(int argc, char** argv) 0118 { 0119 QCoreApplication app(argc, argv); 0120 app.setApplicationName(QStringLiteral("kio_baloosearch")); 0121 Baloo::SearchProtocol worker(argv[2], argv[3]); 0122 worker.dispatchLoop(); 0123 return 0; 0124 } 0125 } 0126 0127 #include "kio_search.moc"