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"
15 #include "libmythbase/rssparse.h"
16 
17 class 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;
69  bool m_search;
70  bool m_tree;
71  QString m_description;
72  QString m_commandline;
73  double m_version;
74 };
76 
77 class 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 
105 const int kGrabberUpdateEventType = QEvent::User + 5000;
106 
107 class MBASE_PUBLIC GrabberUpdateEvent : public QEvent
108 {
109  public:
111  : QEvent((QEvent::Type)kGrabberUpdateEventType) {}
112  ~GrabberUpdateEvent() override = default;
113 };
114 
115 class 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 
143 class 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 
186  void finishedSearch(Search *item);
187  void searchTimedOut(Search *item);
188 
189  private slots:
190  void slotProcessSearchExit(uint exitcode);
191  void slotProcessSearchExit(void);
192 };
193 
194 #endif // NETGRABBERMANAGER_H
GrabberScript::GetType
const ArticleType & GetType() const
Definition: netgrabbermanager.h:42
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(GrabberScript *)
GrabberScript::m_lock
QRecursiveMutex m_lock
Definition: netgrabbermanager.h:63
hardwareprofile.smolt.timeout
float timeout
Definition: smolt.py:102
GrabberScript::m_type
ArticleType m_type
Definition: netgrabbermanager.h:67
GrabberScript::GetAuthor
const QString & GetAuthor() const
Definition: netgrabbermanager.h:43
GrabberScript::GetCommandline
const QString & GetCommandline() const
Definition: netgrabbermanager.h:47
MythSystemLegacy
Definition: mythsystemlegacy.h:67
GrabberScript::m_author
QString m_author
Definition: netgrabbermanager.h:68
mythbaseexp.h
Search::numReturned
uint numReturned() const
Definition: netgrabbermanager.h:162
GrabberScript::m_search
bool m_search
Definition: netgrabbermanager.h:69
rssparse.h
Search::m_videoList
ResultItem::resultList m_videoList
Definition: netgrabbermanager.h:175
GrabberManager::m_scripts
GrabberScript::scriptList m_scripts
Definition: netgrabbermanager.h:99
GrabberScript::GetImage
const QString & GetImage() const
Definition: netgrabbermanager.h:41
GrabberScript::GetDescription
const QString & GetDescription() const
Definition: netgrabbermanager.h:46
GrabberScript::GetTitle
const QString & GetTitle() const
Definition: netgrabbermanager.h:40
GrabberScript::m_commandline
QString m_commandline
Definition: netgrabbermanager.h:72
Search::m_nextPageToken
QString m_nextPageToken
Definition: netgrabbermanager.h:181
GrabberManager
Definition: netgrabbermanager.h:77
Search::prevPageToken
QString prevPageToken()
Definition: netgrabbermanager.h:165
Search::GetVideoList
ResultItem::resultList GetVideoList()
Definition: netgrabbermanager.h:167
GrabberScript::m_description
QString m_description
Definition: netgrabbermanager.h:71
mythsystemlegacy.h
GrabberScript::scriptList
QList< GrabberScript * > scriptList
Definition: netgrabbermanager.h:52
MBASE_PUBLIC
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
Search::m_document
QDomDocument m_document
Definition: netgrabbermanager.h:174
Search::m_prevPageToken
QString m_prevPageToken
Definition: netgrabbermanager.h:182
GrabberUpdateEvent::GrabberUpdateEvent
GrabberUpdateEvent(void)
Definition: netgrabbermanager.h:110
GrabberManager::m_lock
QRecursiveMutex m_lock
Definition: netgrabbermanager.h:97
GrabberScript
Definition: netgrabbermanager.h:17
GrabberUpdateEvent
Definition: netgrabbermanager.h:107
Search::nextPageToken
QString nextPageToken()
Definition: netgrabbermanager.h:164
GrabberScript::m_title
QString m_title
Definition: netgrabbermanager.h:65
uint
unsigned int uint
Definition: compat.h:81
Search
Definition: netgrabbermanager.h:143
GrabberScript::m_image
QString m_image
Definition: netgrabbermanager.h:66
kGrabberUpdateEventType
const int kGrabberUpdateEventType
Definition: netgrabbermanager.h:105
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:73
GrabberScript::m_tree
bool m_tree
Definition: netgrabbermanager.h:70
ArticleType
ArticleType
Definition: rssparse.h:20
GrabberScript::GetVersion
const double & GetVersion() const
Definition: netgrabbermanager.h:48
Search::GetData
QByteArray GetData()
Definition: netgrabbermanager.h:158
GrabberScript::GetTree
const bool & GetTree() const
Definition: netgrabbermanager.h:45
Search::m_data
QByteArray m_data
Definition: netgrabbermanager.h:173
GrabberDownloadThread::m_mutex
QMutex m_mutex
Definition: netgrabbermanager.h:138
MRSSParser
Definition: rssparse.cpp:186
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:24
GrabberDownloadThread::m_scripts
QList< GrabberScript * > m_scripts
Definition: netgrabbermanager.h:137
Search::numIndex
uint numIndex() const
Definition: netgrabbermanager.h:163
GrabberScript::GetSearch
const bool & GetSearch() const
Definition: netgrabbermanager.h:44
Search::numResults
uint numResults() const
Definition: netgrabbermanager.h:161
nv_python_libs.bbciplayer.bbciplayer_api.version
string version
Definition: bbciplayer_api.py:77
GrabberDownloadThread
Definition: netgrabbermanager.h:115