Deprecate Actions/Events/States namespaces

This commit is contained in:
Michael Zanetti 2019-11-04 10:52:36 +01:00
parent 0e7edd5abd
commit 5be6e6e19d
7 changed files with 126 additions and 14 deletions

View File

@ -67,21 +67,21 @@ ActionHandler::ActionHandler(QObject *parent) :
params.insert("o:params", objectRef<ParamList>()); params.insert("o:params", objectRef<ParamList>());
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
returns.insert("o:displayMessage", enumValueName(String)); 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(); 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)); params.insert("actionTypeId", enumValueName(Uuid));
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
returns.insert("o:actionType", objectRef<ActionType>()); returns.insert("o:actionType", objectRef<ActionType>());
registerMethod("GetActionType", description, params, returns); registerMethod("GetActionType", description, params, returns, "Please use the Devices namespace instead.");
params.clear(); returns.clear(); params.clear(); returns.clear();
description = "Execute the item identified by itemId on the given device."; description = "Execute the item identified by itemId on the given device.";
params.insert("deviceId", enumValueName(Uuid)); params.insert("deviceId", enumValueName(Uuid));
params.insert("itemId", enumValueName(String)); params.insert("itemId", enumValueName(String));
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
registerMethod("ExecuteBrowserItem", description, params, returns); registerMethod("ExecuteBrowserItem", description, params, returns, "Please use Devices.ExecuteBrowserItem instead.");
params.clear(); returns.clear(); params.clear(); returns.clear();
description = "Execute the action for the browser item identified by actionTypeId and the itemId on the given device."; 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("actionTypeId", enumValueName(Uuid));
params.insert("o:params", objectRef<ParamList>()); params.insert("o:params", objectRef<ParamList>());
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
registerMethod("ExecuteBrowserItemAction", description, params, returns); registerMethod("ExecuteBrowserItemAction", description, params, returns, "Please use Devices.ExecuteBrowserItem instead.");
} }

View File

@ -97,6 +97,8 @@ DeviceHandler::DeviceHandler(QObject *parent) :
registerObject<ActionType, ActionTypes>(); registerObject<ActionType, ActionTypes>();
registerObject<DeviceClass, DeviceClasses>(); registerObject<DeviceClass, DeviceClasses>();
registerObject<DeviceDescriptor, DeviceDescriptors>(); registerObject<DeviceDescriptor, DeviceDescriptors>();
registerObject<Event>();
registerObject<Action>();
registerObject<State, States>(); registerObject<State, States>();
registerUncreatableObject<Device, Devices>(); registerUncreatableObject<Device, Devices>();
@ -319,6 +321,31 @@ DeviceHandler::DeviceHandler(QObject *parent) :
returns.insert("o:item", objectRef("BrowserItem")); returns.insert("o:item", objectRef("BrowserItem"));
registerMethod("GetBrowserItem", description, params, returns); 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<ParamList>());
returns.insert("deviceError", enumRef<Device::DeviceError>());
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<Device::DeviceError>());
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<ParamList>());
returns.insert("deviceError", enumRef<Device::DeviceError>());
registerMethod("ExecuteBrowserItemAction", description, params, returns);
// Notifications // Notifications
params.clear(); returns.clear(); params.clear(); returns.clear();
description = "Emitted whenever a State of a device changes."; description = "Emitted whenever a State of a device changes.";
@ -355,6 +382,16 @@ DeviceHandler::DeviceHandler(QObject *parent) :
params.insert("configuration", objectRef<ParamList>()); params.insert("configuration", objectRef<ParamList>());
registerNotification("PluginConfigurationChanged", description, params); registerNotification("PluginConfigurationChanged", description, params);
params.clear(); returns.clear();
description = "Emitted whenever an Event is triggered.";
params.insert("event", objectRef<Event>());
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::pluginConfigChanged, this, &DeviceHandler::pluginConfigChanged);
connect(NymeaCore::instance(), &NymeaCore::deviceStateChanged, this, &DeviceHandler::deviceStateChanged); connect(NymeaCore::instance(), &NymeaCore::deviceStateChanged, this, &DeviceHandler::deviceStateChanged);
connect(NymeaCore::instance(), &NymeaCore::deviceRemoved, this, &DeviceHandler::deviceRemovedNotification); connect(NymeaCore::instance(), &NymeaCore::deviceRemoved, this, &DeviceHandler::deviceRemovedNotification);
@ -801,6 +838,72 @@ JsonReply *DeviceHandler::GetBrowserItem(const QVariantMap &params) const
return jsonReply; return jsonReply;
} }
JsonReply *DeviceHandler::ExecuteAction(const QVariantMap &params)
{
DeviceId deviceId(params.value("deviceId").toString());
ActionTypeId actionTypeId(params.value("actionTypeId").toString());
ParamList actionParams = unpack<ParamList>(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 &params)
{
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<Device::DeviceError>(info->status()));
jsonReply->setData(data);
jsonReply->finished();
});
return jsonReply;
}
JsonReply *DeviceHandler::ExecuteBrowserItemAction(const QVariantMap &params)
{
DeviceId deviceId = DeviceId(params.value("deviceId").toString());
QString itemId = params.value("itemId").toString();
ActionTypeId actionTypeId = ActionTypeId(params.value("actionTypeId").toString());
ParamList paramList = unpack<ParamList>(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<Device::DeviceError>(info->status()));
jsonReply->setData(data);
jsonReply->finished();
});
return jsonReply;
}
QVariantMap DeviceHandler::packBrowserItem(const BrowserItem &item) QVariantMap DeviceHandler::packBrowserItem(const BrowserItem &item)
{ {
QVariantMap ret; QVariantMap ret;

View File

@ -60,6 +60,10 @@ public:
Q_INVOKABLE JsonReply *BrowseDevice(const QVariantMap &params) const; Q_INVOKABLE JsonReply *BrowseDevice(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *GetBrowserItem(const QVariantMap &params) const; Q_INVOKABLE JsonReply *GetBrowserItem(const QVariantMap &params) const;
Q_INVOKABLE JsonReply *ExecuteAction(const QVariantMap &params);
Q_INVOKABLE JsonReply *ExecuteBrowserItem(const QVariantMap &params);
Q_INVOKABLE JsonReply *ExecuteBrowserItemAction(const QVariantMap &params);
static QVariantMap packBrowserItem(const BrowserItem &item); static QVariantMap packBrowserItem(const BrowserItem &item);
signals: signals:
@ -69,6 +73,7 @@ signals:
void DeviceAdded(const QVariantMap &params); void DeviceAdded(const QVariantMap &params);
void DeviceChanged(const QVariantMap &params); void DeviceChanged(const QVariantMap &params);
void DeviceSettingChanged(const QVariantMap &params); void DeviceSettingChanged(const QVariantMap &params);
void EventTriggered(const QVariantMap &params);
private slots: private slots:
void pluginConfigChanged(const PluginId &id, const ParamList &config); void pluginConfigChanged(const PluginId &id, const ParamList &config);

View File

@ -61,13 +61,13 @@ EventHandler::EventHandler(QObject *parent) :
params.insert("eventTypeId", enumValueName(Uuid)); params.insert("eventTypeId", enumValueName(Uuid));
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
returns.insert("o:eventType", objectRef<EventType>()); returns.insert("o:eventType", objectRef<EventType>());
registerMethod("GetEventType", description, params, returns); registerMethod("GetEventType", description, params, returns, "Please use the Devices namespace instead.");
// Notifications // Notifications
params.clear(); returns.clear(); params.clear(); returns.clear();
description = "Emitted whenever an Event is triggered."; description = "Emitted whenever an Event is triggered.";
params.insert("event", objectRef<Event>()); params.insert("event", objectRef<Event>());
registerNotification("EventTriggered", description, params); registerNotification("EventTriggered", description, params, "Please use Devices.EventTriggered instead.");
connect(NymeaCore::instance(), &NymeaCore::eventTriggered, this, &EventHandler::eventTriggered); connect(NymeaCore::instance(), &NymeaCore::eventTriggered, this, &EventHandler::eventTriggered);
} }

View File

@ -52,7 +52,7 @@ StateHandler::StateHandler(QObject *parent) :
params.insert("stateTypeId", enumValueName(Uuid)); params.insert("stateTypeId", enumValueName(Uuid));
returns.insert("deviceError", enumRef<Device::DeviceError>()); returns.insert("deviceError", enumRef<Device::DeviceError>());
returns.insert("o:stateType", objectRef<StateType>()); returns.insert("o:stateType", objectRef<StateType>());
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.*/ /*! Returns the name of the \l{StateHandler}. In this case \b States.*/

View File

@ -125,23 +125,27 @@ void JsonHandler::registerObject(const QString &name, const QVariantMap &object)
m_objects.insert(name, object); m_objects.insert(name, object);
} }
void JsonHandler::registerMethod(const QString &name, const QString &description, const QVariantMap &params, const QVariantMap &returns, bool /*deprecated*/) void JsonHandler::registerMethod(const QString &name, const QString &description, const QVariantMap &params, const QVariantMap &returns, const QString &deprecationInfo)
{ {
QVariantMap methodData; QVariantMap methodData;
methodData.insert("description", description); methodData.insert("description", description);
methodData.insert("params", params); methodData.insert("params", params);
methodData.insert("returns", returns); methodData.insert("returns", returns);
// methodData.insert("deprecated", deprecated); if (!deprecationInfo.isEmpty()) {
methodData.insert("deprecated", deprecationInfo);
}
m_methods.insert(name, methodData); m_methods.insert(name, methodData);
} }
void JsonHandler::registerNotification(const QString &name, const QString &description, const QVariantMap &params, bool /*deprecated*/) void JsonHandler::registerNotification(const QString &name, const QString &description, const QVariantMap &params, const QString &deprecationInfo)
{ {
QVariantMap notificationData; QVariantMap notificationData;
notificationData.insert("description", description); notificationData.insert("description", description);
notificationData.insert("params", params); notificationData.insert("params", params);
// notificationData.insert("deprecated", deprecated); if (!deprecationInfo.isEmpty()) {
notificationData.insert("deprecated", deprecationInfo);
}
m_notifications.insert(name, notificationData); m_notifications.insert(name, notificationData);
} }

View File

@ -91,8 +91,8 @@ protected:
void registerObject(const QString &name, const QVariantMap &object); void registerObject(const QString &name, const QVariantMap &object);
void registerMethod(const QString &name, const QString &description, const QVariantMap &params, const QVariantMap &returns, bool deprecated = false); void registerMethod(const QString &name, const QString &description, const QVariantMap &params, const QVariantMap &returns, const QString &deprecationInfo = QString());
void registerNotification(const QString &name, const QString &description, const QVariantMap &params, bool deprecated = false); void registerNotification(const QString &name, const QString &description, const QVariantMap &params, const QString &deprecationInfo = QString());
JsonReply *createReply(const QVariantMap &data) const; JsonReply *createReply(const QVariantMap &data) const;
JsonReply *createAsyncReply(const QString &method) const; JsonReply *createAsyncReply(const QString &method) const;