#pragma once #include #include #include #include #include "Track.h" namespace engine { class MusicLibrary : public QObject { Q_OBJECT public: static const inline QStringList SUPPORTED_EXTS = { "mp3", "flac", "wav", "ogg", "aac", "m4a", "opus", "wma" }; explicit MusicLibrary(QObject *parent = nullptr); const QList &tracks() const; const QString &rootPath() const; void setRootPath(const QString &path); void scan(); void sortByArtistTitle(); void shutdown(); signals: void scanStarted(); void trackFound(const engine::Track &track); void scanComplete(int count); private: QString m_root; QList m_tracks; QThread *m_scanThread { nullptr }; QMutex m_mtx; }; }