events: fix filter events docs + refactor filters list getter

This commit is contained in:
Stéphane L 2019-04-20 22:57:52 +02:00
parent e86d1aad02
commit fcaac3d515
4 changed files with 48 additions and 12 deletions

View File

@ -667,3 +667,35 @@ obs_data_t* Utils::GetSceneItemPropertiesData(obs_sceneitem_t* sceneItem) {
return data; return data;
} }
obs_data_array_t* Utils::GetSourceFiltersList(obs_source_t* source, bool includeSettings)
{
struct enum_params {
obs_data_array_t* filters;
bool includeSettings;
};
if (!source) {
return nullptr;
}
struct enum_params enumParams;
enumParams.filters = obs_data_array_create();
enumParams.includeSettings = includeSettings;
obs_source_enum_filters(source, [](obs_source_t* parent, obs_source_t* child, void* param)
{
auto enumParams = reinterpret_cast<struct enum_params*>(param);
OBSDataAutoRelease filter = obs_data_create();
obs_data_set_string(filter, "type", obs_source_get_id(child));
obs_data_set_string(filter, "name", obs_source_get_name(child));
if (enumParams->includeSettings) {
obs_data_set_obj(filter, "settings", obs_source_get_settings(child));
}
obs_data_array_push_back(enumParams->filters, filter);
}, &enumParams);
return enumParams.filters;
}

View File

@ -43,6 +43,8 @@ class Utils {
static obs_source_t* GetTransitionFromName(QString transitionName); static obs_source_t* GetTransitionFromName(QString transitionName);
static obs_source_t* GetSceneFromNameOrCurrent(QString sceneName); static obs_source_t* GetSceneFromNameOrCurrent(QString sceneName);
static obs_data_t* GetSceneItemPropertiesData(obs_sceneitem_t* item); static obs_data_t* GetSceneItemPropertiesData(obs_sceneitem_t* item);
static obs_data_array_t* GetSourceFiltersList(obs_source_t* source, bool includeSettings);
static bool IsValidAlignment(const uint32_t alignment); static bool IsValidAlignment(const uint32_t alignment);

View File

@ -998,7 +998,6 @@ void WSEvents::OnSourceRename(void* param, calldata_t* data) {
} }
const char* previousName = calldata_get_string(data, "prev_name"); const char* previousName = calldata_get_string(data, "prev_name");
// TODO check?
OBSDataAutoRelease fields = obs_data_create(); OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "previousName", previousName); obs_data_set_string(fields, "previousName", previousName);
@ -1010,6 +1009,9 @@ void WSEvents::OnSourceRename(void* param, calldata_t* data) {
* A filter was added to a source. * A filter was added to a source.
* *
* @return {String} `sourceName` Source name * @return {String} `sourceName` Source name
* @return {String} `filterName` Filter name
* @return {String} `filterType` Filter type
* @return {Object} `filterSettings` Filter settings
* *
* @api events * @api events
* @name SourceFilterAdded * @name SourceFilterAdded
@ -1034,6 +1036,7 @@ void WSEvents::OnSourceFilterAdded(void* param, calldata_t* data) {
OBSDataAutoRelease fields = obs_data_create(); OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source)); obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
obs_data_set_string(fields, "filterName", obs_source_get_name(filter)); obs_data_set_string(fields, "filterName", obs_source_get_name(filter));
obs_data_set_string(fields, "filterType", obs_source_get_id(filter));
obs_data_set_obj(fields, "filterSettings", filterSettings); obs_data_set_obj(fields, "filterSettings", filterSettings);
self->broadcastUpdate("SourceFilterAdded", fields); self->broadcastUpdate("SourceFilterAdded", fields);
} }
@ -1042,6 +1045,8 @@ void WSEvents::OnSourceFilterAdded(void* param, calldata_t* data) {
* A filter was removed from a source. * A filter was removed from a source.
* *
* @return {String} `sourceName` Source name * @return {String} `sourceName` Source name
* @return {String} `filterName` Filter name
* @return {String} `filterType` Filter type
* *
* @api events * @api events
* @name SourceFilterRemoved * @name SourceFilterRemoved
@ -1061,6 +1066,7 @@ void WSEvents::OnSourceFilterRemoved(void* param, calldata_t* data) {
OBSDataAutoRelease fields = obs_data_create(); OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source)); obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
obs_data_set_string(fields, "filterName", obs_source_get_name(filter)); obs_data_set_string(fields, "filterName", obs_source_get_name(filter));
obs_data_set_string(fields, "filterType", obs_source_get_id(filter));
self->broadcastUpdate("SourceFilterRemoved", fields); self->broadcastUpdate("SourceFilterRemoved", fields);
} }
@ -1068,6 +1074,9 @@ void WSEvents::OnSourceFilterRemoved(void* param, calldata_t* data) {
* Filters in a source have been reordered. * Filters in a source have been reordered.
* *
* @return {String} `sourceName` Source name * @return {String} `sourceName` Source name
* @return {Array<Object>} `filters` Ordered Filters list
* @return {String} `filters.*.name` Filter name
* @return {String} `filters.*.type` Filter type
* *
* @api events * @api events
* @name SourceFiltersReordered * @name SourceFiltersReordered
@ -1082,9 +1091,11 @@ void WSEvents::OnSourceFilterOrderChanged(void* param, calldata_t* data) {
return; return;
} }
OBSDataArrayAutoRelease filters = Utils::GetSourceFiltersList(source, false);
OBSDataAutoRelease fields = obs_data_create(); OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sourceName", obs_source_get_name(source)); obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
// TODO filters list obs_data_set_array(fields, "filters", filters);
self->broadcastUpdate("SourceFiltersReordered", fields); self->broadcastUpdate("SourceFiltersReordered", fields);
} }

View File

@ -1090,16 +1090,7 @@ HandlerResponse WSRequestHandler::HandleGetSourceFilters(WSRequestHandler* req)
return req->SendErrorResponse("specified source doesn't exist"); return req->SendErrorResponse("specified source doesn't exist");
} }
OBSDataArrayAutoRelease filters = obs_data_array_create(); OBSDataArrayAutoRelease filters = Utils::GetSourceFiltersList(source, true);
obs_source_enum_filters(source, [](obs_source_t *parent, obs_source_t *child, void *param)
{
OBSDataAutoRelease filter = obs_data_create();
obs_data_set_string(filter, "type", obs_source_get_id(child));
obs_data_set_string(filter, "name", obs_source_get_name(child));
obs_data_set_obj(filter, "settings", obs_source_get_settings(child));
obs_data_array_push_back((obs_data_array_t*)param, filter);
}, filters);
OBSDataAutoRelease response = obs_data_create(); OBSDataAutoRelease response = obs_data_create();
obs_data_set_array(response, "filters", filters); obs_data_set_array(response, "filters", filters);