mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-12 19:24:53 +00:00
feat(essentials): Adds hold/resume/duration features to call status
This commit is contained in:
@@ -12,34 +12,40 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public class CodecActiveCallItem
|
||||
{
|
||||
[JsonProperty("name")]
|
||||
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Name { get; set; }
|
||||
|
||||
[JsonProperty("number")]
|
||||
[JsonProperty("number", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Number { get; set; }
|
||||
|
||||
[JsonProperty("type")]
|
||||
[JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallType Type { get; set; }
|
||||
|
||||
[JsonProperty("status")]
|
||||
[JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallStatus Status { get; set; }
|
||||
|
||||
[JsonProperty("direction")]
|
||||
[JsonProperty("direction", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallDirection Direction { get; set; }
|
||||
|
||||
[JsonProperty("id")]
|
||||
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[JsonProperty("isOnHold", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool IsOnHold { get; set; }
|
||||
|
||||
[JsonProperty("duration", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public TimeSpan Duration { get; set; }
|
||||
|
||||
//public object CallMetaData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns true when this call is any status other than
|
||||
/// Unknown, Disconnected, Disconnecting
|
||||
/// </summary>
|
||||
[JsonProperty("isActiveCall")]
|
||||
[JsonProperty("isActiveCall", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool IsActiveCall
|
||||
{
|
||||
get
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public interface IHasCallHold
|
||||
{
|
||||
/// <summary>
|
||||
/// Put the specified call on hold
|
||||
/// </summary>
|
||||
/// <param name="activeCall"></param>
|
||||
void HoldCall(CodecActiveCallItem activeCall);
|
||||
|
||||
/// <summary>
|
||||
/// Resume the specified call
|
||||
/// </summary>
|
||||
/// <param name="activeCall"></param>
|
||||
void ResumeCall(CodecActiveCallItem activeCall);
|
||||
}
|
||||
}
|
||||
@@ -108,6 +108,7 @@
|
||||
<Compile Include="Codec\eCodecCallStatus.cs" />
|
||||
<Compile Include="Codec\eMeetingPrivacy.cs" />
|
||||
<Compile Include="Codec\iCodecAudio.cs" />
|
||||
<Compile Include="Codec\IHasCallHold.cs" />
|
||||
<Compile Include="Codec\IHasDoNotDisturb.cs" />
|
||||
<Compile Include="Codec\IHasExternalSourceSwitching.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorio.cs" />
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
|
||||
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets,
|
||||
IHasExternalSourceSwitching, IHasBranding, IHasCameraOff, IHasCameraMute, IHasDoNotDisturbMode,
|
||||
IHasHalfWakeMode
|
||||
IHasHalfWakeMode, IHasCallHold
|
||||
{
|
||||
private bool _externalSourceChangeRequested;
|
||||
|
||||
@@ -847,6 +847,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
changeDetected = true;
|
||||
}
|
||||
}
|
||||
if(call.Duration != null)
|
||||
{
|
||||
if(!string.IsNullOrEmpty(call.Duration.Value))
|
||||
{
|
||||
tempActiveCall.Duration = call.Duration.DurationValue;
|
||||
changeDetected = true;
|
||||
}
|
||||
}
|
||||
if(call.PlacedOnHold != null)
|
||||
{
|
||||
tempActiveCall.IsOnHold = call.PlacedOnHold.BoolValue;
|
||||
changeDetected = true;
|
||||
}
|
||||
|
||||
if (changeDetected)
|
||||
{
|
||||
@@ -865,7 +878,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
Name = call.DisplayName.Value,
|
||||
Number = call.RemoteNumber.Value,
|
||||
Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value),
|
||||
Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value)
|
||||
Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value),
|
||||
Duration = call.Duration.DurationValue,
|
||||
IsOnHold = call.PlacedOnHold.BoolValue,
|
||||
};
|
||||
|
||||
// Add it to the ActiveCalls List
|
||||
@@ -1348,7 +1363,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
SendText(string.Format("xCommand Dial Number: \"{0}\" Protocol: {1} CallRate: {2} CallType: {3} BookingId: {4}", number, protocol, callRate, callType, meetingId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public override void EndCall(CodecActiveCallItem activeCall)
|
||||
{
|
||||
SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id));
|
||||
@@ -1372,6 +1388,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
SendText("xCommand Call Reject");
|
||||
}
|
||||
|
||||
#region IHasCallHold Members
|
||||
|
||||
public void HoldCall(CodecActiveCallItem activeCall)
|
||||
{
|
||||
SendText(string.Format("xCommand Call Hold CallId: {0}", activeCall.Id));
|
||||
}
|
||||
|
||||
public void ResumeCall(CodecActiveCallItem activeCall)
|
||||
{
|
||||
SendText(string.Format("xCommand Call Resume CallId: {0}", activeCall.Id));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override void SendDtmf(string s)
|
||||
{
|
||||
SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s));
|
||||
|
||||
@@ -1949,9 +1949,30 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class Duration
|
||||
public class Duration : ValueProperty
|
||||
{
|
||||
public string Value { get; set; }
|
||||
private string _Value;
|
||||
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Value = value;
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public TimeSpan DurationValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return new TimeSpan(0, 0, Int32.Parse(_Value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class FacilityServiceId
|
||||
@@ -1964,9 +1985,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class PlacedOnHold
|
||||
public class PlacedOnHold : ValueProperty
|
||||
{
|
||||
public string Value { get; set; }
|
||||
public bool BoolValue { get; private set; }
|
||||
|
||||
public string Value
|
||||
{
|
||||
set
|
||||
{
|
||||
// If the incoming value is "True" it sets the BoolValue true, otherwise sets it false
|
||||
BoolValue = value == "True";
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Protocol
|
||||
@@ -2014,6 +2045,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
CallType = new CallType();
|
||||
Status = new Status2();
|
||||
Duration = new Duration();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user