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>());
returns.insert("deviceError", enumRef<Device::DeviceError>());
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<Device::DeviceError>());
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();
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);
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<ParamList>());
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<DeviceClass, DeviceClasses>();
registerObject<DeviceDescriptor, DeviceDescriptors>();
registerObject<Event>();
registerObject<Action>();
registerObject<State, States>();
registerUncreatableObject<Device, Devices>();
@ -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<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
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<ParamList>());
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::deviceStateChanged, this, &DeviceHandler::deviceStateChanged);
connect(NymeaCore::instance(), &NymeaCore::deviceRemoved, this, &DeviceHandler::deviceRemovedNotification);
@ -801,6 +838,72 @@ JsonReply *DeviceHandler::GetBrowserItem(const QVariantMap &params) const
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 ret;

View File

@ -60,6 +60,10 @@ public:
Q_INVOKABLE JsonReply *BrowseDevice(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);
signals:
@ -69,6 +73,7 @@ signals:
void DeviceAdded(const QVariantMap &params);
void DeviceChanged(const QVariantMap &params);
void DeviceSettingChanged(const QVariantMap &params);
void EventTriggered(const QVariantMap &params);
private slots:
void pluginConfigChanged(const PluginId &id, const ParamList &config);

View File

@ -61,13 +61,13 @@ EventHandler::EventHandler(QObject *parent) :
params.insert("eventTypeId", enumValueName(Uuid));
returns.insert("deviceError", enumRef<Device::DeviceError>());
returns.insert("o:eventType", objectRef<EventType>());
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<Event>());
registerNotification("EventTriggered", description, params);
registerNotification("EventTriggered", description, params, "Please use Devices.EventTriggered instead.");
connect(NymeaCore::instance(), &NymeaCore::eventTriggered, this, &EventHandler::eventTriggered);
}

View File

@ -52,7 +52,7 @@ StateHandler::StateHandler(QObject *parent) :
params.insert("stateTypeId", enumValueName(Uuid));
returns.insert("deviceError", enumRef<Device::DeviceError>());
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.*/

View File

@ -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 &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;
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 &params, bool /*deprecated*/)
void JsonHandler::registerNotification(const QString &name, const QString &description, const QVariantMap &params, 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);
}

View File

@ -91,8 +91,8 @@ protected:
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 registerNotification(const QString &name, const QString &description, const QVariantMap &params, 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, const QString &deprecationInfo = QString());
JsonReply *createReply(const QVariantMap &data) const;
JsonReply *createAsyncReply(const QString &method) const;