Go to the documentation of this file.
2 #include <QApplication>
18 #define LOC QString("MythSystemEventHandler: ")
46 void run(
void)
override
53 QString(
"Finished '%1' result %2")
60 QString(
"SYSTEM_EVENT_RESULT %1 SENDER %2 RESULT %3")
62 QString::number(result)));
79 setObjectName(
"MythSystemEventHandler");
109 if (command.isEmpty())
112 LOG(VB_FILE, LOG_DEBUG,
LOC + QString(
"SubstituteMatches: BEFORE: %1")
116 QDateTime recstartts;
118 QStringList::const_iterator it = tokens.begin();
120 command.replace(QString(
"%EVENTNAME%"), *it);
123 while (it != tokens.end())
131 if ((*it ==
"CARDID") ||
132 (*it ==
"COMMAND") ||
133 (*it ==
"RECSTATUS") ||
134 (*it ==
"HOSTNAME") ||
138 (*it ==
"VIDEODEVICE") ||
139 (*it ==
"VBIDEVICE"))
143 if (++it == tokens.end())
148 command.replace(QString(
"%" "%1" "%").arg(token), *it);
159 if (++it == tokens.end())
162 chanid = (*it).toUInt();
169 if (*it ==
"STARTTIME")
171 if (++it == tokens.end())
184 command.replace(QString(
"%ARGS%"),
args);
195 RecordingInfo recinfo2(chanid, recstartts,
false, 0h, &status);
201 command.replace(QString(
"%CHANID%"), QString::number(chanid));
202 command.replace(QString(
"%STARTTIME%"),
205 command.replace(QString(
"%STARTTIMEISO%"),
210 command.replace(QString(
"%VERBOSELEVEL%"), QString(
"%1").arg(
verboseMask));
213 LOG(VB_FILE, LOG_DEBUG,
LOC + QString(
"SubstituteMatches: AFTER : %1")
228 QString result(
"EventCmd");
229 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
230 QStringList parts = name.toLower().split(
'_', QString::SkipEmptyParts);
232 QStringList parts = name.toLower().split(
'_', Qt::SkipEmptyParts);
235 for (
const auto & part : qAsConst(parts))
237 result += part.at(0).toUpper();
238 result += part.mid(1);
266 QString msg = me->
Message().simplified();
268 if (msg ==
"CLEAR_SETTINGS_CACHE")
269 msg =
"SYSTEM_EVENT SETTINGS_CACHE_CLEARED";
273 if (msg.startsWith(
"GLOBAL_SYSTEM_EVENT "))
280 if ((!msg.startsWith(
"SYSTEM_EVENT ")) &&
281 (!msg.startsWith(
"LOCAL_SYSTEM_EVENT ")))
284 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
285 QStringList tokens = msg.split(
' ', QString::SkipEmptyParts);
287 QStringList tokens = msg.split(
' ', Qt::SkipEmptyParts);
291 if ((tokens.size() >= 4) &&
292 (tokens[2] ==
"HOST") &&
306 eventThread,
"SystemEvent");
315 LOG(VB_GENERAL, LOG_INFO,
LOC +
316 QString(
"Starting thread for command '%1'").arg(cmd));
320 eventThread,
"SystemEvent");
339 QString(
"%1 CARDID %2 CHANID %3 STARTTIME %4 RECSTATUS %5 "
340 "VIDEODEVICE %6 VBIDEVICE %7")
341 .arg(msg).arg(cardid)
350 LOG(VB_GENERAL, LOG_ERR,
LOC +
351 "SendMythSystemRecEvent() called with empty RecordingInfo");
366 QString(
"%1 HOSTNAME %2 CHANID %3 STARTTIME %4")
373 LOG(VB_GENERAL, LOG_ERR,
LOC +
"SendMythSystemPlayEvent() called with "
374 "empty ProgramInfo");
395 m_title = tr(
"System Event Command Editor");
404 settings[
"EventCmdRecPending"] =
405 tr(
"Recording pending");
406 settings[
"EventCmdRecPreFail"] =
407 tr(
"Recording about to fail");
408 settings[
"EventCmdRecFailing"] =
409 tr(
"Recording failing");
410 settings[
"EventCmdRecStarted"] =
411 tr(
"Recording started");
412 settings[
"EventCmdRecStartedWriting"] =
413 tr(
"Recording started writing");
414 settings[
"EventCmdRecFinished"] =
415 tr(
"Recording finished");
416 settings[
"EventCmdRecDeleted"] =
417 tr(
"Recording deleted");
418 settings[
"EventCmdRecExpired"] =
419 tr(
"Recording expired");
420 settings[
"EventCmdLivetvStarted"] =
421 tr(
"LiveTV started");
422 settings[
"EventCmdLivetvEnded"] =
424 settings[
"EventCmdPlayStarted"] =
425 tr(
"Playback started");
426 settings[
"EventCmdPlayStopped"] =
427 tr(
"Playback stopped");
428 settings[
"EventCmdPlayPaused"] =
429 tr(
"Playback paused");
430 settings[
"EventCmdPlayUnpaused"] =
431 tr(
"Playback unpaused");
432 settings[
"EventCmdPlayChanged"] =
433 tr(
"Playback program changed");
434 settings[
"EventCmdTuningSignalTimeout"] =
435 tr(
"Tuning signal waiting");
436 settings[
"EventCmdMasterStarted"] =
437 tr(
"Master backend started");
438 settings[
"EventCmdMasterShutdown"] =
439 tr(
"Master backend shutdown");
440 settings[
"EventCmdClientConnected"] =
441 tr(
"Client connected to master backend");
442 settings[
"EventCmdClientDisconnected"] =
443 tr(
"Client disconnected from master backend");
444 settings[
"EventCmdSlaveConnected"] =
445 tr(
"Slave backend connected to master");
446 settings[
"EventCmdSlaveDisconnected"] =
447 tr(
"Slave backend disconnected from master");
448 settings[
"EventCmdNetCtrlConnected"] =
449 tr(
"Network Control client connected");
450 settings[
"EventCmdNetCtrlDisconnected"] =
451 tr(
"Network Control client disconnected");
452 settings[
"EventCmdMythfilldatabaseRan"] =
453 tr(
"mythfilldatabase ran");
454 settings[
"EventCmdSchedulerRan"] =
456 settings[
"EventCmdSettingsCacheCleared"] =
457 tr(
"Settings cache cleared");
458 settings[
"EventCmdScreenType"] =
459 tr(
"Screen created or destroyed");
460 settings[
"EventCmdKey01"] =
461 tr(
"Keystroke event #1");
462 settings[
"EventCmdKey02"] =
463 tr(
"Keystroke event #2");
464 settings[
"EventCmdKey03"] =
465 tr(
"Keystroke event #3");
466 settings[
"EventCmdKey04"] =
467 tr(
"Keystroke event #4");
468 settings[
"EventCmdKey05"] =
469 tr(
"Keystroke event #5");
470 settings[
"EventCmdKey06"] =
471 tr(
"Keystroke event #6");
472 settings[
"EventCmdKey07"] =
473 tr(
"Keystroke event #7");
474 settings[
"EventCmdKey08"] =
475 tr(
"Keystroke event #8");
476 settings[
"EventCmdKey09"] =
477 tr(
"Keystroke event #9");
478 settings[
"EventCmdKey10"] =
479 tr(
"Keystroke event #10");
480 settings[
"EventCmdCecCommandReceived"] =
481 tr(
"CEC command received");
482 settings[
"EventCmdAll"] =
MythSystemEventHandler()
Null Constructor.
void SendMessage(const QString &message)
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
static const Type kMythEventMessage
@ kMSDontBlockInputDevs
avoid blocking LIRC & Joystick Menu
Holds information on a TV Program one might wish to record.
This class is used as a container for messages.
An editor screen that allows manipulation of raw settings values.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
static void SubstituteMatches(const QStringList &tokens, QString &command)
Substitutes MATCH% variables in given command line.
uint myth_system(const QString &command, uint flags, std::chrono::seconds timeout)
@ GENERIC_EXIT_OK
Exited with no error.
void startReserved(QRunnable *runnable, const QString &debugName, std::chrono::milliseconds waitForAvailMS=0ms)
const QString & Message() const
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
QRunnable class for running MythSystemEvent handler commands.
void addListener(QObject *listener)
Add a listener to the observable.
static QString EventNameToSetting(const QString &name)
Convert an MythSystemEvent name to a database setting name.
RecStatus::Type GetRecordingStatus(void) const
@ kFilename
Default UTC, "yyyyMMddhhmmss".
void SendSystemEvent(const QString &msg)
SystemEventThread(QString cmd, QString eventName="")
Constructor for creating a SystemEventThread.
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
QDateTime fromString(const QString &dtstr)
Converts kFilename && kISODate formats to QDateTime.
uint GetInputID(void) const
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
void SubstituteMatches(QString &str) override
Replace MATCH% vars in the specified string.
Holds information on recordings and videos.
QMap< QString, QString > m_settings
void SendMythSystemPlayEvent(const QString &msg, const ProgramInfo *pginfo)
void customEvent(QEvent *e) override
Custom Event handler for receiving and processing System Events.
MythSystemEventEditor(MythScreenStack *parent, const char *name=nullptr)
Constructor for the MythSystemEvent settings editor.
static void createSettingList(QMap< QString, QString > &settings)
static QString GetVBIDevice(uint inputid)
void SendMythSystemRecEvent(const QString &msg, const RecordingInfo *pginfo)
QString GetHostName(void)
void run(void) override
Runs the System Event handler command.
~MythSystemEventHandler() override
Destructor.
static MThreadPool * globalInstance(void)
void removeListener(QObject *listener)
Remove a listener to the observable.
static QString GetVideoDevice(uint inputid)
QString GetSetting(const QString &key, const QString &defaultval="")