/
newssite.h
137 lines (111 loc) · 2.89 KB
/
newssite.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#ifndef _NEWSSITE_H_
#define _NEWSSITE_H_
// C++ headers
#include <vector>
using namespace std;
// MythTV headers
#include <QObject>
#include <mythmiscutil.h>
// QT headers
#include <QDomDocument>
#include <QByteArray>
#include <QDateTime>
#include <QVariant>
#include <QObject>
#include <QString>
#include <QMutex>
#include <QUrl>
// MythNews headers
#include "newsarticle.h"
class NewsSiteItem
{
public:
using List = vector<NewsSiteItem>;
QString m_name;
QString m_category;
QString m_url;
QString m_ico;
bool m_inDB;
bool m_podcast;
};
Q_DECLARE_METATYPE(NewsSiteItem*)
class NewsCategory
{
public:
using List = vector<NewsCategory>;
QString m_name;
NewsSiteItem::List m_siteList;
void clear(void) { m_siteList.clear(); }
};
Q_DECLARE_METATYPE(NewsCategory*)
class NewsSite;
class NewsSite : public QObject
{
Q_OBJECT
public:
enum State {
Retrieving = 0,
RetrieveFailed,
WriteFailed,
Success
};
class List : public vector<NewsSite*>
{
public:
void clear(void)
{
while (size())
{
NewsSite *tmp = back();
pop_back();
tmp->deleteLater();
}
}
};
NewsSite(QString name, const QString &url,
QDateTime updated, const bool podcast);
virtual void deleteLater();
void customEvent(QEvent *event) override; // QObject
QString url(void) const;
QString name(void) const;
QString sortName(void) const;
QString description(void) const;
QDateTime lastUpdated(void) const;
QString imageURL(void) const;
bool podcast(void) const;
unsigned int timeSinceLastUpdate(void) const; // in minutes
void insertNewsArticle(const NewsArticle &item);
void clearNewsArticles(void);
NewsArticle::List GetArticleList(void) const;
void retrieve(void);
void stop(void);
void process(void);
void parseRSS(const QDomDocument& domDoc);
void parseAtom(const QDomDocument& domDoc);
static inline bool sortByName(NewsSite *a, NewsSite *b)
{ return naturalCompare(a->m_sortName, b->m_sortName) < 0; }
bool successful(void) const;
QString errorMsg(void) const;
private:
~NewsSite();
mutable QMutex m_lock {QMutex::Recursive};
QString m_name;
QString m_sortName;
QString m_url;
QUrl m_urlReq;
QString m_desc;
QDateTime m_updated;
QString m_destDir;
QByteArray m_data;
State m_state {NewsSite::Success};
QString m_errorString;
QString m_updateErrorString;
QString m_imageURL;
bool m_podcast;
NewsArticle::List m_articleList;
static QString ReplaceHtmlChar(const QString &orig);
signals:
void finished(NewsSite *item);
};
Q_DECLARE_METATYPE(NewsSite*)
#endif // _NEWSSITE_H_