File indexing completed on 2024-05-19 04:48:29
0001 #ifndef BAE_H 0002 #define BAE_H 0003 0004 #include <QDirIterator> 0005 #include <QFileInfo> 0006 #include <QStandardPaths> 0007 #include <QString> 0008 0009 #include <MauiKit3/Core/fmh.h> 0010 #include <MauiKit3/FileBrowsing/fmstatic.h> 0011 0012 namespace BAE 0013 { 0014 enum class W : uint_fast8_t { ALL, NONE, LIKE, TAG, SIMILAR, UNKNOWN, DONE, DESC, ASC, CODE, MSG }; 0015 0016 static const QMap<W, QString> SLANG = 0017 {{W::ALL, "ALL"}, {W::NONE, "NONE"}, {W::LIKE, "LIKE"}, {W::SIMILAR, "SIMILAR"}, {W::UNKNOWN, "UNKNOWN"}, {W::DONE, "DONE"}, {W::DESC, "DESC"}, {W::ASC, "ASC"}, {W::TAG, "TAG"}, {W::MSG, "MSG"}, {W::CODE, "CODE"}}; 0018 0019 enum class TABLE : uint8_t { ALBUMS, ARTISTS, SOURCES, SOURCES_TYPES, TRACKS, FOLDERS, ALL, NONE }; 0020 0021 static const QMap<TABLE, QString> TABLEMAP = {{TABLE::ALBUMS, "albums"}, {TABLE::ARTISTS, "artists"}, {TABLE::SOURCES, "sources"}, {TABLE::SOURCES_TYPES, "sources_types"}, {TABLE::TRACKS, "tracks"}, {TABLE::FOLDERS, "folders"} 0022 0023 }; 0024 0025 enum class KEY : uint8_t { 0026 URL = 0, 0027 SOURCES_URL = 1, 0028 TRACK = 2, 0029 TITLE = 3, 0030 ARTIST = 4, 0031 ALBUM = 5, 0032 DURATION = 6, 0033 PLAYED = 7, 0034 STARS = 9, 0035 RELEASE_DATE = 10, 0036 ADD_DATE = 11, 0037 LYRICS = 12, 0038 GENRE = 13, 0039 ART = 14, 0040 TAG = 15, 0041 MOOD = 16, 0042 PLAYLIST = 17, 0043 ARTWORK = 18, 0044 WIKI = 19, 0045 SOURCE_TYPE = 20, 0046 CONTEXT = 21, 0047 RETRIEVAL_DATE = 22, 0048 COMMENT = 23, 0049 ID = 24, 0050 SQL = 25, 0051 NONE = 26 0052 }; 0053 0054 typedef QMap<BAE::KEY, QString> DB; 0055 typedef QList<DB> DB_LIST; 0056 0057 static const DB KEYMAP = {{KEY::URL, "url"}, 0058 {KEY::SOURCES_URL, "sources_url"}, 0059 {KEY::TRACK, "track"}, 0060 {KEY::TITLE, "title"}, 0061 {KEY::ARTIST, "artist"}, 0062 {KEY::ALBUM, "album"}, 0063 {KEY::DURATION, "duration"}, 0064 {KEY::PLAYED, "played"}, 0065 {KEY::STARS, "stars"}, 0066 {KEY::RELEASE_DATE, "releaseDate"}, 0067 {KEY::ADD_DATE, "addDate"}, 0068 {KEY::LYRICS, "lyrics"}, 0069 {KEY::GENRE, "genre"}, 0070 {KEY::ART, "art"}, 0071 {KEY::TAG, "tag"}, 0072 {KEY::MOOD, "mood"}, 0073 {KEY::PLAYLIST, "playlist"}, 0074 {KEY::ARTWORK, "artwork"}, 0075 {KEY::WIKI, "wiki"}, 0076 {KEY::SOURCE_TYPE, "source_types_id"}, 0077 {KEY::CONTEXT, "context"}, 0078 {KEY::RETRIEVAL_DATE, "retrieval_date"}, 0079 {KEY::ID, "id"}, 0080 {KEY::COMMENT, "comment"}, 0081 {KEY::SQL, "sql"}}; 0082 0083 static const QString CollectionDBPath = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/vvave/").toLocalFile(); 0084 0085 #ifdef Q_OS_ANDROID 0086 const static QUrl CachePath = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/vvave/"); 0087 #else 0088 const static QUrl CachePath = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/vvave/"); 0089 #endif 0090 0091 const static QString DBName = QStringLiteral("collection_v2.db"); 0092 const static QStringList defaultSources = QStringList() << FMStatic::MusicPath << FMStatic::DownloadsPath; 0093 0094 static inline BAE::TABLE albumType(const FMH::MODEL &albumMap) 0095 { 0096 if (albumMap[FMH::MODEL_KEY::ALBUM].isEmpty() && !albumMap[FMH::MODEL_KEY::ARTIST].isEmpty()) 0097 return BAE::TABLE::ARTISTS; 0098 else if (!albumMap[FMH::MODEL_KEY::ALBUM].isEmpty() && !albumMap[FMH::MODEL_KEY::ARTIST].isEmpty()) 0099 return BAE::TABLE::ALBUMS; 0100 0101 return BAE::TABLE::NONE; 0102 } 0103 0104 static inline void fixArtworkImageFileName(QString &title) 0105 { 0106 title.replace("/", "_"); 0107 title.replace(".", "_"); 0108 title.replace("+", "_"); 0109 title.replace("&", "_"); 0110 } 0111 0112 static inline bool artworkCache(FMH::MODEL &track, const FMH::MODEL_KEY &type = FMH::MODEL_KEY::ID) 0113 { 0114 QDirIterator it(CachePath.toLocalFile(), QDir::Files, QDirIterator::NoIteratorFlags); 0115 while (it.hasNext()) { 0116 const auto file = QUrl::fromLocalFile(it.next()); 0117 const auto fileName = QFileInfo(file.toLocalFile()).baseName(); 0118 switch (type) { 0119 case FMH::MODEL_KEY::ALBUM: { 0120 auto name = track[FMH::MODEL_KEY::ARTIST] + "_" + track[FMH::MODEL_KEY::ALBUM]; 0121 fixArtworkImageFileName(name); 0122 0123 if (fileName == name) { 0124 track.insert(FMH::MODEL_KEY::ARTWORK, file.toString()); 0125 return true; 0126 } else 0127 continue; 0128 break; 0129 } 0130 0131 case FMH::MODEL_KEY::ARTIST: { 0132 auto name = track[FMH::MODEL_KEY::ARTIST]; 0133 fixArtworkImageFileName(name); 0134 0135 if (fileName == name) { 0136 track.insert(FMH::MODEL_KEY::ARTWORK, file.toString()); 0137 return true; 0138 } else 0139 continue; 0140 break; 0141 } 0142 default: 0143 break; 0144 } 0145 } 0146 return false; 0147 } 0148 0149 } 0150 0151 #endif // BAE_H