00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef QTTVDB_H
00022 #define QTTVDB_H
00023
00024 #include "qttvdb_export.h"
00025
00026 #include <QDebug>
00027 #include <QtCore/QObject>
00028 #include <QtCore/QStringList>
00029 #include <QtCore/QUrl>
00030 #include <QtCore/QDateTime>
00031 #include <QtXml/QDomNode>
00032 #include <QtCore/QVariant>
00033 #include <QtCore/QPair>
00034
00035 # define TVDB_PROPERTY_(type_, name_, getter_, setter_) \
00036 private: \
00037 type_ name_##_; \
00038 public: \
00039 inline type_ & getter_() { return name_##_; } \
00040 inline type_ const & getter_() const { return name_##_; }
00041
00042
00043 # define TVDB_PROPERTY_SIMPLE(type_, name_, getter_, setter_) \
00044 TVDB_PROPERTY_(type_, name_, getter_, setter_) \
00045 inline void setter_(type_ const & name_##__) { name_##_ = name_##__; }
00046
00047
00048 # define TVDB_PROPERTY(type_, name_, getter_, setter_) \
00049 TVDB_PROPERTY_(type_, name_, getter_, setter_) \
00050 inline void setter_(type_ const & name_##__) { \
00051 map_[#name_] = name_##__; \
00052 name_##_ = name_##__; \
00053 }
00054
00055 namespace QtTvDB {
00056
00057 class QTTVDB_EXPORT Mirrors {
00058 TVDB_PROPERTY_SIMPLE(QString, key, key, setKey);
00059 TVDB_PROPERTY_SIMPLE(QList<QUrl>, xmlMirrors, xmlMirrors, setXmlMirrors);
00060 TVDB_PROPERTY_SIMPLE(QList<QUrl>, bannerMirrors, bannerMirrors, setBannerMirrors);
00061 TVDB_PROPERTY_SIMPLE(QList<QUrl>, zipMirrors, zipMirrors, setZipMirrors);
00062 TVDB_PROPERTY_SIMPLE(QStringList, languages, languages, setLanguages);
00063
00064 public:
00065 Mirrors();
00066 Mirrors(const QString & key);
00067 ~Mirrors();
00068
00069 enum Mask {
00070 XML = 1,
00071 BANNER = 2,
00072 ZIP = 4
00073 };
00074
00075 QUrl mirrorsUrl();
00076 QUrl languagesUrl();
00077 QUrl serverTimeUrl();
00078 QUrl searchShowUrl(const QString & showName, const QString & language = QString());
00079 QUrl showUrl(qint64 showId);
00080 QUrl episodeUrl(qint64 episodeId);
00081 QUrl showAndEpisodesUrl(qint64 showId, const QString & language = QString());
00082 QUrl showAndEpisodesUrlZip(qint64 showId, const QString & language);
00083 QUrl updatesUrl(const QString & period);
00084 QUrl updatedShowsUrl(const QDateTime & period);
00085 QUrl updatedEpisodesUrl(const QDateTime & period);
00086 QUrl bannersUrl(qint64 showId);
00087 QUrl bannerUrl(const QString & path);
00088 int languageId(const QString & l);
00089 QString languageById(int id);
00090 QString languageNameById(int id);
00091 QString languageName(const QString & l);
00092 static QList< QPair < Mask, QUrl > > parseMirrors(const QString & xml);
00093 static QList< QPair < Mask, QUrl > > parseMirrors(const QDomNode & node);
00094 QUrl randomMirror(const QList<QUrl> & mirrors, bool key = false,
00095 const QString & postfix = QString(), bool api = true);
00096 private:
00097 void init();
00098 QMap < QString, QPair < int, QString > > languagesDb_;
00099 QMap < int, QString > languagesById_;
00100 };
00101
00102 class QTTVDB_EXPORT Episode {
00103 public:
00104 Episode();
00105 Episode(const QString & xml);
00106 Episode(const QDomNode & node);
00107 ~Episode();
00108
00109 bool isNull();
00110 QVariantMap map();
00111 static QList< Episode * > parseEpisodes(const QString & xml);
00112 static QList< Episode * > parseEpisodes(const QDomNode & node);
00113
00114 TVDB_PROPERTY(qint64, id, id, setId);
00115 TVDB_PROPERTY(qint64, showId, showId, setShowId);
00116 TVDB_PROPERTY(qint64, seasonId, seasonId, setSeasonId);
00117 TVDB_PROPERTY(QString, name, name, setName);
00118 TVDB_PROPERTY(QString, overview, overview, setOverview);
00119 TVDB_PROPERTY(int, season, season, setSeason);
00120 TVDB_PROPERTY(int, episode, episode, setEpisode);
00121 TVDB_PROPERTY(QString, director, director, setDirector);
00122 TVDB_PROPERTY(QStringList, guestStars, guestStars, setGuestStars);
00123 TVDB_PROPERTY(QString, language, language, setLanguage);
00124 TVDB_PROPERTY(QString, productionCode, productionCode, setProductionCode);
00125 TVDB_PROPERTY(QString, rating, rating, setRating);
00126 TVDB_PROPERTY(QString, writer, writer, setWriter);
00127
00128 TVDB_PROPERTY(QDateTime, firstAired, firstAired, setFirstAired);
00129
00130 TVDB_PROPERTY(QString, dvdChapter, dvdChapter, setDvdChapter);
00131 TVDB_PROPERTY(QString, dvdDiscId, dvdDiscId, setDvdDiscId);
00132 TVDB_PROPERTY(QString, dvdEpisodeNumber, dvdEpisodeNumber, setDvdEpisodeNumber);
00133 TVDB_PROPERTY(QString, dvdSeason, dvdSeason, setDvdSeason);
00134
00135 TVDB_PROPERTY(QString, image, image, setImage);
00136
00137 TVDB_PROPERTY(QString, airsAfterSeason, airsAfterSeason, setAirsAfterSeason);
00138 TVDB_PROPERTY(QString, airsBeforeSeason, airsBeforeSeason, setAirsBeforeSeason);
00139 TVDB_PROPERTY(QString, airsBeforeEpisode, airsBeforeEpisode, setAirsBeforeEpisode);
00140
00141 TVDB_PROPERTY(int, combinedEpisode, combinedEpisode, setCombinedEpisode);
00142 TVDB_PROPERTY(int, combinedSeason, combinedSeason, setCombinedSeason);
00143 TVDB_PROPERTY(int, absoluteNumber, absoluteNumber, setAbsoluteNumber);
00144 TVDB_PROPERTY(QString, epImgFlag, epImgFlag, setEpImgFlag);
00145
00146 TVDB_PROPERTY(QString, imdbId, imdbId, setImdbId);
00147
00148 TVDB_PROPERTY(QDateTime, lastUpdated, lastUpdated, setLastUpdated);
00149 private:
00150 void init();
00151 void init(const QDomNode &node);
00152 QVariantMap map_;
00153 };
00154
00155 class QTTVDB_EXPORT Show {
00156 public:
00157 Show();
00158 Show(const QString & xml);
00159 Show(const QDomNode & node);
00160 ~Show();
00161
00162 bool isNull();
00163 QVariantMap map();
00164
00165 static QList< Show * > parseShows(const QString & xml);
00166 static QList< Show * > parseShows(const QDomNode & node);
00167
00168 TVDB_PROPERTY(qint64, id, id, setId);
00169 TVDB_PROPERTY(QString, name, name, setName);
00170 TVDB_PROPERTY(QString, overview, overview, setOverview);
00171 TVDB_PROPERTY(QStringList, genre, genre, setGenre);
00172 TVDB_PROPERTY(QStringList, actors, actors, setActors);
00173 TVDB_PROPERTY(QString, network, network, setNetwork);
00174 TVDB_PROPERTY(QString, contentRating, contentRating, setContentRating);
00175 TVDB_PROPERTY(QString, rating, rating, setRating);
00176 TVDB_PROPERTY(QTime, runtime, runtime, setRuntime);
00177 TVDB_PROPERTY(QString, status, status, setStatus);
00178 TVDB_PROPERTY(QString, language, language, setLanguage);
00179
00180 TVDB_PROPERTY(QDateTime, firstAired, firstAired, setFirstAired);
00181 TVDB_PROPERTY(QString, airsDay, airsDay, setAirsDay);
00182 TVDB_PROPERTY(QTime, airsTime, airsTime, setAirsTime);
00183
00184 TVDB_PROPERTY(QString, banner, banner, setBanner);
00185 TVDB_PROPERTY(QString, poster, poster, setPoster);
00186 TVDB_PROPERTY(QString, fanArt, fanArt, setFanArt);
00187
00188 TVDB_PROPERTY(QString, imdbId, imdbId, setImdbId);
00189 TVDB_PROPERTY(QString, seriesId, seriesId, setSeriesId);
00190 TVDB_PROPERTY(QString, zap2itId, zap2itId, setZap2ItId);
00191
00192 TVDB_PROPERTY(QDateTime, lastUpdated, lastUpdated, setLastUpdated);
00193 private:
00194 void init();
00195 void init(const QDomNode &node);
00196 QVariantMap map_;
00197 };
00198
00199 class QTTVDB_EXPORT Banner {
00200 public:
00201 Banner();
00202 Banner(const QString & xml);
00203 Banner(const QDomNode & node);
00204 ~Banner();
00205
00206 bool isNull();
00207 QVariantMap map();
00208
00209 static QList< Banner * > parseBanners(const QString & xml);
00210 static QList< Banner * > parseBanners(const QDomNode & node);
00211
00212 TVDB_PROPERTY(qint64, id, id, setId);
00213 TVDB_PROPERTY(QString, path, path, setPath);
00214 TVDB_PROPERTY(QString, type, type, setType);
00215 TVDB_PROPERTY(QString, type2, type2, setType2);
00216 TVDB_PROPERTY(QString, language, language, setLanguage);
00217 TVDB_PROPERTY(QString, season, season, setSeason);
00218 private:
00219 void init();
00220 void init(const QDomNode &node);
00221 QVariantMap map_;
00222 };
00223 };
00224
00225 #endif // QTTVDB_H