diff --git a/PepperDashEssentials/Room/Types/EssentialsDualDisplayRoom.cs b/PepperDashEssentials/Room/Types/EssentialsDualDisplayRoom.cs index 2cfb33f7..54a84d28 100644 --- a/PepperDashEssentials/Room/Types/EssentialsDualDisplayRoom.cs +++ b/PepperDashEssentials/Room/Types/EssentialsDualDisplayRoom.cs @@ -1,14 +1,11 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using Crestron.SimplSharp; using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Devices; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Room.Config; using PepperDash.Essentials.Devices.Common.Codec; @@ -77,9 +74,8 @@ namespace PepperDash.Essentials var leftDisp = LeftDisplay as DisplayBase; var rightDisp = RightDisplay as DisplayBase; if (leftDisp != null && RightDisplay != null) - return leftDisp.IsWarmingUpFeedback.BoolValue || rightDisp.IsWarmingUpFeedback.BoolValue; - else - return false; + return rightDisp != null && (leftDisp.IsWarmingUpFeedback.BoolValue || rightDisp.IsWarmingUpFeedback.BoolValue); + return false; }; } } @@ -96,9 +92,8 @@ namespace PepperDash.Essentials var leftDisp = LeftDisplay as DisplayBase; var rightDisp = RightDisplay as DisplayBase; if (leftDisp != null && RightDisplay != null) - return leftDisp.IsCoolingDownFeedback.BoolValue || rightDisp.IsCoolingDownFeedback.BoolValue; - else - return false; + return rightDisp != null && (leftDisp.IsCoolingDownFeedback.BoolValue || rightDisp.IsCoolingDownFeedback.BoolValue); + return false; }; } } @@ -120,7 +115,7 @@ namespace PepperDash.Essentials /// If room is off, enables power on to last source. Default true /// public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; + string _lastSourceKey; /// /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" @@ -128,27 +123,27 @@ namespace PepperDash.Essentials /// public IBasicVolumeControls CurrentVolumeControls { - get { return _CurrentAudioDevice; } + get { return _currentAudioDevice; } set { - if (value == _CurrentAudioDevice) return; + if (value == _currentAudioDevice) return; - var oldDev = _CurrentAudioDevice; + var oldDev = _currentAudioDevice; // derigister this room from the device, if it can if (oldDev is IInUseTracking) (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); var handler = CurrentVolumeDeviceChange; if (handler != null) CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _CurrentAudioDevice = value; + _currentAudioDevice = value; if (handler != null) CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); // register this room with new device, if it can - if (_CurrentAudioDevice is IInUseTracking) - (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); + if (_currentAudioDevice is IInUseTracking) + (_currentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); } } - IBasicVolumeControls _CurrentAudioDevice; + IBasicVolumeControls _currentAudioDevice; /// /// "codecOsd" @@ -161,7 +156,7 @@ namespace PepperDash.Essentials /// public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } - CCriticalSection SourceSelectLock = new CCriticalSection(); + readonly CCriticalSection _sourceSelectLock = new CCriticalSection(); public EssentialsDualDisplayRoom(DeviceConfig config) : base(config) @@ -196,12 +191,12 @@ namespace PepperDash.Essentials } VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as - PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase; + VideoCodecBase; if (VideoCodec == null) throw new ArgumentNullException("codec cannot be null"); AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as - PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase; + AudioCodecBase; if (AudioCodec == null) Debug.Console(0, this, "No Audio Codec Found"); @@ -217,8 +212,8 @@ namespace PepperDash.Essentials void Initialize() { - if (DefaultAudioDevice is IBasicVolumeControls) - DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls; + if (DefaultAudioDevice != null) + DefaultVolumeControls = DefaultAudioDevice; else if (DefaultAudioDevice is IHasVolumeDevice) DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; CurrentVolumeControls = DefaultVolumeControls; @@ -233,12 +228,12 @@ namespace PepperDash.Essentials InitializeDisplay(rightDisp); // Get Microphone Privacy object, if any - this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); + MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); Debug.Console(2, this, "Microphone Privacy Config evaluated."); // Get emergency object, if any - this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); + Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); Debug.Console(2, this, "Emergency Config evaluated."); @@ -254,23 +249,20 @@ namespace PepperDash.Essentials if (VideoCodec != null) inVideoCall = VideoCodec.IsInCall; - if (inAudioCall || inVideoCall) - return true; - else - return false; + return inAudioCall || inVideoCall; }); - VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); + VideoCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate(); if (AudioCodec != null) - AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); + AudioCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate(); IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); - VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate(); + VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => IsSharingFeedback.FireUpdate(); // link privacy to VC (for now?) PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); - VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate(); + VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => PrivacyModeIsOnFeedback.FireUpdate(); CallTypeFeedback = new IntFeedback(() => 0); @@ -304,13 +296,18 @@ namespace PepperDash.Essentials disp.IsWarmingUpFeedback.OutputChange += (o, a) => { IsWarmingUpFeedback.FireUpdate(); - if (!IsWarmingUpFeedback.BoolValue) - (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => - { - IsCoolingDownFeedback.FireUpdate(); + if (IsWarmingUpFeedback.BoolValue) + { + return; + } + + var basicVolumeWithFeedback = CurrentVolumeControls as IBasicVolumeWithFeedback; + if (basicVolumeWithFeedback != null) + { + basicVolumeWithFeedback.SetVolume(DefaultVolume); + } }; + disp.IsCoolingDownFeedback.OutputChange += (o, a) => IsCoolingDownFeedback.FireUpdate(); } } @@ -328,7 +325,7 @@ namespace PepperDash.Essentials { // Add Occupancy object from config if (PropertiesConfig.Occupancy != null) - this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as + SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes); this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight(); @@ -381,6 +378,7 @@ namespace PepperDash.Essentials /// /// /// + /// public void RunRouteAction(string routeKey, string sourceListKey) { RunRouteAction(routeKey, sourceListKey, null); @@ -390,14 +388,17 @@ namespace PepperDash.Essentials /// Gets a source from config list SourceListKey and dynamically build and executes the /// route or commands /// - /// + /// + /// + /// public void RunRouteAction(string routeKey, string sourceListKey, Action successCallback) { // Run this on a separate thread - new CTimer(o => + //new CTimer + CrestronInvoke.BeginInvoke(o => { // try to prevent multiple simultaneous selections - SourceSelectLock.TryEnter(); + _sourceSelectLock.TryEnter(); try { @@ -419,9 +420,9 @@ namespace PepperDash.Essentials } // End usage timer on last source - if (!string.IsNullOrEmpty(LastSourceKey)) + if (!string.IsNullOrEmpty(_lastSourceKey)) { - var usageLastSource = dict[LastSourceKey].SourceDevice as IUsageTracking; + var usageLastSource = dict[_lastSourceKey].SourceDevice as IUsageTracking; if (usageLastSource != null && usageLastSource.UsageTracker != null) { try @@ -441,7 +442,7 @@ namespace PepperDash.Essentials if (routeKey.ToLower() != "roomoff") { - LastSourceKey = routeKey; + _lastSourceKey = routeKey; } //else // CurrentSourceInfoKey = null; @@ -526,7 +527,7 @@ namespace PepperDash.Essentials Debug.Console(1, this, "ERROR in routing: {0}", e); } - SourceSelectLock.Leave(); + _sourceSelectLock.Leave(); }, 0); // end of CTimer } @@ -535,6 +536,8 @@ namespace PepperDash.Essentials /// /// /// + /// + /// void DoRouteItem(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) { // if there is a $defaultAll on route, run two separate @@ -558,7 +561,7 @@ namespace PepperDash.Essentials /// /// /// - bool DoRoute(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) + private bool DoRoute(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) { IRoutingSink dest = null; @@ -622,9 +625,9 @@ namespace PepperDash.Essentials /// public override void PowerOnToDefaultOrLastSource() { - if (!EnablePowerOnToLastSource || LastSourceKey == null) + if (!EnablePowerOnToLastSource || _lastSourceKey == null) return; - RunRouteAction(LastSourceKey, SourceListKey); + RunRouteAction(_lastSourceKey, SourceListKey); } /// @@ -632,10 +635,13 @@ namespace PepperDash.Essentials /// public static void AllRoomsOff() { - var allRooms = DeviceManager.AllDevices.Where(d => - d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); + var allRooms = DeviceManager.AllDevices.OfType().Where(d => !d.ExcludeFromGlobalFunctions); foreach (var room in allRooms) - (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff", (room as EssentialsHuddleSpaceRoom).SourceListKey); + { + + room.RunRouteAction("roomOff", room.SourceListKey); + + } } #region IPrivacy Members