|
8 | 8 | using Microsoft.VisualBasic.FileIO;
|
9 | 9 | using System.Threading.Tasks;
|
10 | 10 | using System.IO;
|
| 11 | +using Newtonsoft.Json; |
| 12 | +using MidiControl.Models.OBS; |
11 | 13 |
|
12 | 14 | namespace MidiControl {
|
13 | 15 | public class OBSControl : IExternalControl {
|
@@ -409,13 +411,30 @@ private void ToggleSources(MIDIFeedback feedback, List<string> sources) {
|
409 | 411 | var state = false;
|
410 | 412 |
|
411 | 413 | foreach(SceneBasicInfo scene in scenes) {
|
412 |
| - foreach(var item in obs.GetSceneItemList(scene.Name)) { |
| 414 | + foreach(var item in obs.GetSceneItemList(scene.Name)) { |
413 | 415 | if(sources.Contains(item.SourceName)) {
|
414 |
| - sourcesName.Add(new SourceScene() { Source = item.SourceName, Scene = scene.Name }, obs.GetSourceActive(item.SourceName).VideoShowing); |
415 |
| - } |
416 |
| - } |
417 |
| - } |
418 |
| - foreach(var entry in sourcesName) { |
| 416 | + sourcesName.Add(new SourceScene() { Source = item.SourceName, Scene = scene.Name }, obs.GetSourceActive(item.SourceName).VideoShowing); |
| 417 | + } |
| 418 | + } |
| 419 | + } |
| 420 | + |
| 421 | + // Groups |
| 422 | + var groups = obs.GetGroupList(); |
| 423 | + foreach (var group in groups) |
| 424 | + { |
| 425 | + var request = new JObject |
| 426 | + { |
| 427 | + { "sceneName", group} |
| 428 | + }; |
| 429 | + var result = obs.SendRequest("GetGroupSceneItemList", request)["sceneItems"].ToString(); |
| 430 | + var groupElements = JsonConvert.DeserializeObject<List<Source>>(result); |
| 431 | + foreach (var groupElement in groupElements.Where(element => sources.Contains(element.sourceName))) |
| 432 | + { |
| 433 | + sourcesName.Add(new SourceScene() { Source = groupElement.sourceName, Scene = group }, obs.GetSourceActive(groupElement.sourceName).VideoShowing); |
| 434 | + } |
| 435 | + } |
| 436 | + |
| 437 | + foreach(var entry in sourcesName) { |
419 | 438 | var sceneItemId = obs.GetSceneItemId(entry.Key.Scene, entry.Key.Source, 0);
|
420 | 439 | obs.SetSceneItemEnabled(entry.Key.Scene, sceneItemId, !entry.Value);
|
421 | 440 | if(entry.Value == false) {
|
@@ -457,7 +476,23 @@ private void ShowSources(List<string> sources, bool show) {
|
457 | 476 | }
|
458 | 477 | }
|
459 | 478 |
|
460 |
| - foreach(SourceScene sourcescene in sourcesName) { |
| 479 | + // Groups |
| 480 | + var groups = obs.GetGroupList(); |
| 481 | + foreach (var group in groups) |
| 482 | + { |
| 483 | + var request = new JObject |
| 484 | + { |
| 485 | + { "sceneName", group} |
| 486 | + }; |
| 487 | + var result = obs.SendRequest("GetGroupSceneItemList", request)["sceneItems"].ToString(); |
| 488 | + var groupElements = JsonConvert.DeserializeObject<List<Source>>(result); |
| 489 | + foreach (var groupElement in groupElements.Where(element => sources.Contains(element.sourceName))) |
| 490 | + { |
| 491 | + sourcesName.Add(new SourceScene() { Source = groupElement.sourceName, Scene = group }); |
| 492 | + } |
| 493 | + } |
| 494 | + |
| 495 | + foreach (var sourcescene in sourcesName) { |
461 | 496 | var sceneItemId = obs.GetSceneItemId(sourcescene.Scene, sourcescene.Source, 0);
|
462 | 497 | obs.SetSceneItemEnabled(sourcescene.Scene, sceneItemId, show);
|
463 | 498 | }
|
@@ -580,7 +615,22 @@ public List<string> GetSources() {
|
580 | 615 | }
|
581 | 616 | }
|
582 | 617 |
|
583 |
| - sourceString.Sort((x, y) => string.Compare(x, y)); |
| 618 | + var groups = obs.GetGroupList(); |
| 619 | + foreach(var group in groups) |
| 620 | + { |
| 621 | + var request = new JObject |
| 622 | + { |
| 623 | + { "sceneName", group} |
| 624 | + }; |
| 625 | + var result = obs.SendRequest("GetGroupSceneItemList", request)["sceneItems"].ToString(); |
| 626 | + var groupElements = JsonConvert.DeserializeObject<List<Source>>(result); |
| 627 | + foreach (var groupElement in groupElements) |
| 628 | + { |
| 629 | + sourceString.Add(groupElement.sourceName); |
| 630 | + } |
| 631 | + } |
| 632 | + |
| 633 | + sourceString.Sort((x, y) => string.Compare(x, y)); |
584 | 634 | return sourceString.Distinct().ToList();
|
585 | 635 | }
|
586 | 636 | public List<string> GetTransitions() {
|
|
0 commit comments