Add recursive directory

This commit is contained in:
2024-02-02 20:55:58 +01:00
parent 4e952873e3
commit af9187737f
5 changed files with 46 additions and 11 deletions
+25 -9
View File
@@ -1,4 +1,5 @@
#include "imageringlist.h"
#include <functional>
#include <QThreadPool>
#include <QDir>
#include <QSettings>
@@ -124,21 +125,36 @@ ImageRingList::~ImageRingList()
m_thumbPool->waitForDone();
}
bool ImageRingList::setDir(const QString path, const QString &currentFile)
bool ImageRingList::setDir(const QString path, const QString &currentFile, bool recursive)
{
QDir dir(path);
if(dir.exists())
{
QDir::SortFlags sortFlags = m_liveMode ? QDir::Time : m_sort | QDir::IgnoreCase;
if(m_reversed)sortFlags |= QDir::Reversed;
QStringList list = dir.entryList(m_nameFilter, QDir::Files | QDir::Readable, sortFlags);
QStringList absolutePaths;
foreach(const QString &file, list)
std::function<void(const QString&)> scanDir = [&](const QString &path)
{
absolutePaths.append(dir.absoluteFilePath(file));
}
setFiles(absolutePaths, m_liveMode ? list.first() : currentFile);
QDir dir(path);
QDir::SortFlags sortFlags = m_liveMode ? QDir::Time : m_sort | QDir::IgnoreCase;
if(m_reversed)sortFlags |= QDir::Reversed;
if(recursive)
{
QStringList dirs = dir.entryList(QDir::Readable | QDir::Dirs | QDir::NoDotAndDotDot, sortFlags);
for(const QString &subdir : dirs)
scanDir(dir.absoluteFilePath(subdir));
}
QStringList list = dir.entryList(m_nameFilter, QDir::Files | QDir::Readable, sortFlags);
for(const QString &file : list)
{
absolutePaths.append(dir.absoluteFilePath(file));
}
};
scanDir(path);
qDebug() << absolutePaths.size();
setFiles(absolutePaths, m_liveMode ? absolutePaths.first() : currentFile);
m_fileSystemWatcher.removePaths(m_fileSystemWatcher.directories());
m_fileSystemWatcher.addPath(path);
@@ -151,7 +167,7 @@ void ImageRingList::setFile(const QString &file)
{
QFileInfo info(file);
if(info.isDir())
setDir(file);
setDir(file, QString(), true);
else
setDir(info.absolutePath(), file);
}