MythTV  master
netgrabbermanager.h
Go to the documentation of this file.
1 #ifndef NETGRABBERMANAGER_H
2 #define NETGRABBERMANAGER_H
3 
4 #include <QObject>
5 #include <QEvent>
6 #include <QDomElement>
7 #include <QMetaType>
8 #include <QMutex>
9 #if QT_VERSION >= QT_VERSION_CHECK(5,14,0)
10 #include <QRecursiveMutex>
11 #endif
12 #include <QTimer>
13 
14 #include "libmythbase/mthread.h"
17 #include "libmythbase/rssparse.h"
18 
19 class MBASE_PUBLIC GrabberScript : public QObject, public MThread
20 {
21 
22  Q_OBJECT
23 
24  public:
25 
26  GrabberScript(QString title,
27  QString image,
29  QString author,
30  bool search,
31  bool tree,
32  QString description,
33  QString commandline,
34  double version)
35  : MThread("GrabberScript"),
36  m_title(std::move(title)), m_image(std::move(image)), m_type(type),
37  m_author(std::move(author)), m_search(search), m_tree(tree),
38  m_description(std::move(description)),
39  m_commandline(std::move(commandline)), m_version(version) {};
40  ~GrabberScript() override;
41 
42  const QString& GetTitle() const { return m_title; }
43  const QString& GetImage() const { return m_image; }
44  const ArticleType& GetType() const { return m_type; }
45  const QString& GetAuthor() const { return m_author; }
46  const bool& GetSearch() const { return m_search; }
47  const bool& GetTree() const { return m_tree; }
48  const QString& GetDescription() const { return m_description; }
49  const QString& GetCommandline() const { return m_commandline; }
50  const double& GetVersion() const { return m_version; }
51 
52  void run(void) override; // MThread
53 
54  using scriptList = QList<GrabberScript *>;
55 
56  signals:
57 
58  void finished(void);
59 
60  private:
61 
62  void parseDBTree(const QString &feedtitle, const QString &path,
63  const QString &pathThumb, QDomElement& domElem,
65 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
66  mutable QMutex m_lock {QMutex::Recursive};
67 #else
68  mutable QRecursiveMutex m_lock;
69 #endif
70 
71  QString m_title;
72  QString m_image;
74  QString m_author;
75  bool m_search;
76  bool m_tree;
77  QString m_description;
78  QString m_commandline;
79  double m_version;
80 };
82 
83 class MBASE_PUBLIC GrabberManager : public QObject
84 {
85  Q_OBJECT
86 
87  public:
89  ~GrabberManager() override;
90  void startTimer();
91  void stopTimer();
92  void doUpdate();
93  void refreshAll();
94 
95  signals:
96  void finished(void);
97 
98  private slots:
99  void timeout(void);
100 
101  private:
102 
103 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
104  mutable QMutex m_lock {QMutex::Recursive};
105 #else
106  mutable QRecursiveMutex m_lock;
107 #endif
108  QTimer *m_timer {nullptr};
110  std::chrono::hours m_updateFreq {24h};
111  uint m_runningCount {0};
112  bool m_refreshAll {false};
113 };
114 
115 const int kGrabberUpdateEventType = QEvent::User + 5000;
116 
117 class MBASE_PUBLIC GrabberUpdateEvent : public QEvent
118 {
119  public:
121  : QEvent((QEvent::Type)kGrabberUpdateEventType) {}
122  ~GrabberUpdateEvent() override = default;
123 };
124 
125 class MBASE_PUBLIC GrabberDownloadThread : public QObject, public MThread
126 {
127  Q_OBJECT
128 
129  public:
130 
131  explicit GrabberDownloadThread(QObject *parent);
132  ~GrabberDownloadThread() override;
133 
134  void refreshAll();
135  void cancel();
136 
137  signals:
138  void finished();
139 
140  protected:
141 
142  void run() override; // MThread
143 
144  private:
145 
146  QObject *m_parent {nullptr};
147  QList<GrabberScript*> m_scripts;
148  QMutex m_mutex;
149  bool m_refreshAll {false};
150 
151 };
152 
153 class MBASE_PUBLIC Search : public QObject
154 {
155  friend class MRSSParser;
156  Q_OBJECT
157 
158  public:
159 
160  Search();
161  ~Search() override;
162 
163  void resetSearch(void);
164  void executeSearch(const QString &script, const QString &query,
165  const QString &pagenum = "");
166  void process(void);
167 
168  QByteArray GetData() { return m_data; };
169  void SetData(QByteArray data);
170 
171  uint numResults() const { return m_numResults; };
172  uint numReturned() const { return m_numReturned; };
173  uint numIndex() const { return m_numIndex; };
174  QString nextPageToken() { return m_nextPageToken; }
175  QString prevPageToken() { return m_prevPageToken; }
176 
177  ResultItem::resultList GetVideoList() { return m_videoList; };
178 
179  private:
180 
181  MythSystemLegacy *m_searchProcess {nullptr};
182 
183  QByteArray m_data;
184  QDomDocument m_document;
186 
187  uint m_numResults {0};
188  uint m_numReturned {0};
189  uint m_numIndex {0};
190 
193 
194  signals:
195 
196  void finishedSearch(Search *item);
197  void searchTimedOut(Search *item);
198 
199  private slots:
200  void slotProcessSearchExit(uint exitcode);
201  void slotProcessSearchExit(void);
202 };
203 
204 #endif // NETGRABBERMANAGER_H
GrabberScript::GetType
const ArticleType & GetType() const
Definition: netgrabbermanager.h:44
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(GrabberScript *)
GrabberScript::m_lock
QRecursiveMutex m_lock
Definition: netgrabbermanager.h:68
hardwareprofile.smolt.timeout
float timeout
Definition: smolt.py:103
GrabberScript::m_type
ArticleType m_type
Definition: netgrabbermanager.h:73
GrabberScript::GetAuthor
const QString & GetAuthor() const
Definition: netgrabbermanager.h:45
GrabberScript::GetCommandline
const QString & GetCommandline() const
Definition: netgrabbermanager.h:49
MythSystemLegacy
Definition: mythsystemlegacy.h:67
GrabberScript::m_author
QString m_author
Definition: netgrabbermanager.h:74
mythbaseexp.h
Search::numReturned
uint numReturned() const
Definition: netgrabbermanager.h:172
GrabberScript::m_search
bool m_search
Definition: netgrabbermanager.h:75
rssparse.h
Search::m_videoList
ResultItem::resultList m_videoList
Definition: netgrabbermanager.h:185
GrabberManager::m_scripts
GrabberScript::scriptList m_scripts
Definition: netgrabbermanager.h:109
GrabberScript::GetImage
const QString & GetImage() const
Definition: netgrabbermanager.h:43
GrabberScript::GetDescription
const QString & GetDescription() const
Definition: netgrabbermanager.h:48
GrabberScript::GetTitle
const QString & GetTitle() const
Definition: netgrabbermanager.h:42
GrabberScript::m_commandline
QString m_commandline
Definition: netgrabbermanager.h:78
Search::m_nextPageToken
QString m_nextPageToken
Definition: netgrabbermanager.h:191
GrabberManager
Definition: netgrabbermanager.h:83
Search::prevPageToken
QString prevPageToken()
Definition: netgrabbermanager.h:175
Search::GetVideoList
ResultItem::resultList GetVideoList()
Definition: netgrabbermanager.h:177
GrabberScript::m_description
QString m_description
Definition: netgrabbermanager.h:77
mythsystemlegacy.h
GrabberScript::scriptList
QList< GrabberScript * > scriptList
Definition: netgrabbermanager.h:54
MBASE_PUBLIC
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
Search::m_document
QDomDocument m_document
Definition: netgrabbermanager.h:184
Search::m_prevPageToken
QString m_prevPageToken
Definition: netgrabbermanager.h:192
GrabberUpdateEvent::GrabberUpdateEvent
GrabberUpdateEvent(void)
Definition: netgrabbermanager.h:120
GrabberManager::m_lock
QRecursiveMutex m_lock
Definition: netgrabbermanager.h:106
GrabberScript
Definition: netgrabbermanager.h:19
GrabberUpdateEvent
Definition: netgrabbermanager.h:117
Search::nextPageToken
QString nextPageToken()
Definition: netgrabbermanager.h:174
GrabberScript::m_title
QString m_title
Definition: netgrabbermanager.h:71
uint
unsigned int uint
Definition: compat.h:81
Search
Definition: netgrabbermanager.h:153
GrabberScript::m_image
QString m_image
Definition: netgrabbermanager.h:72
kGrabberUpdateEventType
const int kGrabberUpdateEventType
Definition: netgrabbermanager.h:115
MThread::run
virtual void run(void)
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: mthread.cpp:315
GrabberScript::m_version
double m_version
Definition: netgrabbermanager.h:79
GrabberScript::m_tree
bool m_tree
Definition: netgrabbermanager.h:76
ArticleType
ArticleType
Definition: rssparse.h:20
GrabberScript::GetVersion
const double & GetVersion() const
Definition: netgrabbermanager.h:50
Search::GetData
QByteArray GetData()
Definition: netgrabbermanager.h:168
GrabberScript::GetTree
const bool & GetTree() const
Definition: netgrabbermanager.h:47
Search::m_data
QByteArray m_data
Definition: netgrabbermanager.h:183
GrabberDownloadThread::m_mutex
QMutex m_mutex
Definition: netgrabbermanager.h:148
MRSSParser
Definition: rssparse.cpp:190
std
Definition: mythchrono.h:23
MThread
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:48
mthread.h
ResultItem::resultList
QList< ResultItem * > resultList
Definition: rssparse.h:114
GrabberScript::GrabberScript
GrabberScript(QString title, QString image, ArticleType type, QString author, bool search, bool tree, QString description, QString commandline, double version)
Definition: netgrabbermanager.h:26
GrabberDownloadThread::m_scripts
QList< GrabberScript * > m_scripts
Definition: netgrabbermanager.h:147
Search::numIndex
uint numIndex() const
Definition: netgrabbermanager.h:173
GrabberScript::GetSearch
const bool & GetSearch() const
Definition: netgrabbermanager.h:46
Search::numResults
uint numResults() const
Definition: netgrabbermanager.h:171
nv_python_libs.bbciplayer.bbciplayer_api.version
string version
Definition: bbciplayer_api.py:77
GrabberDownloadThread
Definition: netgrabbermanager.h:125