mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Refactor event handling incl.CEC
This commit is contained in:
32
include/events/Event.h
Normal file
32
include/events/Event.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef EVENT_H
|
||||
#define EVENT_H
|
||||
|
||||
enum class Event
|
||||
{
|
||||
Suspend,
|
||||
Resume,
|
||||
ToggleSuspend,
|
||||
Idle,
|
||||
ResumeIdle,
|
||||
ToggleIdle,
|
||||
Reload,
|
||||
Restart
|
||||
};
|
||||
|
||||
inline const char* eventToString(Event event)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case Event::Suspend: return "Suspend";
|
||||
case Event::Resume: return "Resume";
|
||||
case Event::ToggleSuspend: return "ToggleSuspend detector";
|
||||
case Event::Idle: return "Idle";
|
||||
case Event::ResumeIdle: return "ResumeIdle";
|
||||
case Event::ToggleIdle: return "ToggleIdle";
|
||||
case Event::Reload: return "Reload";
|
||||
case Event::Restart: return "Restart";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
#endif // EVENT_H
|
54
include/events/EventHandler.h
Normal file
54
include/events/EventHandler.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef EVENTHANDLER_H
|
||||
#define EVENTHANDLER_H
|
||||
|
||||
#include <utils/settings.h>
|
||||
#include <events/Event.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class Logger;
|
||||
|
||||
class EventHandler : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
EventHandler();
|
||||
~EventHandler() override;
|
||||
|
||||
static EventHandler* getInstance();
|
||||
|
||||
public slots:
|
||||
|
||||
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
||||
|
||||
void suspend(bool sleep);
|
||||
|
||||
void suspend();
|
||||
void resume();
|
||||
void toggleSuspend();
|
||||
|
||||
void idle(bool isIdle);
|
||||
void idle();
|
||||
void resumeIdle();
|
||||
void toggleIdle();
|
||||
|
||||
void handleEvent(Event event);
|
||||
|
||||
signals:
|
||||
|
||||
void signalEvent(Event event);
|
||||
|
||||
protected:
|
||||
|
||||
Logger * _log {};
|
||||
|
||||
private:
|
||||
|
||||
bool _isSuspended;
|
||||
bool _isIdle;
|
||||
};
|
||||
|
||||
|
||||
#endif // EVENTHANDLER_H
|
||||
|
116
include/events/OsEventHandler.h
Normal file
116
include/events/OsEventHandler.h
Normal file
@@ -0,0 +1,116 @@
|
||||
#ifndef OsEventHandler_H
|
||||
#define OsEventHandler_H
|
||||
#include <QObject>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#include <events/Event.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <QAbstractNativeEventFilter>
|
||||
#include <QAbstractEventDispatcher>
|
||||
#include <QWidget>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <utils/settings.h>
|
||||
|
||||
class Logger;
|
||||
|
||||
class OsEventHandlerBase : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
OsEventHandlerBase();
|
||||
~OsEventHandlerBase() override;
|
||||
|
||||
public slots:
|
||||
|
||||
void suspend(bool sleep);
|
||||
void lock(bool isLocked);
|
||||
|
||||
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
|
||||
|
||||
signals:
|
||||
|
||||
void signalEvent(Event event);
|
||||
|
||||
protected:
|
||||
|
||||
virtual bool registerOsEventHandler() { return true; }
|
||||
virtual void unregisterOsEventHandler() {}
|
||||
virtual bool registerLockHandler() { return true; }
|
||||
virtual void unregisterLockHandler() {}
|
||||
|
||||
bool _isSuspendEnabled;
|
||||
bool _isLockEnabled;
|
||||
bool _isSuspendOnLock;
|
||||
|
||||
bool _isSuspendRegistered;
|
||||
bool _isLockRegistered;
|
||||
|
||||
Logger * _log {};
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
||||
class OsEventHandlerWindows : public OsEventHandlerBase, public QAbstractNativeEventFilter {
|
||||
|
||||
public:
|
||||
OsEventHandlerWindows();
|
||||
~OsEventHandlerWindows() override;
|
||||
|
||||
protected:
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
||||
bool nativeEventFilter(const QByteArray& eventType, void* message, qintptr* result) override;
|
||||
#else
|
||||
bool nativeEventFilter(const QByteArray& eventType, void* message, long int* result) override;
|
||||
#endif
|
||||
^
|
||||
private:
|
||||
|
||||
bool registerOsEventHandler() override;
|
||||
void unregisterOsEventHandler() override;
|
||||
bool registerLockHandler() override;
|
||||
void unregisterLockHandler() override;
|
||||
|
||||
QWidget _widget;
|
||||
HPOWERNOTIFY _notifyHandle;
|
||||
};
|
||||
|
||||
using OsEventHandler = OsEventHandlerWindows;
|
||||
|
||||
#elif defined(__linux__)
|
||||
class OsEventHandlerLinux : public OsEventHandlerBase {
|
||||
Q_OBJECT
|
||||
|
||||
static void static_signaleHandler(int signum)
|
||||
{
|
||||
OsEventHandlerLinux::getInstance()->handleSignal(signum);
|
||||
}
|
||||
|
||||
public:
|
||||
OsEventHandlerLinux();
|
||||
|
||||
void handleSignal (int signum);
|
||||
|
||||
private:
|
||||
static OsEventHandlerLinux* getInstance();
|
||||
|
||||
#if defined(HYPERION_HAS_DBUS)
|
||||
bool registerOsEventHandler() override;
|
||||
void unregisterOsEventHandler() override;
|
||||
bool registerLockHandler() override;
|
||||
void unregisterLockHandler() override;
|
||||
#endif
|
||||
};
|
||||
|
||||
using OsEventHandler = OsEventHandlerLinux;
|
||||
|
||||
#else
|
||||
using OsEventHandler = OsEventHandlerBase;
|
||||
#endif
|
||||
|
||||
#endif // OsEventHandler_H
|
Reference in New Issue
Block a user