File indexing completed on 2024-05-19 04:48:27

0001 #pragma once
0002 
0003 #include <MauiKit3/Core/fmh.h>
0004 
0005 #include <QMap>
0006 #include <QVariant>
0007 
0008 #include <functional>
0009 
0010 namespace PULPO
0011 {
0012 enum class SERVICES : uint8_t { LastFm, Spotify, iTunes, MusicBrainz, Genius, LyricWikia, Wikipedia, WikiLyrics, Deezer, ALL, NONE };
0013 
0014 enum class ONTOLOGY : uint8_t { ARTIST, ALBUM, TRACK };
0015 
0016 enum class INFO : uint8_t { ARTWORK, WIKI, TAGS, METADATA, LYRICS, ALL, NONE };
0017 
0018 /*Generic context names. It's encouraged to use these instead of a unkown string*/
0019 enum class PULPO_CONTEXT : uint8_t {
0020     TRACK_STAT,
0021     TRACK_NUMBER,
0022     TRACK_TITLE,
0023     TRACK_DATE,
0024     TRACK_TEAM,
0025     TRACK_AUTHOR,
0026     TRACK_LANGUAGE,
0027     TRACK_SIMILAR,
0028 
0029     ALBUM_TEAM,
0030     ALBUM_STAT,
0031     ALBUM_TITLE,
0032     ALBUM_DATE,
0033     ALBUM_LANGUAGE,
0034     ALBUM_SIMILAR,
0035     ALBUM_LABEL,
0036 
0037     ARTIST_STAT,
0038     ARTIST_TITLE,
0039     ARTIST_DATE,
0040     ARTIST_LANGUAGE,
0041     ARTIST_PLACE,
0042     ARTIST_SIMILAR,
0043     ARTIST_TEAM,
0044     ARTIST_ALIAS,
0045     ARTIST_GENDER,
0046 
0047     GENRE,
0048     TAG,
0049     WIKI,
0050     IMAGE,
0051     LYRIC,
0052     SOURCE
0053 
0054 };
0055 
0056 static const QMap<PULPO_CONTEXT, QString> CONTEXT_MAP = {{PULPO_CONTEXT::ALBUM_STAT, "album_stat"},
0057                                                    {PULPO_CONTEXT::ALBUM_TITLE, "album_title"},
0058                                                    {PULPO_CONTEXT::ALBUM_DATE, "album_date"},
0059                                                    {PULPO_CONTEXT::ALBUM_LANGUAGE, "album_language"},
0060                                                    {PULPO_CONTEXT::ALBUM_SIMILAR, "album_similar"},
0061                                                    {PULPO_CONTEXT::ALBUM_LABEL, "album_label"},
0062                                                    {PULPO_CONTEXT::ALBUM_TEAM, "album_team"},
0063 
0064                                                    {PULPO_CONTEXT::ARTIST_STAT, "artist_stat"},
0065                                                    {PULPO_CONTEXT::ARTIST_TITLE, "artist_title"},
0066                                                    {PULPO_CONTEXT::ARTIST_DATE, "artist_date"},
0067                                                    {PULPO_CONTEXT::ARTIST_LANGUAGE, "artist_language"},
0068                                                    {PULPO_CONTEXT::ARTIST_PLACE, "artist_place"},
0069                                                    {PULPO_CONTEXT::ARTIST_SIMILAR, "artist_similar"},
0070                                                    {PULPO_CONTEXT::ARTIST_ALIAS, "artist_alias"},
0071                                                    {PULPO_CONTEXT::ARTIST_GENDER, "artist_gender"},
0072                                                    {PULPO_CONTEXT::ARTIST_TEAM, "artist_team"},
0073 
0074                                                    {PULPO_CONTEXT::TRACK_STAT, "track_stat"},
0075                                                    {PULPO_CONTEXT::TRACK_DATE, "track_date"},
0076                                                    {PULPO_CONTEXT::TRACK_TITLE, "track_title"},
0077                                                    {PULPO_CONTEXT::TRACK_NUMBER, "track_number"},
0078                                                    {PULPO_CONTEXT::TRACK_TEAM, "track_team"},
0079                                                    {PULPO_CONTEXT::TRACK_AUTHOR, "track_author"},
0080                                                    {PULPO_CONTEXT::TRACK_LANGUAGE, "track_language"},
0081                                                    {PULPO_CONTEXT::TRACK_SIMILAR, "track_similar"},
0082 
0083                                                    {PULPO_CONTEXT::GENRE, "genre"},
0084                                                    {PULPO_CONTEXT::TAG, "tag"},
0085                                                    {PULPO_CONTEXT::WIKI, "wiki"},
0086                                                    {PULPO_CONTEXT::IMAGE, "image"},
0087                                                    {PULPO_CONTEXT::LYRIC, "lyric"},
0088                                                    {PULPO_CONTEXT::SOURCE, "source"}
0089 
0090 };
0091 
0092 enum class RECURSIVE : bool { ON = true, OFF = false };
0093 
0094 typedef QMap<PULPO_CONTEXT, QVariant> VALUE;
0095 typedef QMap<INFO, VALUE> INFO_K;
0096 //    typedef QMap<ONTOLOGY, INFO_K> RESPONSE;
0097 
0098 typedef QMap<ONTOLOGY, QList<INFO>> SCOPE;
0099 
0100 struct RESPONSE {
0101     PULPO_CONTEXT context;
0102     QVariant value;
0103 };
0104 typedef QList<PULPO::RESPONSE> RESPONSES;
0105 
0106 struct REQUEST {
0107     FMH::MODEL track;
0108 
0109     PULPO::ONTOLOGY ontology;
0110     QList<PULPO::INFO> info;
0111     QList<PULPO::SERVICES> services;
0112 
0113     std::function<void(REQUEST request, RESPONSES responses)> callback = nullptr;
0114 };
0115 }
0116