Go to the documentation of this file.
37 #include <QStringList>
75 fprintf(fd,
":Name ");
82 fprintf(fd,
":InitiallyAvailable false");
115 fprintf(fd,
"{:ResidentPrg ");
165 #if QT_VERSION < QT_VERSION_CHECK(6,5,0)
166 static const QDateTime
k_mJD_epoch = QDateTime(QDate(1858, 11, 17), QTime(0, 0), Qt::LocalTime);
168 static const QDateTime
k_mJD_epoch = QDateTime(QDate(1858, 11, 17), QTime(0, 0),
169 QTimeZone(QTimeZone::LocalTime));
176 return dt.addDays(mJDN).addSecs(seconds);
181 auto dt = QDateTime::currentDateTime();
183 seconds = dt.time().msecsSinceStartOfDay() / 1000;
202 if (
args.Size() == 2)
207 int nModJulianDate = std::clamp<int64_t>(mJDN, 0, std::numeric_limits<int>::max());
221 if (
args.Size() == 4)
232 for (
int i = 0; i < format.
Size(); i++)
234 char ch = format.
GetAt(i);
241 if (i == format.
Size())
246 ch = format.
GetAt(i);
250 case 'Y': buffer = dt.toString(
"yyyy");
break;
251 case 'y': buffer = dt.toString(
"yy");
break;
252 case 'X': buffer = dt.toString(
"MM");
break;
253 case 'x': buffer = dt.toString(
"M");
break;
254 case 'D': buffer = dt.toString(
"dd");
break;
255 case 'd': buffer = dt.toString(
"d");
break;
256 case 'H': buffer = dt.toString(
"HH");
break;
257 case 'h': buffer = dt.toString(
"H");
break;
260 buffer = dt.toString(
"HH AP");
264 buffer = dt.toString(
"H AP");
267 case 'M': buffer = dt.toString(
"mm");
break;
268 case 'm': buffer = dt.toString(
"m");
break;
269 case 'S': buffer = dt.toString(
"ss");
break;
270 case 's': buffer = dt.toString(
"s");
break;
271 case 'A': buffer = dt.toString(
"AP");
break;
272 case 'a': buffer = dt.toString(
"ap");
break;
277 result.
Append(qPrintable(buffer));
297 if (
args.Size() == 2)
304 int dayOfWeek = dt.date().dayOfWeek();
321 if (
args.Size() == 2)
328 static std::random_device rd;
329 static std::mt19937 generator {rd()};
330 std::uniform_int_distribution<int> distrib {0, nLimit};
331 int r = distrib(generator);
345 if (
args.Size() == 2)
363 if (
args.Size() == 3)
379 if (
args.Size() == 2)
396 if (
args.Size() == 4)
400 int nBeginExtract =
GetInt(
args.GetAt(1), engine);
401 int nEndExtract =
GetInt(
args.GetAt(2), engine);
403 nBeginExtract =
std::clamp(nBeginExtract, 1,
string.Size());
404 nEndExtract =
std::clamp(nEndExtract, 1,
string.Size());
409 MHOctetString(
string, nBeginExtract - 1, nEndExtract - nBeginExtract + 1));
420 if (
args.Size() == 4)
428 nStart = std::max(nStart, 1);
434 for (nPos = nStart - 1; nPos <=
string.Size() - searchString.
Size(); nPos++)
438 for (i = 0; i < searchString.
Size(); i++)
440 if (searchString.
GetAt(i) !=
string.GetAt(i + nPos))
446 if (i == searchString.
Size())
456 if (nPos <=
string.Size() - searchString.
Size())
474 if (
args.Size() == 5)
483 nStart = std::max(nStart, 1);
489 for (nPos = nStart - 1; nPos <=
string.Size() - searchString.
Size(); nPos++)
493 for (i = 0; i < searchString.
Size(); i++)
495 if (searchString.
GetAt(i) !=
string.GetAt(i + nPos))
501 if (i == searchString.
Size())
512 if (nPos <=
string.Size() - searchString.
Size())
517 MHOctetString resultString(
string, nStart - 1, nPos - nStart + 1);
535 if (
args.Size() == 2)
543 QString str = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
557 if (
args.Size() == 1)
572 if (
args.Size() == 1)
588 if (
args.Size() == 5)
590 int channelId =
GetInt(
args.GetAt(0), engine);
597 transportId, serviceId);
617 MHERROR(
"GetBootInfo ResidentProgram is not implemented");
625 if (
args.Size() == 3)
637 if (! csPath.isEmpty())
659 MHERROR(
"CheckGroupIDRef ResidentProgram is not implemented");
664 MHERROR(
"VideoToGraphics ResidentProgram is not implemented");
670 MHERROR(
"SetWidescreenAlignment ResidentProgram is not implemented");
675 MHERROR(
"GetDisplayAspectRatio ResidentProgram is not implemented");
680 MHERROR(
"CI_SendMessage ResidentProgram is not implemented");
685 if (
args.Size() == 1) {
688 .arg(status ?
"enabled" :
"disabled"));
702 if (
args.Size() == 1)
709 result.
Copy(
"SNYPVR");
730 QString message =
"DEBUG: ";
732 for (
int i = 0; i <
args.Size(); i++)
740 message.append(QString(
"%1").arg(un.
m_nIntVal));
743 message.append(un.
m_fBoolVal ?
"True" :
"False");
767 if (
args.Size() == 1) {
770 .arg(status ?
"enabled" :
"disabled"));
782 if (
args.Size() == 1)
786 ICstatus == 0 ?
"active" : ICstatus == 1 ?
"inactive" :
787 ICstatus == 2 ?
"disabled" :
"undefined"));
797 if (
args.Size() >= 3)
801 QUrl url = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
806 for (; i + 2 <
args.Size(); i += 2)
809 QString name = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
817 .arg(url.toEncoded().constData()) );
829 result.
Append(text.constData());
840 if (
args.Size() == 2)
844 QString str = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
846 QString str2 = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
858 if (
args.Size() == 1)
869 if (
args.Size() == 4)
873 QString
id = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
876 QString val = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
880 .arg(
id).arg(iExpiry).arg(val).arg(bSecure) );
888 MHERROR(
"GetCookie ResidentProgram is not implemented");
894 if (
args.Size() == 2)
898 QString url = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
901 .arg(url).arg(
GetInt(
args.GetAt(1), engine)) );
912 if (
args.Size() == 2)
916 QString
info = QString::fromUtf8((
const char *)
string.Bytes(),
string.Size());
930 if (
args.Size() == 1)
941 if (
args.Size() == 1)
960 if (
args.Size() == 1)
973 for (
int i = 0; i <
args.Size(); ++i)
1004 fprintf(fd,
"{:RemotePrg");
1006 fprintf(fd,
"****TODO\n");
1020 fprintf(fd,
"{:InterchgPrg");
1022 fprintf(fd,
"****TODO\n");
1035 for (
int i = 0; i <
args->GetSeqCount(); i++)
1039 pParm->Initialise(
args->GetSeqN(i), engine);
virtual bool GetCarouselData(const QString &objectPath, QByteArray &result)=0
virtual void Activation(MHEngine *engine)
static void GetString(MHParameter *parm, MHOctetString &str, MHEngine *engine)
static const char * GetAsString(enum UnionTypes t)
void Initialise(MHParseNode *p, MHEngine *engine)
void PrintMe(FILE *fd, int nTabs) const override
static void GetCurrentDate(int64_t &mJDN, int &seconds)
virtual void Deactivation(MHEngine *engine)
void Preparation(MHEngine *engine) override
MHOwnPtrSequence< MHParameter > m_parameters
void Initialise(MHParseNode *p, MHEngine *engine) override
MHObjectRef * GetReference()
void CheckType(enum UnionTypes t) const
void PrintMe(FILE *fd, int nTabs) const
static const char * MHEGEngineProviderIdString
void Initialise(MHParseNode *p, MHEngine *engine) override
unsigned char GetAt(int i) const
const unsigned char * Bytes() const
void CallProgram(bool fIsFork, const MHObjectRef &success, const MHSequence< MHParameter * > &args, MHEngine *engine) override
static QDateTime recoverDateTime(int64_t mJDN, int64_t seconds)
void Perform(MHEngine *engine) override
virtual void SetVariableValue(const MHUnion &)
virtual void Initialise(MHParseNode *p, MHEngine *engine)
void SetTuneInfo(int tuneinfo)
void PrintMe(FILE *fd, int nTabs) const
virtual bool TuneTo(int channel, int tuneinfo)=0
QString GetPathName(const MHOctetString &str)
void PrintArgs(FILE *fd, int nTabs) const override
bool m_fInitiallyAvailable
void EventTriggered(MHRoot *pSource, enum EventType ev)
virtual int GetICStatus()=0
static void SetSuccessFlag(const MHObjectRef &success, bool result, MHEngine *engine)
void PrintTabs(FILE *fd, int n)
MHParseNode * GetArgN(int n)
void PrintMe(FILE *fd, int nTabs) const override
void PrintMe(FILE *fd, int nTabs) const override
MHRoot * FindObject(const MHObjectRef &oRef, bool failOnNotFound=true)
void Initialise(MHParseNode *p, MHEngine *engine) override
#define MHLOG(__level, __text)
QString Printable() const
enum MHUnion::UnionTypes U_None
static eu8 clamp(eu8 value, eu8 low, eu8 high)
void PrintMe(FILE *fd, int nTabs) const override
void GetValueFrom(const MHParameter &value, MHEngine *engine)
MHRoot * Target(MHEngine *engine)
MHContentRef m_contentRefVal
QString Printable() const
virtual const char * GetDSMCCId(void)=0
void Initialise(MHParseNode *p, MHEngine *engine) override
MHOctetString m_contentRef
virtual void CallProgram(bool, const MHObjectRef &, const MHSequence< MHParameter * > &, MHEngine *)
void Deactivation(MHEngine *engine) override
virtual bool GetServiceInfo(int channelId, int &netId, int &origNetId, int &transportId, int &serviceId)=0
QString Printable() const
static bool GetBool(MHParameter *parm, MHEngine *engine)
void Initialise(MHParseNode *p, MHEngine *engine) override
static int GetInt(MHParameter *parm, MHEngine *engine)
virtual int GetChannelIndex(const QString &str)=0
static const QDateTime k_mJD_epoch
Midnight on 17 November 1858, the epoch of the modified Julian day.
void PrintMe(FILE *fd, int nTabs) const override
void GetStringValue(MHOctetString &str)
bool Equal(const MHOctetString &str) const
void Activation(MHEngine *engine) override
virtual const char * GetReceiverId(void)=0
void Copy(const MHContentRef &cr)
void Append(const MHOctetString &str)
void PrintMe(FILE *fd, int nTabs) const
void Copy(const MHOctetString &str)
QString Printable() const