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>
126 lines
3.6 KiB
C++
126 lines
3.6 KiB
C++
#pragma once
|
|
|
|
// hyperion
|
|
#include <db/DBManager.h>
|
|
|
|
// qt
|
|
#include <QDateTime>
|
|
#include <QJsonDocument>
|
|
|
|
///
|
|
/// @brief settings table db interface
|
|
///
|
|
class SettingsTable : public DBManager
|
|
{
|
|
|
|
public:
|
|
/// construct wrapper with settings table
|
|
SettingsTable(quint8 instance, QObject* parent = nullptr)
|
|
: DBManager(parent)
|
|
, _hyperion_inst(instance)
|
|
{
|
|
setTable("settings");
|
|
// create table columns
|
|
createTable(QStringList()<<"type TEXT"<<"config TEXT"<<"hyperion_inst INTEGER"<<"updated_at TEXT");
|
|
};
|
|
|
|
///
|
|
/// @brief Create or update a settings record
|
|
/// @param[in] type type of setting
|
|
/// @param[in] config The configuration data
|
|
/// @return true on success else false
|
|
///
|
|
inline bool createSettingsRecord(const QString& type, const QString& config) const
|
|
{
|
|
QVariantMap map;
|
|
map["config"] = config;
|
|
map["updated_at"] = QDateTime::currentDateTimeUtc().toString(Qt::ISODate);
|
|
|
|
VectorPair cond;
|
|
cond.append(CPair("type",type));
|
|
// when a setting is not global we are searching also for the instance
|
|
if(!isSettingGlobal(type))
|
|
cond.append(CPair("AND hyperion_inst",_hyperion_inst));
|
|
return createRecord(cond, map);
|
|
}
|
|
|
|
///
|
|
/// @brief Test if record exist, type can be global setting or local (instance)
|
|
/// @param[in] type type of setting
|
|
/// @param[in] hyperion_inst The instance of hyperion assigned (might be empty)
|
|
/// @return true on success else false
|
|
///
|
|
inline bool recordExist(const QString& type) const
|
|
{
|
|
VectorPair cond;
|
|
cond.append(CPair("type",type));
|
|
// when a setting is not global we are searching also for the instance
|
|
if(!isSettingGlobal(type))
|
|
cond.append(CPair("AND hyperion_inst",_hyperion_inst));
|
|
return recordExists(cond);
|
|
}
|
|
|
|
///
|
|
/// @brief Get 'config' column of settings entry as QJsonDocument
|
|
/// @param[in] type The settings type
|
|
/// @return The QJsonDocument
|
|
///
|
|
inline QJsonDocument getSettingsRecord(const QString& type) const
|
|
{
|
|
QVariantMap results;
|
|
VectorPair cond;
|
|
cond.append(CPair("type",type));
|
|
// when a setting is not global we are searching also for the instance
|
|
if(!isSettingGlobal(type))
|
|
cond.append(CPair("AND hyperion_inst",_hyperion_inst));
|
|
getRecord(cond, results, QStringList("config"));
|
|
return QJsonDocument::fromJson(results["config"].toByteArray());
|
|
}
|
|
|
|
///
|
|
/// @brief Get 'config' column of settings entry as QString
|
|
/// @param[in] type The settings type
|
|
/// @return The QString
|
|
///
|
|
inline QString getSettingsRecordString(const QString& type) const
|
|
{
|
|
QVariantMap results;
|
|
VectorPair cond;
|
|
cond.append(CPair("type",type));
|
|
// when a setting is not global we are searching also for the instance
|
|
if(!isSettingGlobal(type))
|
|
cond.append(CPair("AND hyperion_inst",_hyperion_inst));
|
|
getRecord(cond, results, QStringList("config"));
|
|
return results["config"].toString();
|
|
}
|
|
|
|
///
|
|
/// @brief Delete all settings entries associated with this instance, called from InstanceTable of HyperionIManager
|
|
///
|
|
inline void deleteInstance() const
|
|
{
|
|
VectorPair cond;
|
|
cond.append(CPair("hyperion_inst",_hyperion_inst));
|
|
deleteRecord(cond);
|
|
}
|
|
|
|
inline bool isSettingGlobal(const QString& type) const
|
|
{
|
|
// list of global settings
|
|
QStringList list;
|
|
// server port services
|
|
list << "jsonServer" << "protoServer" << "flatbufServer" << "forwarder" << "webConfig" << "network"
|
|
// capture
|
|
<< "framegrabber" << "grabberV4L2" << "grabberAudio"
|
|
//Events
|
|
<< "osEvents" << "cecEvents" << "schedEvents"
|
|
// other
|
|
<< "logger" << "general";
|
|
|
|
return list.contains(type);
|
|
}
|
|
|
|
private:
|
|
const quint8 _hyperion_inst;
|
|
};
|