@@ -20,8 +20,10 @@ with this program. If not, see <https://www.gnu.org/licenses/>
20
20
#include " RequestHandler.h"
21
21
22
22
/* *
23
- * Gets an array of all scenes in OBS.
23
+ * Gets an array of scenes in OBS.
24
24
*
25
+ * @requestField ?canvasName | String | Canvas name to get the scenes from. If not specified, the main canvas will be used.
26
+ *
25
27
* @responseField currentProgramSceneName | String | Current program scene name. Can be `null` if internal state desync
26
28
* @responseField currentProgramSceneUuid | String | Current program scene UUID. Can be `null` if internal state desync
27
29
* @responseField currentPreviewSceneName | String | Current preview scene name. `null` if not in studio mode
@@ -35,29 +37,53 @@ with this program. If not, see <https://www.gnu.org/licenses/>
35
37
* @api requests
36
38
* @category scenes
37
39
*/
38
- RequestResult RequestHandler::GetSceneList (const Request &)
40
+ RequestResult RequestHandler::GetSceneList (const Request &request )
39
41
{
40
42
json responseData;
41
-
42
- OBSSourceAutoRelease currentProgramScene = obs_frontend_get_current_scene ();
43
- if (currentProgramScene) {
44
- responseData[" currentProgramSceneName" ] = obs_source_get_name (currentProgramScene);
45
- responseData[" currentProgramSceneUuid" ] = obs_source_get_uuid (currentProgramScene);
43
+ RequestStatus::RequestStatus statusCode;
44
+ std::string comment;
45
+ OBSCanvasAutoRelease canvas = request.ValidateCanvas (" canvasName" , statusCode, comment);
46
+ if (statusCode == RequestStatus::ResourceNotFound)
47
+ return RequestResult::Error (statusCode, comment);
48
+ if (canvas) {
49
+ OBSSourceAutoRelease programSource = obs_canvas_get_channel (canvas, 0 );
50
+ if (programSource && obs_source_get_type (programSource) == OBS_SOURCE_TYPE_TRANSITION) {
51
+ OBSSourceAutoRelease activeSource = obs_transition_get_active_source (programSource);
52
+ if (activeSource) {
53
+ responseData[" currentProgramSceneName" ] = obs_source_get_name (activeSource);
54
+ responseData[" currentProgramSceneUuid" ] = obs_source_get_uuid (activeSource);
55
+ } else {
56
+ responseData[" currentProgramSceneName" ] = nullptr ;
57
+ responseData[" currentProgramSceneUuid" ] = nullptr ;
58
+ }
59
+ } else if (programSource && obs_source_is_scene (programSource)) {
60
+ responseData[" currentProgramSceneName" ] = obs_source_get_name (programSource);
61
+ responseData[" currentProgramSceneUuid" ] = obs_source_get_uuid (programSource);
62
+ } else {
63
+ responseData[" currentProgramSceneName" ] = nullptr ;
64
+ responseData[" currentProgramSceneUuid" ] = nullptr ;
65
+ }
46
66
} else {
47
- responseData[" currentProgramSceneName" ] = nullptr ;
48
- responseData[" currentProgramSceneUuid" ] = nullptr ;
49
- }
67
+ OBSSourceAutoRelease currentProgramScene = obs_frontend_get_current_scene ();
68
+ if (currentProgramScene) {
69
+ responseData[" currentProgramSceneName" ] = obs_source_get_name (currentProgramScene);
70
+ responseData[" currentProgramSceneUuid" ] = obs_source_get_uuid (currentProgramScene);
71
+ } else {
72
+ responseData[" currentProgramSceneName" ] = nullptr ;
73
+ responseData[" currentProgramSceneUuid" ] = nullptr ;
74
+ }
50
75
51
- OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene ();
52
- if (currentPreviewScene) {
53
- responseData[" currentPreviewSceneName" ] = obs_source_get_name (currentPreviewScene);
54
- responseData[" currentPreviewSceneUuid" ] = obs_source_get_uuid (currentPreviewScene);
55
- } else {
56
- responseData[" currentPreviewSceneName" ] = nullptr ;
57
- responseData[" currentPreviewSceneUuid" ] = nullptr ;
76
+ OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene ();
77
+ if (currentPreviewScene) {
78
+ responseData[" currentPreviewSceneName" ] = obs_source_get_name (currentPreviewScene);
79
+ responseData[" currentPreviewSceneUuid" ] = obs_source_get_uuid (currentPreviewScene);
80
+ } else {
81
+ responseData[" currentPreviewSceneName" ] = nullptr ;
82
+ responseData[" currentPreviewSceneUuid" ] = nullptr ;
83
+ }
58
84
}
59
85
60
- responseData[" scenes" ] = Utils::Obs::ArrayHelper::GetSceneList ();
86
+ responseData[" scenes" ] = Utils::Obs::ArrayHelper::GetSceneList (canvas );
61
87
62
88
return RequestResult::Success (responseData);
63
89
}
@@ -76,11 +102,16 @@ RequestResult RequestHandler::GetSceneList(const Request &)
76
102
* @api requests
77
103
* @category scenes
78
104
*/
79
- RequestResult RequestHandler::GetGroupList (const Request &)
105
+ RequestResult RequestHandler::GetGroupList (const Request &request )
80
106
{
81
107
json responseData;
108
+ RequestStatus::RequestStatus statusCode;
109
+ std::string comment;
110
+ OBSCanvasAutoRelease canvas = request.ValidateCanvas (" canvasName" , statusCode, comment);
111
+ if (statusCode == RequestStatus::ResourceNotFound)
112
+ return RequestResult::Error (statusCode, comment);
82
113
83
- responseData[" groups" ] = Utils::Obs::ArrayHelper::GetGroupList ();
114
+ responseData[" groups" ] = Utils::Obs::ArrayHelper::GetGroupList (canvas );
84
115
85
116
return RequestResult::Success (responseData);
86
117
}
0 commit comments