diff --git a/mythtv/libs/libmythtv/tvbrowsehelper.cpp b/mythtv/libs/libmythtv/tvbrowsehelper.cpp index 5a2eb21833b..9adaa71b384 100644 --- a/mythtv/libs/libmythtv/tvbrowsehelper.cpp +++ b/mythtv/libs/libmythtv/tvbrowsehelper.cpp @@ -1,8 +1,8 @@ - -#include "mythcorecontext.h" - +// Qt #include +// MythTV +#include "mythcorecontext.h" #include "tvbrowsehelper.h" #include "playercontext.h" #include "remoteencoder.h" @@ -12,12 +12,9 @@ #include "cardutil.h" #include "tv_play.h" -#define LOC QString("BH: ") - -#define GetPlayer(X,Y) GetPlayerHaveLock(X, Y, __FILE__ , __LINE__) -#define GetOSDLock(X) GetOSDL(X, __FILE__, __LINE__) +#define LOC QString("BrowseHelpers: ") -static void format_time(int seconds, QString &tMin, QString &tHrsMin) +static void format_time(int seconds, QString& tMin, QString& tHrsMin) { int minutes = seconds / 60; int hours = minutes / 60; @@ -27,22 +24,16 @@ static void format_time(int seconds, QString &tMin, QString &tHrsMin) tHrsMin = QString("%1:%2").arg(hours).arg(min, 2, 10, QChar('0')); } -TVBrowseHelper::TVBrowseHelper( - TV *tv, - uint browse_max_forward, - bool browse_all_tuners, - bool use_channel_groups, - const QString& db_channel_ordering) : - MThread("TVBrowseHelper"), - m_tv(tv), - m_dbBrowseMaxForward(browse_max_forward), - m_dbBrowseAllTuners(browse_all_tuners), - m_dbUseChannelGroups(use_channel_groups) +TVBrowseHelper::TVBrowseHelper(TV* Tv, uint BrowseMaxForward, bool BrowseAllTuners, + bool UseChannelGroups, const QString& DBChannelOrdering) + : MThread("TVBrowseHelper"), + m_tv(Tv), + m_dbBrowseMaxForward(BrowseMaxForward), + m_dbBrowseAllTuners(BrowseAllTuners), + m_dbUseChannelGroups(UseChannelGroups) { - m_dbAllChannels = ChannelUtil::GetChannels( - 0, true, "channum, callsign"); - ChannelUtil::SortChannels( - m_dbAllChannels, db_channel_ordering, false); + m_dbAllChannels = ChannelUtil::GetChannels(0, true, "channum, callsign"); + ChannelUtil::SortChannels(m_dbAllChannels, DBChannelOrdering, false); for (const auto & chan : m_dbAllChannels) { @@ -51,18 +42,33 @@ TVBrowseHelper::TVBrowseHelper( m_dbChannumToChanids.insert(chan.m_chanNum,chan.m_chanId); } - m_dbAllVisibleChannels = ChannelUtil::GetChannels( - 0, true, "channum, callsign"); - ChannelUtil::SortChannels( - m_dbAllVisibleChannels, db_channel_ordering, false); - + m_dbAllVisibleChannels = ChannelUtil::GetChannels(0, true, "channum, callsign"); + ChannelUtil::SortChannels(m_dbAllVisibleChannels, DBChannelOrdering, false); start(); } +TVBrowseHelper::~TVBrowseHelper() +{ + Stop(); + Wait(); +} + +void TVBrowseHelper::Stop() +{ + QMutexLocker locker(&m_lock); + m_list.clear(); + m_run = false; + m_wait.wakeAll(); +} + +void TVBrowseHelper::Wait() +{ + MThread::wait(); +} /// \brief Begins channel browsing. /// \note This may only be called from the UI thread. -bool TVBrowseHelper::BrowseStart(PlayerContext *ctx, bool skip_browse) +bool TVBrowseHelper::BrowseStart(PlayerContext* Ctx, bool SkipBrowse) { if (!gCoreContext->IsUIThread()) return false; @@ -70,28 +76,28 @@ bool TVBrowseHelper::BrowseStart(PlayerContext *ctx, bool skip_browse) QMutexLocker locker(&m_lock); if (m_ctx) - return m_ctx == ctx; + return m_ctx == Ctx; m_tv->ClearOSD(); - ctx->LockPlayingInfo(__FILE__, __LINE__); - if (ctx->m_playingInfo) + Ctx->LockPlayingInfo(__FILE__, __LINE__); + if (Ctx->m_playingInfo) { - m_ctx = ctx; - m_chanNum = ctx->m_playingInfo->GetChanNum(); - m_chanId = ctx->m_playingInfo->GetChanID(); - m_startTime = ctx->m_playingInfo->GetScheduledStartTime(MythDate::ISODate); - ctx->UnlockPlayingInfo(__FILE__, __LINE__); + m_ctx = Ctx; + m_chanNum = Ctx->m_playingInfo->GetChanNum(); + m_chanId = Ctx->m_playingInfo->GetChanID(); + m_startTime = Ctx->m_playingInfo->GetScheduledStartTime(MythDate::ISODate); + Ctx->UnlockPlayingInfo(__FILE__, __LINE__); - if (!skip_browse) + if (!SkipBrowse) { BrowseInfo bi(BROWSE_SAME, m_chanNum, m_chanId, m_startTime); locker.unlock(); - BrowseDispInfo(ctx, bi); + BrowseDispInfo(Ctx, bi); } return true; } - ctx->UnlockPlayingInfo(__FILE__, __LINE__); + Ctx->UnlockPlayingInfo(__FILE__, __LINE__); return false; } @@ -101,14 +107,14 @@ bool TVBrowseHelper::BrowseStart(PlayerContext *ctx, bool skip_browse) * \param ctx PlayerContext to end browsing on * \param change_channel iff true we call ChangeChannel() */ -void TVBrowseHelper::BrowseEnd(PlayerContext *ctx, bool change_channel) +void TVBrowseHelper::BrowseEnd(PlayerContext* Ctx, bool ChangeChannel) { if (!gCoreContext->IsUIThread()) return; QMutexLocker locker(&m_lock); - if (ctx && m_ctx != ctx) + if (Ctx && m_ctx != Ctx) return; if (!m_ctx) @@ -126,23 +132,23 @@ void TVBrowseHelper::BrowseEnd(PlayerContext *ctx, bool change_channel) m_list.clear(); m_wait.wakeAll(); - OSD *osd = m_tv->GetOSDL(); + OSD* osd = m_tv->GetOSDL(); if (osd) osd->HideWindow("browse_info"); m_tv->ReturnOSDLock(); - if (change_channel) + if (ChangeChannel) m_tv->ChangeChannel(0, m_chanNum); m_ctx = nullptr; } -void TVBrowseHelper::BrowseDispInfo(PlayerContext *ctx, const BrowseInfo &bi) +void TVBrowseHelper::BrowseDispInfo(PlayerContext* Ctx, const BrowseInfo& Browseinfo) { if (!gCoreContext->IsUIThread()) return; - if (!BrowseStart(ctx, true)) + if (!BrowseStart(Ctx, true)) return; { @@ -151,42 +157,49 @@ void TVBrowseHelper::BrowseDispInfo(PlayerContext *ctx, const BrowseInfo &bi) { m_tv->KillTimer(m_tv->m_browseTimerId); m_tv->m_browseTimerId = - m_tv->StartTimer(TV::kBrowseTimeout, __LINE__); + m_tv->StartTimer(static_cast(TV::kBrowseTimeout), __LINE__); } } QMutexLocker locker(&m_lock); - if (BROWSE_SAME == bi.m_dir) + if (BROWSE_SAME == Browseinfo.m_dir) m_list.clear(); - m_list.push_back(bi); + m_list.push_back(Browseinfo); m_wait.wakeAll(); } -void TVBrowseHelper::BrowseChannel(PlayerContext *ctx, const QString &channum) +void TVBrowseHelper::BrowseDispInfo(PlayerContext* Ctx, BrowseDirection Direction) +{ + BrowseInfo bi(Direction); + if (BROWSE_SAME != Direction) + BrowseDispInfo(Ctx, bi); +} + +void TVBrowseHelper::BrowseChannel(PlayerContext* Ctx, const QString& Channum) { if (!gCoreContext->IsUIThread()) return; if (m_dbBrowseAllTuners) { - BrowseInfo bi(channum, 0); - BrowseDispInfo(ctx, bi); + BrowseInfo bi(Channum, 0); + BrowseDispInfo(Ctx, bi); return; } - if (!ctx->m_recorder || !ctx->m_lastCardid) + if (!Ctx->m_recorder || !Ctx->m_lastCardid) return; - uint inputid = ctx->m_lastCardid; - uint sourceid = CardUtil::GetSourceID(inputid); + uint inputid = static_cast(Ctx->m_lastCardid); + uint sourceid = CardUtil::GetSourceID(inputid); if (sourceid) { - BrowseInfo bi(channum, sourceid); - BrowseDispInfo(ctx, bi); + BrowseInfo bi(Channum, sourceid); + BrowseDispInfo(Ctx, bi); } } -BrowseInfo TVBrowseHelper::GetBrowsedInfo(void) const +BrowseInfo TVBrowseHelper::GetBrowsedInfo() const { QMutexLocker locker(&m_lock); BrowseInfo bi(BROWSE_SAME); @@ -202,7 +215,7 @@ BrowseInfo TVBrowseHelper::GetBrowsedInfo(void) const /** * \note This may only be called from the UI thread. */ -bool TVBrowseHelper::IsBrowsing(void) const +bool TVBrowseHelper::IsBrowsing() const { if (!gCoreContext->IsUIThread()) return true; @@ -217,35 +230,23 @@ bool TVBrowseHelper::IsBrowsing(void) const * is set then it will look to see if the chanid is available on any * tuner. */ -uint TVBrowseHelper::GetChanId( - const QString &channum, uint pref_cardid, uint pref_sourceid) const +uint TVBrowseHelper::GetChanId(const QString& Channum, uint PrefCardid, uint PrefSourceid) const { - if (pref_sourceid) - { + if (PrefSourceid) for (const auto & chan : m_dbAllChannels) - { - if (chan.m_sourceId == pref_sourceid && chan.m_chanNum == channum) + if (chan.m_sourceId == PrefSourceid && chan.m_chanNum == Channum) return chan.m_chanId; - } - } - if (pref_cardid) - { + if (PrefCardid) for (const auto & chan : m_dbAllChannels) - { - if (chan.GetInputIds().contains(pref_cardid) && - chan.m_chanNum == channum) + if (chan.GetInputIds().contains(PrefCardid) && chan.m_chanNum == Channum) return chan.m_chanId; - } - } if (m_dbBrowseAllTuners) { for (const auto & chan : m_dbAllChannels) - { - if (chan.m_chanNum == channum) + if (chan.m_chanNum == Channum) return chan.m_chanId; - } } return 0; @@ -256,8 +257,7 @@ uint TVBrowseHelper::GetChanId( * \param direction BrowseDirection to get information on. * \param infoMap InfoMap to fill in with returned data */ -void TVBrowseHelper::GetNextProgram( - BrowseDirection direction, InfoMap &infoMap) const +void TVBrowseHelper::GetNextProgram(BrowseDirection Direction, InfoMap& Infomap) const { if (!m_ctx || !m_ctx->m_recorder) return; @@ -272,65 +272,60 @@ void TVBrowseHelper::GetNextProgram( QDateTime begts; QDateTime endts; - QString starttime = infoMap["dbstarttime"]; - QString chanid = infoMap["chanid"]; - QString channum = infoMap["channum"]; - QString seriesid = infoMap["seriesid"]; - QString programid = infoMap["programid"]; + QString starttime = Infomap["dbstarttime"]; + QString chanid = Infomap["chanid"]; + QString channum = Infomap["channum"]; + QString seriesid = Infomap["seriesid"]; + QString programid = Infomap["programid"]; - m_ctx->m_recorder->GetNextProgram( - direction, - title, subtitle, desc, category, - starttime, endtime, callsign, iconpath, - channum, chanid, seriesid, programid); + m_ctx->m_recorder->GetNextProgram(Direction, title, subtitle, desc, category, + starttime, endtime, callsign, iconpath, + channum, chanid, seriesid, programid); if (!starttime.isEmpty()) begts = MythDate::fromString(starttime); else - begts = MythDate::fromString(infoMap["dbstarttime"]); + begts = MythDate::fromString(Infomap["dbstarttime"]); - infoMap["starttime"] = MythDate::toString(begts, MythDate::kTime); - infoMap["startdate"] = MythDate::toString( - begts, MythDate::kDateFull | MythDate::kSimplify); + Infomap["starttime"] = MythDate::toString(begts, MythDate::kTime); + Infomap["startdate"] = MythDate::toString(begts, MythDate::kDateFull | MythDate::kSimplify); - infoMap["endtime"] = infoMap["enddate"] = ""; + Infomap["endtime"] = Infomap["enddate"] = ""; if (!endtime.isEmpty()) { endts = MythDate::fromString(endtime); - infoMap["endtime"] = MythDate::toString(endts, MythDate::kTime); - infoMap["enddate"] = MythDate::toString( - endts, MythDate::kDateFull | MythDate::kSimplify); + Infomap["endtime"] = MythDate::toString(endts, MythDate::kTime); + Infomap["enddate"] = MythDate::toString(endts, MythDate::kDateFull | MythDate::kSimplify); } - infoMap["lenmins"] = TV::tr("%n minute(s)", "", 0); - infoMap["lentime"] = "0:00"; + Infomap["lenmins"] = TV::tr("%n minute(s)", "", 0); + Infomap["lentime"] = "0:00"; if (begts.isValid() && endts.isValid()) { QString lenM; QString lenHM; - format_time(begts.secsTo(endts), lenM, lenHM); - infoMap["lenmins"] = lenM; - infoMap["lentime"] = lenHM; + format_time(static_cast(begts.secsTo(endts)), lenM, lenHM); + Infomap["lenmins"] = lenM; + Infomap["lentime"] = lenHM; } - infoMap["dbstarttime"] = starttime; - infoMap["dbendtime"] = endtime; - infoMap["title"] = title; - infoMap["subtitle"] = subtitle; - infoMap["description"] = desc; - infoMap["category"] = category; - infoMap["callsign"] = callsign; - infoMap["channum"] = channum; - infoMap["chanid"] = chanid; - infoMap["iconpath"] = iconpath; - infoMap["seriesid"] = seriesid; - infoMap["programid"] = programid; + Infomap["dbstarttime"] = starttime; + Infomap["dbendtime"] = endtime; + Infomap["title"] = title; + Infomap["subtitle"] = subtitle; + Infomap["description"] = desc; + Infomap["category"] = category; + Infomap["callsign"] = callsign; + Infomap["channum"] = channum; + Infomap["chanid"] = chanid; + Infomap["iconpath"] = iconpath; + Infomap["seriesid"] = seriesid; + Infomap["programid"] = programid; } -void TVBrowseHelper::GetNextProgramDB( - BrowseDirection direction, InfoMap &infoMap) const +void TVBrowseHelper::GetNextProgramDB(BrowseDirection direction, InfoMap& Infomap) const { - uint chanid = infoMap["chanid"].toUInt(); + uint chanid = Infomap["chanid"].toUInt(); if (!chanid) { LOG(VB_GENERAL, LOG_ERR, LOC + "GetNextProgramDB() requires a chanid"); @@ -346,24 +341,23 @@ void TVBrowseHelper::GetNextProgramDB( case BROWSE_SAME: case BROWSE_LEFT: case BROWSE_RIGHT: - case BROWSE_INVALID: - default: break; // quiet -Wswitch-enum + case BROWSE_INVALID: break; } + if (chandir != -1) { - chanid = ChannelUtil::GetNextChannel( - m_dbAllVisibleChannels, chanid, 0 /*mplexid_restriction*/, - 0 /* chanid restriction */, - static_cast(chandir), - true /*skip non visible*/, true /*skip same callsign*/); + chanid = ChannelUtil::GetNextChannel(m_dbAllVisibleChannels, chanid, 0 /*mplexid_restriction*/, + 0 /* chanid restriction */, + static_cast(chandir), + true /*skip non visible*/, true /*skip same callsign*/); } - infoMap["chanid"] = QString::number(chanid); - infoMap["channum"] = m_dbChanidToChannum[chanid]; + Infomap["chanid"] = QString::number(chanid); + Infomap["channum"] = m_dbChanidToChannum[chanid]; QDateTime nowtime = MythDate::current(); QDateTime latesttime = nowtime.addSecs(6*60*60); - QDateTime browsetime = MythDate::fromString(infoMap["dbstarttime"]); + QDateTime browsetime = MythDate::fromString(Infomap["dbstarttime"]); MSqlBindings bindings; bindings[":CHANID"] = chanid; @@ -376,18 +370,13 @@ void TVBrowseHelper::GetNextProgramDB( switch (direction) { case BROWSE_LEFT: - querystr += " AND program.endtime <= :BROWSETS " - " AND program.endtime > :NOWTS "; + querystr += " AND program.endtime <= :BROWSETS AND program.endtime > :NOWTS "; break; - case BROWSE_RIGHT: - querystr += " AND program.starttime > :BROWSETS " - " AND program.starttime < :LATESTTS "; + querystr += " AND program.starttime > :BROWSETS AND program.starttime < :LATESTTS "; break; - default: - querystr += " AND program.starttime <= :BROWSETS " - " AND program.endtime > :BROWSETS2 "; + querystr += " AND program.starttime <= :BROWSETS AND program.endtime > :BROWSETS2 "; }; ProgramList progList; @@ -396,14 +385,13 @@ void TVBrowseHelper::GetNextProgramDB( if (progList.empty()) { - infoMap["dbstarttime"] = ""; + Infomap["dbstarttime"] = ""; return; } - const ProgramInfo *prog = (direction == BROWSE_LEFT) ? - progList[progList.size() - 1] : progList[0]; - - infoMap["dbstarttime"] = prog->GetScheduledStartTime(MythDate::ISODate); + const ProgramInfo* prog = (direction == BROWSE_LEFT) ? + progList[static_cast(progList.size() - 1)] : progList[0]; + Infomap["dbstarttime"] = prog->GetScheduledStartTime(MythDate::ISODate); } void TVBrowseHelper::run() @@ -490,7 +478,9 @@ void TVBrowseHelper::run() m_lock.unlock(); } else + { m_tv->m_channelGroupLock.unlock(); + } } if (direction == BROWSE_FAVORITE) @@ -550,8 +540,7 @@ void TVBrowseHelper::run() if (!m_list.empty()) { // send partial info to UI for appearance of responsiveness - QCoreApplication::postEvent( - m_tv, new UpdateBrowseInfoEvent(infoMap)); + QCoreApplication::postEvent(m_tv, new UpdateBrowseInfoEvent(infoMap)); continue; } m_lock.unlock(); diff --git a/mythtv/libs/libmythtv/tvbrowsehelper.h b/mythtv/libs/libmythtv/tvbrowsehelper.h index f8ed245fc1a..0a801a3793f 100644 --- a/mythtv/libs/libmythtv/tvbrowsehelper.h +++ b/mythtv/libs/libmythtv/tvbrowsehelper.h @@ -1,21 +1,20 @@ -// -*- Mode: c++ -*- - #ifndef TV_BROWSE_HELPER_H #define TV_BROWSE_HELPER_H -#include - -// Qt headers +// Qt #include #include #include #include -// MythTV headers -#include "channelinfo.h" // for ChannelInfoList -#include "programtypes.h" // for InfoMap +// MythTV +#include "channelinfo.h" +#include "programtypes.h" #include "mthread.h" -#include "tv.h" // for BrowseDirection +#include "tv.h" + +// Std +#include class PlayerContext; class RemoteEncoder; @@ -24,113 +23,67 @@ class TV; class BrowseInfo { public: - explicit BrowseInfo(BrowseDirection dir) : - m_dir(dir) - { - } - BrowseInfo(BrowseDirection dir, - QString channum, - uint chanid, - QString starttime) : - m_dir(dir), m_chanNum(std::move(channum)), - m_chanId(chanid), m_startTime(std::move(starttime)) - { - } - BrowseInfo(QString channum, - uint sourceid) : - m_chanNum(std::move(channum)), - m_sourceId(sourceid) - { - } - - QString toString() const - { - return QString("%1;%2;%3;%4;%5") - .arg(BROWSE_SAME==m_dir?"SAME": - BROWSE_UP ==m_dir?"UP": - BROWSE_DOWN==m_dir?"DOWN": - QString::number(m_dir)) - .arg(m_chanNum) - .arg(m_chanId) - .arg(m_startTime) - .arg(m_sourceId); - } - - BrowseDirection m_dir {BROWSE_SAME}; + explicit BrowseInfo(BrowseDirection Dir) + : m_dir(Dir) {} + BrowseInfo(BrowseDirection Dir, QString Channum, uint Chanid, QString Starttime) + : m_dir(Dir), + m_chanNum(std::move(Channum)), + m_chanId(Chanid), + m_startTime(std::move(Starttime)) { } + BrowseInfo(QString Channum, uint SourceId) + : m_chanNum(std::move(Channum)), + m_sourceId(SourceId) { } + + BrowseDirection m_dir { BROWSE_SAME }; QString m_chanNum; - uint m_chanId {0}; + uint m_chanId { 0 }; QString m_startTime; - uint m_sourceId {0}; + uint m_sourceId { 0 }; }; class TVBrowseHelper : public MThread { public: - TVBrowseHelper(TV *tv, - uint browse_max_forward, - bool browse_all_tuners, - bool use_channel_groups, - const QString& db_channel_ordering); - - ~TVBrowseHelper() override - { - Stop(); - Wait(); - } - - void Stop() - { - QMutexLocker locker(&m_lock); - m_list.clear(); - m_run = false; - m_wait.wakeAll(); - } - - void Wait() { MThread::wait(); } - - bool BrowseStart(PlayerContext *ctx, bool skip_browse = false); - void BrowseEnd(PlayerContext *ctx, bool change_channel); - void BrowseDispInfo(PlayerContext *ctx, const BrowseInfo &bi); - - void BrowseDispInfo(PlayerContext *ctx, BrowseDirection direction) - { - BrowseInfo bi(direction); - if (BROWSE_SAME != direction) - BrowseDispInfo(ctx, bi); - } - - void BrowseChannel(PlayerContext *ctx, const QString &channum); - - BrowseInfo GetBrowsedInfo(void) const; - bool IsBrowsing(void) const; - uint GetChanId(const QString &channum, - uint pref_cardid, uint pref_sourceid) const; + TVBrowseHelper(TV* Tv, uint BrowseMaxForward, bool BrowseAllTuners, + bool UseChannelGroups, const QString& DBChannelOrdering); + ~TVBrowseHelper() override; + + void Stop(); + void Wait(); + bool BrowseStart(PlayerContext* Ctx, bool SkipBrowse = false); + void BrowseEnd(PlayerContext* Ctx, bool ChangeChannel); + void BrowseDispInfo(PlayerContext* Ctx, const BrowseInfo& Browseinfo); + void BrowseDispInfo(PlayerContext* Ctx, BrowseDirection Direction); + void BrowseChannel(PlayerContext* Ctx, const QString& Channum); + BrowseInfo GetBrowsedInfo() const; + bool IsBrowsing() const; + uint GetChanId(const QString& Channum, uint PrefCardid, uint PrefSourceid) const; protected: - void GetNextProgram(BrowseDirection direction, InfoMap &infoMap) const; - void GetNextProgramDB(BrowseDirection direction, InfoMap &infoMap) const; - - void run() override; // MThread - - TV *m_tv {nullptr}; - ChannelInfoList m_dbAllChannels; - ChannelInfoList m_dbAllVisibleChannels; - uint m_dbBrowseMaxForward; - bool m_dbBrowseAllTuners; - bool m_dbUseChannelGroups; - QHash m_dbChanidToChannum; - QHash m_dbChanidToSourceid; - QMultiMap m_dbChannumToChanids; - - mutable QMutex m_lock; // protects variables below - PlayerContext *m_ctx {nullptr}; - QString m_chanNum; - uint m_chanId {0}; - QString m_startTime; - bool m_run {true}; - QWaitCondition m_wait; - QList m_list; + void GetNextProgram(BrowseDirection Direction, InfoMap& Infomap) const; + void GetNextProgramDB(BrowseDirection Direction, InfoMap& Infomap) const; + + void run() override; + + TV* m_tv { nullptr }; + ChannelInfoList m_dbAllChannels; + ChannelInfoList m_dbAllVisibleChannels; + uint m_dbBrowseMaxForward; + bool m_dbBrowseAllTuners; + bool m_dbUseChannelGroups; + QHash m_dbChanidToChannum; + QHash m_dbChanidToSourceid; + QMultiMap m_dbChannumToChanids; + + mutable QMutex m_lock; + PlayerContext* m_ctx { nullptr }; + QString m_chanNum; + uint m_chanId { 0 }; + QString m_startTime; + bool m_run { true }; + QWaitCondition m_wait; + QList m_list; }; -#endif // TV_BROWSE_HELPER_H +#endif