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