00001 #ifndef _PROGRAMDATA_H_
00002 #define _PROGRAMDATA_H_
00003
00004
00005 #include <vector>
00006 using namespace std;
00007
00008
00009 #include <stdint.h>
00010
00011
00012 #include <QString>
00013 #include <QDateTime>
00014 #include <QList>
00015 #include <QMap>
00016
00017
00018 #include "mythtvexp.h"
00019 #include "listingsources.h"
00020
00021 class MSqlQuery;
00022
00023 class MTV_PUBLIC DBPerson
00024 {
00025 public:
00026 typedef enum
00027 {
00028 kUnknown = 0,
00029 kActor,
00030 kDirector,
00031 kProducer,
00032 kExecutiveProducer,
00033 kWriter,
00034 kGuestStar,
00035 kHost,
00036 kAdapter,
00037 kPresenter,
00038 kCommentator,
00039 kGuest,
00040 } Role;
00041
00042 DBPerson(const DBPerson&);
00043 DBPerson(Role _role, const QString &_name);
00044 DBPerson(const QString &_role, const QString &_name);
00045
00046 QString GetRole(void) const;
00047
00048 uint InsertDB(MSqlQuery &query, uint chanid,
00049 const QDateTime &starttime) const;
00050
00051 private:
00052 uint GetPersonDB(MSqlQuery &query) const;
00053 uint InsertPersonDB(MSqlQuery &query) const;
00054 uint InsertCreditsDB(MSqlQuery &query, uint personid, uint chanid,
00055 const QDateTime &starttime) const;
00056
00057 private:
00058 Role role;
00059 QString name;
00060 };
00061 typedef vector<DBPerson> DBCredits;
00062
00063 class MTV_PUBLIC EventRating
00064 {
00065 public:
00066 QString system;
00067 QString rating;
00068 };
00069
00070 class MTV_PUBLIC DBEvent
00071 {
00072 public:
00073 DBEvent(uint _listingsource) :
00074 title(),
00075 subtitle(),
00076 description(),
00077 category(),
00078
00079 airdate(0),
00080 credits(NULL),
00081 partnumber(0),
00082 parttotal(0),
00083 syndicatedepisodenumber(),
00084 subtitleType(0),
00085 audioProps(0),
00086 videoProps(0),
00087 stars(0.0),
00088 categoryType(0),
00089 seriesId(),
00090 programId(),
00091 previouslyshown(false),
00092 listingsource(_listingsource) {}
00093
00094 DBEvent(const QString &_title, const QString &_subtitle,
00095 const QString &_desc,
00096 const QString &_category, uint _category_type,
00097 const QDateTime &_start, const QDateTime &_end,
00098 unsigned char _subtitleType,
00099 unsigned char _audioProps,
00100 unsigned char _videoProps,
00101 float _stars,
00102 const QString &_seriesId, const QString &_programId,
00103 uint32_t _listingsource) :
00104 title(_title), subtitle(_subtitle),
00105 description(_desc),
00106 category(_category),
00107 starttime(_start), endtime(_end),
00108 airdate(0),
00109 credits(NULL),
00110 partnumber(0), parttotal(0),
00111 syndicatedepisodenumber(),
00112 subtitleType(_subtitleType),
00113 audioProps(_audioProps), videoProps(_videoProps),
00114 stars(_stars),
00115 categoryType(_category_type),
00116 seriesId(_seriesId),
00117 programId(_programId),
00118 previouslyshown(false),
00119 listingsource(_listingsource)
00120 {
00121 }
00122
00123 virtual ~DBEvent() { delete credits; }
00124
00125 void AddPerson(DBPerson::Role, const QString &name);
00126 void AddPerson(const QString &role, const QString &name);
00127
00128 uint UpdateDB(MSqlQuery &query, uint chanid, int match_threshold) const;
00129
00130 bool HasCredits(void) const { return credits; }
00131 bool HasTimeConflict(const DBEvent &other) const;
00132
00133 DBEvent &operator=(const DBEvent&);
00134
00135 protected:
00136 uint GetOverlappingPrograms(
00137 MSqlQuery&, uint chanid, vector<DBEvent> &programs) const;
00138 int GetMatch(
00139 const vector<DBEvent> &programs, int &bestmatch) const;
00140 uint UpdateDB(
00141 MSqlQuery&, uint chanid, const vector<DBEvent> &p, int match) const;
00142 uint UpdateDB(
00143 MSqlQuery&, uint chanid, const DBEvent &match) const;
00144 bool MoveOutOfTheWayDB(
00145 MSqlQuery&, uint chanid, const DBEvent &nonmatch) const;
00146 virtual uint InsertDB(MSqlQuery&, uint chanid) const;
00147 virtual void Squeeze(void);
00148
00149 public:
00150 QString title;
00151 QString subtitle;
00152 QString description;
00153 QString category;
00154 QDateTime starttime;
00155 QDateTime endtime;
00156 uint16_t airdate;
00157 QDate originalairdate;
00158 DBCredits *credits;
00159 uint16_t partnumber;
00160 uint16_t parttotal;
00161 QString syndicatedepisodenumber;
00162 unsigned char subtitleType;
00163 unsigned char audioProps;
00164 unsigned char videoProps;
00165 float stars;
00166 unsigned char categoryType;
00167 QString seriesId;
00168 QString programId;
00169 bool previouslyshown;
00170 uint32_t listingsource;
00171 QList<EventRating> ratings;
00172 };
00173
00174 class MTV_PUBLIC DBEventEIT : public DBEvent
00175 {
00176 public:
00177 DBEventEIT(uint _chanid,
00178 const QString &_title, const QString &_subtitle,
00179 const QString &_desc,
00180 const QString &_category, uint _category_type,
00181 const QDateTime &_start, const QDateTime &_end,
00182 uint _fixup,
00183 unsigned char _subtitleType,
00184 unsigned char _audioProps,
00185 unsigned char _videoProps,
00186 float _stars,
00187 const QString &_seriesId, const QString &_programId) :
00188 DBEvent(_title, _subtitle, _desc, _category, _category_type,
00189 _start, _end, _subtitleType, _audioProps, _videoProps,
00190 _stars, _seriesId, _programId, kListingSourceEIT),
00191 chanid(_chanid), fixup(_fixup)
00192 {
00193 }
00194
00195 DBEventEIT(uint _chanid,
00196 const QString &_title, const QString &_desc,
00197 const QDateTime &_start, const QDateTime &_end,
00198 uint _fixup,
00199 unsigned char _subtitleType,
00200 unsigned char _audioProps,
00201 unsigned char _videoProps) :
00202 DBEvent(_title, QString(), _desc, QString(), 0,
00203 _start, _end, _subtitleType, _audioProps, _videoProps,
00204 0.0, QString(), QString(), kListingSourceEIT),
00205 chanid(_chanid), fixup(_fixup)
00206 {
00207 }
00208
00209 uint UpdateDB(MSqlQuery &query, int match_threshold) const
00210 {
00211 return DBEvent::UpdateDB(query, chanid, match_threshold);
00212 }
00213
00214 public:
00215 uint32_t chanid;
00216 uint32_t fixup;
00217 };
00218
00219 class MTV_PUBLIC ProgInfo : public DBEvent
00220 {
00221 public:
00222 ProgInfo() :
00223 DBEvent(kListingSourceXMLTV),
00224
00225 channel(QString::null),
00226 startts(QString::null),
00227 endts(QString::null),
00228 stars(QString::null),
00229 title_pronounce(QString::null),
00230 showtype(QString::null),
00231 colorcode(QString::null),
00232 clumpidx(QString::null),
00233 clumpmax(QString::null) { }
00234
00235 ProgInfo(const ProgInfo &other);
00236
00237 uint InsertDB(MSqlQuery &query, uint chanid) const;
00238
00239 void Squeeze(void);
00240
00241 ProgInfo &operator=(const ProgInfo&);
00242
00243 public:
00244
00245 QString channel;
00246 QString startts;
00247 QString endts;
00248 QString stars;
00249 QString title_pronounce;
00250 QString showtype;
00251 QString colorcode;
00252 QString clumpidx;
00253 QString clumpmax;
00254 };
00255
00256 class MTV_PUBLIC ProgramData
00257 {
00258 public:
00259 static void HandlePrograms(uint sourceid,
00260 QMap<QString, QList<ProgInfo> > &proglist);
00261
00262 static int fix_end_times(void);
00263 static bool ClearDataByChannel(
00264 uint chanid,
00265 const QDateTime &from,
00266 const QDateTime &to,
00267 bool use_channel_time_offset);
00268 static bool ClearDataBySource(
00269 uint sourceid,
00270 const QDateTime &from,
00271 const QDateTime &to,
00272 bool use_channel_time_offset);
00273
00274 private:
00275 static void FixProgramList(QList<ProgInfo*> &fixlist);
00276 static void HandlePrograms(
00277 MSqlQuery &query, uint chanid,
00278 const QList<ProgInfo*> &sortlist,
00279 uint &unchanged, uint &updated);
00280 static bool IsUnchanged(
00281 MSqlQuery &query, uint chanid, const ProgInfo &pi);
00282 static bool DeleteOverlaps(
00283 MSqlQuery &query, uint chanid, const ProgInfo &pi);
00284 };
00285
00286 #endif // _PROGRAMDATA_H_