/ desktop / datalake / cartographer.hpp
cartographer.hpp
 1  #pragma once
 2  
 3  #include <QHash>
 4  #include <QString>
 5  #include <QUuid>
 6  #include <optional>
 7  
 8  #include "structs.hpp"
 9  
10  class Cartographer {
11    public:
12      Cartographer();
13      static Cartographer& instance();
14      static Cartographer* create() { return &instance(); }
15  
16      void                       addAlbum(KotoAlbum* album);
17      void                       addArtist(KotoArtist* artist);
18      void                       addTrack(KotoTrack* track);
19      std::optional<KotoAlbum*>  getAlbum(QUuid uuid);
20      QList<KotoAlbum*>          getAlbums();
21      std::optional<KotoArtist*> getArtist(QUuid uuid);
22      QList<KotoArtist*>         getArtists();
23      std::optional<KotoArtist*> getArtist(QString name);
24      std::optional<KotoTrack*>  getTrack(QUuid uuid);
25      QList<KotoTrack*>          getTracks();
26  
27    private:
28      QHash<QUuid, KotoAlbum*>    i_albums;
29      QHash<QUuid, KotoArtist*>   i_artists;
30      QHash<QString, KotoArtist*> i_artists_by_name;
31      QHash<QUuid, KotoTrack*>    i_tracks;
32  };