MythTV master
metadatacommon.h
Go to the documentation of this file.
1#ifndef METADATACOMMON_H_
2#define METADATACOMMON_H_
3
4// c++
5#include <utility>
6
7// qt
8#include <QChar> // Fix Qt6 GCC SFINAE warning
9#include <QDate>
10#include <QDateTime>
11#include <QDomElement>
12#include <QEvent>
13#include <QList>
14#include <QMultiMap>
15#include <QPair>
16#include <QString>
17#include <QStringList>
18
25
26class ProgramInfo;
27
28enum LookupStep : std::uint8_t {
32};
33
35{
36 QString name;
37 QString role;
38 QString thumbnail;
39 QString url;
40};
41
42// What type of grabber script to use
43enum MetadataType : std::uint8_t {
48};
49
50// Determines the lookup fallback strategy
51enum LookupType : std::uint8_t {
58};
59
60// Actual type of content
61enum VideoContentType : std::uint8_t {
68};
69
70enum PeopleType : std::uint8_t {
83};
84
85using DownloadMap = QMap< VideoArtworkType, ArtworkInfo >;
86using PeopleMap = QMultiMap< PeopleType, PersonInfo >;
87
88class META_PUBLIC MetadataLookup : public QObject, public ReferenceCounter
89{
90 public:
91 MetadataLookup(void) : ReferenceCounter("MetadataLookup") {}
92 ~MetadataLookup() override = default;
93
96 LookupType subtype,
97 QVariant data,
98 LookupStep step,
99 bool automatic,
100 bool handleimages,
101 bool allowoverwrites,
102 bool allowgeneric,
103 bool preferdvdorder,
104 QString host,
105 QString filename,
106 const QString &title,
107 QString network,
108 QString status,
109 QStringList categories,
110 float userrating,
111 uint ratingcount,
112 QString language,
113 QString subtitle,
114 QString tagline,
115 QString description,
116 uint season,
117 uint episode,
118 uint chanid,
119 QString channum,
120 QString chansign,
121 QString channame,
122 QString chanplaybackfilters,
123 QString recgroup,
124 QString playgroup,
125 QString seriesid,
126 QString programid,
127 QString storagegroup,
128 QDateTime startts,
129 QDateTime endts,
130 QDateTime recstartts,
131 QDateTime recendts,
132 uint programflags,
133 uint audioproperties,
134 uint videoproperties,
135 uint subtitletype,
136 QString certification,
137 QStringList countries,
138 float popularity,
139 uint budget,
140 uint revenue,
141 QString album,
142 uint tracknum,
143 QString system,
144 uint year,
145 QDate releasedate,
146 QDateTime lastupdated,
147 std::chrono::minutes runtime,
148 std::chrono::seconds runtimesecs,
149 QString inetref,
150 QString collectionref,
151 QString tmsref,
152 QString imdb,
153 PeopleMap people,
154 QStringList studios,
155 QString homepage,
156 QString trailerURL,
157 ArtworkMap artwork,
158 DownloadMap downloads);
159
160 //ProgramInfo Constructor
163 LookupType subtype,
164 QVariant data,
165 LookupStep step,
166 bool automatic,
167 bool handleimages,
168 bool allowoverwrites,
169 bool allowgeneric,
170 bool preferdvdorder,
171 QString host,
172 QString filename,
173 const QString &title,
174 QStringList categories,
175 float userrating,
176 QString subtitle,
177 QString description,
178 uint chanid,
179 QString channum,
180 QString chansign,
181 QString channame,
182 QString chanplaybackfilters,
183 QString recgroup,
184 QString playgroup,
185 QString seriesid,
186 QString programid,
187 QString storagegroup,
188 QDateTime startts,
189 QDateTime endts,
190 QDateTime recstartts,
191 QDateTime recendts,
192 uint programflags,
193 uint audioproperties,
194 uint videoproperties,
195 uint subtitletype,
196 uint year,
197 QDate releasedate,
198 QDateTime lastupdated,
199 std::chrono::minutes runtime,
200 std::chrono::seconds runtimesecs);
201
202 // XBMC NFO Constructor
205 LookupType subtype,
206 QVariant data,
207 LookupStep step,
208 bool automatic,
209 bool handleimages,
210 bool allowoverwrites,
211 bool allowgeneric,
212 bool preferdvdorder,
213 QString host,
214 QString filename,
215 const QString &title,
216 QStringList categories,
217 float userrating,
218 QString subtitle,
219 QString tagline,
220 QString description,
221 uint season,
222 uint episode,
223 QString certification,
224 uint year,
225 QDate releasedate,
226 std::chrono::minutes runtime,
227 std::chrono::seconds runtimesecs,
228 QString inetref,
229 PeopleMap people,
230 QString trailerURL,
231 ArtworkMap artwork,
232 DownloadMap downloads);
233
234 void toMap(InfoMap &map);
235
236 // SETS (Only a limited number needed)
237
238 // Must set a type, data, and step.
239 void SetType(MetadataType type) { m_type = type; };
240 // For some lookup, it helps to know the subtype (TV vs. Movie)
241 void SetSubtype(LookupType subtype) { m_subtype = subtype; };
242 // Reference value- when the event comes back, need to associate with an item.
243 void SetData(QVariant data) { m_data = std::move(data); };
244 // Steps: SEARCH, GETDATA
245 void SetStep(LookupStep step) { m_step = step; };
246 // Don't prompt the user, just make an educated decision.
247 void SetAutomatic(bool autom) { m_automatic = autom; };
248
249 // Sets for image download handling
250 void SetHandleImages(bool handle) { m_handleImages = handle; };
251 void SetAllowOverwrites(bool allow) { m_allowOverwrites = allow; };
252 void SetAllowGeneric(bool allow) { m_allowGeneric = allow; };
253 void SetHost(const QString &host) { m_host = host; };
254 void SetDownloads(DownloadMap map) { m_downloads = std::move(map); };
255
256 // General Sets
257 void SetTitle(const QString &title)
258 {
259 m_title = title;
260 QString manRecSuffix = QString(" (%1)").arg(QObject::tr("Manual Record"));
261 m_baseTitle = title; // m_title with " (Manual Record)" stripped.
262 m_baseTitle.replace(manRecSuffix,"");
263 };
264 void SetFilename(const QString &filename) { m_filename = filename; };
265
266 // General Sets - Video
267 void SetSubtitle(const QString &subtitle) { m_subtitle = subtitle; };
268 void SetSeason(uint season) { m_season = season; };
269 void SetEpisode(uint episode) { m_episode = episode; };
270 void SetInetref(const QString &inetref) { m_inetRef = inetref; };
271 void SetCollectionref(const QString &collectionref)
272 { m_collectionRef = collectionref; };
273 void SetTMSref(const QString &tmsref) { m_tmsRef = tmsref; };
274 void SetIsCollection(bool collection) { m_isCollection = collection; };
275 void SetPreferDVDOrdering(bool preferdvdorder)
276 { m_dvdOrder = preferdvdorder; };
277
278 // General Sets - Music
279 void SetAlbum(const QString &album) { m_album = album; };
280 void SetTrack(uint track) { m_trackNum = track; };
281
282 // General Sets - Games
283 void SetSystem(const QString &system) { m_system = system; };
284
285 // GETS
286
287 MetadataType GetType() const { return m_type; };
288 LookupType GetSubtype() const { return m_subtype; };
289 QVariant GetData() const { return m_data; };
290 LookupStep GetStep() const { return m_step; };
291 bool GetAutomatic() const { return m_automatic; };
292
293 // Image Handling Gets
294 bool GetHandleImages() const { return m_handleImages; };
295 bool GetAllowOverwrites() const { return m_allowOverwrites; };
296 bool GetAllowGeneric() const { return m_allowGeneric; };
297
298 // General
299 QString GetFilename() const { return m_filename; };
300 QString GetTitle() const { return m_title; };
301 QString GetBaseTitle() const { return m_baseTitle; };
302 QStringList GetCategories() const { return m_categories; };
303 float GetUserRating() const { return m_userRating; };
304 uint GetRatingCount() const { return m_ratingCount; };
305 QString GetLanguage() const { return m_language; };
306 QString GetHost() const { return m_host; };
307
308 // General - Video & ProgramInfo
309 QString GetNetwork() const { return m_network; };
310 QString GetStatus() const { return m_status; };
311 QString GetSubtitle() const { return m_subtitle; };
312 QString GetTagline() const { return m_tagline; };
313 QString GetDescription() const { return m_description; };
314 bool GetPreferDVDOrdering() const { return m_dvdOrder; };
315 uint GetSeason() const { return m_season; };
316 uint GetEpisode() const { return m_episode; };
317 uint GetChanId() const { return m_chanId; };
318 QString GetChanNum() const { return m_chanNum; };
319 QString GetChanSign() const { return m_chanSign; };
320 QString GetChanName() const { return m_chanName; };
321 QString GetChanPlaybackFilters() const { return m_chanPlaybackFilters; };
322 QString GetRecGroup() const { return m_recGroup; };
323 QString GetPlayGroup() const { return m_playGroup; };
324 QString GetSeriesId() const { return m_seriesId; };
325 QString GetProgramId() const { return m_programid; };
326 QString GetStorageGroup() const { return m_storageGroup; };
327 QDateTime GetStartTS() const { return m_startTs; };
328 QDateTime GetEndTS() const { return m_endTs; };
329 QDateTime GetRecStartTS() const { return m_recStartTs; };
330 QDateTime GetRecEndTS() const { return m_recEndTs; };
331 uint GetProgramFlags() const { return m_programFlags; };
332 uint GetAudioProperties() const { return m_audioProperties; };
333 uint GetVideoProperties() const { return m_videoProperties; };
334 uint GetSubtitleType() const { return m_subtitleType; };
335
336 QString GetCertification() const { return m_certification; };
337 QStringList GetCountries() const { return m_countries; };
338 float GetPopularity() const { return m_popularity; };
339 uint GetBudget() const { return m_budget; };
340 uint GetRevenue() const { return m_revenue; };
341
342 // General - Music
343 QString GetAlbumTitle() const { return m_album; };
344 uint GetTrackNumber() const { return m_trackNum; };
345
346 // General - Game
347 QString GetSystem() const { return m_system; };
348
349 // Times
350 uint GetYear() const { return m_year; };
351 QDate GetReleaseDate() const { return m_releaseDate; };
352 QDateTime GetLastUpdated() const { return m_lastUpdated; };
353 std::chrono::minutes GetRuntime() const { return m_runtime; };
354 std::chrono::seconds GetRuntimeSeconds() const { return m_runtimeSecs; };
355
356 // Inetref
357 QString GetInetref() const { return m_inetRef; };
358 QString GetCollectionref() const { return m_collectionRef; };
359 QString GetIMDB() const { return m_imdb; };
360 QString GetTMSref() const { return m_tmsRef; };
361 bool GetIsCollection() const { return m_isCollection; };
362
363 // People
364 QList<PersonInfo> GetPeople(PeopleType type) const;
365 QStringList GetStudios() const { return m_studios; };
366
367 // Web references
368 QString GetHomepage() const { return m_homepage; };
369 QString GetTrailerURL() const { return m_trailerURL; };
370
371 // Artwork
373 DownloadMap GetDownloads() const { return m_downloads; };
374
375 private:
376 // General
379 QVariant m_data;
381 bool m_automatic {false};
382 bool m_handleImages {false};
383 bool m_allowOverwrites {false};
384 bool m_allowGeneric {false};
385 bool m_dvdOrder {false};
386 QString m_host;
387
388 QString m_filename;
389 QString m_title;
390 QString m_baseTitle; // m_title with " (Manual Record)" stripped.
391 QString m_network;
392 QString m_status;
393 const QStringList m_categories;
394 float m_userRating {0.0};
395 uint m_ratingCount {0};
396 const QString m_language;
397
398 // General - Video & ProgramInfo
399 QString m_subtitle;
400 const QString m_tagline;
401 const QString m_description;
402 uint m_season {0};
403 uint m_episode {0};
404 uint m_chanId {0};
405 const QString m_chanNum;
406 const QString m_chanSign;
407 const QString m_chanName;
409 const QString m_recGroup;
410 const QString m_playGroup;
411 const QString m_seriesId;
412 const QString m_programid;
413 const QString m_storageGroup;
414 const QDateTime m_startTs;
415 const QDateTime m_endTs;
416 const QDateTime m_recStartTs;
417 const QDateTime m_recEndTs;
418 uint m_programFlags {0};
419 uint m_audioProperties {0};
420 uint m_videoProperties {0};
421 uint m_subtitleType {0};
422
423 const QString m_certification;
424 const QStringList m_countries;
425 float m_popularity {0};
426 uint m_budget {0};
427 uint m_revenue {0};
428
429 // General - Music
430 QString m_album;
431 uint m_trackNum {0};
432
433 // General - Game
434 QString m_system;
435
436 // Times
437 uint m_year {0};
438 const QDate m_releaseDate;
439 const QDateTime m_lastUpdated;
440 std::chrono::minutes m_runtime {0min};
441 std::chrono::seconds m_runtimeSecs {0s};
442
443 // Inetref
444 QString m_inetRef;
446 QString m_tmsRef;
447 QString m_imdb;
448 bool m_isCollection {false};
449
450 // People - Video
452 const QStringList m_studios;
453
454 // Web references
455 const QString m_homepage;
456 const QString m_trailerURL;
457
458 // Artwork
461};
462
464
466META_PUBLIC QDomDocument CreateMetadataXML(MetadataLookup *lookup);
467META_PUBLIC QDomDocument CreateMetadataXML(ProgramInfo *pginfo);
468
470 QDomElement placetoadd,
471 QDomDocument docroot);
472
474 QDomElement placetoadd,
475 QDomDocument docroot);
477 QDomElement placetoadd,
478 QDomDocument docroot);
480 QDomElement placetoadd,
481 QDomDocument docroot);
483 QDomElement placetoadd,
484 QDomDocument docroot);
485
487
488META_PUBLIC MetadataLookup *ParseMetadataItem(const QDomElement &item,
489 MetadataLookup *lookup,
490 bool passseas = true);
491META_PUBLIC MetadataLookup *ParseMetadataMovieNFO(const QDomElement &item,
492 MetadataLookup *lookup);
493META_PUBLIC PeopleMap ParsePeople(const QDomElement& people);
494META_PUBLIC ArtworkMap ParseArtwork(const QDomElement& artwork);
495
496META_PUBLIC int editDistance(const QString &s, const QString &t);
497META_PUBLIC QString nearestName(const QString &actual,
498 const QStringList &candidates);
499
500META_PUBLIC QDateTime RFC822TimeToQDateTime(const QString &t);
501
504
505#endif // METADATACOMMON_H_
const QString m_description
QString GetStorageGroup() const
uint GetSeason() const
QString GetNetwork() const
void SetSubtype(LookupType subtype)
void SetTrack(uint track)
const QString m_language
const QString m_recGroup
QString GetHost() const
MetadataType GetType() const
const QString m_storageGroup
QString GetDescription() const
QString GetSeriesId() const
const QString m_playGroup
QString GetCollectionref() const
const QString m_tagline
QDateTime GetRecEndTS() const
bool GetAllowOverwrites() const
float GetUserRating() const
void SetStep(LookupStep step)
void SetType(MetadataType type)
void SetAllowOverwrites(bool allow)
void SetTitle(const QString &title)
uint GetRevenue() const
void SetInetref(const QString &inetref)
QStringList GetStudios() const
QString GetBaseTitle() const
QDateTime GetStartTS() const
const QString m_seriesId
uint GetTrackNumber() const
QString GetChanSign() const
QString GetTagline() const
QVariant GetData() const
bool GetIsCollection() const
QString m_collectionRef
void SetAlbum(const QString &album)
const QString m_homepage
void SetEpisode(uint episode)
bool GetPreferDVDOrdering() const
void SetTMSref(const QString &tmsref)
DownloadMap m_downloads
QString GetSubtitle() const
bool GetAutomatic() const
QString GetPlayGroup() const
uint GetYear() const
QString GetTrailerURL() const
uint GetRatingCount() const
QString GetCertification() const
QDate GetReleaseDate() const
QString GetProgramId() const
QString GetFilename() const
QString GetAlbumTitle() const
const QDateTime m_recEndTs
QDateTime GetLastUpdated() const
const QDateTime m_lastUpdated
QString GetTitle() const
void SetFilename(const QString &filename)
const QStringList m_categories
const QString m_chanNum
QStringList GetCountries() const
QDateTime GetEndTS() const
const QString m_programid
QString GetTMSref() const
LookupStep GetStep() const
float GetPopularity() const
void SetIsCollection(bool collection)
LookupType GetSubtype() const
void SetHandleImages(bool handle)
QString GetSystem() const
const QString m_chanName
const QStringList m_countries
void SetPreferDVDOrdering(bool preferdvdorder)
const QDateTime m_startTs
QDateTime GetRecStartTS() const
const QString m_trailerURL
QString GetRecGroup() const
const QDateTime m_endTs
const QString m_chanPlaybackFilters
void SetAutomatic(bool autom)
uint GetBudget() const
const QStringList m_studios
void SetDownloads(DownloadMap map)
const PeopleMap m_people
QString GetIMDB() const
DownloadMap GetDownloads() const
void SetSystem(const QString &system)
QString GetChanName() const
uint GetSubtitleType() const
std::chrono::seconds GetRuntimeSeconds() const
QString GetChanPlaybackFilters() const
void SetHost(const QString &host)
const QString m_chanSign
QString GetInetref() const
void SetSubtitle(const QString &subtitle)
QString GetChanNum() const
void SetSeason(uint season)
QString GetHomepage() const
uint GetVideoProperties() const
QStringList GetCategories() const
const QString m_certification
bool GetHandleImages() const
const QDateTime m_recStartTs
void SetCollectionref(const QString &collectionref)
QString GetStatus() const
void SetAllowGeneric(bool allow)
QString GetLanguage() const
~MetadataLookup() override=default
void SetData(QVariant data)
const ArtworkMap m_artwork
uint GetAudioProperties() const
const QDate m_releaseDate
bool GetAllowGeneric() const
std::chrono::minutes GetRuntime() const
uint GetEpisode() const
uint GetProgramFlags() const
uint GetChanId() const
Holds information on recordings and videos.
Definition: programinfo.h:74
General purpose reference counter.
unsigned int uint
Definition: compat.h:60
LookupStep
@ kLookupCollection
@ kLookupData
@ kLookupSearch
META_PUBLIC QDateTime RFC822TimeToQDateTime(const QString &t)
LookupType
@ kProbableTelevision
@ kProbableGame
@ kProbableGenericTelevision
@ kUnknownVideo
@ kProbableMusic
@ kProbableMovie
META_PUBLIC void AddCertifications(MetadataLookup *lookup, QDomElement placetoadd, QDomDocument docroot)
META_PUBLIC void CreateMetadataXMLItem(MetadataLookup *lookup, QDomElement placetoadd, QDomDocument docroot)
QMultiMap< PeopleType, PersonInfo > PeopleMap
MetadataType
@ kMetadataGame
@ kMetadataRecording
@ kMetadataVideo
@ kMetadataMusic
META_PUBLIC QString nearestName(const QString &actual, const QStringList &candidates)
VideoContentType
@ kContentMusicVideo
@ kContentTelevision
@ kContentAdult
@ kContentUnknown
@ kContentHomeMovie
@ kContentMovie
META_PUBLIC QDomDocument CreateMetadataXML(MetadataLookupList list)
META_PUBLIC MetadataLookup * ParseMetadataItem(const QDomElement &item, MetadataLookup *lookup, bool passseas=true)
PeopleType
@ kPersonArtist
@ kPersonCastingDirector
@ kPersonEditor
@ kPersonCinematographer
@ kPersonActor
@ kPersonAuthor
@ kPersonExecProducer
@ kPersonComposer
@ kPersonAlbumArtist
@ kPersonDirector
@ kPersonGuestStar
@ kPersonProducer
META_PUBLIC void AddCountries(MetadataLookup *lookup, QDomElement placetoadd, QDomDocument docroot)
META_PUBLIC void AddCategories(MetadataLookup *lookup, QDomElement placetoadd, QDomDocument docroot)
META_PUBLIC PeopleMap ParsePeople(const QDomElement &people)
META_PUBLIC MetadataLookup * LookupFromProgramInfo(ProgramInfo *pginfo)
META_PUBLIC MetadataLookup * ParseMetadataMovieNFO(const QDomElement &item, MetadataLookup *lookup)
META_PUBLIC void AddStudios(MetadataLookup *lookup, QDomElement placetoadd, QDomDocument docroot)
META_PUBLIC int editDistance(const QString &s, const QString &t)
META_PUBLIC ArtworkMap ParseArtwork(const QDomElement &artwork)
QMap< VideoArtworkType, ArtworkInfo > DownloadMap
ArtworkMap GetArtwork(const QString &inetref, uint season, bool strict)
QList< ArtworkInfo > ArtworkList
QMultiMap< VideoArtworkType, ArtworkInfo > ArtworkMap
VideoArtworkType
Q_DECLARE_METATYPE(std::chrono::seconds)
#define META_PUBLIC
Definition: mythmetaexp.h:9
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15
QString thumbnail
QString url
QString name
QString role