Pith - whittle
#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);
	};

}