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"