#pragma once
#include "core/Comparator.h"
#include "core/FilterSettings.h"
#include "model/FileRecord.h"
#include <atomic>
#include <QHash>
#include <QMetaType>
#include <QSet>
#include <QStringList>
#include <QThread>
namespace whittle {
using FileMap = QHash<QString, FileRecord>;
class ScanController : public QThread {
Q_OBJECT
public:
ScanController(QStringList sourceRoots, QSet<QString> excluded,
bool recursive,
QString usbMount, FilterSettings filter,
QObject* parent = nullptr);
void cancel() { m_cancel.store(true, std::memory_order_relaxed); }
signals:
void progress(int folders, int files, qint64 bytes);
void resultsReady(whittle::DiffResult result,
whittle::FileMap sourceMap, whittle::FileMap usbMap);
void canceled();
protected:
void run() override;
private:
QStringList m_roots;
QSet<QString> m_excluded;
bool m_recursive;
QString m_usb;
FilterSettings m_filter;
std::atomic<bool> m_cancel{false};
};
}
Q_DECLARE_METATYPE(whittle::FileMap)
Q_DECLARE_METATYPE(whittle::DiffResult)