Skip to content

Commit

Permalink
Complete TODO: Refactor DBChannel and ChannelInfo into a single class
Browse files Browse the repository at this point in the history
  • Loading branch information
pinkylinc committed May 28, 2012
1 parent 2ee3b82 commit c37f105
Show file tree
Hide file tree
Showing 22 changed files with 182 additions and 227 deletions.
16 changes: 8 additions & 8 deletions mythtv/libs/libmythtv/channelbase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ bool ChannelBase::Init(QString &inputname, QString &startchannel, bool setchan)
QStringList::const_iterator it = start;
while (it != inputs.end())
{
DBChanList channels = GetChannels(*it);
DBChanInfoList channels = GetChannels(*it);

DBChanList::const_iterator cit = channels.begin();
DBChanInfoList::const_iterator cit = channels.begin();
for (; cit != channels.end(); ++cit)
{
if ((*cit).channum == startchannel &&
Expand All @@ -126,15 +126,15 @@ bool ChannelBase::Init(QString &inputname, QString &startchannel, bool setchan)
{
uint mplexid_restriction = 0;

DBChanList channels = GetChannels(*it);
DBChanInfoList channels = GetChannels(*it);
if (channels.size() &&
IsInputAvailable(GetInputByName(*it), mplexid_restriction))
{
uint chanid = ChannelUtil::GetNextChannel(
channels, channels[0].chanid,
mplexid_restriction, CHANNEL_DIRECTION_UP);

DBChanList::const_iterator cit =
DBChanInfoList::const_iterator cit =
find(channels.begin(), channels.end(), chanid);

if (chanid && cit != channels.end())
Expand Down Expand Up @@ -610,19 +610,19 @@ uint ChannelBase::GetInputCardID(int inputNum) const
return 0;
}

DBChanList ChannelBase::GetChannels(int inputNum) const
DBChanInfoList ChannelBase::GetChannels(int inputNum) const
{
int inputid = (inputNum > 0) ? inputNum : m_currentInputID;

DBChanList ret;
DBChanInfoList ret;
InputMap::const_iterator it = m_inputs.find(inputid);
if (it != m_inputs.end())
ret = (*it)->channels;

return ret;
}

DBChanList ChannelBase::GetChannels(const QString &inputname) const
DBChanInfoList ChannelBase::GetChannels(const QString &inputname) const
{
int inputid = m_currentInputID;
if (!inputname.isEmpty())
Expand Down Expand Up @@ -958,7 +958,7 @@ bool ChannelBase::InitializeInputs(void)
while (query.next())
{
uint sourceid = query.value(5).toUInt(); //HERE IS WHERE A BLANKET SOURCEID IS BEING DETERMINED FOR THE CARD!!!!
DBChanList channels = ChannelUtil::GetChannels(sourceid, false);
DBChanInfoList channels = ChannelUtil::GetChannels(sourceid, false);

ChannelUtil::SortChannels(channels, order);

Expand Down
6 changes: 3 additions & 3 deletions mythtv/libs/libmythtv/channelbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ class ChannelBase
virtual uint GetSourceID(int inputID) const
{ return m_inputs[inputID]->sourceid; }
virtual uint GetInputCardID(int inputNum) const;
virtual DBChanList GetChannels(int inputNum) const;
virtual DBChanList GetChannels(const QString &inputname) const;
virtual DBChanInfoList GetChannels(int inputNum) const;
virtual DBChanInfoList GetChannels(const QString &inputname) const;
virtual vector<InputInfo> GetFreeInputs(
const vector<uint> &excluded_cards) const;
virtual QStringList GetConnectedInputs(void) const;
Expand Down Expand Up @@ -160,7 +160,7 @@ class ChannelBase
bool m_commfree;
uint m_cardid;
InputMap m_inputs;
DBChanList m_allchannels; ///< channels across all inputs
DBChanInfoList m_allchannels; ///< channels across all inputs

QMutex m_system_lock;
MythSystem *m_system;
Expand Down
4 changes: 2 additions & 2 deletions mythtv/libs/libmythtv/channelgroupsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,10 @@ ChannelGroupConfig::ChannelGroupConfig(QString _name)
VerticalConfigurationGroup *cgroup;
HorizontalConfigurationGroup *columns;

DBChanList chanlist = ChannelUtil::GetChannels(0, true, "channum, callsign");
DBChanInfoList chanlist = ChannelUtil::GetChannels(0, true, "channum, callsign");
ChannelUtil::SortChannels(chanlist, "channum", true);

DBChanList::iterator it = chanlist.begin();
DBChanInfoList::iterator it = chanlist.begin();
int i,j = 0;
int p = 1;
int pages = (int)((float)chanlist.size() / 8.0 / 3.0 + 0.5);
Expand Down
52 changes: 41 additions & 11 deletions mythtv/libs/libmythtv/channelutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1841,7 +1841,7 @@ bool ChannelUtil::GetATSCChannel(uint sourceid, const QString &channum,
return false;
}

bool ChannelUtil::GetChannelData( //TODO: MODIFIY THIS
bool ChannelUtil::GetChannelData(
uint sourceid, const QString &channum,
QString &tvformat, QString &modulation,
QString &freqtable, QString &freqid,
Expand Down Expand Up @@ -1915,11 +1915,11 @@ bool ChannelUtil::GetChannelData( //TODO: MODIFIY THIS
dvb_transportid, dvb_networkid, dtv_si_std);
}

DBChanList ChannelUtil::GetChannelsInternal( //TODO: MODIFIY THIS
DBChanInfoList ChannelUtil::GetChannelsInternal( //TODO: MODIFIY THIS
uint sourceid, bool vis_only, bool include_disconnected,
const QString &grp, uint changrpid)
{
DBChanList list;
DBChanInfoList list;

MSqlQuery query(MSqlQuery::InitCon());

Expand Down Expand Up @@ -1973,7 +1973,7 @@ DBChanList ChannelUtil::GetChannelsInternal( //TODO: MODIFIY THI
if (query.value(0).toString().isEmpty() || !query.value(2).toUInt())
continue; // skip if channum blank, or chanid empty

DBChannel chan(
DBChannelInfo chan(
query.value(0).toString(), /* channum */
query.value(1).toString(), /* callsign */
query.value(2).toUInt(), /* chanid */
Expand All @@ -1993,6 +1993,36 @@ DBChanList ChannelUtil::GetChannelsInternal( //TODO: MODIFIY THI
return list;
}

bool ChannelUtil::GetChannelSourceID(uint sourceid, const QString channum, const uint cardinputid, QString maptypes) //todo:finish
{
MSqlQuery query(MSqlQuery::InitCon());
QString querystr =
"SELECT channel.sourceid "
"FROM videosourcemap as map, channel "
"WHERE channel.sourceid = map.sourceid AND "
" map.cardinputid = :CARDINPUTID AND "
" map.type in (MAPTYPES) AND "
" channum = :CHANNUM ";
querystr.replace("MAPTYPES", maptypes);
query.prepare(querystr);
query.bindValue(":CARDINPUTID", cardinputid);
query.bindValue(":CHANNUM", channum);

if (!query.exec() || !query.isActive())
{
MythDB::DBError("ChannelUtil::GetChannelSourceID", query);
return false;
}
else if (!query.next())
{
LOG(VB_GENERAL, LOG_ERR, QString("ChannelUtil::GetChannelSourceID failed because if could not\n "
"find a source map for channel number %1 on cardinputid %2").arg(channum).arg(cardinputid));
}

sourceid = query.value(0).toInt();
return true;
}

vector<uint> ChannelUtil::GetChanIDs(int sourceid)
{
MSqlQuery query(MSqlQuery::InitCon());
Expand All @@ -2014,12 +2044,12 @@ vector<uint> ChannelUtil::GetChanIDs(int sourceid)
return list;
}

inline bool lt_callsign(const DBChannel &a, const DBChannel &b)
inline bool lt_callsign(const DBChannelInfo &a, const DBChannelInfo &b)
{
return QString::localeAwareCompare(a.callsign, b.callsign) < 0;
}

inline bool lt_smart(const DBChannel &a, const DBChannel &b)
inline bool lt_smart(const DBChannelInfo &a, const DBChannelInfo &b)
{
static QMutex sepExprLock;
static const QRegExp sepExpr(ChannelUtil::kATSCSeparators);
Expand Down Expand Up @@ -2127,7 +2157,7 @@ uint ChannelUtil::GetChannelCount(int sourceid)
return query.size();
}

void ChannelUtil::SortChannels(DBChanList &list, const QString &order,
void ChannelUtil::SortChannels(DBChanInfoList &list, const QString &order,
bool eliminate_duplicates)
{
bool cs = order.toLower() == "callsign";
Expand All @@ -2138,7 +2168,7 @@ void ChannelUtil::SortChannels(DBChanList &list, const QString &order,

if (eliminate_duplicates && !list.empty())
{
DBChanList tmp;
DBChanInfoList tmp;
tmp.push_back(list[0]);
for (uint i = 1; i < list.size(); i++)
{
Expand All @@ -2154,14 +2184,14 @@ void ChannelUtil::SortChannels(DBChanList &list, const QString &order,
}

uint ChannelUtil::GetNextChannel(
const DBChanList &sorted,
const DBChanInfoList &sorted,
uint old_chanid,
uint mplexid_restriction,
int direction,
bool skip_non_visible,
bool skip_same_channum_and_callsign)
{
DBChanList::const_iterator it =
DBChanInfoList::const_iterator it =
find(sorted.begin(), sorted.end(), old_chanid);

if (it == sorted.end())
Expand All @@ -2170,7 +2200,7 @@ uint ChannelUtil::GetNextChannel(
if (it == sorted.end())
return 0; // no channels..

DBChanList::const_iterator start = it;
DBChanInfoList::const_iterator start = it;

if (CHANNEL_DIRECTION_DOWN == direction)
{
Expand Down
11 changes: 6 additions & 5 deletions mythtv/libs/libmythtv/channelutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ class MTV_PUBLIC ChannelUtil
static QString GetVideoFilters(uint sourceid, const QString &channum)
{ return GetChannelValueStr("videofilters", sourceid, channum); }

static DBChanList GetChannels(
static DBChanInfoList GetChannels(
uint sourceid, bool visible_only,
const QString &group_by = QString(), uint channel_groupid = 0)
{
Expand All @@ -182,16 +182,17 @@ class MTV_PUBLIC ChannelUtil
}
/// Returns channels that are not connected to a capture card
/// and channels that are not marked as visible.
static DBChanList GetAllChannels(uint sourceid)
static DBChanInfoList GetAllChannels(uint sourceid)
{
return GetChannelsInternal(sourceid, false, true, QString(), 0);
}
static bool GetChannelSourceID(uint sourceid, const QString channum, const uint cardinputid, QString maptypes = "main");
static vector<uint> GetChanIDs(int sourceid = -1);
static uint GetChannelCount(int sourceid = -1);
static void SortChannels(DBChanList &list, const QString &order,
static void SortChannels(DBChanInfoList &list, const QString &order,
bool eliminate_duplicates = false);

static uint GetNextChannel(const DBChanList &sorted,
static uint GetNextChannel(const DBChanInfoList &sorted,
uint old_chanid,
uint mplexid_restriction,
int direction,
Expand Down Expand Up @@ -269,7 +270,7 @@ class MTV_PUBLIC ChannelUtil
static const QString kATSCSeparators;

private:
static DBChanList GetChannelsInternal(
static DBChanInfoList GetChannelsInternal(
uint sourceid, bool visible_only, bool include_disconnected,
const QString &group_by, uint channel_groupid);
static QString GetChannelStringField(int chanid, const QString &field);
Expand Down
72 changes: 21 additions & 51 deletions mythtv/libs/libmythtv/dbchannelinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
#include "channelgroup.h"
#include "sourceutil.h"

DBChannel::DBChannel(const DBChannel &other) :
DBChannelInfo::DBChannelInfo(const DBChannelInfo &other) :
channum(other.channum), callsign(other.callsign),
name(other.name), icon(other.icon),
name(other.name), iconpath(other.iconpath),
chanid(other.chanid),
major_chan(other.major_chan), minor_chan(other.minor_chan),
mplexid((other.mplexid == 32767) ? 0 : other.mplexid),
Expand All @@ -28,29 +28,32 @@ DBChannel::DBChannel(const DBChannel &other) :
{
}

DBChannel::DBChannel(
DBChannelInfo::DBChannelInfo(
const QString &_channum, const QString &_callsign,
uint _chanid, uint _major_chan, uint _minor_chan,
uint _mplexid, bool _visible,
const QString &_name, const QString &_icon,
const QString &_name, const QString &_iconpath,
uint _sourceid, uint _cardid, uint _grpid) :
channum(_channum),
callsign(_callsign),
name(_name), icon((_icon == "none") ? QString() : _icon),
name(_name),
iconpath((_iconpath == "none") ? QString() : _iconpath),
chanid(_chanid),
major_chan(_major_chan), minor_chan(_minor_chan),
major_chan(_major_chan),
minor_chan(_minor_chan),
mplexid((_mplexid == 32767) ? 0 : _mplexid),
sourceid(_sourceid), cardid(_cardid), grpid(_grpid),
visible(_visible)
sourceid(_sourceid),
cardid(_cardid),
grpid(_grpid)
{
}

DBChannel &DBChannel::operator=(const DBChannel &other)
DBChannelInfo &DBChannelInfo::operator=(const DBChannelInfo &other)
{
channum = other.channum;
callsign = other.callsign;
name = other.name;
icon = other.icon;
iconpath = other.iconpath;
chanid = other.chanid;
major_chan = other.major_chan;
minor_chan = other.minor_chan;
Expand All @@ -59,27 +62,31 @@ DBChannel &DBChannel::operator=(const DBChannel &other)
cardid = other.cardid;
grpid = other.grpid;
visible = other.visible;
favid = other.favid;
sourcename = other.sourcename;
recpriority= other.recpriority;

return *this;
}

void DBChannel::ToMap(InfoMap& infoMap) const
void DBChannelInfo::ToMap(InfoMap& infoMap) const
{
infoMap["channelnumber"] = channum;
infoMap["callsign"] = callsign;
infoMap["channelname"] = name;
infoMap["channeliconpath"] = icon;
infoMap["channeliconpath"] = iconpath;
infoMap["channelid"] = QString().setNum(chanid);
infoMap["majorchan"] = QString().setNum(major_chan);
infoMap["minorchan"] = QString().setNum(minor_chan);
infoMap["mplexid"] = QString().setNum(mplexid);
infoMap["channelvisible"] = visible ? QObject::tr("Yes") : QObject::tr("No");

infoMap["channelgroupname"] = ChannelGroup::GetChannelGroupName(grpid);
infoMap["channelsourcename"] = SourceUtil::GetSourceName(sourceid);
//infoMap["channelsourcename"] = sourcename;
infoMap["channelrecpriority"] = recpriority;
}

QString DBChannel::GetFormatted(const ChannelFormat &format) const
QString DBChannelInfo::GetFormatted(const ChannelFormat &format) const
{
QString tmp;

Expand All @@ -99,43 +106,6 @@ QString DBChannel::GetFormatted(const ChannelFormat &format) const
return tmp;
}

////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////

QString ChannelInfo::GetFormatted(const ChannelFormat &format) const
{
QString tmp;

if (format & kChannelLong)
tmp = gCoreContext->GetSetting("LongChannelFormat", "<num> <name>");
else // kChannelShort
tmp = gCoreContext->GetSetting("ChannelFormat", "<num> <sign>");


if (tmp.isEmpty())
return QString();

tmp.replace("<num>", chanstr);
tmp.replace("<sign>", callsign);
tmp.replace("<name>", channame);

return tmp;
}

void ChannelInfo::ToMap(InfoMap& infoMap) const
{
infoMap["callsign"] = callsign;
infoMap["channeliconpath"] = iconpath;
infoMap["chanstr"] = chanstr;
infoMap["channelname"] = channame;
infoMap["channelid"] = QString().setNum(chanid);
infoMap["channelsourcename"] = sourcename;
infoMap["channelrecpriority"] = recpriority;
}

////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////

bool ChannelInsertInfo::SaveScan(uint scanid, uint transportid) const
{
MSqlQuery query(MSqlQuery::InitCon());
Expand Down
Loading

0 comments on commit c37f105

Please sign in to comment.