1 #ifndef MUSICMETADATA_H_
2 #define MUSICMETADATA_H_
10 #include <QCoreApplication>
15 #include <QStringList>
43 m_filename(
""), m_hostname(
""), m_description(
"") {}
45 m_id(image->m_id), m_filename(image->m_filename),
46 m_hostname(image->m_hostname), m_imageType(image->m_imageType),
47 m_description(image->m_description), m_embedded(image->m_embedded) {}
53 bool m_embedded {
false};
75 static constexpr
const char*
STREAMUPDATEURL {
"https://services.mythtv.org/music/data/?data=streams" };
78 using UrlList = std::array<QString,STREAMURLCOUNT>;
88 explicit MusicMetadata(QString lfilename =
"", QString lartist =
"", QString lcompilation_artist =
"",
89 QString lalbum =
"", QString ltitle =
"", QString lgenre =
"",
90 int lyear = 0,
int ltracknum = 0, std::chrono::milliseconds llength = 0ms,
int lid = 0,
91 int lrating = 0,
int lplaycount = 0, QDateTime llastplay = QDateTime(),
92 QDateTime ldateadded = QDateTime(),
bool lcompilation =
false, QString lformat =
"")
93 : m_artist(std::move(lartist)),
94 m_compilationArtist(std::move(lcompilation_artist)),
95 m_album(std::move(lalbum)),
96 m_title(std::move(ltitle)),
97 m_genre(std::move(lgenre)),
98 m_format(std::move(lformat)),
100 m_trackNum(ltracknum),
103 m_lastPlay(std::move(llastplay)),
104 m_dateAdded(std::move(ldateadded)),
105 m_playCount(lplaycount),
106 m_compilation(lcompilation),
108 m_filename(std::move(lfilename))
113 MusicMetadata(
int lid, QString lbroadcaster, QString lchannel, QString ldescription,
const UrlList &lurls, QString llogourl,
114 QString lgenre, QString lmetaformat, QString lcountry, QString llanguage, QString lformat);
125 QString
Artist()
const {
return m_artist; }
128 const QString &lartist_sort =
nullptr)
132 m_artistSort = lartist_sort;
133 m_formattedArtist.clear(); m_formattedTitle.clear();
140 const QString &lcompilation_artist_sort =
nullptr)
142 m_compilationArtist = lcompilation_artist;
144 m_compilationArtistSort = lcompilation_artist_sort;
145 m_formattedArtist.clear(); m_formattedTitle.clear();
149 QString
Album()
const {
return m_album; }
152 const QString &lalbum_sort =
nullptr)
156 m_albumSort = lalbum_sort;
157 m_formattedArtist.clear(); m_formattedTitle.clear();
161 QString
Title()
const {
return m_title; }
164 const QString <itle_sort =
nullptr)
167 m_titleSort = ltitle_sort;
171 QString FormatArtist();
172 QString FormatTitle();
174 QString
Genre()
const {
return m_genre; }
181 int getDirectoryId();
187 int getCompilationArtistId();
195 int Year()
const {
return m_year; }
198 int Track()
const {
return m_trackNum; }
204 std::chrono::milliseconds
Length()
const {
return m_length; }
205 template <typename T, std::enable_if_t<std::chrono::__is_duration<T>::value,
bool> =
true>
225 QString Filename(
bool find =
true);
226 void setFilename(
const QString &lfilename);
227 QString getLocalFilename(
void);
235 QString
Format()
const {
return m_format; }
236 void setFormat(
const QString &lformat) { m_format = lformat; }
245 void setLastPlay(
const QDateTime& lastPlay);
254 m_compilation = state;
255 m_formattedArtist.clear();
256 m_formattedTitle.clear();
258 bool determineIfCompilation(
bool cd =
false);
264 void setChannel(
const QString &channel) { m_channel = channel; }
270 void setUrl(
const QString &url,
size_t index = 0);
271 QString Url(
size_t index = 0);
273 void setLogoUrl(
const QString &logourl) { m_logoUrl = logourl; }
279 void setCountry(
const QString &country) { m_country = country; }
282 void setLanguage(
const QString &language) { m_language = language; }
287 void reloadMetadata(
void);
288 void dumpToDatabase(
void);
289 void setField(
const QString &field,
const QString &data);
290 void getField(
const QString& field, QString *data);
291 void toMap(
InfoMap &metadataMap,
const QString &
prefix =
"");
302 static void setArtistAndTrackFormats();
303 static QStringList fillFieldList(
const QString& field);
304 static bool updateStreamList(
void);
307 QString getAlbumArtFile(
void);
312 void reloadAlbumArtImages(
void);
319 void setCompilationFormatting(
bool cd =
false);
320 QString formatReplaceSymbols(
const QString &format);
321 void checkEmptyFields(
void);
322 void ensureSortFields(
void);
323 void saveHostname(
void);
339 int m_trackCount {0};
342 std::chrono::milliseconds m_length {0ms};
344 int m_directoryId {-1};
346 int m_compartistId {-1};
353 int m_tempPlayCount {0};
354 bool m_compilation {
false};
364 uint64_t m_fileSize {0};
365 bool m_changed {
false};
407 :
MThread(
"MetadataLoading"), m_parent(parent_ptr) {}
428 int count()
const {
return m_numPcs; }
431 bool startLoading(
void);
435 void clearCDData(
void);
440 void setCDTitle(
const QString &a_title) { m_cdTitle = a_title; }
444 bool cleanOutThreads();
449 bool isValidID(
int an_id);
465 bool m_doneLoading {
false};
467 int m_playCountMin {0};
468 int m_playCountMax {0};
469 qint64 m_lastPlayMin {0};
470 qint64 m_lastPlayMax {0};
482 void loadStreams(
void);
523 void scanForImages(
void);
528 QStringList getImageFilenames(
void)
const;
532 void dumpToDatabase(
void);
537 static ImageType getImageTypeFromName(
const QString &name);
540 void findImages(
void);