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

}