From def3d35fb5a2267798c2d603f5896d5f788def8c Mon Sep 17 00:00:00 2001 From: Trevor Payne Date: Wed, 28 Sep 2022 00:46:05 -0500 Subject: [PATCH] fix: Add method by which to clear MeetingInfo xSig when there are no bookings --- .../Codec/iHasScheduleAwareness.cs | 25 ++++++++++ .../VideoCodec/VideoCodecBase.cs | 50 +++++++++++-------- 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs index 9169fd7c..73ff093f 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs @@ -37,6 +37,9 @@ namespace PepperDash.Essentials.Devices.Common.Codec private int _meetingWarningMinutes = 5; + private bool _nullMeeting { get; set; } + + private Meeting _previousChangedMeeting; private eMeetingEventChangeType _previousChangeType = eMeetingEventChangeType.Unknown; @@ -91,6 +94,23 @@ namespace PepperDash.Essentials.Devices.Common.Codec /// private void OnMeetingChange(eMeetingEventChangeType changeType, Meeting meeting) { + if (meeting == null) + { + var message = _nullMeeting + ? "*****************OnMeetingChange No meetings to update*****************" + : "*****************OnMeetingChange No meetings present. Clearing List*****************"; + Debug.Console(2, message); + if (_nullMeeting) return; + _nullMeeting = true; + var handler = MeetingEventChange; + if (handler != null) + { + handler(this, new MeetingEventArgs() { ChangeType = eMeetingEventChangeType.Unknown, Meeting = null }); + } + return; + + } + _nullMeeting = false; Debug.Console(2, "*****************OnMeetingChange. id: {0} changeType: {1}**********************", meeting.Id, changeType); if (changeType != (changeType & meeting.NotifiedChangeTypes)) { @@ -119,6 +139,11 @@ namespace PepperDash.Essentials.Devices.Common.Codec // Iterate the meeting list and check if any meeting need to do anything const double meetingTimeEpsilon = 0.05; + if (Meetings.Count < 1) + { + OnMeetingChange(eMeetingEventChangeType.Unknown, null); + return; + } foreach (var m in Meetings) { var changeType = eMeetingEventChangeType.Unknown; 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 13099208..3f6b106b 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 @@ -831,6 +831,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec codec.CodecSchedule.MeetingsListHasChanged += (sender, args) => UpdateMeetingsList(codec, trilist, joinMap); codec.CodecSchedule.MeetingEventChange += (sender, args) => { + if (args.Meeting == null) + { + UpdateMeetingsList(codec, trilist, joinMap); + } if (args.ChangeType == eMeetingEventChangeType.MeetingStartWarning) { UpdateMeetingsList(codec, trilist, joinMap); @@ -909,6 +913,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec var stringIndex = 0; var meetingIndex = 0; + if (meetings.Count == 0) + { + var clearBytes = XSigHelpers.ClearOutputs(); + return Encoding.GetEncoding(XSigEncoding).GetString(clearBytes, 0, clearBytes.Length); + } + var tokenArray = new XSigToken[_meetingsToDisplay * offset]; /* * Digitals @@ -1290,28 +1300,28 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec }; var joinCodec = this as IJoinCalls; - if (joinCodec != null) - { - trilist.SetSigFalseAction(joinMap.JoinAllCalls.JoinNumber, () => joinCodec.JoinAllCalls()); + if (joinCodec != null) + { + trilist.SetSigFalseAction(joinMap.JoinAllCalls.JoinNumber, () => joinCodec.JoinAllCalls()); - for (int i = 0; i < joinMap.JoinCallStart.JoinSpan; i++) - { - trilist.SetSigFalseAction((uint)(joinMap.JoinCallStart.JoinNumber + i), () => - { - var call = ActiveCalls[i]; - if (call != null) - { - joinCodec.JoinCall(call); - } - else - { - Debug.Console(0, this, "[Join Call] Unable to find call at index '{0}'", i); - } - }); - } - } + for (int i = 0; i < joinMap.JoinCallStart.JoinSpan; i++) + { + trilist.SetSigFalseAction((uint) (joinMap.JoinCallStart.JoinNumber + i), () => + { + var call = ActiveCalls[i]; + if (call != null) + { + joinCodec.JoinCall(call); + } + else + { + Debug.Console(0, this, "[Join Call] Unable to find call at index '{0}'", i); + } + }); + } + } - var holdCodec = this as IHasCallHold; + var holdCodec = this as IHasCallHold; if (holdCodec != null) { trilist.SetSigFalseAction(joinMap.HoldAllCalls.JoinNumber, () =>