Skip to content

Commit

Permalink
Tweak System Information / Input Status when schedule as group is used.
Browse files Browse the repository at this point in the history
The same as the previous commit except for input status instead of
schedule status.  When schedule as group is used, always atrribute
status to the parent input.  The rationale is that the specific, child
input is not important to most users in these cases.
  • Loading branch information
gigem committed Nov 5, 2017
1 parent cb259df commit 0d10e33
Showing 1 changed file with 84 additions and 30 deletions.
114 changes: 84 additions & 30 deletions mythtv/programs/mythfrontend/statusbox.cpp
Expand Up @@ -119,7 +119,7 @@ void StatusBox::Init()
qVariantFromValue((void*)SLOT(doScheduleStatus())));
item->DisplayState("schedule", "icon");

item = new MythUIButtonListItem(m_categoryList, tr("Tuner Status"),
item = new MythUIButtonListItem(m_categoryList, tr("Input Status"),
qVariantFromValue((void*)SLOT(doTunerStatus())));
item->DisplayState("tuner", "icon");

Expand Down Expand Up @@ -814,20 +814,36 @@ void StatusBox::doScheduleStatus()

void StatusBox::doTunerStatus()
{
struct info
{
int inputid;
bool schedgroup;
QString displayname;
int errored;
int unavailable;
int sleeping;
int recording;
int livetv;
int available;
QStringList recordings;
};
QMap<int, struct info> info;
QList<int> inputids;

if (m_iconState)
m_iconState->DisplayState("tuner");
m_logList->Reset();

QString helpmsg(tr("Tuner Status shows the current information "
"about the state of backend tuner cards"));
QString helpmsg(tr("Input Status shows the current information "
"about the state of backend inputs"));
if (m_helpText)
m_helpText->SetText(helpmsg);
if (m_justHelpText)
m_justHelpText->SetText(helpmsg);

MSqlQuery query(MSqlQuery::InitCon());
query.prepare(
"SELECT cardid, cardtype, videodevice "
"SELECT cardid, parentid, schedgroup, displayname "
"FROM capturecard ORDER BY cardid");

if (!query.exec() || !query.isActive())
Expand All @@ -838,9 +854,23 @@ void StatusBox::doTunerStatus()

while (query.next())
{
int cardid = query.value(0).toInt();
int inputid = query.value(0).toInt();
int parentid = query.value(1).toInt();

// If this is a schedgroup child, attribute all status to the
// parent.
int infoid = inputid;
if (parentid && info[parentid].schedgroup)
infoid = parentid;
else
{
info[infoid].inputid = inputid;
info[infoid].schedgroup = query.value(2).toBool();
info[infoid].displayname = query.value(3).toString();
inputids.append(inputid);
}

QString cmd = QString("QUERY_REMOTEENCODER %1").arg(cardid);
QString cmd = QString("QUERY_REMOTEENCODER %1").arg(inputid);
QStringList strlist( cmd );
strlist << "GET_STATE";

Expand All @@ -852,53 +882,77 @@ void StatusBox::doTunerStatus()
if (state == kState_Error)
{
strlist.clear();
strlist << QString("QUERY_REMOTEENCODER %1").arg(cardid);
strlist << QString("QUERY_REMOTEENCODER %1").arg(inputid);
strlist << "GET_SLEEPSTATUS";

gCoreContext->SendReceiveStringList(strlist);
int sleepState = strlist[0].toInt();

if (sleepState == -1)
status = tr("has an error");
info[infoid].errored += 1;
else if (sleepState == sStatus_Undefined)
status = tr("is unavailable");
info[infoid].unavailable += 1;
else
status = tr("is asleep");

fontstate = "warning";
info[infoid].sleeping += 1;
}
else if (state == kState_WatchingLiveTV)
status = tr("is watching Live TV");
else if (state == kState_RecordingOnly ||
state == kState_WatchingRecording)
status = tr("is recording");
info[infoid].recording += 1;
else if (state == kState_WatchingLiveTV)
info[infoid].livetv += 1;
else
status = tr("is not recording");

QString tun = tr("Tuner %1 %2 %3");
QString devlabel = CardUtil::GetDeviceLabel(
query.value(1).toString(), query.value(2).toString());

QString shorttuner = tun.arg(cardid).arg("").arg(status);
QString longtuner = tun.arg(cardid).arg(devlabel).arg(status);
info[infoid].available += 1;

if (state == kState_RecordingOnly ||
state == kState_WatchingRecording)
state == kState_WatchingRecording ||
state == kState_WatchingLiveTV)
{
strlist = QStringList( QString("QUERY_RECORDER %1").arg(cardid));
strlist = QStringList( QString("QUERY_RECORDER %1").arg(inputid));
strlist << "GET_RECORDING";
gCoreContext->SendReceiveStringList(strlist);
ProgramInfo pginfo(strlist);
if (pginfo.GetChanID())
{
status += ' ' + pginfo.GetTitle();
status += "\n";
status += pginfo.GetSubtitle();
longtuner = tun.arg(cardid).arg(devlabel).arg(status);
QString titlesub = pginfo.GetTitle();
if (!pginfo.GetSubtitle().isEmpty())
titlesub += QString(" - ") + pginfo.GetSubtitle();
info[infoid].recordings += titlesub;
}
}
}

QList<int>::iterator it = inputids.begin();
for ( ; it != inputids.end(); ++it)
{
int inputid = *it;

QStringList statuslist;
if (info[inputid].errored)
statuslist << tr("%1 errored").arg(info[inputid].errored);
if (info[inputid].unavailable)
statuslist << tr("%1 unavailable").arg(info[inputid].unavailable);
if (info[inputid].sleeping)
statuslist << tr("%1 sleeping").arg(info[inputid].sleeping);
if (info[inputid].recording)
statuslist << tr("%1 recording").arg(info[inputid].recording);
if (info[inputid].livetv)
statuslist << tr("%1 live television").arg(info[inputid].livetv);
if (info[inputid].available)
statuslist << tr("%1 available").arg(info[inputid].available);

QString fontstate;
if (info[inputid].errored)
fontstate = "error";
else if (info[inputid].unavailable || info[inputid].sleeping)
fontstate = "warning";

QString shortstatus = tr("Input %1 %2: %3")
.arg(inputid).arg(info[inputid].displayname)
.arg(statuslist.join(tr(", ")));
QString longstatus = shortstatus + "\n" +
info[inputid].recordings.join("\n");

AddLogLine(shorttuner, helpmsg, longtuner, longtuner, fontstate);
AddLogLine(shortstatus, helpmsg, longstatus, longstatus, fontstate);
}
}

Expand Down

0 comments on commit 0d10e33

Please sign in to comment.