diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs index e63121d4..4212f478 100644 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs +++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs @@ -121,7 +121,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco /// protected override Func SharingSourceFeedbackFunc { -#warning verify that source feedback to room works from codec get { return () => PresentationSourceKey; @@ -208,6 +207,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco CTimer LoginMessageReceived; + // **___________________________________________________________________** + // Timers to be moved to the global system timer at a later point.... + CTimer BookingsRefreshTimer; + CTimer PhonebookRefreshTimer; + // **___________________________________________________________________** + public RoutingInputPort CodecOsdIn { get; private set; } public RoutingInputPort HdmiIn1 { get; private set; } public RoutingInputPort HdmiIn2 { get; private set; } @@ -349,8 +354,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco GetCallHistory(); + PhonebookRefreshTimer = new CTimer(CheckCurrentHour, 3600000, 3600000); // check each hour to see if the phonebook should be downloaded GetPhonebook(null); + BookingsRefreshTimer = new CTimer(GetBookings, 900000, 900000); // 15 minute timer to check for new booking info GetBookings(null); } @@ -372,12 +379,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco { if (e.Client.IsConnected) { - //LoginMessageReceived.Reset(); + LoginMessageReceived.Reset(5000); } else { SyncState.CodecDisconnected(); PhonebookSyncState.CodecDisconnected(); + + if (PhonebookRefreshTimer != null) + { + PhonebookRefreshTimer.Stop(); + PhonebookRefreshTimer = null; + } + + if (BookingsRefreshTimer != null) + { + BookingsRefreshTimer.Stop(); + BookingsRefreshTimer = null; + } } } @@ -679,6 +698,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco if(codecBookings.CommandResponse.BookingsListResult.ResultInfo.TotalRows.Value != "0") CodecSchedule.Meetings = CiscoCodecBookings.GetGenericMeetingsFromBookingResult(codecBookings.CommandResponse.BookingsListResult.Booking); + BookingsRefreshTimer.Reset(900000, 900000); } } @@ -751,11 +771,28 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco /// Gets the bookings for today /// /// - public void GetBookings(string command) + public void GetBookings(object command) { + Debug.Console(1, this, "Retrieving Booking Info from Codec. Current Time: {0}", DateTime.Now.ToLocalTime()); + SendText("xCommand Bookings List Days: 1 DayOffset: 0"); } + /// + /// Checks to see if it is 2am (or within that hour) and triggers a download of the phonebook + /// + /// + public void CheckCurrentHour(object o) + { + if (DateTime.Now.Hour == 2) + { + Debug.Console(1, this, "Checking hour to see if phonebook should be downloaded. Current hour is {0}", DateTime.Now.Hour); + + GetPhonebook(null); + PhonebookRefreshTimer.Reset(3600000, 3600000); + } + } + /// /// Triggers a refresh of the codec phonebook /// diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs index 78263679..386ce7c9 100644 --- a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs +++ b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs @@ -65,7 +65,7 @@ namespace PepperDash.Essentials.Room.Config var rm = new EssentialsHuddleVtc1Room(Key, Name, disp, codec, codec, props); // Add Occupancy object from config -#warning Add in occupancy object from confic if found and link up device to occupancy feedback +#warning Add in occupancy object from config if found and link up device to occupancy feedback rm.LogoUrl = props.Logo.GetUrl(); rm.SourceListKey = props.SourceListKey; rm.DefaultSourceItem = props.DefaultSourceItem; diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs index f36b7692..3765e437 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs @@ -1040,6 +1040,17 @@ namespace PepperDash.Essentials }); } MeetingOrContactMethodModalSrl.Count = i; + + if (i == 0) // Show item indicating no meetings are booked for rest of day + { + MeetingOrContactMethodModalSrl.Count = 1; + + MeetingOrContactMethodModalSrl.StringInputSig(1, 1).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 2).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 3).StringValue = "No Meetings are booked for the remainder of the day."; + MeetingOrContactMethodModalSrl.StringInputSig(1, 4).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 5).StringValue = string.Empty; + } } /// diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs index 0b9e72e4..bac49df9 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs +++ b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs @@ -61,7 +61,12 @@ namespace PepperDash.Essentials.UIDrivers.VC CodecDirectory CurrentDirectoryResult; - string LastFolderRequestedParentFolderId; + /// + /// Tracks the directory browse history when browsing beyond the root directory + /// + List DirectoryBrowseHistory; + + bool NextDirectoryResultIsFolderContents; BoolFeedback DirectoryBackButtonVisibleFeedback; @@ -467,6 +472,8 @@ namespace PepperDash.Essentials.UIDrivers.VC /// void SetupDirectoryList() { + DirectoryBrowseHistory = new List(); + var codec = Codec as IHasDirectory; if (codec != null) { @@ -498,7 +505,7 @@ namespace PepperDash.Essentials.UIDrivers.VC /// void SetCurrentDirectoryToRoot() { - LastFolderRequestedParentFolderId = string.Empty; + DirectoryBrowseHistory.Clear(); CurrentDirectoryResult = (Codec as IHasDirectory).DirectoryRoot; @@ -533,6 +540,11 @@ namespace PepperDash.Essentials.UIDrivers.VC /// void dir_DirectoryResultReturned(object sender, DirectoryEventArgs e) { + if (NextDirectoryResultIsFolderContents) + { + NextDirectoryResultIsFolderContents = false; + DirectoryBrowseHistory.Add(e.Directory); + } CurrentDirectoryResult = e.Directory; DirectoryBackButtonVisibleFeedback.FireUpdate(); RefreshDirectory(); @@ -544,12 +556,9 @@ namespace PepperDash.Essentials.UIDrivers.VC /// void GetDirectoryFolderContents(DirectoryFolder folder) { - if (!string.IsNullOrEmpty(folder.ParentFolderId)) - LastFolderRequestedParentFolderId = folder.ParentFolderId; - else - LastFolderRequestedParentFolderId = string.Empty; - (Codec as IHasDirectory).GetDirectoryFolderContents(folder.FolderId); + + NextDirectoryResultIsFolderContents = true; } /// @@ -559,14 +568,18 @@ namespace PepperDash.Essentials.UIDrivers.VC { var codec = Codec as IHasDirectory; - if (!string.IsNullOrEmpty(LastFolderRequestedParentFolderId)) - codec.GetDirectoryFolderContents(LastFolderRequestedParentFolderId); + if (DirectoryBrowseHistory.Count > 0) + { + var lastItemIndex = DirectoryBrowseHistory.Count - 1; + CurrentDirectoryResult = DirectoryBrowseHistory[lastItemIndex]; + DirectoryBrowseHistory.Remove(DirectoryBrowseHistory[lastItemIndex]); + + RefreshDirectory(); + } else { SetCurrentDirectoryToRoot(); } - - } /// @@ -709,7 +722,6 @@ namespace PepperDash.Essentials.UIDrivers.VC } } - /// /// ///