1#ifndef MUSICMETADATA_H_
2#define MUSICMETADATA_H_
4#if __has_include("libmythbase/mythconfig.h")
5#include "libmythbase/mythconfig.h"
16#include <QCoreApplication>
49 m_filename(
""), m_hostname(
""), m_description(
"") {}
51 m_id(image->m_id), m_filename(image->m_filename),
52 m_hostname(image->m_hostname), m_imageType(image->m_imageType),
53 m_description(image->m_description), m_embedded(image->m_embedded) {}
59 bool m_embedded {
false};
83using UrlList = std::array<QString,STREAMURLCOUNT>;
93 explicit MusicMetadata(QString lfilename =
"", QString lartist =
"", QString lcompilation_artist =
"",
94 QString lalbum =
"", QString ltitle =
"", QString lgenre =
"",
95 int lyear = 0,
int ltracknum = 0, std::chrono::milliseconds llength = 0ms,
int lid = 0,
96 int lrating = 0,
int lplaycount = 0, QDateTime llastplay = QDateTime(),
97 QDateTime ldateadded = QDateTime(),
bool lcompilation =
false, QString lformat =
"")
98 : m_artist(
std::move(lartist)),
99 m_compilationArtist(
std::move(lcompilation_artist)),
100 m_album(
std::move(lalbum)),
101 m_title(
std::move(ltitle)),
102 m_genre(
std::move(lgenre)),
103 m_format(
std::move(lformat)),
105 m_trackNum(ltracknum),
108 m_lastPlay(
std::move(llastplay)),
109 m_dateAdded(
std::move(ldateadded)),
110 m_playCount(lplaycount),
111 m_compilation(lcompilation),
113 m_filename(
std::move(lfilename))
118 MusicMetadata(
int lid, QString lbroadcaster, QString lchannel, QString ldescription,
const UrlList &lurls, QString llogourl,
119 QString lgenre, QString lmetaformat, QString lcountry, QString llanguage, QString lformat);
130 QString
Artist()
const {
return m_artist; }
133 const QString &lartist_sort =
nullptr)
137 m_artistSort = lartist_sort;
138 m_formattedArtist.clear(); m_formattedTitle.clear();
145 const QString &lcompilation_artist_sort =
nullptr)
147 m_compilationArtist = lcompilation_artist;
149 m_compilationArtistSort = lcompilation_artist_sort;
150 m_formattedArtist.clear(); m_formattedTitle.clear();
154 QString
Album()
const {
return m_album; }
157 const QString &lalbum_sort =
nullptr)
161 m_albumSort = lalbum_sort;
162 m_formattedArtist.clear(); m_formattedTitle.clear();
166 QString
Title()
const {
return m_title; }
169 const QString <itle_sort =
nullptr)
172 m_titleSort = ltitle_sort;
176 QString FormatArtist();
177 QString FormatTitle();
179 QString
Genre()
const {
return m_genre; }
186 int getDirectoryId();
192 int getCompilationArtistId();
200 int Year()
const {
return m_year; }
203 int Track()
const {
return m_trackNum; }
209 std::chrono::milliseconds
Length()
const {
return m_length; }
210#if HAVE_IS_DURATION_V
211 template <
typename T, std::enable_if_t<std::chrono::__is_duration_v<T>,
bool> = true>
213 template <typename T, std::enable_if_t<std::chrono::__is_duration<T>::value,
bool> =
true>
234 QString Filename(
bool find =
true);
235 void setFilename(
const QString &lfilename);
236 QString getLocalFilename(
void);
244 QString
Format()
const {
return m_format; }
245 void setFormat(
const QString &lformat) { m_format = lformat; }
254 void setLastPlay(
const QDateTime& lastPlay);
263 m_compilation = state;
264 m_formattedArtist.clear();
265 m_formattedTitle.clear();
267 bool determineIfCompilation(
bool cd =
false);
273 void setChannel(
const QString &channel) { m_channel = channel; }
279 void setUrl(
const QString &url,
size_t index = 0);
280 QString Url(
size_t index = 0);
282 void setLogoUrl(
const QString &logourl) { m_logoUrl = logourl; }
288 void setCountry(
const QString &country) { m_country = country; }
291 void setLanguage(
const QString &language) { m_language = language; }
296 void reloadMetadata(
void);
297 void dumpToDatabase(
void);
298 void setField(
const QString &field,
const QString &data);
299 void getField(
const QString& field, QString *data);
300 void toMap(
InfoMap &metadataMap,
const QString &
prefix =
"");
311 static void setArtistAndTrackFormats();
312 static QStringList fillFieldList(
const QString& field);
313 static bool updateStreamList(
void);
316 QString getAlbumArtFile(
void);
321 void reloadAlbumArtImages(
void);
328 void setCompilationFormatting(
bool cd =
false);
329 QString formatReplaceSymbols(
const QString &format);
330 void checkEmptyFields(
void);
331 void ensureSortFields(
void);
332 void saveHostname(
void);
348 int m_trackCount {0};
351 std::chrono::milliseconds m_length {0ms};
353 int m_directoryId {-1};
355 int m_compartistId {-1};
362 int m_tempPlayCount {0};
363 bool m_compilation {
false};
373 uint64_t m_fileSize {0};
374 bool m_changed {
false};
416 :
MThread(
"MetadataLoading"), m_parent(parent_ptr) {}
437 int count()
const {
return m_numPcs; }
440 bool startLoading(
void);
444 void clearCDData(
void);
449 void setCDTitle(
const QString &a_title) { m_cdTitle = a_title; }
453 bool cleanOutThreads();
458 bool isValidID(
int an_id);
474 bool m_doneLoading {
false};
476 int m_playCountMin {0};
477 int m_playCountMax {0};
478 qint64 m_lastPlayMin {0};
479 qint64 m_lastPlayMax {0};
491 void loadStreams(
void);
532 void scanForImages(
void);
537 QStringList getImageFilenames(
void)
const;
541 void dumpToDatabase(
void);
546 static ImageType getImageTypeFromName(
const QString &name);
549 void findImages(
void);
AlbumArtImage(const AlbumArtImage *const image)
AlbumArtList * getImageList(void)
Q_DECLARE_TR_FUNCTIONS(AlbumArtImages)
QStringList getResult(void)
AlbumArtScannerThread(QStringList strList)
void run() override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
QMap< int, MusicMetadata * > MusicMap
int getCDTrackCount(void) const
MetadataPtrList * getAllCDMetadata(void)
MetadataPtrList * getAllMetadata(void)
Q_DECLARE_TR_FUNCTIONS(AllMusic)
QString getCDTitle(void) const
MetadataPtrList m_allMusic
void setCDTitle(const QString &a_title)
StreamList * getStreams(void)
This is a wrapper around QThread that does several additional things.
static pid_list_t::iterator find(const PIDInfoMap &map, pid_list_t &list, pid_list_t::iterator begin, pid_list_t::iterator end, bool find_open)
QHash< QString, QString > InfoMap
void run(const QString &name, Class *object, void(Class::*fn)())