using System; using System.Collections.Generic; using Newtonsoft.Json; namespace PepperDash.Essentials.Devices.Common.Codec { /// /// Represents a Meeting /// public class Meeting { /// /// Minutes before the meeting to show warning /// [JsonProperty("minutesBeforeMeeting")] public int MinutesBeforeMeeting; /// /// Gets or sets the meeting ID /// [JsonProperty("id")] public string Id { get; set; } /// /// Gets or sets the meeting organizer /// [JsonProperty("organizer")] public string Organizer { get; set; } /// /// Gets or sets the Title /// [JsonProperty("title")] public string Title { get; set; } /// /// Gets or sets the Agenda /// [JsonProperty("agenda")] public string Agenda { get; set; } /// /// Gets the meeting warning time span in minutes before the meeting starts /// [JsonProperty("meetingWarningMinutes")] public TimeSpan MeetingWarningMinutes { get { return TimeSpan.FromMinutes(MinutesBeforeMeeting); } } /// /// Gets the time remaining until the meeting starts /// [JsonProperty("timeToMeetingStart")] public TimeSpan TimeToMeetingStart { get { return StartTime - DateTime.Now; } } /// /// Gets the time remaining until the meeting ends /// [JsonProperty("timeToMeetingEnd")] public TimeSpan TimeToMeetingEnd { get { return EndTime - DateTime.Now; } } /// /// Gets or sets the StartTime /// [JsonProperty("startTime")] public DateTime StartTime { get; set; } /// /// Gets or sets the EndTime /// [JsonProperty("endTime")] public DateTime EndTime { get; set; } /// /// Gets the duration of the meeting /// [JsonProperty("duration")] public TimeSpan Duration { get { return EndTime - StartTime; } } /// /// Gets or sets the Privacy /// [JsonProperty("privacy")] public eMeetingPrivacy Privacy { get; set; } /// /// Gets a value indicating whether the meeting can be joined /// [JsonProperty("joinable")] public bool Joinable { get { var joinable = StartTime.AddMinutes(-MinutesBeforeMeeting) <= DateTime.Now && DateTime.Now <= EndTime.AddSeconds(-_joinableCooldownSeconds); //Debug.LogMessage(LogEventLevel.Verbose, "Meeting Id: {0} joinable: {1}", Id, joinable); return joinable; } } /// /// Gets or sets the Dialable /// [JsonProperty("dialable")] public bool Dialable { get; set; } //public string ConferenceNumberToDial { get; set; } /// /// Gets or sets the ConferencePassword /// [JsonProperty("conferencePassword")] public string ConferencePassword { get; set; } /// /// Gets or sets the IsOneButtonToPushMeeting /// [JsonProperty("isOneButtonToPushMeeting")] public bool IsOneButtonToPushMeeting { get; set; } /// /// Gets or sets the Calls /// [JsonProperty("calls")] public List Calls { get; private set; } /// /// Tracks the change types that have already been notified for /// Gets or sets the NotifiedChangeTypes /// [JsonIgnore] public eMeetingEventChangeType NotifiedChangeTypes { get; set; } [JsonIgnore] private readonly int _joinableCooldownSeconds; /// /// Constructor for Meeting /// public Meeting() { Calls = new List(); _joinableCooldownSeconds = 300; } /// /// Constructor for Meeting /// /// Number of seconds after meeting start when it is no longer joinable public Meeting(int joinableCooldownSeconds) { Calls = new List(); _joinableCooldownSeconds = joinableCooldownSeconds; } #region Overrides of Object /// /// ToString method /// /// public override string ToString() { return string.Format("{0}:{1}: {2}-{3}", Title, Agenda, StartTime, EndTime); } #endregion } }