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