17#define LOC QString("MythSystemEventHandler: ")
45 void run(
void)
override
52 QString(
"Finished '%1' result %2")
59 QString(
"SYSTEM_EVENT_RESULT %1 SENDER %2 RESULT %3")
61 QString::number(result)));
78 setObjectName(
"MythSystemEventHandler");
108 if (command.isEmpty())
111 LOG(VB_FILE, LOG_DEBUG,
LOC + QString(
"SubstituteMatches: BEFORE: %1")
115 QDateTime recstartts;
117 QStringList::const_iterator it = tokens.begin();
119 command.replace(QString(
"%EVENTNAME%"), *it);
122 while (it != tokens.end())
130 if ((*it ==
"CARDID") ||
131 (*it ==
"COMMAND") ||
132 (*it ==
"RECSTATUS") ||
133 (*it ==
"HOSTNAME") ||
137 (*it ==
"VIDEODEVICE") ||
138 (*it ==
"VBIDEVICE"))
142 if (++it == tokens.end())
147 command.replace(QString(
"%" "%1" "%").arg(token), *it);
158 if (++it == tokens.end())
161 chanid = (*it).toUInt();
168 if (*it ==
"STARTTIME")
170 if (++it == tokens.end())
183 command.replace(QString(
"%ARGS%"),
args);
194 RecordingInfo recinfo2(chanid, recstartts,
false, 0h, &status);
200 command.replace(QString(
"%CHANID%"), QString::number(chanid));
201 command.replace(QString(
"%STARTTIME%"),
204 command.replace(QString(
"%STARTTIMEISO%"),
209 command.replace(QString(
"%VERBOSELEVEL%"), QString(
"%1").arg(
verboseMask));
212 LOG(VB_FILE, LOG_DEBUG,
LOC + QString(
"SubstituteMatches: AFTER : %1")
227 QString result(
"EventCmd");
228 QStringList parts = name.toLower().split(
'_', Qt::SkipEmptyParts);
229 for (
const auto & part : std::as_const(parts))
231 result += part.at(0).toUpper();
232 result += part.mid(1);
260 QString msg = me->
Message().simplified();
262 if (msg ==
"CLEAR_SETTINGS_CACHE")
263 msg =
"SYSTEM_EVENT SETTINGS_CACHE_CLEARED";
267 if (msg.startsWith(
"GLOBAL_SYSTEM_EVENT "))
274 if ((!msg.startsWith(
"SYSTEM_EVENT ")) &&
275 (!msg.startsWith(
"LOCAL_SYSTEM_EVENT ")))
278 QStringList tokens = msg.split(
' ', Qt::SkipEmptyParts);
281 if ((tokens.size() >= 4) &&
282 (tokens[2] ==
"HOST") &&
296 eventThread,
"SystemEvent");
305 LOG(VB_GENERAL, LOG_INFO,
LOC +
306 QString(
"Starting thread for command '%1'").arg(cmd));
310 eventThread,
"SystemEvent");
329 QString(
"%1 CARDID %2 CHANID %3 STARTTIME %4 RECSTATUS %5 "
330 "VIDEODEVICE %6 VBIDEVICE %7")
331 .arg(msg).arg(cardid)
340 LOG(VB_GENERAL, LOG_ERR,
LOC +
341 "SendMythSystemRecEvent() called with empty RecordingInfo");
356 QString(
"%1 HOSTNAME %2 CHANID %3 STARTTIME %4")
363 LOG(VB_GENERAL, LOG_ERR,
LOC +
"SendMythSystemPlayEvent() called with "
364 "empty ProgramInfo");
385 m_title = tr(
"System Event Command Editor");
394 settings[
"EventCmdRecPending"] =
395 tr(
"Recording pending");
396 settings[
"EventCmdRecPreFail"] =
397 tr(
"Recording about to fail");
398 settings[
"EventCmdRecFailing"] =
399 tr(
"Recording failing");
400 settings[
"EventCmdRecStarted"] =
401 tr(
"Recording started");
402 settings[
"EventCmdRecStartedWriting"] =
403 tr(
"Recording started writing");
404 settings[
"EventCmdRecFinished"] =
405 tr(
"Recording finished");
406 settings[
"EventCmdRecDeleted"] =
407 tr(
"Recording deleted");
408 settings[
"EventCmdRecExpired"] =
409 tr(
"Recording expired");
410 settings[
"EventCmdLivetvStarted"] =
411 tr(
"LiveTV started");
412 settings[
"EventCmdLivetvEnded"] =
414 settings[
"EventCmdPlayStarted"] =
415 tr(
"Playback started");
416 settings[
"EventCmdPlayStopped"] =
417 tr(
"Playback stopped");
418 settings[
"EventCmdPlayPaused"] =
419 tr(
"Playback paused");
420 settings[
"EventCmdPlayUnpaused"] =
421 tr(
"Playback unpaused");
422 settings[
"EventCmdPlayChanged"] =
423 tr(
"Playback program changed");
424 settings[
"EventCmdTuningSignalTimeout"] =
425 tr(
"Tuning signal waiting");
426 settings[
"EventCmdMasterStarted"] =
427 tr(
"Master backend started");
428 settings[
"EventCmdMasterShutdown"] =
429 tr(
"Master backend shutdown");
430 settings[
"EventCmdClientConnected"] =
431 tr(
"Client connected to master backend");
432 settings[
"EventCmdClientDisconnected"] =
433 tr(
"Client disconnected from master backend");
434 settings[
"EventCmdSlaveConnected"] =
435 tr(
"Slave backend connected to master");
436 settings[
"EventCmdSlaveDisconnected"] =
437 tr(
"Slave backend disconnected from master");
438 settings[
"EventCmdNetCtrlConnected"] =
439 tr(
"Network Control client connected");
440 settings[
"EventCmdNetCtrlDisconnected"] =
441 tr(
"Network Control client disconnected");
442 settings[
"EventCmdMythfilldatabaseRan"] =
443 tr(
"mythfilldatabase ran");
444 settings[
"EventCmdSchedulerRan"] =
446 settings[
"EventCmdSettingsCacheCleared"] =
447 tr(
"Settings cache cleared");
448 settings[
"EventCmdScreenType"] =
449 tr(
"Screen created or destroyed");
450 settings[
"EventCmdKey01"] =
451 tr(
"Keystroke event #1");
452 settings[
"EventCmdKey02"] =
453 tr(
"Keystroke event #2");
454 settings[
"EventCmdKey03"] =
455 tr(
"Keystroke event #3");
456 settings[
"EventCmdKey04"] =
457 tr(
"Keystroke event #4");
458 settings[
"EventCmdKey05"] =
459 tr(
"Keystroke event #5");
460 settings[
"EventCmdKey06"] =
461 tr(
"Keystroke event #6");
462 settings[
"EventCmdKey07"] =
463 tr(
"Keystroke event #7");
464 settings[
"EventCmdKey08"] =
465 tr(
"Keystroke event #8");
466 settings[
"EventCmdKey09"] =
467 tr(
"Keystroke event #9");
468 settings[
"EventCmdKey10"] =
469 tr(
"Keystroke event #10");
470 settings[
"EventCmdCecCommandReceived"] =
471 tr(
"CEC command received");
472 settings[
"EventCmdAll"] =
static QString GetVideoDevice(uint inputid)
static QString GetVBIDevice(uint inputid)
void startReserved(QRunnable *runnable, const QString &debugName, std::chrono::milliseconds waitForAvailMS=0ms)
static MThreadPool * globalInstance(void)
QString GetHostName(void)
QString GetSetting(const QString &key, const QString &defaultval="")
void SendSystemEvent(const QString &msg)
void SendMessage(const QString &message)
This class is used as a container for messages.
const QString & Message() const
static const Type kMythEventMessage
void addListener(QObject *listener)
Add a listener to the observable.
void removeListener(QObject *listener)
Remove a listener to the observable.
static void createSettingList(QMap< QString, QString > &settings)
MythSystemEventEditor(MythScreenStack *parent, const char *name=nullptr)
Constructor for the MythSystemEvent settings editor.
~MythSystemEventHandler() override
Destructor.
void customEvent(QEvent *e) override
Custom Event handler for receiving and processing System Events.
static void SubstituteMatches(const QStringList &tokens, QString &command)
Substitutes MATCH% variables in given command line.
static QString EventNameToSetting(const QString &name)
Convert an MythSystemEvent name to a database setting name.
MythSystemEventHandler()
Null Constructor.
Holds information on recordings and videos.
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
uint GetInputID(void) const
RecStatus::Type GetRecordingStatus(void) const
An editor screen that allows manipulation of raw settings values.
QMap< QString, QString > m_settings
Holds information on a TV Program one might wish to record.
void SubstituteMatches(QString &str) override
Replace MATCH% vars in the specified string.
QRunnable class for running MythSystemEvent handler commands.
SystemEventThread(QString cmd, QString eventName="")
Constructor for creating a SystemEventThread.
void run(void) override
Runs the System Event handler command.
@ GENERIC_EXIT_OK
Exited with no error.
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
@ kMSDontBlockInputDevs
avoid blocking LIRC & Joystick Menu
void SendMythSystemRecEvent(const QString &msg, const RecordingInfo *pginfo)
void SendMythSystemPlayEvent(const QString &msg, const ProgramInfo *pginfo)
uint myth_system(const QString &command, uint flags, std::chrono::seconds timeout)
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
@ kFilename
Default UTC, "yyyyMMddhhmmss".
QDateTime fromString(const QString &dtstr)
Converts kFilename && kISODate formats to QDateTime.