mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Utils(GetSceneItemFromId): recurse into groups wip
This commit is contained in:
@ -215,27 +215,37 @@ obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, QString name)
|
|||||||
return search.result;
|
return search.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO refactor this to unify it with GetSceneItemFromName
|
||||||
obs_sceneitem_t* Utils::GetSceneItemFromId(obs_source_t* source, size_t id) {
|
obs_sceneitem_t* Utils::GetSceneItemFromId(obs_source_t* source, size_t id) {
|
||||||
struct current_search {
|
struct current_search {
|
||||||
size_t query;
|
size_t query;
|
||||||
obs_sceneitem_t* result;
|
obs_sceneitem_t* result;
|
||||||
|
bool (*enumCallback)(obs_scene_t*, obs_sceneitem_t*, void*);
|
||||||
};
|
};
|
||||||
|
|
||||||
current_search search;
|
current_search search;
|
||||||
search.query = id;
|
search.query = id;
|
||||||
search.result = nullptr;
|
search.result = nullptr;
|
||||||
|
search.enumCallback = nullptr;
|
||||||
|
|
||||||
OBSScene scene = obs_scene_from_source(source);
|
OBSScene scene = obs_scene_from_source(source);
|
||||||
if (!scene)
|
if (!scene)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
obs_scene_enum_items(scene, [](
|
search.enumCallback = [](
|
||||||
obs_scene_t* scene,
|
obs_scene_t* scene,
|
||||||
obs_sceneitem_t* currentItem,
|
obs_sceneitem_t* currentItem,
|
||||||
void* param)
|
void* param)
|
||||||
{
|
{
|
||||||
current_search* search = reinterpret_cast<current_search*>(param);
|
current_search* search = reinterpret_cast<current_search*>(param);
|
||||||
|
|
||||||
|
if (obs_sceneitem_is_group(currentItem)) {
|
||||||
|
obs_sceneitem_group_enum_items(currentItem, search->enumCallback, param);
|
||||||
|
if (search->result) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (obs_sceneitem_get_id(currentItem) == search->query) {
|
if (obs_sceneitem_get_id(currentItem) == search->query) {
|
||||||
search->result = currentItem;
|
search->result = currentItem;
|
||||||
obs_sceneitem_addref(search->result);
|
obs_sceneitem_addref(search->result);
|
||||||
@ -243,7 +253,9 @@ obs_sceneitem_t* Utils::GetSceneItemFromId(obs_source_t* source, size_t id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}, &search);
|
};
|
||||||
|
|
||||||
|
obs_scene_enum_items(scene, search.enumCallback, &search);
|
||||||
|
|
||||||
return search.result;
|
return search.result;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user