refactoring and cleanup

This commit is contained in:
Andrew Welker
2020-06-24 14:30:16 -06:00
parent 0c14163830
commit 2a569b0a6a

View File

@@ -1,14 +1,11 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using Crestron.SimplSharp; using Crestron.SimplSharp;
using Newtonsoft.Json; using Newtonsoft.Json;
using PepperDash.Core; using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Devices;
using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Config;
using PepperDash.Essentials.Room.Config; using PepperDash.Essentials.Room.Config;
using PepperDash.Essentials.Devices.Common.Codec; using PepperDash.Essentials.Devices.Common.Codec;
@@ -77,9 +74,8 @@ namespace PepperDash.Essentials
var leftDisp = LeftDisplay as DisplayBase; var leftDisp = LeftDisplay as DisplayBase;
var rightDisp = RightDisplay as DisplayBase; var rightDisp = RightDisplay as DisplayBase;
if (leftDisp != null && RightDisplay != null) if (leftDisp != null && RightDisplay != null)
return leftDisp.IsWarmingUpFeedback.BoolValue || rightDisp.IsWarmingUpFeedback.BoolValue; return rightDisp != null && (leftDisp.IsWarmingUpFeedback.BoolValue || rightDisp.IsWarmingUpFeedback.BoolValue);
else return false;
return false;
}; };
} }
} }
@@ -96,9 +92,8 @@ namespace PepperDash.Essentials
var leftDisp = LeftDisplay as DisplayBase; var leftDisp = LeftDisplay as DisplayBase;
var rightDisp = RightDisplay as DisplayBase; var rightDisp = RightDisplay as DisplayBase;
if (leftDisp != null && RightDisplay != null) if (leftDisp != null && RightDisplay != null)
return leftDisp.IsCoolingDownFeedback.BoolValue || rightDisp.IsCoolingDownFeedback.BoolValue; return rightDisp != null && (leftDisp.IsCoolingDownFeedback.BoolValue || rightDisp.IsCoolingDownFeedback.BoolValue);
else return false;
return false;
}; };
} }
} }
@@ -120,7 +115,7 @@ namespace PepperDash.Essentials
/// If room is off, enables power on to last source. Default true /// If room is off, enables power on to last source. Default true
/// </summary> /// </summary>
public bool EnablePowerOnToLastSource { get; set; } public bool EnablePowerOnToLastSource { get; set; }
string LastSourceKey; string _lastSourceKey;
/// <summary> /// <summary>
/// Sets the volume control device, and attaches/removes InUseTrackers with "audio" /// Sets the volume control device, and attaches/removes InUseTrackers with "audio"
@@ -128,27 +123,27 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public IBasicVolumeControls CurrentVolumeControls public IBasicVolumeControls CurrentVolumeControls
{ {
get { return _CurrentAudioDevice; } get { return _currentAudioDevice; }
set set
{ {
if (value == _CurrentAudioDevice) return; if (value == _currentAudioDevice) return;
var oldDev = _CurrentAudioDevice; var oldDev = _currentAudioDevice;
// derigister this room from the device, if it can // derigister this room from the device, if it can
if (oldDev is IInUseTracking) if (oldDev is IInUseTracking)
(oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio");
var handler = CurrentVolumeDeviceChange; var handler = CurrentVolumeDeviceChange;
if (handler != null) if (handler != null)
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange));
_CurrentAudioDevice = value; _currentAudioDevice = value;
if (handler != null) if (handler != null)
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange));
// register this room with new device, if it can // register this room with new device, if it can
if (_CurrentAudioDevice is IInUseTracking) if (_currentAudioDevice is IInUseTracking)
(_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); (_currentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio");
} }
} }
IBasicVolumeControls _CurrentAudioDevice; IBasicVolumeControls _currentAudioDevice;
/// <summary> /// <summary>
/// "codecOsd" /// "codecOsd"
@@ -161,7 +156,7 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } }
CCriticalSection SourceSelectLock = new CCriticalSection(); readonly CCriticalSection _sourceSelectLock = new CCriticalSection();
public EssentialsDualDisplayRoom(DeviceConfig config) public EssentialsDualDisplayRoom(DeviceConfig config)
: base(config) : base(config)
@@ -196,12 +191,12 @@ namespace PepperDash.Essentials
} }
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase; VideoCodecBase;
if (VideoCodec == null) if (VideoCodec == null)
throw new ArgumentNullException("codec cannot be null"); throw new ArgumentNullException("codec cannot be null");
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase; AudioCodecBase;
if (AudioCodec == null) if (AudioCodec == null)
Debug.Console(0, this, "No Audio Codec Found"); Debug.Console(0, this, "No Audio Codec Found");
@@ -217,8 +212,8 @@ namespace PepperDash.Essentials
void Initialize() void Initialize()
{ {
if (DefaultAudioDevice is IBasicVolumeControls) if (DefaultAudioDevice != null)
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls; DefaultVolumeControls = DefaultAudioDevice;
else if (DefaultAudioDevice is IHasVolumeDevice) else if (DefaultAudioDevice is IHasVolumeDevice)
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
CurrentVolumeControls = DefaultVolumeControls; CurrentVolumeControls = DefaultVolumeControls;
@@ -233,12 +228,12 @@ namespace PepperDash.Essentials
InitializeDisplay(rightDisp); InitializeDisplay(rightDisp);
// Get Microphone Privacy object, if any // 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."); Debug.Console(2, this, "Microphone Privacy Config evaluated.");
// Get emergency object, if any // Get emergency object, if any
this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
Debug.Console(2, this, "Emergency Config evaluated."); Debug.Console(2, this, "Emergency Config evaluated.");
@@ -254,23 +249,20 @@ namespace PepperDash.Essentials
if (VideoCodec != null) if (VideoCodec != null)
inVideoCall = VideoCodec.IsInCall; inVideoCall = VideoCodec.IsInCall;
if (inAudioCall || inVideoCall) return inAudioCall || inVideoCall;
return true;
else
return false;
}); });
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); VideoCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate();
if (AudioCodec != null) if (AudioCodec != null)
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); AudioCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate();
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); 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?) // link privacy to VC (for now?)
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); 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); CallTypeFeedback = new IntFeedback(() => 0);
@@ -300,13 +292,18 @@ namespace PepperDash.Essentials
disp.IsWarmingUpFeedback.OutputChange += (o, a) => disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
{ {
IsWarmingUpFeedback.FireUpdate(); IsWarmingUpFeedback.FireUpdate();
if (!IsWarmingUpFeedback.BoolValue) if (IsWarmingUpFeedback.BoolValue)
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); {
}; return;
disp.IsCoolingDownFeedback.OutputChange += (o, a) => }
{
IsCoolingDownFeedback.FireUpdate(); var basicVolumeWithFeedback = CurrentVolumeControls as IBasicVolumeWithFeedback;
if (basicVolumeWithFeedback != null)
{
basicVolumeWithFeedback.SetVolume(DefaultVolume);
}
}; };
disp.IsCoolingDownFeedback.OutputChange += (o, a) => IsCoolingDownFeedback.FireUpdate();
} }
} }
@@ -324,13 +321,13 @@ namespace PepperDash.Essentials
{ {
// Add Occupancy object from config // Add Occupancy object from config
if (PropertiesConfig.Occupancy != null) if (PropertiesConfig.Occupancy != null)
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes); IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
this.LogoUrl = PropertiesConfig.Logo.GetUrl(); LogoUrl = PropertiesConfig.Logo.GetUrl();
this.SourceListKey = PropertiesConfig.SourceListKey; SourceListKey = PropertiesConfig.SourceListKey;
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem; DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100); DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
return base.CustomActivate(); return base.CustomActivate();
} }
@@ -376,6 +373,7 @@ namespace PepperDash.Essentials
/// ///
/// </summary> /// </summary>
/// <param name="routeKey"></param> /// <param name="routeKey"></param>
/// <param name="sourceListKey"></param>
public void RunRouteAction(string routeKey, string sourceListKey) public void RunRouteAction(string routeKey, string sourceListKey)
{ {
RunRouteAction(routeKey, sourceListKey, null); RunRouteAction(routeKey, sourceListKey, null);
@@ -385,14 +383,17 @@ namespace PepperDash.Essentials
/// Gets a source from config list SourceListKey and dynamically build and executes the /// Gets a source from config list SourceListKey and dynamically build and executes the
/// route or commands /// route or commands
/// </summary> /// </summary>
/// <param name="name"></param> /// <param name="routeKey"></param>
/// <param name="sourceListKey"></param>
/// <param name="successCallback"></param>
public void RunRouteAction(string routeKey, string sourceListKey, Action successCallback) public void RunRouteAction(string routeKey, string sourceListKey, Action successCallback)
{ {
// Run this on a separate thread // Run this on a separate thread
new CTimer(o => //new CTimer
CrestronInvoke.BeginInvoke(o =>
{ {
// try to prevent multiple simultaneous selections // try to prevent multiple simultaneous selections
SourceSelectLock.TryEnter(); _sourceSelectLock.TryEnter();
try try
{ {
@@ -414,9 +415,9 @@ namespace PepperDash.Essentials
} }
// End usage timer on last source // 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) if (usageLastSource != null && usageLastSource.UsageTracker != null)
{ {
try try
@@ -436,7 +437,7 @@ namespace PepperDash.Essentials
if (routeKey.ToLower() != "roomoff") if (routeKey.ToLower() != "roomoff")
{ {
LastSourceKey = routeKey; _lastSourceKey = routeKey;
} }
//else //else
// CurrentSourceInfoKey = null; // CurrentSourceInfoKey = null;
@@ -521,7 +522,7 @@ namespace PepperDash.Essentials
Debug.Console(1, this, "ERROR in routing: {0}", e); Debug.Console(1, this, "ERROR in routing: {0}", e);
} }
SourceSelectLock.Leave(); _sourceSelectLock.Leave();
}, 0); // end of CTimer }, 0); // end of CTimer
} }
@@ -530,6 +531,8 @@ namespace PepperDash.Essentials
/// ///
/// </summary> /// </summary>
/// <param name="route"></param> /// <param name="route"></param>
/// <param name="sourceItem"></param>
/// <param name="sourceItemKey"></param>
void DoRouteItem(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) void DoRouteItem(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey)
{ {
// if there is a $defaultAll on route, run two separate // if there is a $defaultAll on route, run two separate
@@ -553,7 +556,7 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
/// <param name="route"></param> /// <param name="route"></param>
/// <returns></returns> /// <returns></returns>
bool DoRoute(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) private bool DoRoute(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey)
{ {
IRoutingSink dest = null; IRoutingSink dest = null;
@@ -617,9 +620,9 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public override void PowerOnToDefaultOrLastSource() public override void PowerOnToDefaultOrLastSource()
{ {
if (!EnablePowerOnToLastSource || LastSourceKey == null) if (!EnablePowerOnToLastSource || _lastSourceKey == null)
return; return;
RunRouteAction(LastSourceKey, SourceListKey); RunRouteAction(_lastSourceKey, SourceListKey);
} }
/// <summary> /// <summary>
@@ -627,10 +630,13 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public static void AllRoomsOff() public static void AllRoomsOff()
{ {
var allRooms = DeviceManager.AllDevices.Where(d => var allRooms = DeviceManager.AllDevices.OfType<EssentialsHuddleSpaceRoom>().Where(d => !d.ExcludeFromGlobalFunctions);
d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
foreach (var room in allRooms) foreach (var room in allRooms)
(room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff", (room as EssentialsHuddleSpaceRoom).SourceListKey); {
room.RunRouteAction("roomOff", room.SourceListKey);
}
} }
#region IPrivacy Members #region IPrivacy Members