00001 #ifndef NETGRABBERMANAGER_H
00002 #define NETGRABBERMANAGER_H
00003
00004 #include <QObject>
00005 #include <QEvent>
00006 #include <QDomElement>
00007 #include "mthread.h"
00008 #include <QMetaType>
00009 #include <QMutex>
00010 #include <QTimer>
00011
00012 #include "rssparse.h"
00013 #include "mythexp.h"
00014 #include "mythsystem.h"
00015
00016 class MPUBLIC GrabberScript : public QObject, public MThread
00017 {
00018
00019 Q_OBJECT
00020
00021 public:
00022
00023 GrabberScript(const QString& title,
00024 const QString& image,
00025 const ArticleType& type,
00026 const QString& author,
00027 const bool& search,
00028 const bool& tree,
00029 const QString& description,
00030 const QString& commandline,
00031 const double& version);
00032 ~GrabberScript();
00033
00034 const QString& GetTitle() const { return m_title; }
00035 const QString& GetImage() const { return m_image; }
00036 const ArticleType& GetType() const { return m_type; }
00037 const QString& GetAuthor() const { return m_author; }
00038 const bool& GetSearch() const { return m_search; }
00039 const bool& GetTree() const { return m_tree; }
00040 const QString& GetDescription() const { return m_description; }
00041 const QString& GetCommandline() const { return m_commandline; }
00042 const double& GetVersion() const { return m_version; }
00043
00044 virtual void run(void);
00045
00046 typedef QList<GrabberScript *> scriptList;
00047
00048 signals:
00049
00050 void finished(void);
00051
00052 private:
00053
00054 void parseDBTree(const QString &feedtitle, const QString &path,
00055 const QString &pathThumb, QDomElement& domElem,
00056 const ArticleType &type);
00057 mutable QMutex m_lock;
00058
00059 QString m_title;
00060 QString m_image;
00061 ArticleType m_type;
00062 QString m_author;
00063 bool m_search;
00064 bool m_tree;
00065 QString m_description;
00066 QString m_commandline;
00067 double m_version;
00068 };
00069 Q_DECLARE_METATYPE(GrabberScript *);
00070
00071 class MPUBLIC GrabberManager : public QObject
00072 {
00073 Q_OBJECT
00074
00075 public:
00076 GrabberManager();
00077 ~GrabberManager();
00078 void startTimer();
00079 void stopTimer();
00080 void doUpdate();
00081 void refreshAll();
00082
00083 signals:
00084 void finished(void);
00085
00086 private slots:
00087 void timeout(void);
00088
00089 private:
00090
00091 mutable QMutex m_lock;
00092 QTimer *m_timer;
00093 GrabberScript::scriptList m_scripts;
00094 uint m_updateFreq;
00095 uint m_runningCount;
00096 bool m_refreshAll;
00097 };
00098
00099 const int kGrabberUpdateEventType = QEvent::User + 5000;
00100
00101 class MPUBLIC GrabberUpdateEvent : public QEvent
00102 {
00103 public:
00104 GrabberUpdateEvent(void)
00105 : QEvent((QEvent::Type)kGrabberUpdateEventType) {}
00106 ~GrabberUpdateEvent() {}
00107 };
00108
00109 class MPUBLIC GrabberDownloadThread : public QObject, public MThread
00110 {
00111 Q_OBJECT
00112
00113 public:
00114
00115 GrabberDownloadThread(QObject *parent);
00116 ~GrabberDownloadThread();
00117
00118 void refreshAll();
00119 void cancel();
00120
00121 signals:
00122 void finished();
00123
00124 protected:
00125
00126 void run();
00127
00128 private:
00129
00130 QObject *m_parent;
00131 QList<GrabberScript*> m_scripts;
00132 QMutex m_mutex;
00133 bool m_refreshAll;
00134
00135 };
00136
00137 class MPUBLIC Search : public QObject
00138 {
00139 friend class MRSSParser;
00140 Q_OBJECT
00141
00142 public:
00143
00144 Search();
00145 ~Search();
00146
00147 void resetSearch(void);
00148 void executeSearch(const QString &script, const QString &query,
00149 uint pagenum = 1);
00150 void process(void);
00151
00152 QByteArray GetData() { return m_data; };
00153 void SetData(QByteArray data);
00154
00155 uint numResults() { return m_numResults; };
00156 uint numReturned() { return m_numReturned; };
00157 uint numIndex() { return m_numIndex; };
00158
00159 ResultItem::resultList GetVideoList() { return m_videoList; };
00160
00161 private:
00162
00163 MythSystem *m_searchProcess;
00164
00165 QByteArray m_data;
00166 QDomDocument m_document;
00167 ResultItem::resultList m_videoList;
00168
00169 uint m_numResults;
00170 uint m_numReturned;
00171 uint m_numIndex;
00172
00173 signals:
00174
00175 void finishedSearch(Search *item);
00176 void searchTimedOut(Search *item);
00177
00178 private slots:
00179
00180 void slotProcessSearchExit(uint exitcode = 0);
00181 };
00182
00183 #endif