#include "core/ScanController.h"
#include "core/Scanner.h"
namespace whittle {
ScanController::ScanController(QStringList sourceRoots, QSet<QString> excluded,
bool recursive,
QString usbMount, FilterSettings filter,
QObject* parent)
: QThread(parent), m_roots(std::move(sourceRoots)),
m_excluded(std::move(excluded)), m_recursive(recursive),
m_usb(std::move(usbMount)), m_filter(std::move(filter)) {}
void ScanController::run() {
auto prog = [this](int f, int n, qint64 b) { emit progress(f, n, b); };
FileMap source = Scanner::run(m_roots, m_excluded, /*isUsb=*/false,
m_recursive, m_cancel, prog);
if (m_cancel.load(std::memory_order_relaxed)) { emit canceled(); return; }
QStringList usbRoots;
if (!m_usb.isEmpty()) usbRoots << m_usb;
FileMap usb = Scanner::run(usbRoots, {}, /*isUsb=*/true, /*recursive=*/true,
m_cancel, {});
if (m_cancel.load(std::memory_order_relaxed)) { emit canceled(); return; }
DiffResult diff = Comparator::compare(source, usb, m_filter);
emit resultsReady(diff, source, usb);
}
}