#pragma once
#include "model/FileRecord.h"
#include <atomic>
#include <functional>
#include <QHash>
#include <QSet>
#include <QString>
#include <QStringList>
namespace whittle {
class Scanner {
public:
using ProgressFn = std::function<void(int folders, int files, qint64 bytes)>;
static QHash<QString, FileRecord> run(const QStringList& roots,
const QSet<QString>& excluded,
bool isUsb, bool recursive,
const std::atomic<bool>& cancel,
const ProgressFn& onProgress);
private:
static void walk(const QString& dirPath, const QString& base, bool recursive,
const QSet<QString>& excluded,
QHash<QString, FileRecord>& out,
int& folders, int& files, qint64& bytes,
const std::atomic<bool>& cancel, const ProgressFn& onProgress);
};
}