diff --git a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index 23ab797e..293fddd5 100644
--- a/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -764,6 +764,10 @@ namespace PepperDash.Essentials
///
public const uint NextMeetingModalVisible = 15049;
///
+ /// 15050
+ ///
+ public const uint NextMeetingNotificationRibbonVisible = 15050;
+ ///
/// 15051
///
public const uint Display1SelectPressAndFb = 15051;
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 8799b33b..5e2b1c23 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
@@ -4,13 +4,15 @@ using System.Linq;
using System.Text;
using Crestron.SimplSharp;
+using PepperDash.Core;
+
using Newtonsoft.Json;
namespace PepperDash.Essentials.Devices.Common.Codec
{
public enum eMeetingEventChangeType
{
- Unkown = 0,
+ Unknown = 0,
MeetingStartWarning,
MeetingStart,
MeetingEndWarning,
@@ -34,6 +36,10 @@ namespace PepperDash.Essentials.Devices.Common.Codec
private int _meetingWarningMinutes = 5;
+ private Meeting _previousChangedMeeting;
+
+ private eMeetingEventChangeType _previousChangeType = eMeetingEventChangeType.Unknown;
+
public int MeetingWarningMinutes
{
get { return _meetingWarningMinutes; }
@@ -90,24 +96,39 @@ namespace PepperDash.Essentials.Devices.Common.Codec
{
// Iterate the meeting list and check if any meeting need to do anythingk
- const double meetingTimeEpsilon = 0.0001;
+ const double meetingTimeEpsilon = 0.05;
foreach (var m in Meetings)
{
- var changeType = eMeetingEventChangeType.Unkown;
+ var changeType = eMeetingEventChangeType.Unknown;
- if (m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to start
+ //Debug.Console(2, "Math.Abs(m.TimeToMeetingEnd.TotalMinutes) = {0}", Math.Abs(m.TimeToMeetingEnd.TotalMinutes));
+ if (_previousChangeType != eMeetingEventChangeType.MeetingStartWarning && m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingStart.Seconds > 0) // Meeting is about to start
+ {
+ Debug.Console(2, "MeetingStartWarning. TotalMinutes: {0} Seconds: {1}", m.TimeToMeetingStart.TotalMinutes, m.TimeToMeetingStart.Seconds);
changeType = eMeetingEventChangeType.MeetingStartWarning;
- else if (Math.Abs(m.TimeToMeetingStart.TotalMinutes) < meetingTimeEpsilon) // Meeting Start
+ }
+ else if (_previousChangeType != eMeetingEventChangeType.MeetingStart && Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting Start
+ {
+ Debug.Console(2, "MeetingStart");
changeType = eMeetingEventChangeType.MeetingStart;
- else if (m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to end
+ }
+ else if (_previousChangeType != eMeetingEventChangeType.MeetingEndWarning && m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingEnd.Seconds > 0) // Meeting is about to end
changeType = eMeetingEventChangeType.MeetingEndWarning;
- else if (Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting has ended
+ else if (_previousChangeType != eMeetingEventChangeType.MeetingEnd && Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting has ended
changeType = eMeetingEventChangeType.MeetingEnd;
- if (changeType != eMeetingEventChangeType.Unkown)
- OnMeetingChange(changeType, m);
- }
+ if (changeType != eMeetingEventChangeType.Unknown)
+ {
+ // check to make sure this is not a redundant event for one that was fired last
+ if (_previousChangedMeeting == null || (_previousChangedMeeting != m && _previousChangeType != changeType))
+ {
+ _previousChangeType = changeType;
+ _previousChangedMeeting = m;
+ OnMeetingChange(changeType, m);
+ }
+ }
+ }
}
}
@@ -169,8 +190,10 @@ namespace PepperDash.Essentials.Devices.Common.Codec
{
get
{
- return StartTime.AddMinutes(-MinutesBeforeMeeting) <= DateTime.Now
+ var joinable = StartTime.AddMinutes(-MinutesBeforeMeeting) <= DateTime.Now
&& DateTime.Now <= EndTime; //.AddMinutes(-5);
+ Debug.Console(2, "Meeting Id: {0} joinable: {1}", Id, joinable);
+ return joinable;
}
}
//public string ConferenceNumberToDial { get; set; }
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
index a947a1d1..b87f1fa8 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
@@ -139,7 +139,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
public override void Dial(Meeting meeting)
{
- throw new NotImplementedException();
+ Debug.Console(1, this, "Dial Meeting: {0}", meeting.Id);
+ var call = new CodecActiveCallItem() { Name = meeting.Title, Number = meeting.Id, Id = meeting.Id, Status = eCodecCallStatus.Dialing, Direction = eCodecCallDirection.Outgoing, Type = eCodecCallType.Video };
+ ActiveCalls.Add(call);
+ OnCallStatusChange(call);
+
+ //ActiveCallCountFeedback.FireUpdate();
+ // Simulate 2-second ring, then connecting, then connected
+ new CTimer(o =>
+ {
+ call.Type = eCodecCallType.Video;
+ SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connecting, call);
+ new CTimer(oo => SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connected, call), 1000);
+ }, 2000);
+
}
///
@@ -396,14 +409,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
if (_CodecSchedule == null || _CodecSchedule.Meetings.Count == 0
|| _CodecSchedule.Meetings[_CodecSchedule.Meetings.Count - 1].StartTime < DateTime.Now)
{
- _CodecSchedule = new CodecScheduleAwareness(10000);
+ _CodecSchedule = new CodecScheduleAwareness(1000);
for (int i = 0; i < 5; i++)
{
var m = new Meeting();
+ m.MinutesBeforeMeeting = 5;
m.Id = i.ToString();
m.Organizer = "Employee " + 1;
m.StartTime = DateTime.Now.AddMinutes(3).AddHours(i);
- m.EndTime = DateTime.Now.AddHours(i).AddMinutes(30);
+ m.EndTime = DateTime.Now.AddHours(i).AddMinutes(55);
m.Title = "Meeting " + i;
m.Calls.Add(new Call() { Number = i + "meeting@fake.com"});
_CodecSchedule.Meetings.Add(m);