11use serde:: { Serialize , de:: DeserializeOwned } ;
2+ use uuid:: Uuid ;
23
34use super :: Client ;
45use crate :: {
5- common:: BlendMode ,
6+ common,
67 error:: Result ,
78 requests:: {
89 scene_items:: {
9- CreateSceneItem , Duplicate , Id , Request , SetBlendMode , SetEnabled , SetIndex , SetLocked ,
10- SetPrivateSettings , SetPrivateSettingsInternal , SetTransform , Source ,
10+ BlendMode , CreateSceneItem , Duplicate , Enabled , Id , Index , Locked , Remove , Request ,
11+ SetBlendMode , SetEnabled , SetIndex , SetLocked , SetPrivateSettings ,
12+ SetPrivateSettingsInternal , SetTransform , Source , Transform ,
1113 } ,
1214 scenes:: SceneId ,
1315 } ,
@@ -22,9 +24,13 @@ pub struct SceneItems<'a> {
2224impl < ' a > SceneItems < ' a > {
2325 /// Gets a list of all scene items in a scene.
2426 #[ doc( alias = "GetSceneItemList" ) ]
25- pub async fn list ( & self , scene : SceneId < ' _ > ) -> Result < Vec < responses:: SceneItem > > {
27+ pub async fn list (
28+ & self ,
29+ canvas : Option < Uuid > ,
30+ scene : SceneId < ' _ > ,
31+ ) -> Result < Vec < responses:: SceneItem > > {
2632 self . client
27- . send_message :: < _ , responses:: SceneItemList > ( Request :: List { scene } )
33+ . send_message :: < _ , responses:: SceneItemList > ( Request :: List { canvas , scene } )
2834 . await
2935 . map ( |sil| sil. scene_items )
3036 }
@@ -33,9 +39,13 @@ impl<'a> SceneItems<'a> {
3339 ///
3440 /// Using groups at all in OBS is discouraged, as they are very broken under the hood.
3541 #[ doc( alias = "GetGroupSceneItemList" ) ]
36- pub async fn list_group ( & self , scene : SceneId < ' _ > ) -> Result < Vec < responses:: SceneItem > > {
42+ pub async fn list_group (
43+ & self ,
44+ canvas : Option < Uuid > ,
45+ scene : SceneId < ' _ > ,
46+ ) -> Result < Vec < responses:: SceneItem > > {
3747 self . client
38- . send_message :: < _ , responses:: SceneItemList > ( Request :: ListGroup { scene } )
48+ . send_message :: < _ , responses:: SceneItemList > ( Request :: ListGroup { canvas , scene } )
3949 . await
4050 . map ( |sil| sil. scene_items )
4151 }
@@ -66,10 +76,8 @@ impl<'a> SceneItems<'a> {
6676
6777 /// Removes a scene item from a scene.
6878 #[ doc( alias = "RemoveSceneItem" ) ]
69- pub async fn remove ( & self , scene : SceneId < ' _ > , item_id : i64 ) -> Result < ( ) > {
70- self . client
71- . send_message ( Request :: Remove { scene, item_id } )
72- . await
79+ pub async fn remove ( & self , remove : Remove < ' _ > ) -> Result < ( ) > {
80+ self . client . send_message ( Request :: Remove ( remove) ) . await
7381 }
7482
7583 /// Duplicates a scene item, copying all transform and crop info.
@@ -85,14 +93,10 @@ impl<'a> SceneItems<'a> {
8593 #[ doc( alias = "GetSceneItemTransform" ) ]
8694 pub async fn transform (
8795 & self ,
88- scene : SceneId < ' _ > ,
89- item_id : i64 ,
96+ transform : Transform < ' _ > ,
9097 ) -> Result < responses:: SceneItemTransform > {
9198 self . client
92- . send_message :: < _ , responses:: GetSceneItemTransform > ( Request :: Transform {
93- scene,
94- item_id,
95- } )
99+ . send_message :: < _ , responses:: GetSceneItemTransform > ( Request :: Transform ( transform) )
96100 . await
97101 . map ( |gsit| gsit. transform )
98102 }
@@ -107,9 +111,9 @@ impl<'a> SceneItems<'a> {
107111
108112 /// Gets the enable state of a scene item.
109113 #[ doc( alias = "GetSceneItemEnabled" ) ]
110- pub async fn enabled ( & self , scene : SceneId < ' _ > , item_id : i64 ) -> Result < bool > {
114+ pub async fn enabled ( & self , enabled : Enabled < ' a > ) -> Result < bool > {
111115 self . client
112- . send_message :: < _ , responses:: SceneItemEnabled > ( Request :: Enabled { scene , item_id } )
116+ . send_message :: < _ , responses:: SceneItemEnabled > ( Request :: Enabled ( enabled ) )
113117 . await
114118 . map ( |sie| sie. enabled )
115119 }
@@ -122,9 +126,9 @@ impl<'a> SceneItems<'a> {
122126
123127 /// Gets the lock state of a scene item.
124128 #[ doc( alias = "GetSceneItemLocked" ) ]
125- pub async fn locked ( & self , scene : SceneId < ' _ > , item_id : i64 ) -> Result < bool > {
129+ pub async fn locked ( & self , locked : Locked < ' a > ) -> Result < bool > {
126130 self . client
127- . send_message :: < _ , responses:: SceneItemLocked > ( Request :: Locked { scene , item_id } )
131+ . send_message :: < _ , responses:: SceneItemLocked > ( Request :: Locked ( locked ) )
128132 . await
129133 . map ( |sil| sil. locked )
130134 }
@@ -139,9 +143,9 @@ impl<'a> SceneItems<'a> {
139143 ///
140144 /// An index of 0 is at the bottom of the source list in the UI.
141145 #[ doc( alias = "GetSceneItemIndex" ) ]
142- pub async fn index ( & self , scene : SceneId < ' _ > , item_id : i64 ) -> Result < u32 > {
146+ pub async fn index ( & self , index : Index < ' a > ) -> Result < u32 > {
143147 self . client
144- . send_message :: < _ , responses:: SceneItemIndex > ( Request :: Index { scene , item_id } )
148+ . send_message :: < _ , responses:: SceneItemIndex > ( Request :: Index ( index ) )
145149 . await
146150 . map ( |sii| sii. index )
147151 }
@@ -154,9 +158,9 @@ impl<'a> SceneItems<'a> {
154158
155159 /// Gets the blend mode of a scene item.
156160 #[ doc( alias = "GetSceneItemBlendMode" ) ]
157- pub async fn blend_mode ( & self , scene : SceneId < ' _ > , item_id : i64 ) -> Result < BlendMode > {
161+ pub async fn blend_mode ( & self , mode : BlendMode < ' _ > ) -> Result < common :: BlendMode > {
158162 self . client
159- . send_message :: < _ , responses:: SceneItemBlendMode > ( Request :: BlendMode { scene , item_id } )
163+ . send_message :: < _ , responses:: SceneItemBlendMode > ( Request :: BlendMode ( mode ) )
160164 . await
161165 . map ( |sibm| sibm. blend_mode )
162166 }
0 commit comments