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