public async ValueTask <IEnumerable <IScene> > BuildStack(IScene scene, SceneBuilderContext context, SceneStackFunc sceneProviderFunc) { return(new List <IScene> { AutonomousScene.Instance, FindPreferredScene(context) }); }
private static IScene FindPreferredScene(SceneBuilderContext context) { if (TryFindScreenShareScene(context, out var screenShareScene)) { return(screenShareScene); } return(GetDefaultScene(context.Options)); }
public async ValueTask <IEnumerable <IScene> > BuildStack(IScene scene, SceneBuilderContext context, SceneStackFunc sceneProviderFunc) { var stack = new Stack <IScene>(); stack.Push(scene); return(stack); }
public async Task BuildStack_NewScreenShare_ReturnScreen() { // arrange var provider = new AutonomousSceneProvider(); var context = new SceneBuilderContext(ConferenceId, RoomId, new[] { new ScreenShareScene("p1") }, new SceneOptions(), ImmutableList <IScene> .Empty); // act var availableScenes = await provider.BuildStack(AutonomousScene.Instance, context, _emptyStackFunc); // assert Assert.Equal(availableScenes, new IScene[] { AutonomousScene.Instance, new ScreenShareScene("p1") }); }
private static bool TryFindScreenShareScene(SceneBuilderContext context, [NotNullWhen(true)] out ScreenShareScene?scene) { var previousScreenShare = context.PreviousStack.OfType <ScreenShareScene>().LastOrDefault(); if (previousScreenShare != null && context.AvailableScenes.Contains(previousScreenShare)) { scene = previousScreenShare; return(true); } scene = context.AvailableScenes.OfType <ScreenShareScene>().OrderBy(x => x.ParticipantId).FirstOrDefault(); return(scene != null); }
public async Task BuildStack_NoScreenShareScenes_ReturnDefault() { // arrange var provider = new AutonomousSceneProvider(); var context = new SceneBuilderContext(ConferenceId, RoomId, ImmutableList <IScene> .Empty, new SceneOptions { DefaultScene = SceneOptions.BasicSceneType.Grid }, ImmutableList <IScene> .Empty); // act var availableScenes = await provider.BuildStack(AutonomousScene.Instance, context, _emptyStackFunc); // assert Assert.Equal(availableScenes, new IScene[] { AutonomousScene.Instance, GridScene.Instance }); }
public async ValueTask <IEnumerable <IScene> > BuildStack(IScene scene, SceneBuilderContext context, SceneStackFunc sceneProviderFunc) { var presenterScene = (PresenterScene)scene; var stack = new List <IScene> { presenterScene }; var screenShare = context.AvailableScenes.OfType <ScreenShareScene>() .FirstOrDefault(x => x.ParticipantId == presenterScene.PresenterParticipantId); if (screenShare != null) { stack.Add(screenShare); } else { stack.Add(ActiveSpeakerScene.Instance); } return(stack); }
public async ValueTask <IEnumerable <IScene> > BuildStack(IScene scene, SceneBuilderContext context, SceneStackFunc sceneProviderFunc) { var stack = new List <IScene> { scene }; var syncObj = await GetSyncObj(context.ConferenceId, context.RoomId); if (syncObj.CurrentSpeakerId != null) { var rooms = await _mediator.FetchSynchronizedObject <SynchronizedRooms>(context.ConferenceId, SynchronizedRooms.SyncObjId); if (rooms.Participants.TryGetValue(syncObj.CurrentSpeakerId, out var roomId) && context.RoomId == roomId) { var presenterScene = new PresenterScene(syncObj.CurrentSpeakerId); stack.AddRange(await sceneProviderFunc(presenterScene, context)); } } return(stack); }