1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/*
* This file is part of the KDE KIO-extras Project
* SPDX-FileCopyrightText: 2016 Anthony Fieroni <bvbfan@abv.bg>
*
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*
*/
#include "filenamesearchmodule.h"
#include <QDBusConnection>
#include <QUrl>
#include <KPluginFactory>
FileNameSearchModule::FileNameSearchModule(QObject* parent, const QVariantList&)
: KDEDModule(parent)
, m_dirNotify(QString(), QString(), QDBusConnection::sessionBus())
{
connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::enteredDirectory,
this, &FileNameSearchModule::registerSearchUrl);
connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::leftDirectory,
this, &FileNameSearchModule::unregisterSearchUrl);
connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesAdded,
this, &FileNameSearchModule::slotFilesAdded);
connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesChanged,
this, &FileNameSearchModule::slotFilesChanged);
connect(&m_dirNotify, &OrgKdeKDirNotifyInterface::FilesRemoved,
this, &FileNameSearchModule::slotFilesRemoved);
}
void FileNameSearchModule::registerSearchUrl(const QString &urlString)
{
if (urlString.startsWith(QStringLiteral("filenamesearch"))) {
m_searchUrls << QUrl(urlString);
}
}
void FileNameSearchModule::unregisterSearchUrl(const QString &urlString)
{
if (urlString.startsWith(QStringLiteral("filenamesearch"))) {
m_searchUrls.removeAll(QUrl(urlString));
}
}
void FileNameSearchModule::slotFilesAdded(const QString &urlString)
{
const QUrl url(urlString);
if (!url.isLocalFile()) {
return;
}
const QString urlPath = url.path();
for (const QUrl &dirUrl : qAsConst(m_searchUrls)) {
if (urlPath.startsWith(dirUrl.path())) {
org::kde::KDirNotify::emitFilesAdded(dirUrl);
}
}
}
void FileNameSearchModule::slotFilesChanged(const QStringList &files)
{
QList<QUrl> fileList;
for (const QString &file : files) {
QUrl url(file);
if (!url.isLocalFile()) {
continue;
}
const QString urlPath = url.path();
for (const QUrl &dirUrl : qAsConst(m_searchUrls)) {
if (urlPath.startsWith(dirUrl.path())) {
url.setScheme(QStringLiteral("filenamesearch"));
fileList << url;
}
}
}
if (!fileList.isEmpty()) {
org::kde::KDirNotify::emitFilesChanged(fileList);
}
}
void FileNameSearchModule::slotFilesRemoved(const QStringList &files)
{
QList<QUrl> fileList;
for (const QString &file : files) {
QUrl url(file);
if (!url.isLocalFile()) {
continue;
}
const QString urlPath = url.path();
for (const QUrl &dirUrl : qAsConst(m_searchUrls)) {
if (urlPath.startsWith(dirUrl.path())) {
url.setScheme(QStringLiteral("filenamesearch"));
fileList << url;
}
}
}
if (!fileList.isEmpty()) {
org::kde::KDirNotify::emitFilesRemoved(fileList);
}
}
K_PLUGIN_CLASS_WITH_JSON(FileNameSearchModule, "filenamesearchmodule.json")
#include "filenamesearchmodule.moc"
|