mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
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;
|
||
|
}
|
||
|
}
|