From 44c722b9603e154411f9988d79116d500ae9850d Mon Sep 17 00:00:00 2001 From: Jonathan Straub Date: Thu, 8 Sep 2022 00:55:30 -0500 Subject: [PATCH] Fix GetGroupSceneItemList * Fix string conversion in GetGroupSceneItemList. * Refactor get scene list method in test client and support top level groups. --- TestClient/MainWindow.cs | 39 ++++++++++++++++--- obs-websocket-dotnet/OBSWebsocket_Requests.cs | 2 +- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/TestClient/MainWindow.cs b/TestClient/MainWindow.cs index 2e82b54..12c0023 100644 --- a/TestClient/MainWindow.cs +++ b/TestClient/MainWindow.cs @@ -25,6 +25,7 @@ You should have received a copy of the GNU General Public License along using OBSWebsocketDotNet; using OBSWebsocketDotNet.Types; using OBSWebsocketDotNet.Types.Events; +using Newtonsoft.Json; namespace TestClient { @@ -329,17 +330,45 @@ private void btnConnect_Click(object sender, EventArgs e) private void btnListScenes_Click(object sender, EventArgs e) { - var scenes = obs.ListScenes(); + var scenes = obs.GetSceneList().Scenes; tvScenes.Nodes.Clear(); foreach (var scene in scenes) { var node = new TreeNode(scene.Name); - var sources = new List(); - sources.AddRange(obs.GetSceneItemList(scene.Name)); - foreach (var item in sources) + var itemList = obs.GetSceneItemList(scene.Name); + var groupList = obs.GetGroupList(); + groupList.RemoveAll(x => !itemList.Any(y => y.SourceName.Equals(x))); + + if (groupList.Count > 0) + { + foreach (var name in groupList) + { + var group = new ObsScene { Name = name, Items = new List() }; + var parentNode = node.Nodes.Add(group.Name); + + foreach (var item in obs.GetGroupSceneItemList(group.Name)) + { + group.Items.Add(JsonConvert.DeserializeObject(item.ToString())); + } + + if (group.Items.Count() > 0) + { + foreach (var groupSceneItem in group.Items) + { + parentNode.Nodes.Add(groupSceneItem.SourceName); + } + } + } + } + + var items = obs.GetSceneItemList(scene.Name).Where(x => !(bool)groupList?.Any(y => y.Equals(x.SourceName))); + if (items != null && items.Count() > 0) { - node.Nodes.Add(item.SourceName); + foreach (var item in items) + { + node.Nodes.Add(item.SourceName); + } } tvScenes.Nodes.Add(node); diff --git a/obs-websocket-dotnet/OBSWebsocket_Requests.cs b/obs-websocket-dotnet/OBSWebsocket_Requests.cs index 773eb5b..089eb20 100644 --- a/obs-websocket-dotnet/OBSWebsocket_Requests.cs +++ b/obs-websocket-dotnet/OBSWebsocket_Requests.cs @@ -1742,7 +1742,7 @@ public List GetGroupSceneItemList(string sceneName) }; var response = SendRequest(nameof(GetGroupSceneItemList), request); - return JsonConvert.DeserializeObject>((string)response["sceneItems"]); + return JsonConvert.DeserializeObject>(response["sceneItems"].ToString()); } ///