#pragma once #include #include #include #include #include #include #include #include "structs.hpp" class Cartographer : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON // Q_PROPERTY(QQmlListProperty albums READ getAlbumsQml) Q_PROPERTY(KotoArtistModel* artists READ getArtistsModel) // Q_PROPERTY(QQmlListProperty tracks READ getTracksQml) public: Cartographer(QObject* parent = nullptr); static Cartographer& instance(); // static Cartographer* create(QQmlEngine* engine, QJSEngine*) { // engine->setObjectOwnership(&instance(), QQmlEngine::CppOwnership); // return &instance(); // } void addAlbum(KotoAlbum* album); void addArtist(KotoArtist* artist); void addTrack(KotoTrack* track); // QQmlListProperty getAlbumsQml(); KotoArtistModel* getArtistsModel(); // QQmlListProperty getTracksQml(); std::optional getAlbum(QUuid uuid); QList getAlbums(); std::optional getArtist(QUuid uuid); QList getArtists(); std::optional getArtist(QString name); std::optional getTrack(QUuid uuid); QList getTracks(); private: QHash i_albums; KotoArtistModel* i_artists_model; QHash i_artists_by_name; QHash i_tracks; };