diff --git a/src/blackmisc/directoryutils.cpp b/src/blackmisc/directoryutils.cpp index 90605396e..9c516de55 100644 --- a/src/blackmisc/directoryutils.cpp +++ b/src/blackmisc/directoryutils.cpp @@ -434,6 +434,23 @@ namespace BlackMisc return dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); } + bool CDirectoryUtils::containsFileInDir(const QString &dir, const QString &filter, bool recursively) + { + QDir directory(dir); + if (!directory.exists()) { return false; } + + const QStringList nameFilter({ filter }); + if (!directory.entryInfoList(nameFilter, QDir::Files | QDir::NoDot | QDir::NoDotDot).isEmpty()) { return true; } + + if (!recursively) { return false; } + const QStringList subDirs = CDirectoryUtils::getSubDirectories(dir); + for (const QString &subDir : subDirs) + { + if (CDirectoryUtils::containsFileInDir(subDir, filter, recursively)) { return true; } + } + return false; + } + QStringList CDirectoryUtils::verifyRuntimeDirectoriesAndFiles() { QStringList failed; diff --git a/src/blackmisc/directoryutils.h b/src/blackmisc/directoryutils.h index f95df2714..304fdaf10 100644 --- a/src/blackmisc/directoryutils.h +++ b/src/blackmisc/directoryutils.h @@ -157,6 +157,9 @@ namespace BlackMisc //! All sub directories of given dir static QStringList getSubDirectories(const QString &rootDir); + //! Any file with filter like "*.txt" + static bool containsFileInDir(const QString &dir, const QString &filter, bool recursively); + //! Check if the (most important) runtime directories are available static QStringList verifyRuntimeDirectoriesAndFiles(); diff --git a/src/blackmisc/stringutils.cpp b/src/blackmisc/stringutils.cpp index 098389234..edeab2b69 100644 --- a/src/blackmisc/stringutils.cpp +++ b/src/blackmisc/stringutils.cpp @@ -454,6 +454,16 @@ namespace BlackMisc return candidate; } + bool containsAny(const QString &testString, const QStringList &any, Qt::CaseSensitivity cs) + { + if (testString.isEmpty() || any.isEmpty()) { return false; } + for (const QString &a : any) + { + if (testString.contains(a, cs)) { return true; } + } + return false; + } + } // ns //! \endcond diff --git a/src/blackmisc/stringutils.h b/src/blackmisc/stringutils.h index 3c4876839..be0f02405 100644 --- a/src/blackmisc/stringutils.h +++ b/src/blackmisc/stringutils.h @@ -295,6 +295,9 @@ namespace BlackMisc //! Default string if string is empty BLACKMISC_EXPORT const QString &defaultIfEmpty(const QString &candidate, const QString &defaultIfEmpty); + //! Contains any string of the list? + BLACKMISC_EXPORT bool containsAny(const QString &testString, const QStringList &any, Qt::CaseSensitivity cs); + namespace Mixin { /*!