00001 #ifndef VIDEOMETADATA_H_
00002 #define VIDEOMETADATA_H_
00003
00004 #include <utility>
00005 #include <vector>
00006
00007 #include <QString>
00008 #include <QDate>
00009
00010 #include "parentalcontrols.h"
00011 #include "mythmetaexp.h"
00012 #include "metadatacommon.h"
00013
00014 class MSqlQuery;
00015 class VideoMetadataListManager;
00016
00017 enum { VIDEO_YEAR_DEFAULT = 1895 };
00018
00019 const QString VIDEO_SUBTITLE_DEFAULT = "";
00020
00021 struct SortData;
00022
00023 typedef QHash<QString,QString> MetadataMap;
00024
00025 class META_PUBLIC VideoMetadata
00026 {
00027 public:
00028 typedef std::pair<int, QString> genre_entry;
00029 typedef std::pair<int, QString> country_entry;
00030 typedef std::pair<int, QString> cast_entry;
00031 typedef std::vector<genre_entry> genre_list;
00032 typedef std::vector<country_entry> country_list;
00033 typedef std::vector<cast_entry> cast_list;
00034
00035 public:
00036 class META_PUBLIC SortKey
00037 {
00038 public:
00039 SortKey();
00040 SortKey(const SortData &data);
00041 SortKey(const SortKey &other);
00042 SortKey &operator=(const SortKey &rhs);
00043 ~SortKey();
00044
00045 bool isSet() const;
00046 void Clear();
00047
00048 public:
00049 SortData *m_sd;
00050 };
00051
00052 public:
00053 static SortKey GenerateDefaultSortKey(const VideoMetadata &m, bool ignore_case);
00054 static int UpdateHashedDBRecord(const QString &hash, const QString &file_name,
00055 const QString &host);
00056 static QString VideoFileHash(const QString &file_name, const QString &host);
00057 static QString FilenameToMeta(const QString &file_name, int position);
00058 static QString TrimTitle(const QString &title, bool ignore_case);
00059
00060 public:
00061 VideoMetadata(const QString &filename = QString(),
00062 const QString &hash = QString(),
00063 const QString &trailer = QString(),
00064 const QString &coverfile = QString(),
00065 const QString &screenshot = QString(),
00066 const QString &banner = QString(),
00067 const QString &fanart = QString(),
00068 const QString &title = QString(),
00069 const QString &subtitle = QString(),
00070 const QString &tagline = QString(),
00071 int year = VIDEO_YEAR_DEFAULT,
00072 const QDate &releasedate = QDate(),
00073 const QString &inetref = QString(),
00074 int collectionref = 0,
00075 const QString &homepage = QString(),
00076 const QString &director = QString(),
00077 const QString &studio = QString(),
00078 const QString &plot = QString(),
00079 float userrating = 0.0,
00080 const QString &rating = QString(),
00081 int length = 0,
00082 int playcount = 0,
00083 int season = 0,
00084 int episode = 0,
00085 const QDate &insertdate = QDate(),
00086 int id = 0,
00087 ParentalLevel::Level showlevel = ParentalLevel::plLowest,
00088 int categoryID = 0,
00089 int childID = -1,
00090 bool browse = true,
00091 bool watched = false,
00092 const QString &playcommand = QString(),
00093 const QString &category = QString(),
00094 const genre_list &genres = genre_list(),
00095 const country_list &countries = country_list(),
00096 const cast_list &cast = cast_list(),
00097 const QString &host = "",
00098 bool processed = false,
00099 VideoContentType contenttype = kContentUnknown);
00100 ~VideoMetadata();
00101 VideoMetadata(MSqlQuery &query);
00102 VideoMetadata(const VideoMetadata &rhs);
00103 VideoMetadata &operator=(const VideoMetadata &rhs);
00104
00105 void toMap(MetadataMap &metadataMap);
00106 void GetStateMap(MetadataMap &stateMap);
00107 void GetImageMap(MetadataMap &imageMap);
00108
00109
00110 bool HasSortKey() const;
00111 const SortKey &GetSortKey() const;
00112 void SetSortKey(const SortKey &sort_key);
00113
00114 const QString &GetPrefix() const;
00115 void SetPrefix(const QString &prefix);
00116
00117 const QString &GetTitle() const;
00118 void SetTitle(const QString& title);
00119
00120 const QString &GetSubtitle() const;
00121 void SetSubtitle(const QString &subtitle);
00122
00123 const QString &GetTagline() const;
00124 void SetTagline(const QString &tagline);
00125
00126 int GetYear() const;
00127 void SetYear(int year);
00128
00129 QDate GetReleaseDate() const;
00130 void SetReleaseDate(QDate releasedate);
00131
00132 const QString &GetInetRef() const;
00133 void SetInetRef(const QString &inetRef);
00134
00135 int GetCollectionRef() const;
00136 void SetCollectionRef(int collectionref);
00137
00138 const QString &GetHomepage() const;
00139 void SetHomepage(const QString &homepage);
00140
00141 const QString &GetDirector() const;
00142 void SetDirector(const QString &director);
00143
00144 const QString &GetStudio() const;
00145 void SetStudio(const QString &studio);
00146
00147 const QString &GetPlot() const;
00148 void SetPlot(const QString &plot);
00149
00150 float GetUserRating() const;
00151 void SetUserRating(float userRating);
00152
00153 const QString &GetRating() const;
00154 void SetRating(const QString &rating);
00155
00156 int GetLength() const;
00157 void SetLength(int length);
00158
00159 int GetSeason() const;
00160 void SetSeason(int season);
00161
00162 int GetEpisode() const;
00163 void SetEpisode(int episode);
00164
00165 QDate GetInsertdate() const;
00166 void SetInsertdate(QDate date);
00167
00168 unsigned int GetID() const;
00169 void SetID(int id);
00170
00171 int GetChildID() const;
00172 void SetChildID(int childID);
00173
00174 bool GetBrowse() const;
00175 void SetBrowse(bool browse);
00176
00177 bool GetWatched() const;
00178 void SetWatched(bool watched);
00179
00180 bool GetProcessed() const;
00181 void SetProcessed(bool processed);
00182
00183 VideoContentType GetContentType() const;
00184 void SetContentType(VideoContentType contenttype);
00185
00186 const QString &GetPlayCommand() const;
00187 void SetPlayCommand(const QString &playCommand);
00188
00189 unsigned int GetPlayCount() const;
00190 void SetPlayCount(int count);
00191
00192 ParentalLevel::Level GetShowLevel() const;
00193 void SetShowLevel(ParentalLevel::Level showLevel);
00194
00195 const QString &GetHost() const;
00196 void SetHost(const QString &host);
00197
00198 const QString &GetFilename() const;
00199 void SetFilename(const QString &filename);
00200
00201 const QString &GetHash() const;
00202 void SetHash(const QString &hash);
00203
00204 const QString &GetTrailer() const;
00205 void SetTrailer(const QString &trailer);
00206
00207 const QString &GetCoverFile() const;
00208 void SetCoverFile(const QString &coverFile);
00209
00210 const QString &GetScreenshot() const;
00211 void SetScreenshot(const QString &screenshot);
00212
00213 const QString &GetBanner() const;
00214 void SetBanner(const QString &banner);
00215
00216 const QString &GetFanart() const;
00217 void SetFanart(const QString &fanart);
00218
00219 const QString &GetCategory() const;
00220
00221 const genre_list &GetGenres() const;
00222 void SetGenres(const genre_list &genres);
00223
00224 const cast_list &GetCast() const;
00225 void SetCast(const cast_list &cast);
00226
00227 const country_list &GetCountries() const;
00228 void SetCountries(const country_list &countries);
00229
00230 int GetCategoryID() const;
00231 void SetCategoryID(int id);
00232
00233 void SaveToDatabase();
00234 void UpdateDatabase();
00235
00236 bool DeleteFromDatabase();
00237
00238
00239 bool FillDataFromFilename(const VideoMetadataListManager &cache);
00240
00241
00242 bool DeleteFile();
00243
00245 void Reset();
00246
00247 bool IsHostSet() const;
00248
00249 private:
00250 class VideoMetadataImp *m_imp;
00251 };
00252
00253 META_PUBLIC void ClearMap(MetadataMap &metadataMap);
00254
00255 META_PUBLIC bool operator==(const VideoMetadata &a, const VideoMetadata &b);
00256 META_PUBLIC bool operator!=(const VideoMetadata &a, const VideoMetadata &b);
00257
00258 META_PUBLIC bool operator<(const VideoMetadata::SortKey &lhs, const VideoMetadata::SortKey &rhs);
00259
00260 Q_DECLARE_METATYPE(VideoMetadata*)
00261
00262 #endif