File indexing completed on 2024-04-28 04:57:45
0001 /* 0002 * This file is part of the KDE KIO-extras Project 0003 * SPDX-FileCopyrightText: 2016 Anthony Fieroni <bvbfan@abv.bg> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 * 0007 */ 0008 0009 #include "filenamesearchmodule.h" 0010 0011 #include <QDBusConnection> 0012 #include <QUrl> 0013 0014 #include <KPluginFactory> 0015 0016 FileNameSearchModule::FileNameSearchModule(QObject *parent, const QVariantList &) 0017 : KDEDModule(parent) 0018 , m_dirNotify(QString(), QString(), QDBusConnection::sessionBus()) 0019 { 0020 connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::enteredDirectory, this, &FileNameSearchModule::registerSearchUrl); 0021 connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::leftDirectory, this, &FileNameSearchModule::unregisterSearchUrl); 0022 connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesAdded, this, &FileNameSearchModule::slotFilesAdded); 0023 connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesChanged, this, &FileNameSearchModule::slotFilesChanged); 0024 connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesRemoved, this, &FileNameSearchModule::slotFilesRemoved); 0025 } 0026 0027 void FileNameSearchModule::registerSearchUrl(const QString &urlString) 0028 { 0029 if (urlString.startsWith(QStringLiteral("filenamesearch"))) { 0030 m_searchUrls << QUrl(urlString); 0031 } 0032 } 0033 0034 void FileNameSearchModule::unregisterSearchUrl(const QString &urlString) 0035 { 0036 if (urlString.startsWith(QStringLiteral("filenamesearch"))) { 0037 m_searchUrls.removeAll(QUrl(urlString)); 0038 } 0039 } 0040 0041 void FileNameSearchModule::slotFilesAdded(const QString &urlString) 0042 { 0043 const QUrl url(urlString); 0044 if (!url.isLocalFile()) { 0045 return; 0046 } 0047 const QString urlPath = url.path(); 0048 for (const QUrl &dirUrl : qAsConst(m_searchUrls)) { 0049 if (urlPath.startsWith(dirUrl.path())) { 0050 org::kde::KDirNotify::emitFilesAdded(dirUrl); 0051 } 0052 } 0053 } 0054 0055 void FileNameSearchModule::slotFilesChanged(const QStringList &files) 0056 { 0057 QList<QUrl> fileList; 0058 for (const QString &file : files) { 0059 QUrl url(file); 0060 if (!url.isLocalFile()) { 0061 continue; 0062 } 0063 const QString urlPath = url.path(); 0064 for (const QUrl &dirUrl : qAsConst(m_searchUrls)) { 0065 if (urlPath.startsWith(dirUrl.path())) { 0066 url.setScheme(QStringLiteral("filenamesearch")); 0067 fileList << url; 0068 } 0069 } 0070 } 0071 if (!fileList.isEmpty()) { 0072 org::kde::KDirNotify::emitFilesChanged(fileList); 0073 } 0074 } 0075 0076 void FileNameSearchModule::slotFilesRemoved(const QStringList &files) 0077 { 0078 QList<QUrl> fileList; 0079 for (const QString &file : files) { 0080 QUrl url(file); 0081 if (!url.isLocalFile()) { 0082 continue; 0083 } 0084 const QString urlPath = url.path(); 0085 for (const QUrl &dirUrl : qAsConst(m_searchUrls)) { 0086 if (urlPath.startsWith(dirUrl.path())) { 0087 url.setScheme(QStringLiteral("filenamesearch")); 0088 fileList << url; 0089 } 0090 } 0091 } 0092 if (!fileList.isEmpty()) { 0093 org::kde::KDirNotify::emitFilesRemoved(fileList); 0094 } 0095 } 0096 0097 K_PLUGIN_CLASS_WITH_JSON(FileNameSearchModule, "filenamesearchmodule.json") 0098 0099 #include "filenamesearchmodule.moc" 0100 #include "moc_filenamesearchmodule.cpp"