You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

63 lines
1.3 KiB

/*
SPDX-FileCopyrightText: 2007 Tobias Koenig <tokoe@kde.org>
SPDX-FileCopyrightText: 2011 David Palacio <dpalacio@orbitalibre.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "directory.h"
#include <QDir>
#include <QDirIterator>
#include <QFile>
#include <QFileInfo>
#include <memory>
Directory::Directory()
{
}
Directory::~Directory()
{
}
bool Directory::open(const QString &dirName)
{
mDir = dirName;
QFileInfo dirTest(dirName);
return dirTest.isDir() && dirTest.isReadable();
}
QStringList Directory::recurseDir(const QString &dirPath, int curDepth) const
{
QDir dir(dirPath);
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
QStringList fileList;
QDirIterator it(dir);
QFileInfo info;
while (it.hasNext()) {
it.next();
info = it.fileInfo();
if (info.isDir() && curDepth < staticMaxDepth) {
fileList.append(recurseDir(info.filePath(), curDepth + 1));
} else if (info.isFile()) {
fileList.append(info.filePath());
}
}
return fileList;
}
QStringList Directory::list() const
{
return recurseDir(mDir, 0);
}
QIODevice *Directory::createDevice(const QString &path) const
{
std::unique_ptr<QFile> file(new QFile(path));
if (!file->open(QIODevice::ReadOnly))
return nullptr;
return file.release();
}