MythTV master
rssmanager.h
Go to the documentation of this file.
1#ifndef RSSMANAGER_H
2#define RSSMANAGER_H
3
4#include <vector>
5
6#include <QObject>
7#include <QMetaType>
8#include <QRecursiveMutex>
9#include <QTimer>
10#include <QDateTime>
11#include <QByteArray>
12#include <QVariant>
13#include <QNetworkReply>
14
15#include "mythbaseexp.h"
16#include "rssparse.h"
17
18using namespace std::chrono_literals;
19
20class RSSSite;
21class MBASE_PUBLIC RSSSite : public QObject
22{
23 Q_OBJECT
24
25 public:
26
27 class List : public std::vector<RSSSite*>
28 {
29 public:
30 void clear(void)
31 {
32 while (!empty())
33 {
34 RSSSite *tmp = back();
35 pop_back();
36 tmp->deleteLater();
37 }
38 }
39 };
40
41 RSSSite(QString title,
42 QString sortTitle,
43 QString image,
45 QString description,
46 QString url,
47 QString author,
48 bool download,
49 QDateTime updated);
50
51 ~RSSSite() override = default;
52
53 using rssList = QList<RSSSite *>;
54
55 const QString& GetTitle() const { return m_title; }
56 const QString& GetSortTitle() const { return m_sortTitle; }
57 const QString& GetImage() const { return m_image; }
58 const ArticleType& GetType() const { return m_type; }
59 const QString& GetDescription() const { return m_description; }
60 const QString& GetURL() const { return m_url; }
61 const QString& GetAuthor() const { return m_author; }
62 const bool& GetDownload() const { return m_download; }
63 const QDateTime& GetUpdated() const { return m_updated; }
64
65 std::chrono::minutes timeSinceLastUpdate(void) const;
66
67 void insertRSSArticle(ResultItem *item);
68 void clearRSSArticles(void);
69
70 ResultItem::resultList GetVideoList(void) const;
71
72 void retrieve(void);
73 void stop(void);
74 void process(void);
75
76 private:
77
78 static QUrl redirectUrl(const QUrl& possibleRedirectUrl,
79 const QUrl& oldRedirectUrl) ;
80
81 QString m_title;
82 QString m_sortTitle;
83 QString m_image;
86 QString m_url;
88 QString m_author;
90 QDateTime m_updated;
91
92 mutable QRecursiveMutex m_lock;
93 QByteArray m_data;
94 QString m_imageURL;
95 bool m_podcast {false};
96
98
99 QNetworkReply *m_reply {nullptr};
100 QNetworkAccessManager *m_manager {nullptr};
101
102 private slots:
103 void slotCheckRedirect(QNetworkReply* reply);
104
105 signals:
106
107 void finished(RSSSite *item);
108
109};
110
111class MBASE_PUBLIC RSSManager : public QObject
112{
113 Q_OBJECT
114
115 public:
116 RSSManager();
117 ~RSSManager() override;
118 void startTimer();
119 void stopTimer();
120
121 signals:
122 void finished();
123
124 public slots:
125 void doUpdate();
126
127 private slots:
128 void slotRefreshRSS(void);
129 void slotRSSRetrieved(RSSSite *site);
130
131 private:
132 void processAndInsertRSS(RSSSite *site);
133
134 QTimer *m_timer {nullptr};
136 std::chrono::hours m_updateFreq {6h};
138};
139
141
142#endif // RSSMANAGER_H
RSSSite::rssList m_sites
Definition: rssmanager.h:135
void finished()
RSSSite::rssList m_inprogress
Definition: rssmanager.h:137
void clear(void)
Definition: rssmanager.h:30
QUrl m_urlReq
Definition: rssmanager.h:87
~RSSSite() override=default
QDateTime m_updated
Definition: rssmanager.h:90
const QString & GetImage() const
Definition: rssmanager.h:57
bool m_download
Definition: rssmanager.h:89
QList< RSSSite * > rssList
Definition: rssmanager.h:53
QRecursiveMutex m_lock
Definition: rssmanager.h:92
QByteArray m_data
Definition: rssmanager.h:93
QString m_author
Definition: rssmanager.h:88
QString m_url
Definition: rssmanager.h:86
QString m_title
Definition: rssmanager.h:81
QString m_description
Definition: rssmanager.h:85
QString m_imageURL
Definition: rssmanager.h:94
const ArticleType & GetType() const
Definition: rssmanager.h:58
void stop(void)
const QString & GetAuthor() const
Definition: rssmanager.h:61
const QString & GetTitle() const
Definition: rssmanager.h:55
const QDateTime & GetUpdated() const
Definition: rssmanager.h:63
void finished(RSSSite *item)
QString m_image
Definition: rssmanager.h:83
QString m_sortTitle
Definition: rssmanager.h:82
const bool & GetDownload() const
Definition: rssmanager.h:62
const QString & GetSortTitle() const
Definition: rssmanager.h:56
ArticleType m_type
Definition: rssmanager.h:84
const QString & GetDescription() const
Definition: rssmanager.h:59
const QString & GetURL() const
Definition: rssmanager.h:60
ResultItem::resultList m_articleList
Definition: rssmanager.h:97
QList< ResultItem * > resultList
Definition: rssparse.h:114
static guint32 * back
Definition: goom_core.cpp:25
static guint32 * tmp
Definition: goom_core.cpp:26
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
Q_DECLARE_METATYPE(std::chrono::seconds)
bool clearRSSArticles(const QString &feedtitle, ArticleType type)
Definition: netutils.cpp:722
ArticleType
Definition: rssparse.h:20