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