00001 #ifndef RSSPARSE_H
00002 #define RSSPARSE_H
00003
00004 #include <vector>
00005 using namespace std;
00006
00007 #include <QString>
00008 #include <QStringList>
00009 #include <QList>
00010 #include <QObject>
00011 #include <QDomDocument>
00012 #include <QDateTime>
00013 #include <QPair>
00014 #include <QMap>
00015 #include <QVariant>
00016 #include <sys/types.h>
00017
00018 #include "mythexp.h"
00019
00020 typedef QHash<QString,QString> MetadataMap;
00021
00022 typedef enum ArticleTypes {
00023 VIDEO_FILE = 0,
00024 VIDEO_PODCAST = 1,
00025 AUDIO_FILE = 2,
00026 AUDIO_PODCAST = 3
00027 } ArticleType;
00028
00031 struct Enclosure
00032 {
00033 QString URL;
00034 QString Type;
00035 qint64 Length;
00036 QString Lang;
00037 };
00038
00039 struct MRSSThumbnail
00040 {
00041 QString URL;
00042 int Width;
00043 int Height;
00044 QString Time;
00045 };
00046
00047 struct MRSSCredit
00048 {
00049 QString Role;
00050 QString Who;
00051 };
00052
00053 struct MRSSComment
00054 {
00055 QString Type;
00056 QString Comment;
00057 };
00058
00059 struct MRSSPeerLink
00060 {
00061 QString Type;
00062 QString Link;
00063 };
00064
00065 struct MRSSScene
00066 {
00067 QString Title;
00068 QString Description;
00069 QString StartTime;
00070 QString EndTime;
00071 };
00072
00073 struct MRSSEntry
00074 {
00075 QString URL;
00076 qint64 Size;
00077 QString Type;
00078 QString Medium;
00079 bool IsDefault;
00080 QString Expression;
00081 int Bitrate;
00082 double Framerate;
00083 double SamplingRate;
00084 int Channels;
00085 int Duration;
00086 int Width;
00087 int Height;
00088 QString Lang;
00089 int Group;
00090 QString Rating;
00091 QString RatingScheme;
00092 QString Title;
00093 QString Description;
00094 QString Keywords;
00095 QString CopyrightURL;
00096 QString CopyrightText;
00097 int RatingAverage;
00098 int RatingCount;
00099 int RatingMin;
00100 int RatingMax;
00101 int Views;
00102 int Favs;
00103 QString Tags;
00104 QList<MRSSThumbnail> Thumbnails;
00105 QList<MRSSCredit> Credits;
00106 QList<MRSSComment> Comments;
00107 QList<MRSSPeerLink> PeerLinks;
00108 QList<MRSSScene> Scenes;
00109 };
00110
00111 class MPUBLIC ResultItem
00112 {
00113
00114 public:
00115
00116 typedef QList<ResultItem *> resultList;
00117 typedef vector<ResultItem> List;
00118
00119 ResultItem(const QString& title, const QString& subtitle,
00120 const QString& desc, const QString& URL,
00121 const QString& thumbnail, const QString& mediaURL,
00122 const QString& author, const QDateTime& date, const QString& time,
00123 const QString& rating, const off_t& filesize,
00124 const QString& player, const QStringList& playerargs,
00125 const QString& download, const QStringList& downloadargs,
00126 const uint& width, const uint& height, const QString& language,
00127 const bool& downloadable, const QStringList& countries,
00128 const uint& season, const uint& episode, const bool& customhtml);
00129 ResultItem();
00130 ~ResultItem();
00131
00132 void toMap(QHash<QString, QString> &infoMap);
00133
00134 const QString& GetTitle() const { return m_title; }
00135 const QString& GetSubtitle() const { return m_subtitle; }
00136 const QString& GetDescription() const { return m_desc; }
00137 const QString& GetURL() const { return m_URL; }
00138 const QString& GetThumbnail() const { return m_thumbnail; }
00139 const QString& GetMediaURL() const { return m_mediaURL; }
00140 const QString& GetAuthor() const { return m_author; }
00141 const QDateTime& GetDate() const { return m_date; }
00142 const QString& GetTime() const { return m_time; }
00143 const QString& GetRating() const { return m_rating; }
00144 const off_t& GetFilesize() const { return m_filesize; }
00145 const QString& GetPlayer() const { return m_player; }
00146 const QStringList& GetPlayerArguments() const { return m_playerargs; }
00147 const QString& GetDownloader() const { return m_download; }
00148 const QStringList& GetDownloaderArguments() const { return m_downloadargs; }
00149 const uint& GetWidth() const { return m_width; }
00150 const uint& GetHeight() const { return m_height; }
00151 const QString& GetLanguage() const { return m_language; }
00152 const bool& GetDownloadable() const { return m_downloadable; }
00153 const QStringList& GetCountries() const { return m_countries; }
00154 const uint& GetSeason() const { return m_season; }
00155 const uint& GetEpisode() const { return m_episode; }
00156 const bool& GetCustomHTML() const { return m_customhtml; }
00157
00158 private:
00159 QString m_title;
00160 QString m_subtitle;
00161 QString m_desc;
00162 QString m_URL;
00163 QString m_thumbnail;
00164 QString m_mediaURL;
00165 QString m_author;
00166 QDateTime m_date;
00167 QString m_time;
00168 QString m_rating;
00169 off_t m_filesize;
00170 QString m_player;
00171 QStringList m_playerargs;
00172 QString m_download;
00173 QStringList m_downloadargs;
00174 uint m_width;
00175 uint m_height;
00176 QString m_language;
00177 bool m_downloadable;
00178 QStringList m_countries;
00179 uint m_season;
00180 uint m_episode;
00181 bool m_customhtml;
00182 };
00183
00184 class MPUBLIC Parse : public QObject
00185 {
00186 Q_OBJECT
00187 friend class MRSSParser;
00188
00189 public:
00190 Parse();
00191 virtual ~Parse();
00192
00193 ResultItem::resultList parseRSS(QDomDocument domDoc);
00194 ResultItem* ParseItem(const QDomElement& item) const;
00195
00196 QString GetLink(const QDomElement&) const;
00197 QString GetAuthor(const QDomElement&) const;
00198 QString GetCommentsRSS(const QDomElement&) const;
00199 QString GetCommentsLink(const QDomElement&) const;
00200 QDateTime GetDCDateTime(const QDomElement&) const;
00201 QDateTime FromRFC3339(const QString&) const;
00202 QDateTime RFC822TimeToQDateTime (const QString&) const;
00203 int GetNumComments (const QDomElement&) const;
00204 QStringList GetAllCategories (const QDomElement&) const;
00205 QPair<double, double> GetGeoPoint (const QDomElement&) const;
00206 QList<MRSSEntry> GetMediaRSS (const QDomElement&) const;
00207 QList<Enclosure> GetEnclosures(const QDomElement& entry) const;
00208 static QString UnescapeHTML (const QString&);
00209
00210 private:
00211 QMap<QString, int> TimezoneOffsets;
00212
00213 protected:
00214 static const QString DC;
00215 static const QString WFW;
00216 static const QString Atom;
00217 static const QString RDF;
00218 static const QString Slash;
00219 static const QString Enc;
00220 static const QString ITunes;
00221 static const QString GeoRSSSimple;
00222 static const QString GeoRSSW3;
00223 static const QString MediaRSS;
00224 static const QString MythRSS;
00225 };
00226
00227 Q_DECLARE_METATYPE(ResultItem*)
00228
00229 #endif