From 5be6e6e19d16f0918cf19b9eb4776edeccaafc7c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 4 Nov 2019 10:52:36 +0100 Subject: [PATCH] Deprecate Actions/Events/States namespaces --- libnymea-core/jsonrpc/actionhandler.cpp | 10 +-- libnymea-core/jsonrpc/devicehandler.cpp | 103 ++++++++++++++++++++++++ libnymea-core/jsonrpc/devicehandler.h | 5 ++ libnymea-core/jsonrpc/eventhandler.cpp | 4 +- libnymea-core/jsonrpc/statehandler.cpp | 2 +- libnymea/jsonrpc/jsonhandler.cpp | 12 ++- libnymea/jsonrpc/jsonhandler.h | 4 +- 7 files changed, 126 insertions(+), 14 deletions(-) diff --git a/libnymea-core/jsonrpc/actionhandler.cpp b/libnymea-core/jsonrpc/actionhandler.cpp index e981dda4..eafe3cff 100644 --- a/libnymea-core/jsonrpc/actionhandler.cpp +++ b/libnymea-core/jsonrpc/actionhandler.cpp @@ -67,21 +67,21 @@ ActionHandler::ActionHandler(QObject *parent) : params.insert("o:params", objectRef()); returns.insert("deviceError", enumRef()); returns.insert("o:displayMessage", enumValueName(String)); - registerMethod("ExecuteAction", description, params, returns); + registerMethod("ExecuteAction", description, params, returns, "Please use Devices.ExecuteAction instead."); params.clear(); returns.clear(); - description = "Get the ActionType for the given ActionTypeId"; + description = "Get the ActionType for the given ActionTypeId."; params.insert("actionTypeId", enumValueName(Uuid)); returns.insert("deviceError", enumRef()); returns.insert("o:actionType", objectRef()); - registerMethod("GetActionType", description, params, returns); + registerMethod("GetActionType", description, params, returns, "Please use the Devices namespace instead."); params.clear(); returns.clear(); description = "Execute the item identified by itemId on the given device."; params.insert("deviceId", enumValueName(Uuid)); params.insert("itemId", enumValueName(String)); returns.insert("deviceError", enumRef()); - registerMethod("ExecuteBrowserItem", description, params, returns); + registerMethod("ExecuteBrowserItem", description, params, returns, "Please use Devices.ExecuteBrowserItem instead."); params.clear(); returns.clear(); description = "Execute the action for the browser item identified by actionTypeId and the itemId on the given device."; @@ -90,7 +90,7 @@ ActionHandler::ActionHandler(QObject *parent) : params.insert("actionTypeId", enumValueName(Uuid)); params.insert("o:params", objectRef()); returns.insert("deviceError", enumRef()); - registerMethod("ExecuteBrowserItemAction", description, params, returns); + registerMethod("ExecuteBrowserItemAction", description, params, returns, "Please use Devices.ExecuteBrowserItem instead."); } diff --git a/libnymea-core/jsonrpc/devicehandler.cpp b/libnymea-core/jsonrpc/devicehandler.cpp index 42e51c11..e4b074fd 100644 --- a/libnymea-core/jsonrpc/devicehandler.cpp +++ b/libnymea-core/jsonrpc/devicehandler.cpp @@ -97,6 +97,8 @@ DeviceHandler::DeviceHandler(QObject *parent) : registerObject(); registerObject(); registerObject(); + registerObject(); + registerObject(); registerObject(); registerUncreatableObject(); @@ -319,6 +321,31 @@ DeviceHandler::DeviceHandler(QObject *parent) : returns.insert("o:item", objectRef("BrowserItem")); registerMethod("GetBrowserItem", description, params, returns); + params.clear(); returns.clear(); + description = "Execute a single action."; + params.insert("actionTypeId", enumValueName(Uuid)); + params.insert("deviceId", enumValueName(Uuid)); + params.insert("o:params", objectRef()); + returns.insert("deviceError", enumRef()); + returns.insert("o:displayMessage", enumValueName(String)); + registerMethod("ExecuteAction", description, params, returns); + + params.clear(); returns.clear(); + description = "Execute the item identified by itemId on the given device."; + params.insert("deviceId", enumValueName(Uuid)); + params.insert("itemId", enumValueName(String)); + returns.insert("deviceError", enumRef()); + registerMethod("ExecuteBrowserItem", description, params, returns); + + params.clear(); returns.clear(); + description = "Execute the action for the browser item identified by actionTypeId and the itemId on the given device."; + params.insert("deviceId", enumValueName(Uuid)); + params.insert("itemId", enumValueName(String)); + params.insert("actionTypeId", enumValueName(Uuid)); + params.insert("o:params", objectRef()); + returns.insert("deviceError", enumRef()); + registerMethod("ExecuteBrowserItemAction", description, params, returns); + // Notifications params.clear(); returns.clear(); description = "Emitted whenever a State of a device changes."; @@ -355,6 +382,16 @@ DeviceHandler::DeviceHandler(QObject *parent) : params.insert("configuration", objectRef()); registerNotification("PluginConfigurationChanged", description, params); + params.clear(); returns.clear(); + description = "Emitted whenever an Event is triggered."; + params.insert("event", objectRef()); + registerNotification("EventTriggered", description, params, "Please use Devices.EventTriggered instead."); + connect(NymeaCore::instance(), &NymeaCore::eventTriggered, this, [this](const Event &event){ + QVariantMap params; + params.insert("event", pack(event)); + emit EventTriggered(params); + }); + connect(NymeaCore::instance(), &NymeaCore::pluginConfigChanged, this, &DeviceHandler::pluginConfigChanged); connect(NymeaCore::instance(), &NymeaCore::deviceStateChanged, this, &DeviceHandler::deviceStateChanged); connect(NymeaCore::instance(), &NymeaCore::deviceRemoved, this, &DeviceHandler::deviceRemovedNotification); @@ -801,6 +838,72 @@ JsonReply *DeviceHandler::GetBrowserItem(const QVariantMap ¶ms) const return jsonReply; } +JsonReply *DeviceHandler::ExecuteAction(const QVariantMap ¶ms) +{ + DeviceId deviceId(params.value("deviceId").toString()); + ActionTypeId actionTypeId(params.value("actionTypeId").toString()); + ParamList actionParams = unpack(params.value("params")); + QLocale locale = params.value("locale").toLocale(); + + Action action(actionTypeId, deviceId); + action.setParams(actionParams); + + JsonReply *jsonReply = createAsyncReply("ExecuteAction"); + + DeviceActionInfo *info = NymeaCore::instance()->executeAction(action); + connect(info, &DeviceActionInfo::finished, jsonReply, [info, jsonReply, locale](){ + QVariantMap data; + data.insert("deviceError", enumValueName(info->status())); + if (!info->displayMessage().isEmpty()) { + data.insert("displayMessage", info->translatedDisplayMessage(locale)); + } + jsonReply->setData(data); + jsonReply->finished(); + }); + + return jsonReply; +} + +JsonReply *DeviceHandler::ExecuteBrowserItem(const QVariantMap ¶ms) +{ + DeviceId deviceId = DeviceId(params.value("deviceId").toString()); + QString itemId = params.value("itemId").toString(); + BrowserAction action(deviceId, itemId); + + JsonReply *jsonReply = createAsyncReply("ExecuteBrowserItem"); + + BrowserActionInfo *info = NymeaCore::instance()->executeBrowserItem(action); + connect(info, &BrowserActionInfo::finished, jsonReply, [info, jsonReply](){ + QVariantMap data; + data.insert("deviceError", enumValueName(info->status())); + jsonReply->setData(data); + jsonReply->finished(); + }); + + return jsonReply; +} + +JsonReply *DeviceHandler::ExecuteBrowserItemAction(const QVariantMap ¶ms) +{ + DeviceId deviceId = DeviceId(params.value("deviceId").toString()); + QString itemId = params.value("itemId").toString(); + ActionTypeId actionTypeId = ActionTypeId(params.value("actionTypeId").toString()); + ParamList paramList = unpack(params.value("params")); + BrowserItemAction browserItemAction(deviceId, itemId, actionTypeId, paramList); + + JsonReply *jsonReply = createAsyncReply("ExecuteBrowserItemAction"); + + BrowserItemActionInfo *info = NymeaCore::instance()->executeBrowserItemAction(browserItemAction); + connect(info, &BrowserItemActionInfo::finished, jsonReply, [info, jsonReply](){ + QVariantMap data; + data.insert("deviceError", enumValueName(info->status())); + jsonReply->setData(data); + jsonReply->finished(); + }); + + return jsonReply; +} + QVariantMap DeviceHandler::packBrowserItem(const BrowserItem &item) { QVariantMap ret; diff --git a/libnymea-core/jsonrpc/devicehandler.h b/libnymea-core/jsonrpc/devicehandler.h index fcde2d3c..d95a0727 100644 --- a/libnymea-core/jsonrpc/devicehandler.h +++ b/libnymea-core/jsonrpc/devicehandler.h @@ -60,6 +60,10 @@ public: Q_INVOKABLE JsonReply *BrowseDevice(const QVariantMap ¶ms) const; Q_INVOKABLE JsonReply *GetBrowserItem(const QVariantMap ¶ms) const; + Q_INVOKABLE JsonReply *ExecuteAction(const QVariantMap ¶ms); + Q_INVOKABLE JsonReply *ExecuteBrowserItem(const QVariantMap ¶ms); + Q_INVOKABLE JsonReply *ExecuteBrowserItemAction(const QVariantMap ¶ms); + static QVariantMap packBrowserItem(const BrowserItem &item); signals: @@ -69,6 +73,7 @@ signals: void DeviceAdded(const QVariantMap ¶ms); void DeviceChanged(const QVariantMap ¶ms); void DeviceSettingChanged(const QVariantMap ¶ms); + void EventTriggered(const QVariantMap ¶ms); private slots: void pluginConfigChanged(const PluginId &id, const ParamList &config); diff --git a/libnymea-core/jsonrpc/eventhandler.cpp b/libnymea-core/jsonrpc/eventhandler.cpp index 283fa26d..f1e8a93e 100644 --- a/libnymea-core/jsonrpc/eventhandler.cpp +++ b/libnymea-core/jsonrpc/eventhandler.cpp @@ -61,13 +61,13 @@ EventHandler::EventHandler(QObject *parent) : params.insert("eventTypeId", enumValueName(Uuid)); returns.insert("deviceError", enumRef()); returns.insert("o:eventType", objectRef()); - registerMethod("GetEventType", description, params, returns); + registerMethod("GetEventType", description, params, returns, "Please use the Devices namespace instead."); // Notifications params.clear(); returns.clear(); description = "Emitted whenever an Event is triggered."; params.insert("event", objectRef()); - registerNotification("EventTriggered", description, params); + registerNotification("EventTriggered", description, params, "Please use Devices.EventTriggered instead."); connect(NymeaCore::instance(), &NymeaCore::eventTriggered, this, &EventHandler::eventTriggered); } diff --git a/libnymea-core/jsonrpc/statehandler.cpp b/libnymea-core/jsonrpc/statehandler.cpp index 07eb1b88..65281a44 100644 --- a/libnymea-core/jsonrpc/statehandler.cpp +++ b/libnymea-core/jsonrpc/statehandler.cpp @@ -52,7 +52,7 @@ StateHandler::StateHandler(QObject *parent) : params.insert("stateTypeId", enumValueName(Uuid)); returns.insert("deviceError", enumRef()); returns.insert("o:stateType", objectRef()); - registerMethod("GetStateType", description, params, returns, true); + registerMethod("GetStateType", description, params, returns, "Please use the Devices namespace instead."); } /*! Returns the name of the \l{StateHandler}. In this case \b States.*/ diff --git a/libnymea/jsonrpc/jsonhandler.cpp b/libnymea/jsonrpc/jsonhandler.cpp index fd44089b..f2df0559 100644 --- a/libnymea/jsonrpc/jsonhandler.cpp +++ b/libnymea/jsonrpc/jsonhandler.cpp @@ -125,23 +125,27 @@ void JsonHandler::registerObject(const QString &name, const QVariantMap &object) m_objects.insert(name, object); } -void JsonHandler::registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, bool /*deprecated*/) +void JsonHandler::registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, const QString &deprecationInfo) { QVariantMap methodData; methodData.insert("description", description); methodData.insert("params", params); methodData.insert("returns", returns); -// methodData.insert("deprecated", deprecated); + if (!deprecationInfo.isEmpty()) { + methodData.insert("deprecated", deprecationInfo); + } m_methods.insert(name, methodData); } -void JsonHandler::registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, bool /*deprecated*/) +void JsonHandler::registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, const QString &deprecationInfo) { QVariantMap notificationData; notificationData.insert("description", description); notificationData.insert("params", params); -// notificationData.insert("deprecated", deprecated); + if (!deprecationInfo.isEmpty()) { + notificationData.insert("deprecated", deprecationInfo); + } m_notifications.insert(name, notificationData); } diff --git a/libnymea/jsonrpc/jsonhandler.h b/libnymea/jsonrpc/jsonhandler.h index c477856a..ff4e06b2 100644 --- a/libnymea/jsonrpc/jsonhandler.h +++ b/libnymea/jsonrpc/jsonhandler.h @@ -91,8 +91,8 @@ protected: void registerObject(const QString &name, const QVariantMap &object); - void registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, bool deprecated = false); - void registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, bool deprecated = false); + void registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, const QString &deprecationInfo = QString()); + void registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, const QString &deprecationInfo = QString()); JsonReply *createReply(const QVariantMap &data) const; JsonReply *createAsyncReply(const QString &method) const;