00001 #ifndef METADATACOMMON_H_
00002 #define METADATACOMMON_H_
00003
00004 #include <QList>
00005 #include <QPair>
00006 #include <QMultiMap>
00007 #include <QString>
00008 #include <QStringList>
00009 #include <QDateTime>
00010 #include <QDate>
00011 #include <QDomElement>
00012 #include <QEvent>
00013
00014 #include "mythmetaexp.h"
00015 #include "metadataimagehelper.h"
00016
00017 class ProgramInfo;
00018
00019 enum LookupStep {
00020 kLookupSearch = 0,
00021 kLookupData = 1,
00022 kLookupCollection = 2
00023 };
00024
00025 struct PersonInfo
00026 {
00027 QString name;
00028 QString role;
00029 QString thumbnail;
00030 QString url;
00031 };
00032
00033
00034 enum MetadataType {
00035 kMetadataVideo = 0,
00036 kMetadataRecording = 1,
00037 kMetadataMusic = 2,
00038 kMetadataGame = 3
00039 };
00040
00041
00042 enum LookupType {
00043 kProbableTelevision = 0,
00044 kProbableGenericTelevision = 1,
00045 kProbableMovie = 2,
00046 kUnknownVideo = 3,
00047 kProbableMusic = 4,
00048 kProbableGame = 5
00049 };
00050
00051
00052 enum VideoContentType {
00053 kContentMovie = 0,
00054 kContentTelevision = 1,
00055 kContentAdult = 2,
00056 kContentMusicVideo = 3,
00057 kContentHomeMovie = 4,
00058 kContentUnknown = 5
00059 };
00060
00061 enum PeopleType {
00062 kPersonActor = 0,
00063 kPersonAuthor = 1,
00064 kPersonDirector = 2,
00065 kPersonProducer = 3,
00066 kPersonExecProducer = 4,
00067 kPersonCinematographer = 5,
00068 kPersonComposer = 6,
00069 kPersonEditor = 7,
00070 kPersonCastingDirector = 8,
00071 kPersonArtist = 9,
00072 kPersonAlbumArtist = 10,
00073 kPersonGuestStar = 11
00074 };
00075
00076 typedef QMap< VideoArtworkType, ArtworkInfo > DownloadMap;
00077
00078 typedef QMultiMap< PeopleType, PersonInfo > PeopleMap;
00079
00080 typedef QHash<QString,QString> MetadataMap;
00081
00082 class META_PUBLIC MetadataLookup : public QObject
00083 {
00084 public:
00085 MetadataLookup(void);
00086 ~MetadataLookup();
00087
00088 MetadataLookup(
00089 MetadataType type,
00090 LookupType subtype,
00091 QVariant data,
00092 LookupStep step,
00093 bool automatic,
00094 bool handleimages,
00095 bool allowoverwrites,
00096 bool allowgeneric,
00097 bool preferdvdorder,
00098 const QString &host,
00099 const QString &filename,
00100 const QString &title,
00101 const QString &network,
00102 const QString &status,
00103 const QStringList &categories,
00104 const float userrating,
00105 uint ratingcount,
00106 const QString &language,
00107 const QString &subtitle,
00108 const QString &tagline,
00109 const QString &description,
00110 uint season,
00111 uint episode,
00112 const uint chanid,
00113 const QString &channum,
00114 const QString &chansign,
00115 const QString &channame,
00116 const QString &chanplaybackfilters,
00117 const QString &recgroup,
00118 const QString &playgroup,
00119 const QString &seriesid,
00120 const QString &programid,
00121 const QString &storagegroup,
00122 const QDateTime startts,
00123 const QDateTime endts,
00124 const QDateTime recstartts,
00125 const QDateTime recendts,
00126 const uint programflags,
00127 const uint audioproperties,
00128 const uint videoproperties,
00129 const uint subtitletype,
00130 const QString &certification,
00131 const QStringList &countries,
00132 const uint popularity,
00133 const uint budget,
00134 const uint revenue,
00135 const QString &album,
00136 uint tracknum,
00137 const QString &system,
00138 const uint year,
00139 const QDate releasedate,
00140 const QDateTime lastupdated,
00141 const uint runtime,
00142 const uint runtimesecs,
00143 const QString &inetref,
00144 const QString &collectionref,
00145 const QString &tmsref,
00146 const QString &imdb,
00147 const PeopleMap people,
00148 const QStringList &studios,
00149 const QString &homepage,
00150 const QString &trailerURL,
00151 const ArtworkMap artwork,
00152 DownloadMap downloads);
00153
00154
00155 MetadataLookup(
00156 MetadataType type,
00157 LookupType subtype,
00158 QVariant data,
00159 LookupStep step,
00160 bool automatic,
00161 bool handleimages,
00162 bool allowoverwrites,
00163 bool allowgeneric,
00164 bool preferdvdorder,
00165 const QString &host,
00166 const QString &filename,
00167 const QString &title,
00168 const QStringList &categories,
00169 const float userrating,
00170 const QString &subtitle,
00171 const QString &description,
00172 uint chanid,
00173 const QString &channum,
00174 const QString &chansign,
00175 const QString &channame,
00176 const QString &chanplaybackfilters,
00177 const QString &recgroup,
00178 const QString &playgroup,
00179 const QString &seriesid,
00180 const QString &programid,
00181 const QString &storagegroup,
00182 const QDateTime startts,
00183 const QDateTime endts,
00184 const QDateTime recstartts,
00185 const QDateTime recendts,
00186 uint programflags,
00187 uint audioproperties,
00188 uint videoproperties,
00189 uint subtitletype,
00190 const uint year,
00191 const QDate releasedate,
00192 const QDateTime lastupdated,
00193 const uint runtime,
00194 const uint runtimesecs);
00195
00196
00197 MetadataLookup(
00198 MetadataType type,
00199 LookupType subtype,
00200 QVariant data,
00201 LookupStep step,
00202 bool automatic,
00203 bool handleimages,
00204 bool allowoverwrites,
00205 bool allowgeneric,
00206 bool preferdvdorder,
00207 const QString &host,
00208 const QString &filename,
00209 const QString &title,
00210 const QStringList &categories,
00211 const float userrating,
00212 const QString &subtitle,
00213 const QString &tagline,
00214 const QString &description,
00215 uint season,
00216 uint episode,
00217 const QString &certification,
00218 const uint year,
00219 const QDate releasedate,
00220 const uint runtime,
00221 const uint runtimesecs,
00222 const QString &inetref,
00223 const PeopleMap people,
00224 const QString &trailerURL,
00225 const ArtworkMap artwork,
00226 DownloadMap downloads);
00227
00228 void toMap(MetadataMap &map);
00229
00230
00231
00232
00233 void SetType(MetadataType type) { m_type = type; };
00234
00235 void SetSubtype(LookupType subtype) { m_subtype = subtype; };
00236
00237 void SetData(QVariant data) { m_data = data; };
00238
00239 void SetStep(LookupStep step) { m_step = step; };
00240
00241 void SetAutomatic(bool autom) { m_automatic = autom; };
00242
00243
00244 void SetHandleImages(bool handle) { m_handleimages = handle; };
00245 void SetAllowOverwrites(bool allow) { m_allowoverwrites = allow; };
00246 void SetAllowGeneric(bool allow) { m_allowgeneric = allow; };
00247 void SetHost(const QString &host) { m_host = host; };
00248 void SetDownloads(ArtworkMap map) { m_downloads = map; };
00249
00250
00251 void SetTitle(const QString &title) { m_title = title; };
00252 void SetFilename(const QString &filename) { m_filename = filename; };
00253
00254
00255 void SetSubtitle(const QString &subtitle) { m_subtitle = subtitle; };
00256 void SetSeason(uint season) { m_season = season; };
00257 void SetEpisode(uint episode) { m_episode = episode; };
00258 void SetInetref(const QString &inetref) { m_inetref = inetref; };
00259 void SetCollectionref(const QString &collectionref)
00260 { m_collectionref = collectionref; };
00261 void SetTMSref(const QString &tmsref) { m_tmsref = tmsref; };
00262 void SetPreferDVDOrdering(bool preferdvdorder)
00263 { m_dvdorder = preferdvdorder; };
00264
00265
00266 void SetAlbum(const QString &album) { m_album = album; };
00267 void SetTrack(uint track) { m_tracknum = track; };
00268
00269
00270 void SetSystem(const QString &system) { m_system = system; };
00271
00272
00273
00274 MetadataType GetType() const { return m_type; };
00275 LookupType GetSubtype() const { return m_subtype; };
00276 QVariant GetData() const { return m_data; };
00277 LookupStep GetStep() const { return m_step; };
00278 bool GetAutomatic() const { return m_automatic; };
00279
00280
00281 bool GetHandleImages() const { return m_handleimages; };
00282 bool GetAllowOverwrites() const { return m_allowoverwrites; };
00283 bool GetAllowGeneric() const { return m_allowgeneric; };
00284
00285
00286 QString GetFilename() const { return m_filename; };
00287 QString GetTitle() const { return m_title; };
00288 QStringList GetCategories() const { return m_categories; };
00289 float GetUserRating() const { return m_userrating; };
00290 uint GetRatingCount() const { return m_ratingcount; };
00291 QString GetLanguage() const { return m_language; };
00292 QString GetHost() const { return m_host; };
00293
00294
00295 QString GetNetwork() const { return m_network; };
00296 QString GetStatus() const { return m_status; };
00297 QString GetSubtitle() const { return m_subtitle; };
00298 QString GetTagline() const { return m_tagline; };
00299 QString GetDescription() const { return m_description; };
00300 bool GetPreferDVDOrdering() const { return m_dvdorder; };
00301 uint GetSeason() const { return m_season; };
00302 uint GetEpisode() const { return m_episode; };
00303 uint GetChanId() const { return m_chanid; };
00304 QString GetChanNum() const { return m_channum; };
00305 QString GetChanSign() const { return m_chansign; };
00306 QString GetChanName() const { return m_channame; };
00307 QString GetChanPlaybackFilters() const { return m_chanplaybackfilters; };
00308 QString GetRecGroup() const { return m_recgroup; };
00309 QString GetPlayGroup() const { return m_playgroup; };
00310 QString GetSeriesId() const { return m_seriesid; };
00311 QString GetProgramId() const { return m_programid; };
00312 QString GetStorageGroup() const { return m_storagegroup; };
00313 QDateTime GetStartTS() const { return m_startts; };
00314 QDateTime GetEndTS() const { return m_endts; };
00315 QDateTime GetRecStartTS() const { return m_recstartts; };
00316 QDateTime GetRecEndTS() const { return m_recendts; };
00317 uint GetProgramFlags() const { return m_programflags; };
00318 uint GetAudioProperties() const { return m_audioproperties; };
00319 uint GetVideoProperties() const { return m_videoproperties; };
00320 uint GetSubtitleType() const { return m_subtitletype; };
00321
00322 QString GetCertification() const { return m_certification; };
00323 QStringList GetCountries() const { return m_countries; };
00324 uint GetPopularity() const { return m_popularity; };
00325 uint GetBudget() const { return m_budget; };
00326 uint GetRevenue() const { return m_revenue; };
00327
00328
00329 QString GetAlbumTitle() const { return m_album; };
00330 uint GetTrackNumber() const { return m_tracknum; };
00331
00332
00333 QString GetSystem() const { return m_system; };
00334
00335
00336 uint GetYear() const { return m_year; };
00337 QDate GetReleaseDate() const { return m_releasedate; };
00338 QDateTime GetLastUpdated() const { return m_lastupdated; };
00339 uint GetRuntime() const { return m_runtime; };
00340 uint GetRuntimeSeconds() const { return m_runtimesecs; };
00341
00342
00343 QString GetInetref() const { return m_inetref; };
00344 QString GetCollectionref() const { return m_collectionref; };
00345 QString GetIMDB() const { return m_imdb; };
00346 QString GetTMSref() const { return m_tmsref; };
00347
00348
00349 QList<PersonInfo> GetPeople(PeopleType type) const;
00350 QStringList GetStudios() const { return m_studios; };
00351
00352
00353 QString GetHomepage() const { return m_homepage; };
00354 QString GetTrailerURL() const { return m_trailerURL; };
00355
00356
00357 ArtworkList GetArtwork(VideoArtworkType type) const;
00358 DownloadMap GetDownloads() const { return m_downloads; };
00359
00360 private:
00361
00362 MetadataType m_type;
00363 LookupType m_subtype;
00364 QVariant m_data;
00365 LookupStep m_step;
00366 bool m_automatic;
00367 bool m_handleimages;
00368 bool m_allowoverwrites;
00369 bool m_allowgeneric;
00370 bool m_dvdorder;
00371 QString m_host;
00372
00373 QString m_filename;
00374 QString m_title;
00375 QString m_network;
00376 QString m_status;
00377 const QStringList m_categories;
00378 float m_userrating;
00379 uint m_ratingcount;
00380 const QString m_language;
00381
00382
00383 QString m_subtitle;
00384 const QString m_tagline;
00385 const QString m_description;
00386 uint m_season;
00387 uint m_episode;
00388 uint m_chanid;
00389 const QString m_channum;
00390 const QString m_chansign;
00391 const QString m_channame;
00392 const QString m_chanplaybackfilters;
00393 const QString m_recgroup;
00394 const QString m_playgroup;
00395 const QString m_seriesid;
00396 const QString m_programid;
00397 const QString m_storagegroup;
00398 const QDateTime m_startts;
00399 const QDateTime m_endts;
00400 const QDateTime m_recstartts;
00401 const QDateTime m_recendts;
00402 uint m_programflags;
00403 uint m_audioproperties;
00404 uint m_videoproperties;
00405 uint m_subtitletype;
00406
00407 const QString m_certification;
00408 const QStringList m_countries;
00409 uint m_popularity;
00410 uint m_budget;
00411 uint m_revenue;
00412
00413
00414 QString m_album;
00415 uint m_tracknum;
00416
00417
00418 QString m_system;
00419
00420
00421 uint m_year;
00422 const QDate m_releasedate;
00423 const QDateTime m_lastupdated;
00424 uint m_runtime;
00425 uint m_runtimesecs;
00426
00427
00428 QString m_inetref;
00429 QString m_collectionref;
00430 QString m_tmsref;
00431 QString m_imdb;
00432
00433
00434 const PeopleMap m_people;
00435 const QStringList m_studios;
00436
00437
00438 const QString m_homepage;
00439 const QString m_trailerURL;
00440
00441
00442 const ArtworkMap m_artwork;
00443 DownloadMap m_downloads;
00444 };
00445
00446 typedef QList<MetadataLookup*> MetadataLookupList;
00447
00448 META_PUBLIC QDomDocument CreateMetadataXML(MetadataLookupList list);
00449 META_PUBLIC QDomDocument CreateMetadataXML(MetadataLookup *lookup);
00450 META_PUBLIC QDomDocument CreateMetadataXML(ProgramInfo *pginfo);
00451
00452 META_PUBLIC void CreateMetadataXMLItem(MetadataLookup *lookup,
00453 QDomElement placetoadd,
00454 QDomDocument docroot);
00455
00456 META_PUBLIC void AddCertifications(MetadataLookup *lookup,
00457 QDomElement placetoadd,
00458 QDomDocument docroot);
00459 META_PUBLIC void AddCategories(MetadataLookup *lookup,
00460 QDomElement placetoadd,
00461 QDomDocument docroot);
00462 META_PUBLIC void AddStudios(MetadataLookup *lookup,
00463 QDomElement placetoadd,
00464 QDomDocument docroot);
00465 META_PUBLIC void AddCountries(MetadataLookup *lookup,
00466 QDomElement placetoadd,
00467 QDomDocument docroot);
00468
00469 META_PUBLIC MetadataLookup* LookupFromProgramInfo(ProgramInfo *pginfo);
00470
00471 META_PUBLIC MetadataLookup* ParseMetadataItem(const QDomElement& item,
00472 MetadataLookup *lookup,
00473 bool passseas = true);
00474 META_PUBLIC MetadataLookup* ParseMetadataMovieNFO(const QDomElement& item,
00475 MetadataLookup *lookup);
00476 META_PUBLIC PeopleMap ParsePeople(QDomElement people);
00477 META_PUBLIC ArtworkMap ParseArtwork(QDomElement artwork);
00478
00479 META_PUBLIC int editDistance(const QString& s, const QString& t);
00480 META_PUBLIC QString nearestName(const QString& actual,
00481 const QStringList& candidates);
00482
00483 META_PUBLIC QDateTime RFC822TimeToQDateTime(const QString& t);
00484
00485 enum GrabberType {
00486 kGrabberMovie = 0,
00487 kGrabberTelevision = 1,
00488 kGrabberMusic = 2,
00489 kGrabberGame = 3
00490 };
00491
00492 class META_PUBLIC MetaGrabberScript : public QObject
00493 {
00494 public:
00495 MetaGrabberScript();
00496 ~MetaGrabberScript();
00497
00498 MetaGrabberScript(
00499 const QString &name,
00500 const QString &author,
00501 const QString &thumbnail,
00502 const QString &command,
00503 const GrabberType type,
00504 const QString &typestring,
00505 const QString &description,
00506 const float version);
00507
00508 QString GetName(void) const { return m_name; };
00509 QString GetAuthor(void) const { return m_author; };
00510 QString GetThumbnail(void) const { return m_thumbnail; };
00511 QString GetCommand(void) const { return m_command; };
00512 GrabberType GetType(void) const { return m_type; };
00513 QString GetTypeString(void) const { return m_typestring; };
00514 QString GetDescription(void) const { return m_description; };
00515 float GetVersion(void) const { return m_version; };
00516
00517 void toMap(MetadataMap &metadataMap);
00518
00519 private:
00520 QString m_name;
00521 QString m_author;
00522 QString m_thumbnail;
00523 QString m_command;
00524 GrabberType m_type;
00525 QString m_typestring;
00526 QString m_description;
00527 float m_version;
00528 };
00529
00530 META_PUBLIC MetaGrabberScript* ParseGrabberVersion(const QDomElement& item);
00531
00532 Q_DECLARE_METATYPE(MetaGrabberScript*)
00533 Q_DECLARE_METATYPE(MetadataLookup*)
00534
00535 #endif // METADATACOMMON_H_