diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
index 547e8711..af6ab740 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
@@ -108,7 +108,7 @@
-
+
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
index 0bca7181..61983dc5 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
@@ -1023,7 +1023,7 @@ ConnectorID: {2}"
if (tempPresets.Count > 0)
{
// Create temporary list to store the existing items from the CiscoCodecStatus.RoomPreset collection
- var existingRoomPresets = new List();
+ var existingRoomPresets = new List();
// Add the existing items to the temporary list
existingRoomPresets.AddRange(CodecStatus.Status.RoomPreset);
// Populate the CodecStatus object (this will append new values to the RoomPreset collection
@@ -1031,8 +1031,6 @@ ConnectorID: {2}"
var jResponse = JObject.Parse(response);
- List convertedRoomPresets =
- existingRoomPresets.Select(a => (CiscoCodecStatus.RoomPreset) a).ToList();
IList roomPresets = jResponse["Status"]["RoomPreset"].Children().ToList();
// Iterate the new items in this response agains the temporary list. Overwrite any existing items and add new ones.
@@ -1041,7 +1039,7 @@ ConnectorID: {2}"
var preset = camPreset as CiscoCodecStatus.RoomPreset;
if (preset == null) continue;
// First fine the existing preset that matches the id
- var existingPreset = convertedRoomPresets.FirstOrDefault(p => p.id.Equals(preset.id));
+ var existingPreset = existingRoomPresets.FirstOrDefault(p => p.id.Equals(preset.id));
if (existingPreset != null)
{
Debug.Console(1, this, "Existing Room Preset with ID: {0} found. Updating.", existingPreset.id);
@@ -1073,7 +1071,7 @@ ConnectorID: {2}"
CodecStatus.Status.RoomPreset = existingRoomPresets;
// Generecise the list
- NearEndPresets = existingRoomPresets.GetGenericPresets();
+ NearEndPresets = existingRoomPresets.GetGenericPresets();
var handler = CodecRoomPresetsListHasChanged;
if (handler != null)
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/RoomPresets.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/RoomPresets.cs
index 4fec0d89..8fc8a1d0 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/RoomPresets.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/RoomPresets.cs
@@ -32,12 +32,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
///
///
///
- public static List GetGenericPresets(this List presets)
+ public static List GetGenericPresets(this List presets) where TSource : ConvertiblePreset where TDestination : PresetBase
{
return
presets.Select(preset => preset.ConvertCodecPreset())
.Where(newPreset => newPreset != null)
- .Cast()
+ .Cast()
.ToList();
}
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
index 23e8c6ab..2d8e903a 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
@@ -2186,7 +2186,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
}
}
- public class RoomPreset : IConvertiblePreset
+ public class RoomPreset : ConvertiblePreset
{
public string id { get; set; }
public Defined Defined { get; set; }
@@ -2200,7 +2200,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
Type = new Type5();
}
- public PresetBase ConvertCodecPreset()
+ public override PresetBase ConvertCodecPreset()
{
try
{
@@ -2240,7 +2240,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public Proximity Proximity { get; set; }
public RoomAnalytics RoomAnalytics { get; set; }
- public List RoomPreset { get; set; }
+ public List RoomPreset { get; set; }
public SIP SIP { get; set; }
public Security Security { get; set; }
@@ -2257,7 +2257,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
Standby = new Standby();
Cameras = new Cameras();
RoomAnalytics = new RoomAnalytics();
- RoomPreset = new List();
+ RoomPreset = new List();
Conference = new Conference2();
SystemUnit = new SystemUnit();
Video = new Video();
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/IConvertiblePreset.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ConvertiblePreset.cs
similarity index 54%
rename from essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/IConvertiblePreset.cs
rename to essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ConvertiblePreset.cs
index f6f3f74f..4c01d94e 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/IConvertiblePreset.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ConvertiblePreset.cs
@@ -2,8 +2,8 @@
namespace PepperDash.Essentials.Devices.Common.VideoCodec
{
- public interface IConvertiblePreset
+ public abstract class ConvertiblePreset
{
- PresetBase ConvertCodecPreset();
+ public abstract PresetBase ConvertCodecPreset();
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
index dbce9c13..53285169 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
@@ -10,6 +10,7 @@ using PepperDash.Core;
using PepperDash.Core.Intersystem;
using PepperDash.Core.Intersystem.Tokens;
using PepperDash.Core.WebApi.Presets;
+using Crestron.SimplSharp.Reflection;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config;
@@ -462,10 +463,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
}
SharingContentIsOnFeedback.FireUpdate();
-
- trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
-
- trilist.SetString(joinMap.CurrentCallData.JoinNumber, UpdateCallStatusXSig());
};
}
@@ -1018,7 +1015,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
trilist.SetString(joinMap.DirectoryEntries.JoinNumber,
Encoding.GetEncoding(XSigEncoding).GetString(clearBytes, 0, clearBytes.Length));
- var directoryXSig = UpdateDirectoryXSig(codec.DirectoryRoot, !codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue);
+ var directoryXSig = UpdateDirectoryXSig(codec.DirectoryRoot,
+ codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue == false);
Debug.Console(2, this, "Directory XSig Length: {0}", directoryXSig.Length);
@@ -1033,8 +1031,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
trilist.SetString(joinMap.DirectoryEntries.JoinNumber,
Encoding.GetEncoding(XSigEncoding).GetString(clearBytes, 0, clearBytes.Length));
- var directoryXSig = UpdateDirectoryXSig(args.Directory, !codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue);
-
+ var directoryXSig = UpdateDirectoryXSig(args.Directory,
+ codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue == false);
Debug.Console(2, this, "Directory XSig Length: {0}", directoryXSig.Length);
trilist.SetString(joinMap.DirectoryEntries.JoinNumber, directoryXSig);
@@ -1044,10 +1042,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{
if (!args.DeviceOnLine) return;
- // TODO [ ] Issue #868
- trilist.SetString(joinMap.DirectoryEntries.JoinNumber, "\xFC");
- UpdateDirectoryXSig(codec.CurrentDirectoryResult,
- !codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue);
+ var clearBytes = XSigHelpers.ClearOutputs();
+ trilist.SetString(joinMap.DirectoryEntries.JoinNumber,
+ Encoding.GetEncoding(XSigEncoding).GetString(clearBytes, 0, clearBytes.Length));
+ var directoryXSig = UpdateDirectoryXSig(codec.DirectoryRoot, codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue == false);
+ trilist.SetString(joinMap.DirectoryEntries.JoinNumber, directoryXSig);
};
}
@@ -1185,32 +1184,45 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
private string UpdateDirectoryXSig(CodecDirectory directory, bool isRoot)
{
- var contactIndex = 1;
- var tokenArray = new XSigToken[directory.CurrentDirectoryResults.Count];
+ const int xSigMaxIndex = 1023;
+ var tokenArray = new XSigToken[directory.CurrentDirectoryResults.Count > xSigMaxIndex
+ ? xSigMaxIndex
+ : directory.CurrentDirectoryResults.Count];
- Debug.Console(2, this, "Is root {0} Directory Count: {1}", isRoot, directory.CurrentDirectoryResults.Count);
+ Debug.Console(2, this, "IsRoot: {0}, Directory Count: {1}, TokenArray.Length: {2}", isRoot, directory.CurrentDirectoryResults.Count, tokenArray.Length);
- foreach (var entry in directory.CurrentDirectoryResults)
- {
- var arrayIndex = contactIndex - 1;
+ var contacts = directory.CurrentDirectoryResults.Count > xSigMaxIndex
+ ? directory.CurrentDirectoryResults.Take(xSigMaxIndex)
+ : directory.CurrentDirectoryResults;
- Debug.Console(2, this, "Entry Name: {0}, Folder ID: {1}", entry.Name, entry.FolderId);
+ var contactsToDisplay = isRoot
+ ? contacts.Where(c => c.ParentFolderId == "root")
+ : contacts.Where(c => c.ParentFolderId != "root");
- if (entry is DirectoryFolder && entry.ParentFolderId == "root")
- {
- tokenArray[arrayIndex] = new XSigSerialToken(contactIndex, String.Format("[+] {0}", entry.Name));
+ var counterIndex = 1;
+ foreach (var entry in contactsToDisplay)
+ {
+ var arrayIndex = counterIndex - 1;
+ var entryIndex = counterIndex;
- contactIndex++;
+ Debug.Console(2, this, "Entry{2:0000} Name: {0}, Folder ID: {1}, Type: {3}, ParentFolderId: {4}",
+ entry.Name, entry.FolderId, entryIndex, entry.GetType().GetCType().FullName, entry.ParentFolderId);
- continue;
- }
+ if (entry is DirectoryFolder)
+ {
+ tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, String.Format("[+] {0}", entry.Name));
- tokenArray[arrayIndex] = new XSigSerialToken(contactIndex, entry.Name);
+ counterIndex++;
- contactIndex++;
- }
+ continue;
+ }
- return GetXSigString(tokenArray);
+ tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, entry.Name);
+
+ counterIndex++;
+ }
+
+ return GetXSigString(tokenArray);
}
private void LinkVideoCodecCallControlsToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)