mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Add Event Subscriptions & Instance specific replies
This commit is contained in:
@@ -1312,45 +1312,51 @@ void JsonAPI::handleSystemCommand(const QJsonObject& /*message*/, const JsonApiC
|
||||
|
||||
void JsonAPI::sendSuccessReply(const JsonApiCommand& cmd)
|
||||
{
|
||||
sendSuccessReply(cmd.toString(), cmd.tan);
|
||||
sendSuccessReply(cmd.toString(), cmd.tan, cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendSuccessReply(const QString &command, int tan)
|
||||
void JsonAPI::sendSuccessReply(const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
|
||||
{
|
||||
// create reply
|
||||
QJsonObject reply;
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
reply["success"] = true;
|
||||
reply["command"] = command;
|
||||
reply["tan"] = tan;
|
||||
|
||||
// send reply
|
||||
if (isInstanceCmd == InstanceCmd::Yes)
|
||||
{
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
}
|
||||
|
||||
emit callbackMessage(reply);
|
||||
}
|
||||
|
||||
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const JsonApiCommand& cmd)
|
||||
{
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, {});
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, {}, cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const QString &command, int tan)
|
||||
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
|
||||
{
|
||||
sendSuccessDataReplyWithError(infoData, command, tan, {});
|
||||
sendSuccessDataReplyWithError(infoData, command, tan, {}, isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const JsonApiCommand& cmd, const QStringList& errorDetails)
|
||||
{
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, errorDetails);
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, errorDetails, cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QString &command, int tan, const QStringList& errorDetails)
|
||||
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QString &command, int tan, const QStringList& errorDetails, InstanceCmd::Type isInstanceCmd)
|
||||
{
|
||||
QJsonObject reply;
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
reply["success"] = true;
|
||||
|
||||
reply["command"] = command;
|
||||
reply["tan"] = tan;
|
||||
|
||||
if (isInstanceCmd == InstanceCmd::Yes)
|
||||
{
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
}
|
||||
|
||||
reply["info"] = infoData;
|
||||
|
||||
if (!errorDetails.isEmpty())
|
||||
@@ -1369,13 +1375,19 @@ void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QS
|
||||
|
||||
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const JsonApiCommand& cmd)
|
||||
{
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString());
|
||||
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command)
|
||||
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command, InstanceCmd::Type isInstanceCmd)
|
||||
{
|
||||
QJsonObject request;
|
||||
request["command"] = command;
|
||||
|
||||
if (isInstanceCmd == InstanceCmd::Yes)
|
||||
{
|
||||
request["instance"] = _hyperion->getInstanceIndex();
|
||||
}
|
||||
|
||||
request["info"] = infoData;
|
||||
|
||||
emit callbackMessage(request);
|
||||
@@ -1383,24 +1395,26 @@ void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command)
|
||||
|
||||
void JsonAPI::sendErrorReply(const QString &error, const JsonApiCommand& cmd)
|
||||
{
|
||||
sendErrorReply(error, {}, cmd.toString(), cmd.tan);
|
||||
sendErrorReply(error, {}, cmd.toString(), cmd.tan, cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const JsonApiCommand& cmd)
|
||||
{
|
||||
sendErrorReply(error, errorDetails, cmd.toString(), cmd.tan);
|
||||
sendErrorReply(error, errorDetails, cmd.toString(), cmd.tan, cmd.isInstanceCmd);
|
||||
}
|
||||
|
||||
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const QString &command, int tan)
|
||||
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
|
||||
{
|
||||
// create reply
|
||||
QJsonObject reply;
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
reply["success"] = false;
|
||||
|
||||
reply["command"] = command;
|
||||
reply["tan"] = tan;
|
||||
|
||||
if (isInstanceCmd == InstanceCmd::Yes)
|
||||
{
|
||||
reply["instance"] = _hyperion->getInstanceIndex();
|
||||
}
|
||||
|
||||
reply["error"] = error;
|
||||
if (!errorDetails.isEmpty())
|
||||
{
|
||||
|
||||
@@ -1,33 +1,20 @@
|
||||
// proj incl
|
||||
#include <api/JsonCallbacks.h>
|
||||
#include <api/JsonInfo.h>
|
||||
#include <api/JsonApiSubscription.h>
|
||||
|
||||
// hyperion
|
||||
#include <hyperion/Hyperion.h>
|
||||
|
||||
// HyperionIManager
|
||||
#include <hyperion/HyperionIManager.h>
|
||||
// components
|
||||
|
||||
#include <events/EventHandler.h>
|
||||
#include <hyperion/ComponentRegister.h>
|
||||
// priorityMuxer
|
||||
|
||||
#include <hyperion/PriorityMuxer.h>
|
||||
|
||||
// utils
|
||||
#include <utils/ColorSys.h>
|
||||
#include <hyperion/ImageProcessor.h>
|
||||
|
||||
// qt
|
||||
#include <QDateTime>
|
||||
#include <QVariant>
|
||||
#include <QImage>
|
||||
#include <QBuffer>
|
||||
|
||||
// Image to led map helper
|
||||
|
||||
#include <hyperion/ImageProcessor.h>
|
||||
|
||||
using namespace hyperion;
|
||||
|
||||
JsonCallbacks::JsonCallbacks(Logger *log, const QString& peerAddress, QObject* parent)
|
||||
@@ -56,6 +43,9 @@ bool JsonCallbacks::subscribe(const Subscription::Type cmd)
|
||||
connect(_hyperion, &Hyperion::effectListUpdated, this, &JsonCallbacks::handleEffectListChange);
|
||||
break;
|
||||
#endif
|
||||
case Subscription::EventUpdate:
|
||||
connect(EventHandler::getInstance().data(), &EventHandler::signalEvent, this, &JsonCallbacks::handleEventUpdate);
|
||||
break;
|
||||
case Subscription::ImageToLedMappingUpdate:
|
||||
connect(_hyperion, &Hyperion::imageToLedsMappingChanged, this, &JsonCallbacks::handleImageToLedsMappingChange);
|
||||
break;
|
||||
@@ -155,6 +145,9 @@ bool JsonCallbacks::unsubscribe(const Subscription::Type cmd)
|
||||
disconnect(_hyperion, &Hyperion::effectListUpdated, this, &JsonCallbacks::handleEffectListChange);
|
||||
break;
|
||||
#endif
|
||||
case Subscription::EventUpdate:
|
||||
disconnect(EventHandler::getInstance().data(), &EventHandler::signalEvent, this, &JsonCallbacks::handleEventUpdate);
|
||||
break;
|
||||
case Subscription::ImageToLedMappingUpdate:
|
||||
disconnect(_hyperion, &Hyperion::imageToLedsMappingChanged, this, &JsonCallbacks::handleImageToLedsMappingChange);
|
||||
break;
|
||||
@@ -290,9 +283,13 @@ QStringList JsonCallbacks::getSubscribedCommands() const
|
||||
void JsonCallbacks::doCallback(Subscription::Type cmd, const QVariant& data)
|
||||
{
|
||||
QJsonObject obj;
|
||||
obj["instance"] = _hyperion->getInstanceIndex();
|
||||
obj["command"] = Subscription::toString(cmd);
|
||||
|
||||
if (Subscription::isInstacneSpecific(cmd))
|
||||
{
|
||||
obj["instance"] = _hyperion->getInstanceIndex();
|
||||
}
|
||||
|
||||
if (data.userType() == QMetaType::QJsonArray) {
|
||||
obj["data"] = data.toJsonArray();
|
||||
} else {
|
||||
@@ -449,3 +446,13 @@ void JsonCallbacks::handleLogMessageUpdate(const Logger::T_LOG_MESSAGE &msg)
|
||||
|
||||
doCallback(Subscription::LogMsgUpdate, QVariant(result));
|
||||
}
|
||||
|
||||
void JsonCallbacks::handleEventUpdate(const Event &event)
|
||||
{
|
||||
QJsonObject result;
|
||||
|
||||
result["event"] = eventToString(event);
|
||||
|
||||
doCallback(Subscription::EventUpdate, QVariant(result));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user