MythTV master
iptvchannelfetcher.h
Go to the documentation of this file.
1
6#ifndef IPTVCHANNELFETCHER_H
7#define IPTVCHANNELFETCHER_H
8
9#include <utility>
10
11// Qt headers
12#include <QCoreApplication>
13#include <QMap>
14#include <QMutex>
15#include <QObject>
16#include <QRunnable>
17#include <QString>
18
19// MythTV headers
21#include "libmythbase/mthread.h"
22
23class ScanMonitor;
25
27{
28 Q_DECLARE_TR_FUNCTIONS(IPTVChannelInfo)
29
30 public:
31 IPTVChannelInfo() = default;
32 IPTVChannelInfo(QString name,
33 QString xmltvid,
34 QString logo,
35 const QString &data_url,
36 uint data_bitrate,
37 const QString &fec_type,
38 const QString &fec_url0,
39 uint fec_bitrate0,
40 const QString &fec_url1,
41 uint fec_bitrate1,
42 uint programnumber) :
43 m_name(std::move(name)), m_xmltvid(std::move(xmltvid)), m_logo(std::move(logo)),
44 m_programNumber(programnumber),
45 m_tuning(data_url, data_bitrate,
46 fec_type, fec_url0, fec_bitrate0, fec_url1, fec_bitrate1,
47 IPTVTuningData::inValid)
48 {
49 }
50
51 protected:
52 friend class TestIPTVRecorder;
53 bool IsValid(void) const
54 {
55 return !m_name.isEmpty() && m_tuning.IsValid();
56 }
57
58 public:
59 QString m_name;
60 QString m_xmltvid;
61 QString m_logo;
64};
65using fbox_chan_map_t = QMap<QString,IPTVChannelInfo>;
66
67class IPTVChannelFetcher : public QRunnable
68{
70
71 public:
72 IPTVChannelFetcher(uint cardid, QString inputname, uint sourceid,
73 bool is_mpts, ScanMonitor *monitor = nullptr);
74 ~IPTVChannelFetcher() override;
75
76 void Scan(void);
77 void Stop(void);
79
80 static QString DownloadPlaylist(const QString &url);
82 const QString &rawdata, IPTVChannelFetcher *fetcher = nullptr);
83
84 private:
85 void SetTotalNumChannels(uint val) { m_chanCnt = (val) ? val : 1; }
86 void SetNumChannelsParsed(uint val);
88 void SetMessage(const QString &status);
89
90 protected:
91 void run(void) override; // QRunnable
92
93 private:
96 QString m_inputName;
101 bool m_threadRunning {false};
102 bool m_stopNow {false};
103 MThread *m_thread {nullptr};
104 QMutex m_lock;
105};
106
107#endif // IPTVCHANNELFETCHER_H
108
109/* vim: set expandtab tabstop=4 shiftwidth=4: */
Q_DECLARE_TR_FUNCTIONS(IPTVChannelFetcher)
void SetMessage(const QString &status)
static QString DownloadPlaylist(const QString &url)
void SetNumChannelsInserted(uint val)
void Stop(void)
Stops the scanning thread running.
fbox_chan_map_t m_channels
void run(void) override
fbox_chan_map_t GetChannels(void)
void SetTotalNumChannels(uint val)
static MTV_PUBLIC fbox_chan_map_t ParsePlaylist(const QString &rawdata, IPTVChannelFetcher *fetcher=nullptr)
ScanMonitor * m_scanMonitor
IPTVChannelFetcher(uint cardid, QString inputname, uint sourceid, bool is_mpts, ScanMonitor *monitor=nullptr)
void SetNumChannelsParsed(uint val)
void Scan(void)
Scans the given frequency list.
IPTVTuningData m_tuning
IPTVChannelInfo(QString name, QString xmltvid, QString logo, const QString &data_url, uint data_bitrate, const QString &fec_type, const QString &fec_url0, uint fec_bitrate0, const QString &fec_url1, uint fec_bitrate1, uint programnumber)
IPTVChannelInfo()=default
friend class TestIPTVRecorder
bool IsValid(void) const
bool IsValid(void) const
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
unsigned int uint
Definition: freesurround.h:24
QMap< QString, IPTVChannelInfo > fbox_chan_map_t
#define MTV_PUBLIC
Definition: mythtvexp.h:15
STL namespace.