dolphin: use the recursive listing feature of KDirLister

the bits for symlinks will be moved to KIO::ListJob to make applications
like kfind and gwenview also list directory links

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-05-30 14:44:53 +03:00
parent 0883607c14
commit bb5e46748b
2 changed files with 14 additions and 42 deletions

View file

@ -36,8 +36,7 @@ FileNameSearchProtocol::FileNameSearchProtocol( const QByteArray &app ) :
SlaveBase("search", app), SlaveBase("search", app),
m_checkContent(""), m_checkContent(""),
m_checkType(""), m_checkType(""),
m_regExp(0), m_regExp(0)
m_iteratedDirs()
{ {
} }
@ -50,6 +49,15 @@ void FileNameSearchProtocol::listDir(const KUrl& url)
{ {
cleanup(); cleanup();
const KUrl directory = KUrl(url.queryItemValue("url"));
// Don't try to iterate the pseudo filesystem directories of Linux
if (directory.path() == QLatin1String("/dev")
|| directory.path() == QLatin1String("/proc")
|| directory.path() == QLatin1String("/sys")) {
finished();
return;
}
m_checkContent = url.queryItemValue("checkContent"); m_checkContent = url.queryItemValue("checkContent");
m_literal = url.queryItemValue("literal"); m_literal = url.queryItemValue("literal");
@ -66,22 +74,6 @@ void FileNameSearchProtocol::listDir(const KUrl& url)
m_regExp = new QRegExp(search, Qt::CaseInsensitive); m_regExp = new QRegExp(search, Qt::CaseInsensitive);
} }
const QString urlString = url.queryItemValue("url");
searchDirectory(KUrl(urlString));
cleanup();
finished();
}
void FileNameSearchProtocol::searchDirectory(const KUrl& directory)
{
// Don't try to iterate the pseudo filesystem directories of Linux
if (directory.path() == QLatin1String("/dev")
|| directory.path() == QLatin1String("/proc")
|| directory.path() == QLatin1String("/sys")) {
return;
}
// Get all items of the directory // Get all items of the directory
KDirLister *dirLister = new KDirLister(); KDirLister *dirLister = new KDirLister();
dirLister->setAutoUpdate(false); dirLister->setAutoUpdate(false);
@ -90,7 +82,7 @@ void FileNameSearchProtocol::searchDirectory(const KUrl& directory)
QEventLoop eventLoop; QEventLoop eventLoop;
QObject::connect(dirLister, SIGNAL(canceled()), &eventLoop, SLOT(quit())); QObject::connect(dirLister, SIGNAL(canceled()), &eventLoop, SLOT(quit()));
QObject::connect(dirLister, SIGNAL(completed()), &eventLoop, SLOT(quit())); QObject::connect(dirLister, SIGNAL(completed()), &eventLoop, SLOT(quit()));
dirLister->openUrl(directory); dirLister->openUrl(directory, true);
eventLoop.exec(); eventLoop.exec();
// Visualize all items that match the search pattern // Visualize all items that match the search pattern
@ -116,35 +108,19 @@ void FileNameSearchProtocol::searchDirectory(const KUrl& directory)
if (addItem) { if (addItem) {
KIO::UDSEntry entry = item.entry(); KIO::UDSEntry entry = item.entry();
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, item.url().fileName());
entry.insert(KIO::UDSEntry::UDS_URL, item.url().url()); entry.insert(KIO::UDSEntry::UDS_URL, item.url().url());
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, item.mimetype()); entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, item.mimetype());
listEntry(entry, false); listEntry(entry, false);
} }
if (item.isDir()) {
if (item.isLink()) {
// Assure that no endless searching is done in directories that
// have already been iterated.
const KUrl linkDest(item.url(), item.linkDest());
if (!m_iteratedDirs.contains(linkDest.path())) {
pendingDirs.append(linkDest);
}
} else {
pendingDirs.append(item.url());
}
}
} }
listEntry(KIO::UDSEntry(), true); listEntry(KIO::UDSEntry(), true);
m_iteratedDirs.insert(directory.path());
delete dirLister; delete dirLister;
dirLister = 0; dirLister = 0;
// Recursively iterate all sub directories cleanup();
foreach (const KUrl& pendingDir, pendingDirs) { finished();
searchDirectory(pendingDir);
}
} }
bool FileNameSearchProtocol::contentContainsPattern(const KUrl& fileName) const bool FileNameSearchProtocol::contentContainsPattern(const KUrl& fileName) const
@ -191,7 +167,6 @@ void FileNameSearchProtocol::cleanup()
{ {
delete m_regExp; delete m_regExp;
m_regExp = 0; m_regExp = 0;
m_iteratedDirs.clear();
} }
int main( int argc, char **argv ) int main( int argc, char **argv )

View file

@ -45,8 +45,6 @@ public:
void listDir(const KUrl &url) final; void listDir(const KUrl &url) final;
private: private:
void searchDirectory(const KUrl &directory);
/** /**
* @return True, if the pattern m_searchPattern is part of * @return True, if the pattern m_searchPattern is part of
* the file \a fileName. * the file \a fileName.
@ -59,7 +57,6 @@ private:
QString m_literal; QString m_literal;
QString m_checkType; QString m_checkType;
QRegExp* m_regExp; QRegExp* m_regExp;
QSet<QString> m_iteratedDirs;
}; };
#endif #endif