Skip to content

Commit

Permalink
mythexternrecorder: Allow use of channum with tuning command, even wi…
Browse files Browse the repository at this point in the history
…thout a channel configuration file.

(cherry picked from commit 356dd5e)
  • Loading branch information
jpoet committed Apr 8, 2020
1 parent 1244edd commit 49e5455
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 43 deletions.
4 changes: 2 additions & 2 deletions mythtv/programs/mythexternrecorder/MythExternControl.cpp
Expand Up @@ -314,7 +314,7 @@ bool Commands::ProcessCommand(const QString & cmd)
else
SendStatus(cmd, tokens[0], "OK:20");
}
else if (tokens[1].startsWith("LockTimeout"))
else if (tokens[1].startsWith("LockTimeout?"))
{
LockTimeout(tokens[0]);
}
Expand Down Expand Up @@ -357,7 +357,7 @@ bool Commands::ProcessCommand(const QString & cmd)
}
else if (tokens[1].startsWith("TuneChannel"))
{
if (tokens.size() > 1)
if (tokens.size() > 2)
TuneChannel(tokens[0], tokens[2]);
else
SendStatus(cmd, tokens[0], "ERR:Missing channum");
Expand Down
95 changes: 54 additions & 41 deletions mythtv/programs/mythexternrecorder/MythExternRecApp.cpp
Expand Up @@ -27,6 +27,7 @@
#include <QFileInfo>
#include <QProcess>
#include <QtCore/QtCore>
#include <unistd.h>

#define LOC Desc()

Expand All @@ -42,8 +43,7 @@ MythExternRecApp::MythExternRecApp(QString command,
if (m_configIni.isEmpty() || !config())
m_recDesc = m_recCommand;

if (m_tuneCommand.isEmpty())
m_command = m_recCommand;
m_command = m_recCommand;

LOG(VB_CHANNEL, LOG_INFO, LOC +
QString("Channels in '%1', Tuner: '%2', Scanner: '%3'")
Expand Down Expand Up @@ -424,56 +424,62 @@ Q_SLOT void MythExternRecApp::TuneChannel(const QString & serial,
return;
}

if (m_channelsIni.isEmpty())
if (m_tuneCommand.isEmpty())
{
LOG(VB_CHANNEL, LOG_ERR, LOC + ": No channels configured.");
emit SendMessage("TuneChannel", serial, "ERR:No channels configured.");
LOG(VB_CHANNEL, LOG_ERR, LOC + ": No 'tuner' configured.");
emit SendMessage("TuneChannel", serial, "ERR:No 'tuner' configured.");
return;
}

QSettings settings(m_channelsIni, QSettings::IniFormat);
settings.beginGroup(channum);
m_desc = m_recDesc;
m_command = m_recCommand;

QString url(settings.value("URL").toString());
QString tune = m_tuneCommand;
QString url;

if (url.isEmpty())
if (!m_channelsIni.isEmpty())
{
QString msg = QString("Channel number [%1] is missing a URL.")
.arg(channum);
QSettings settings(m_channelsIni, QSettings::IniFormat);
settings.beginGroup(channum);

LOG(VB_CHANNEL, LOG_ERR, LOC + ": " + msg);
url = settings.value("URL").toString();

emit SendMessage("TuneChannel", serial, QString("ERR:%1").arg(msg));
return;
}
if (url.isEmpty())
{
QString msg = QString("Channel number [%1] is missing a URL.")
.arg(channum);

if (!m_tuneCommand.isEmpty())
{
// Repalce URL in command and execute it
QString tune = m_tuneCommand;
tune.replace("%URL%", url);
LOG(VB_CHANNEL, LOG_ERR, LOC + ": " + msg);
}
else
tune.replace("%URL%", url);

if (system(tune.toUtf8().constData()) != 0)
if (!url.isEmpty() && m_command.indexOf("%URL%") >= 0)
{
QString errmsg = QString("'%1' failed: ").arg(tune) + ENO;
LOG(VB_CHANNEL, LOG_ERR, LOC + ": " + errmsg);
emit SendMessage("TuneChannel", serial, QString("ERR:%1").arg(errmsg));
return;
m_command.replace("%URL%", url);
LOG(VB_CHANNEL, LOG_DEBUG, LOC +
QString(": '%URL%' replaced with '%1' in cmd: '%2'")
.arg(url).arg(m_command));
}
LOG(VB_CHANNEL, LOG_INFO, LOC +
QString(": TuneChannel, ran '%1'").arg(tune));

m_desc.replace("%CHANNAME%", settings.value("NAME").toString());
m_desc.replace("%CALLSIGN%", settings.value("CALLSIGN").toString());

settings.endGroup();
}

// Replace URL in recorder command
m_command = m_recCommand;
tune.replace("%CHANNUM%", channum);
m_command.replace("%CHANNUM%", channum);

if (!url.isEmpty() && m_command.indexOf("%URL%") >= 0)
if (system(tune.toUtf8().constData()) != 0)
{
m_command.replace("%URL%", url);
LOG(VB_CHANNEL, LOG_DEBUG, LOC +
QString(": '%URL%' replaced with '%1' in cmd: '%2'")
.arg(url).arg(m_command));
QString errmsg = QString("'%1' failed: ").arg(tune) + ENO;
LOG(VB_CHANNEL, LOG_ERR, LOC + ": " + errmsg);
emit SendMessage("TuneChannel", serial, QString("ERR:%1").arg(errmsg));
return;
}
LOG(VB_CHANNEL, LOG_INFO, LOC +
QString(": TuneChannel, ran '%1'").arg(tune));

if (!m_logFile.isEmpty() && m_command.indexOf("%LOGFILE%") >= 0)
{
Expand All @@ -491,39 +497,46 @@ Q_SLOT void MythExternRecApp::TuneChannel(const QString & serial,
.arg(m_logging).arg(m_command));
}

m_desc = m_recDesc;
m_desc.replace("%URL%", url);
m_desc.replace("%CHANNUM%", channum);
m_desc.replace("%CHANNAME%", settings.value("NAME").toString());
m_desc.replace("%CALLSIGN%", settings.value("CALLSIGN").toString());

settings.endGroup();

LOG(VB_CHANNEL, LOG_INFO, LOC +
QString(": TuneChannel %1: URL '%2'").arg(channum).arg(url));
m_tunedChannel = channum;

emit SetDescription(Desc());
emit SendMessage("TuneChannel", serial,
QString("OK:Tunned to %1").arg(channum));
QString("OK:Tuned to %1").arg(channum));
}

Q_SLOT void MythExternRecApp::LockTimeout(const QString & serial)
{
if (!Open())
{
LOG(VB_CHANNEL, LOG_WARNING, LOC +
"Cannot read LockTimeout from config file.");
emit SendMessage("LockTimeout", serial, "ERR: Not open");
return;
}

if (m_lockTimeout > 0)
{
LOG(VB_CHANNEL, LOG_INFO, LOC +
QString("Using configured LockTimeout of %1").arg(m_lockTimeout));
emit SendMessage("LockTimeout", serial,
QString("OK:%1").arg(m_lockTimeout));
return;
}
LOG(VB_CHANNEL, LOG_INFO, LOC +
"No LockTimeout defined in config, defaulting to 12000ms");
emit SendMessage("LockTimeout", serial, QString("OK:%1")
.arg(m_scanCommand.isEmpty() ? 12000 : 120000));
}

Q_SLOT void MythExternRecApp::HasTuner(const QString & serial)
{
emit SendMessage("HasTuner", serial, QString("OK:%1")
.arg(m_channelsIni.isEmpty() ? "No" : "Yes"));
.arg(m_tuneCommand.isEmpty() ? "No" : "Yes"));
}

Q_SLOT void MythExternRecApp::HasPictureAttributes(const QString & serial)
Expand Down

0 comments on commit 49e5455

Please sign in to comment.