mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
* Allow to enable/disable suspend & lock event handling * Fix Windows * Refactor event handling incl.CEC * Revert "Auxiliary commit to revert individual files from 0d9a8b8a3a4a09609a339f54c7d8a9384c561282" This reverts commit 80737d926ad151a07b2493dd1685ed502975cb2e. * Support Events for Grabbers generically * Have CECEvent to actions configurable, further clean-ups * Remove handleEvent from V4L2grabber, as grabber will be stopped on suspend * Validate that one CEC Event can only trigger one action * MacOS lock/unlock added * fast windows fix * Corrections * Fix CodeQL findings * add macos lock/unlock handler * Migration of CEC-config and have default actions * Correct target_link_libraries * Include Foundation * macOS include AppKit * Support Scheduled Events, cleanups. * Fix destructing * Fix coredump during free * Consider additional error sceanrio * Fix missing code * install desktop icons * correct bash logic --------- Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
187 lines
3.0 KiB
C++
187 lines
3.0 KiB
C++
#include <events/EventHandler.h>
|
|
|
|
#include <QJsonDocument>
|
|
#include <QJsonObject>
|
|
|
|
#include <utils/Logger.h>
|
|
#include <utils/Process.h>
|
|
#include <hyperion/HyperionIManager.h>
|
|
|
|
EventHandler::EventHandler()
|
|
: _isSuspended(false)
|
|
, _isIdle(false)
|
|
{
|
|
qRegisterMetaType<Event>("Event");
|
|
_log = Logger::getInstance("EVENTS");
|
|
|
|
QObject::connect(this, &EventHandler::signalEvent, HyperionIManager::getInstance(), &HyperionIManager::handleEvent);
|
|
}
|
|
|
|
EventHandler::~EventHandler()
|
|
{
|
|
QObject::disconnect(this, &EventHandler::signalEvent, HyperionIManager::getInstance(), &HyperionIManager::handleEvent);
|
|
}
|
|
|
|
EventHandler* EventHandler::getInstance()
|
|
{
|
|
static EventHandler instance;
|
|
return &instance;
|
|
}
|
|
|
|
void EventHandler::suspend()
|
|
{
|
|
suspend(true);
|
|
}
|
|
|
|
void EventHandler::suspend(bool sleep)
|
|
{
|
|
if (sleep)
|
|
{
|
|
if (!_isSuspended)
|
|
{
|
|
_isSuspended = true;
|
|
Info(_log, "Suspend event received - Hyperion is going to sleep");
|
|
emit signalEvent(Event::Suspend);
|
|
}
|
|
else
|
|
{
|
|
Debug(_log, "Suspend event ignored - already suspended");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_isSuspended || _isIdle)
|
|
{
|
|
Info(_log, "Resume event received - Hyperion is going into working mode");
|
|
emit signalEvent(Event::Resume);
|
|
_isSuspended = false;
|
|
_isIdle = false;
|
|
}
|
|
else
|
|
{
|
|
Debug(_log, "Resume event ignored - not in suspend nor idle mode");
|
|
}
|
|
}
|
|
}
|
|
|
|
void EventHandler::resume()
|
|
{
|
|
suspend(false);
|
|
}
|
|
|
|
void EventHandler::toggleSuspend()
|
|
{
|
|
Debug(_log, "Toggle suspend event received");
|
|
if (!_isSuspended)
|
|
{
|
|
suspend(true);
|
|
}
|
|
else
|
|
{
|
|
suspend(false);
|
|
}
|
|
}
|
|
|
|
void EventHandler::idle()
|
|
{
|
|
idle(true);
|
|
}
|
|
|
|
void EventHandler::idle(bool isIdle)
|
|
{
|
|
if (!_isSuspended)
|
|
{
|
|
if (isIdle)
|
|
{
|
|
if (!_isIdle)
|
|
{
|
|
_isIdle = true;
|
|
Info(_log, "Idle event received");
|
|
emit signalEvent(Event::Idle);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_isIdle)
|
|
{
|
|
Info(_log, "Resume from idle event recevied");
|
|
emit signalEvent(Event::ResumeIdle);
|
|
_isIdle = false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug(_log, "Idle event ignored - Hyperion is suspended");
|
|
}
|
|
}
|
|
void EventHandler::resumeIdle()
|
|
{
|
|
idle(false);
|
|
}
|
|
|
|
void EventHandler::toggleIdle()
|
|
{
|
|
Debug(_log, "Toggle idle event received");
|
|
if (!_isIdle)
|
|
{
|
|
idle(true);
|
|
}
|
|
else
|
|
{
|
|
idle(false);
|
|
}
|
|
}
|
|
|
|
void EventHandler::handleEvent(Event event)
|
|
{
|
|
QObject *senderObj = QObject::sender();
|
|
QString senderObjectClass;
|
|
if (senderObj)
|
|
{
|
|
senderObjectClass = senderObj->metaObject()->className();
|
|
} else
|
|
{
|
|
senderObjectClass = "unknown sender";
|
|
}
|
|
Debug(_log,"%s Event [%d] received from %s", eventToString(event), event, QSTRING_CSTR(senderObjectClass));
|
|
|
|
switch (event) {
|
|
case Event::Suspend:
|
|
suspend();
|
|
break;
|
|
|
|
case Event::Resume:
|
|
resume();
|
|
break;
|
|
|
|
case Event::ToggleSuspend:
|
|
toggleSuspend();
|
|
break;
|
|
|
|
case Event::Idle:
|
|
idle(true);
|
|
break;
|
|
|
|
case Event::ResumeIdle:
|
|
idle(false);
|
|
break;
|
|
|
|
case Event::ToggleIdle:
|
|
toggleIdle();
|
|
break;
|
|
|
|
case Event::Reload:
|
|
Process::restartHyperion(10);
|
|
break;
|
|
|
|
case Event::Restart:
|
|
Process::restartHyperion(11);
|
|
break;
|
|
|
|
default:
|
|
Error(_log,"Unkonwn Event '%d' received", event);
|
|
break;
|
|
}
|
|
}
|