00001 #ifndef _EIT_H_
00002 #define _EIT_H_
00003
00004 #include <stdint.h>
00005 #include <vector>
00006 using namespace std;
00007
00008 #include <qmap.h>
00009 #include <qstring.h>
00010 #include <qdatetime.h>
00011 #include <qstringlist.h>
00012
00013 class MSqlQuery;
00014
00015 class DBPerson
00016 {
00017 public:
00018 typedef enum
00019 {
00020 kActor = 0,
00021 kDirector,
00022 kProducer,
00023 kExecutiveProducer,
00024 kWriter,
00025 kGuestStar,
00026 kHost,
00027 kAdapter,
00028 kPresenter,
00029 kCommentator,
00030 kGuest,
00031 } Role;
00032
00033 DBPerson(Role _role, const QString &_name);
00034
00035 QString GetRole(void) const;
00036
00037 uint InsertDB(MSqlQuery &query, uint chanid,
00038 const QDateTime &starttime) const;
00039
00040 private:
00041 uint GetPersonDB(MSqlQuery &query) const;
00042 uint InsertPersonDB(MSqlQuery &query) const;
00043 uint InsertCreditsDB(MSqlQuery &query, uint personid, uint chanid,
00044 const QDateTime &starttime) const;
00045
00046 private:
00047 Role role;
00048 QString name;
00049 };
00050 typedef vector<DBPerson> DBCredits;
00051
00052 class DBEvent
00053 {
00054 public:
00055 DBEvent(uint _chanid,
00056 const QString &_title, const QString &_subtitle,
00057 const QString &_desc,
00058 const QString &_category, uint _category_type,
00059 const QDateTime &_start, const QDateTime &_end,
00060 uint _fixup,
00061 unsigned char _subtitleType,
00062 unsigned char _audioProps,
00063 unsigned char _videoProps,
00064 const QString &_seriesId, const QString &_programId) :
00065 title(_title), subtitle(_subtitle),
00066 description(_desc),
00067 category(_category),
00068 starttime(_start), endtime(_end),
00069 airdate(QString::null),
00070 credits(NULL),
00071 chanid(_chanid),
00072 partnumber(0), parttotal(0),
00073 syndicatedepisodenumber(QString::null),
00074 fixup(_fixup),
00075 subtitleType(_subtitleType),
00076 audioProps(_audioProps), videoProps(_videoProps),
00077 category_type(_category_type),
00078 seriesId(_seriesId),
00079 programId(_programId),
00080 previouslyshown(false)
00081 {
00082 }
00083
00084 DBEvent(uint _chanid,
00085 const QString &_title, const QString &_desc,
00086 const QDateTime &_start, const QDateTime &_end,
00087 uint _fixup,
00088 unsigned char _subtitleType,
00089 unsigned char _audioProps,
00090 unsigned char _videoProps) :
00091 title(_title), subtitle(QString::null),
00092 description(_desc),
00093 category(QString::null),
00094 starttime(_start), endtime(_end),
00095 airdate(QString::null),
00096 credits(NULL),
00097 chanid(_chanid),
00098 partnumber(0), parttotal(0),
00099 syndicatedepisodenumber(QString::null),
00100 fixup(_fixup),
00101 subtitleType(_subtitleType),
00102 audioProps(_audioProps), videoProps(_videoProps),
00103 category_type(0), previouslyshown(false)
00104 {
00105 }
00106
00107 ~DBEvent() { if (credits) delete credits; }
00108
00109 void AddPerson(DBPerson::Role, const QString &name);
00110
00111 uint UpdateDB(MSqlQuery &query, int match_threshold) const;
00112
00113 bool HasCredits(void) const { return credits; }
00114
00115 private:
00116 uint GetOverlappingPrograms(MSqlQuery&, vector<DBEvent> &programs) const;
00117 int GetMatch(const vector<DBEvent> &programs, int &bestmatch) const;
00118 uint UpdateDB(MSqlQuery&, const vector<DBEvent> &p, int match) const;
00119 uint UpdateDB(MSqlQuery&, const DBEvent &match) const;
00120 bool MoveOutOfTheWayDB(MSqlQuery&, const DBEvent &nonmatch) const;
00121 uint InsertDB(MSqlQuery&) const;
00122 QString AddAuthority(const QString &, MSqlQuery &) const;
00123
00124 public:
00125 QString title;
00126 QString subtitle;
00127 QString description;
00128 QString category;
00129 QDateTime starttime;
00130 QDateTime endtime;
00131 QString airdate;
00132 QDate originalairdate;
00133 DBCredits *credits;
00134 uint32_t chanid;
00135 uint16_t partnumber;
00136 uint16_t parttotal;
00137 QString syndicatedepisodenumber;
00138 uint32_t fixup;
00139 unsigned char subtitleType;
00140 unsigned char audioProps;
00141 unsigned char videoProps;
00142 unsigned char category_type;
00143 QString seriesId;
00144 QString programId;
00145 bool previouslyshown;
00146 };
00147
00148 #endif // _EIT_H_