mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-10 10:15:01 +00:00
Compare commits
6 Commits
1.9.5-hotf
...
1.9.5-hotf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e64140651 | ||
|
|
0da35c8572 | ||
|
|
9f3a3f64a8 | ||
|
|
fe01842523 | ||
|
|
73e3b049d8 | ||
|
|
0ae38dddfc |
1
.github/scripts/ZipBuildOutput.ps1
vendored
1
.github/scripts/ZipBuildOutput.ps1
vendored
@@ -8,6 +8,7 @@ $destination = "$($Env:GITHUB_HOME)\output"
|
||||
New-Item -ItemType Directory -Force -Path ($destination)
|
||||
Get-ChildItem ($destination)
|
||||
$exclusions = @(git submodule foreach --quiet 'echo $name')
|
||||
$exclusions += "Newtonsoft.Compact.Json.dll"
|
||||
# Trying to get any .json schema files (not currently working)
|
||||
# Gets any files with the listed extensions.
|
||||
Get-ChildItem -recurse -Path "$($Env:GITHUB_WORKSPACE)" -include "*.clz", "*.cpz", "*.cplz", "*.dll", "*.nuspec" | ForEach-Object {
|
||||
|
||||
@@ -195,22 +195,11 @@ namespace PepperDash.Essentials
|
||||
var meetingInfoCodec = codec as IHasMeetingInfo;
|
||||
|
||||
// Set mode of header button
|
||||
if (!codec.IsInCall)
|
||||
{
|
||||
HeaderCallButtonIconSig.StringValue = "DND";
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.OnHook);
|
||||
}
|
||||
else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video))
|
||||
HeaderCallButtonIconSig.StringValue = "Misc-06_Dark";
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.Camera);
|
||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2);
|
||||
else
|
||||
HeaderCallButtonIconSig.StringValue = "Misc-09_Dark";
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.Phone);
|
||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1);
|
||||
SetHeaderCallIcon(codec);
|
||||
|
||||
// Set the call status text
|
||||
Debug.Console(1, "Active Call Count: {0}", codec.ActiveCalls.Count);
|
||||
|
||||
if (codec.ActiveCalls.Count > 0)
|
||||
{
|
||||
if (codec.ActiveCalls.Count == 1 && meetingInfoCodec == null)
|
||||
@@ -218,8 +207,13 @@ namespace PepperDash.Essentials
|
||||
else if (codec.ActiveCalls.Count == 1 && meetingInfoCodec != null)
|
||||
{
|
||||
var headerCallStatusLabel = meetingInfoCodec.MeetingInfo.IsSharingMeeting
|
||||
? "Sharing Active"
|
||||
? "Sharing-Only Meeting"
|
||||
: "Active Meeting";
|
||||
|
||||
headerCallStatusLabel = meetingInfoCodec.MeetingInfo.WaitingForHost
|
||||
? "Waiting For Host"
|
||||
: headerCallStatusLabel;
|
||||
|
||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, headerCallStatusLabel);
|
||||
}
|
||||
else if (codec.ActiveCalls.Count > 1)
|
||||
@@ -229,6 +223,27 @@ namespace PepperDash.Essentials
|
||||
TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls");
|
||||
}
|
||||
|
||||
private void SetHeaderCallIcon(VideoCodecBase codec)
|
||||
{
|
||||
if (!codec.IsInCall)
|
||||
{
|
||||
HeaderCallButtonIconSig.StringValue = "DND";
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.OnHook);
|
||||
}
|
||||
else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video))
|
||||
{
|
||||
HeaderCallButtonIconSig.StringValue = "Misc-06_Dark";
|
||||
}
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.Camera);
|
||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2);
|
||||
else
|
||||
{
|
||||
HeaderCallButtonIconSig.StringValue = "Misc-09_Dark";
|
||||
}
|
||||
//HeaderCallButton.SetIcon(HeaderListButton.Phone);
|
||||
//TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets up Header Buttons for the EssentialsHuddleVtc1Room type
|
||||
/// </summary>
|
||||
|
||||
@@ -9,6 +9,7 @@ using Crestron.SimplSharpPro.UI;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
||||
using PepperDash.Essentials.Core.SmartObjects;
|
||||
using PepperDash.Essentials.Core.PageManagers;
|
||||
using PepperDash.Essentials.Room.Config;
|
||||
@@ -471,85 +472,92 @@ namespace PepperDash.Essentials
|
||||
/// </summary>
|
||||
void ShowNextMeetingTimerCallback()
|
||||
{
|
||||
//Update calendar for Zoom. Zoom doesn't automatically update when meetings are in the past
|
||||
if (_isZoomRoomWithNoExternalSources)
|
||||
{
|
||||
CurrentRoom.ScheduleSource.GetSchedule();
|
||||
}
|
||||
|
||||
// Every 60 seconds, refresh the calendar
|
||||
RefreshMeetingsList();
|
||||
// check meetings list for the closest, joinable meeting
|
||||
var ss = CurrentRoom.ScheduleSource;
|
||||
var meetings = ss.CodecSchedule.Meetings;
|
||||
|
||||
if (meetings.Count > 0)
|
||||
{
|
||||
// If the room is off pester the user
|
||||
// If the room is on, and the meeting is joinable
|
||||
// and the LastMeetingDismissed != this meeting
|
||||
if (meetings.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// If the room is off pester the user
|
||||
// If the room is on, and the meeting is joinable
|
||||
// and the LastMeetingDismissed != this meeting
|
||||
|
||||
var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId);
|
||||
Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*",
|
||||
CurrentRoom.OnFeedback.BoolValue,
|
||||
LastMeetingDismissedId,
|
||||
lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToString("t", Global.Culture) : "");
|
||||
var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId);
|
||||
Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*",
|
||||
CurrentRoom.OnFeedback.BoolValue,
|
||||
LastMeetingDismissedId,
|
||||
lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToString("t", Global.Culture) : "");
|
||||
|
||||
var meeting = meetings.LastOrDefault(m => m.Joinable);
|
||||
if (CurrentRoom.OnFeedback.BoolValue
|
||||
&& lastMeetingDismissed == meeting)
|
||||
{
|
||||
// meeting no longer joinable, hide popup
|
||||
if(meeting == null)
|
||||
HideNextMeetingPopup();
|
||||
var meeting = meetings.LastOrDefault(m => m.Joinable);
|
||||
if (CurrentRoom.OnFeedback.BoolValue
|
||||
&& lastMeetingDismissed == meeting)
|
||||
{
|
||||
// meeting no longer joinable, hide popup
|
||||
if(meeting == null)
|
||||
HideNextMeetingPopup();
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
LastMeetingDismissedId = null;
|
||||
// Clear the popup when we run out of meetings
|
||||
if (meeting == null)
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
}
|
||||
else
|
||||
{
|
||||
LastMeetingDismissedId = null;
|
||||
// Clear the popup when we run out of meetings
|
||||
if (meeting == null)
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting");
|
||||
TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToString("t", Global.Culture));
|
||||
TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToString("t", Global.Culture));
|
||||
TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title);
|
||||
TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer);
|
||||
TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join");
|
||||
TriList.SetSigFalseAction(UIBoolJoin.NextMeetingJoinPress, () =>
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
PopupInterlock.Hide();
|
||||
RoomOnAndDialMeeting(meeting);
|
||||
});
|
||||
TriList.SetString(UIStringJoin.NextMeetingSecondaryButtonLabel, "Show Schedule");
|
||||
TriList.SetSigFalseAction(UIBoolJoin.CalendarHeaderButtonPress, () =>
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
//CalendarPress();
|
||||
RefreshMeetingsList();
|
||||
PopupInterlock.ShowInterlocked(UIBoolJoin.MeetingsOrContacMethodsListVisible);
|
||||
});
|
||||
var indexOfNext = meetings.IndexOf(meeting) + 1;
|
||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting");
|
||||
TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToString("t", Global.Culture));
|
||||
TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToString("t", Global.Culture));
|
||||
TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title);
|
||||
TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer);
|
||||
TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join");
|
||||
TriList.SetSigFalseAction(UIBoolJoin.NextMeetingJoinPress, () =>
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
PopupInterlock.Hide();
|
||||
RoomOnAndDialMeeting(meeting);
|
||||
});
|
||||
TriList.SetString(UIStringJoin.NextMeetingSecondaryButtonLabel, "Show Schedule");
|
||||
TriList.SetSigFalseAction(UIBoolJoin.CalendarHeaderButtonPress, () =>
|
||||
{
|
||||
HideNextMeetingPopup();
|
||||
//CalendarPress();
|
||||
RefreshMeetingsList();
|
||||
PopupInterlock.ShowInterlocked(UIBoolJoin.MeetingsOrContacMethodsListVisible);
|
||||
});
|
||||
var indexOfNext = meetings.IndexOf(meeting) + 1;
|
||||
|
||||
// indexOf = 3, 4 meetings :
|
||||
if (indexOfNext < meetings.Count)
|
||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText,
|
||||
meetings[indexOfNext].StartTime.ToString("t", Global.Culture));
|
||||
else
|
||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today");
|
||||
// indexOf = 3, 4 meetings :
|
||||
if (indexOfNext < meetings.Count)
|
||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText,
|
||||
meetings[indexOfNext].StartTime.ToString("t", Global.Culture));
|
||||
else
|
||||
TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today");
|
||||
|
||||
TriList.SetSigFalseAction(UIBoolJoin.NextMeetingModalClosePress, () =>
|
||||
{
|
||||
// Mark the meeting to not re-harass the user
|
||||
if(CurrentRoom.OnFeedback.BoolValue)
|
||||
LastMeetingDismissedId = meeting.Id;
|
||||
HideNextMeetingPopup();
|
||||
});
|
||||
TriList.SetSigFalseAction(UIBoolJoin.NextMeetingModalClosePress, () =>
|
||||
{
|
||||
// Mark the meeting to not re-harass the user
|
||||
if(CurrentRoom.OnFeedback.BoolValue)
|
||||
LastMeetingDismissedId = meeting.Id;
|
||||
HideNextMeetingPopup();
|
||||
});
|
||||
|
||||
TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true);
|
||||
}
|
||||
}
|
||||
TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -575,19 +583,26 @@ namespace PepperDash.Essentials
|
||||
/// </summary>
|
||||
void RoomOnAndDialMeeting(Meeting meeting)
|
||||
{
|
||||
Debug.Console(1, "[RoomOnAndDialMeeting] Joining meeting [{0}]", meeting);
|
||||
Action dialAction = () =>
|
||||
{
|
||||
var d = CurrentRoom.ScheduleSource as VideoCodecBase;
|
||||
if (d != null)
|
||||
{
|
||||
Debug.Console(1,
|
||||
"[RoomOnAndDialMeeting] [dialAction] Sending command to codec to join meeting {0}", meeting);
|
||||
d.Dial(meeting);
|
||||
LastMeetingDismissedId = meeting.Id; // To prevent prompts for already-joined call
|
||||
}
|
||||
};
|
||||
if (CurrentRoom.OnFeedback.BoolValue)
|
||||
dialAction();
|
||||
if (CurrentRoom.OnFeedback.BoolValue)
|
||||
{
|
||||
Debug.Console(1, "[RoomOnAndDialMeeting] Room is on.");
|
||||
dialAction();
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
Debug.Console(1, "RoomOnAndDialMeeting] Room is off or warming. Registering for Warming Feedback");
|
||||
// Rig a one-time handler to catch when the room is warmed and then dial call
|
||||
EventHandler<FeedbackEventArgs> oneTimeHandler = null;
|
||||
oneTimeHandler = (o, a) =>
|
||||
@@ -716,16 +731,31 @@ namespace PepperDash.Essentials
|
||||
|
||||
if (_isZoomRoomWithNoExternalSources)
|
||||
{
|
||||
CurrentRoom.RunDefaultPresentRoute();
|
||||
if (!CurrentRoom.OnFeedback.BoolValue)
|
||||
{
|
||||
CurrentRoom.RunDefaultPresentRoute();
|
||||
}
|
||||
// For now, if this is a Zoom Room and there are no shareable sources just display the informational subpage
|
||||
TriList.SetBool(UIBoolJoin.ZoomRoomContentSharingVisible, true);
|
||||
|
||||
var presentationMeetingCodec = CurrentRoom.VideoCodec as IHasPresentationOnlyMeeting;
|
||||
var farEndContentStatusCodec = CurrentRoom.VideoCodec as IHasFarEndContentStatus;
|
||||
var receivingContent = false;
|
||||
|
||||
if (farEndContentStatusCodec != null)
|
||||
{
|
||||
receivingContent = farEndContentStatusCodec.ReceivingContent.BoolValue;
|
||||
}
|
||||
|
||||
if (presentationMeetingCodec != null && !CurrentRoom.VideoCodec.IsInCall)
|
||||
{
|
||||
presentationMeetingCodec.StartSharingOnlyMeeting(eSharingMeetingMode.Laptop);
|
||||
}
|
||||
else if (CurrentRoom.VideoCodec.IsInCall && !CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue &&
|
||||
!receivingContent)
|
||||
{
|
||||
CurrentRoom.VideoCodec.StartSharing();
|
||||
}
|
||||
|
||||
if (CurrentSourcePageManager != null)
|
||||
CurrentSourcePageManager.Hide();
|
||||
@@ -741,7 +771,9 @@ namespace PepperDash.Essentials
|
||||
}
|
||||
else // room is on show what's active or select a source if nothing is yet active
|
||||
{
|
||||
if (CurrentRoom.CurrentSourceInfo == null || (CurrentRoom.VideoCodec != null && CurrentRoom.CurrentSourceInfo.SourceDevice.Key == CurrentRoom.VideoCodec.OsdSource.Key))
|
||||
if (CurrentRoom.CurrentSourceInfo == null ||
|
||||
(CurrentRoom.VideoCodec != null &&
|
||||
CurrentRoom.CurrentSourceInfo.SourceDevice.Key == CurrentRoom.VideoCodec.OsdSource.Key))
|
||||
TriList.SetBool(UIBoolJoin.SelectASourceVisible, true);
|
||||
else if (CurrentSourcePageManager != null)
|
||||
{
|
||||
@@ -1086,13 +1118,18 @@ namespace PepperDash.Essentials
|
||||
|
||||
void meetingInfoCodec_MeetingInfoChanged(object sender, MeetingInfoEventArgs e)
|
||||
{
|
||||
if (e.Info == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
TriList.SetString(UIStringJoin.MeetingIdText, e.Info.Id);
|
||||
TriList.SetString(UIStringJoin.MeetingHostText, e.Info.Host);
|
||||
TriList.SetString(UIStringJoin.MeetingNameText, e.Info.Name);
|
||||
|
||||
TriList.SetString(UIStringJoin.MeetingPasswordText, e.Info.Password);
|
||||
// Show the password fields if one is present
|
||||
TriList.SetBool(UIBoolJoin.MeetingPasswordVisible, string.IsNullOrEmpty(e.Info.Password) ? false : true);
|
||||
TriList.SetBool(UIBoolJoin.MeetingPasswordVisible, !string.IsNullOrEmpty(e.Info.Password));
|
||||
|
||||
TriList.SetString(UIStringJoin.CallSharedSourceNameText, e.Info.ShareStatus);
|
||||
|
||||
@@ -1302,9 +1339,8 @@ namespace PepperDash.Essentials
|
||||
{
|
||||
// See if this is helpful or if the callback response in the codec class maybe doesn't come it time?
|
||||
// Let's build list from event
|
||||
// CurrentRoom.ScheduleSource.GetSchedule();
|
||||
|
||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar");
|
||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar");
|
||||
TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings");
|
||||
|
||||
ushort i = 0;
|
||||
|
||||
@@ -327,20 +327,14 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
{
|
||||
case eCodecCallStatus.Connected:
|
||||
// fire at SRL item
|
||||
HidePasswordPrompt();
|
||||
KeypadMode = eKeypadMode.DTMF;
|
||||
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
||||
DialStringFeedback.FireUpdate();
|
||||
DialStringTextCheckEnables();
|
||||
Parent.ShowNotificationRibbon("Connected", 2000);
|
||||
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||
ShowKeypad();
|
||||
((Parent.CurrentRoom as IHasCurrentVolumeControls).CurrentVolumeControls as IBasicVolumeWithFeedback).MuteOff();
|
||||
OnCallConnected();
|
||||
//VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
||||
break;
|
||||
case eCodecCallStatus.Connecting:
|
||||
// fire at SRL item
|
||||
Parent.ShowNotificationRibbon("Connecting", 0);
|
||||
OnCallConnected();
|
||||
break;
|
||||
case eCodecCallStatus.Dialing:
|
||||
Parent.ShowNotificationRibbon("Connecting", 0);
|
||||
@@ -417,6 +411,36 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
UpdateHeaderActiveCallList();
|
||||
}
|
||||
|
||||
private void OnCallConnected()
|
||||
{
|
||||
HidePasswordPrompt();
|
||||
KeypadMode = eKeypadMode.DTMF;
|
||||
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
||||
DialStringFeedback.FireUpdate();
|
||||
DialStringTextCheckEnables();
|
||||
|
||||
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||
ShowKeypad();
|
||||
|
||||
UnmuteRoomOnCallConnect();
|
||||
}
|
||||
|
||||
private void UnmuteRoomOnCallConnect()
|
||||
{
|
||||
var volControl = Parent.CurrentRoom as IHasCurrentVolumeControls;
|
||||
|
||||
if (volControl == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var currentVolControls = volControl.CurrentVolumeControls as IBasicVolumeWithFeedback;
|
||||
|
||||
if (currentVolControls != null)
|
||||
{
|
||||
currentVolControls.MuteOff();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redraws the calls list on the header
|
||||
/// </summary>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<tags>crestron 3series 4series</tags>
|
||||
<repository type="git" url="https://github.com/PepperDash/Essentials"/>
|
||||
<dependencies>
|
||||
<dependency id="PepperDashCore" version="[1.0.45, 1.1.0)"/>
|
||||
<dependency id="PepperDashCore" version="[1.0.45, 2.0.0)"/>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
|
||||
@@ -235,6 +235,15 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
Calls = new List<Call>();
|
||||
}
|
||||
|
||||
#region Overrides of Object
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("{0}:{1}: {2}-{3}", Title, Agenda, StartTime, EndTime);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class Call
|
||||
|
||||
@@ -38,8 +38,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
||||
public Boolean IsHost { get; private set; }
|
||||
[JsonProperty("isSharingMeeting")]
|
||||
public Boolean IsSharingMeeting { get; private set; }
|
||||
[JsonProperty("waitingForHost")]
|
||||
public Boolean WaitingForHost { get; private set; }
|
||||
|
||||
public MeetingInfo(string id, string name, string host, string password, string shareStatus, bool isHost, bool isSharingMeeting)
|
||||
public MeetingInfo(string id, string name, string host, string password, string shareStatus, bool isHost, bool isSharingMeeting, bool waitingForHost)
|
||||
{
|
||||
Id = id;
|
||||
Name = name;
|
||||
@@ -48,6 +50,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
||||
ShareStatus = shareStatus;
|
||||
IsHost = isHost;
|
||||
IsSharingMeeting = isSharingMeeting;
|
||||
WaitingForHost = waitingForHost;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
public List<zStatus.AudioVideoInputOutputLineItem> AudioOuputs { get; set; }
|
||||
public List<zStatus.AudioVideoInputOutputLineItem> Cameras { get; set; }
|
||||
public zEvent.PhoneCallStatus PhoneCall { get; set; }
|
||||
public zEvent.NeedWaitForHost NeedWaitForHost { get; set; }
|
||||
|
||||
public ZoomRoomStatus()
|
||||
{
|
||||
@@ -76,6 +77,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
AudioOuputs = new List<zStatus.AudioVideoInputOutputLineItem>();
|
||||
Cameras = new List<zStatus.AudioVideoInputOutputLineItem>();
|
||||
PhoneCall = new zEvent.PhoneCallStatus();
|
||||
NeedWaitForHost = new zEvent.NeedWaitForHost();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1475,6 +1477,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
public static List<Participant> GetGenericParticipantListFromParticipantsResult(
|
||||
List<ListParticipant> participants)
|
||||
{
|
||||
if (participants.Count == 0)
|
||||
{
|
||||
return new List<Participant>();
|
||||
}
|
||||
//return participants.Select(p => new Participant
|
||||
// {
|
||||
// UserId = p.UserId,
|
||||
|
||||
@@ -112,6 +112,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
|
||||
|
||||
if (_props.MinutesBeforeMeetingStart > 0)
|
||||
{
|
||||
CodecSchedule.MeetingWarningMinutes = _props.MinutesBeforeMeetingStart;
|
||||
}
|
||||
|
||||
ReceivingContent = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
|
||||
|
||||
SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc);
|
||||
@@ -494,19 +499,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
{
|
||||
var sharingStatus = GetSharingStatus();
|
||||
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", sharingStatus, GetIsHostMyself(), true);
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", sharingStatus, GetIsHostMyself(), true, false);
|
||||
return;
|
||||
}
|
||||
|
||||
var meetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, Participants.Host != null ? Participants.Host.Name : "None",
|
||||
MeetingInfo.Password, GetSharingStatus(), GetIsHostMyself(), MeetingInfo.IsSharingMeeting);
|
||||
MeetingInfo.Password, GetSharingStatus(), GetIsHostMyself(), MeetingInfo.IsSharingMeeting, MeetingInfo.WaitingForHost);
|
||||
MeetingInfo = meetingInfo;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(1, this, "Error processing state property update. {0}", e.Message);
|
||||
Debug.Console(2, this, e.StackTrace);
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", "None", false, false);
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", "None", false, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -651,13 +656,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
{
|
||||
Debug.Console(2, this, "Updating sharing status: {0}", a.PropertyName);
|
||||
|
||||
SharingContentIsOnFeedback.FireUpdate();
|
||||
if (MeetingInfo == null)
|
||||
{
|
||||
//Ignoring for now, as the CallInfo return will create the appropriate value
|
||||
return;
|
||||
}
|
||||
// Update the share status of the meeting info
|
||||
var meetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, MeetingInfo.Host, MeetingInfo.Password, GetSharingStatus(), GetIsHostMyself(), MeetingInfo.IsSharingMeeting);
|
||||
var meetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, MeetingInfo.Host, MeetingInfo.Password, GetSharingStatus(), GetIsHostMyself(), MeetingInfo.IsSharingMeeting, MeetingInfo.WaitingForHost);
|
||||
MeetingInfo = meetingInfo;
|
||||
break;
|
||||
}
|
||||
@@ -1229,7 +1235,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
Participants.CurrentParticipants = participants;
|
||||
|
||||
// Update the share status of the meeting info
|
||||
var meetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, Participants.Host.Name, MeetingInfo.Password, MeetingInfo.ShareStatus, GetIsHostMyself(), MeetingInfo.IsSharingMeeting);
|
||||
var meetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, Participants.Host.Name, MeetingInfo.Password, MeetingInfo.ShareStatus, GetIsHostMyself(), MeetingInfo.IsSharingMeeting, MeetingInfo.WaitingForHost);
|
||||
MeetingInfo = meetingInfo;
|
||||
|
||||
PrintCurrentCallParticipants();
|
||||
@@ -1424,15 +1430,40 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
}
|
||||
case "needwaitforhost":
|
||||
{
|
||||
var needWait =
|
||||
JsonConvert.DeserializeObject<zEvent.NeedWaitForHost>(responseObj.ToString());
|
||||
Status.NeedWaitForHost = JsonConvert.DeserializeObject<zEvent.NeedWaitForHost>(responseObj.ToString());
|
||||
|
||||
if (needWait.Wait)
|
||||
{
|
||||
// TODO: notify user to wait for host
|
||||
}
|
||||
Debug.Console(1, this, "NeedWaitForHost: {0}", Status.NeedWaitForHost.Wait);
|
||||
|
||||
break;
|
||||
if (Status.NeedWaitForHost.Wait)
|
||||
{
|
||||
if (MeetingInfo == null)
|
||||
{
|
||||
MeetingInfo = new MeetingInfo("Waiting For Host", "Waiting For Host", "Waiting For Host", "",
|
||||
GetSharingStatus(), false, false, true);
|
||||
|
||||
UpdateCallStatus();
|
||||
break;
|
||||
}
|
||||
|
||||
MeetingInfo = new MeetingInfo("Waiting For Host", "Waiting For Host", "Waiting For Host", "",
|
||||
GetSharingStatus(), false, false, true);
|
||||
|
||||
UpdateCallStatus();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (MeetingInfo == null)
|
||||
{
|
||||
MeetingInfo = new MeetingInfo("Waiting For Host", "Waiting For Host", "Waiting For Host", "",
|
||||
GetSharingStatus(), false, false, false);
|
||||
break;
|
||||
}
|
||||
|
||||
MeetingInfo = new MeetingInfo(MeetingInfo.Id, MeetingInfo.Name, MeetingInfo.Host, MeetingInfo.Password,
|
||||
GetSharingStatus(), GetIsHostMyself(), false, false);
|
||||
|
||||
break;
|
||||
}
|
||||
case "openvideofailforhoststop":
|
||||
{
|
||||
@@ -1514,7 +1545,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
if (result.Success)
|
||||
{
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", "", true, true);
|
||||
MeetingInfo = new MeetingInfo("", "", "", "", "", true, true, MeetingInfo.WaitingForHost);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1704,8 +1735,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
/// </summary>
|
||||
private void UpdateCallStatus()
|
||||
{
|
||||
Debug.Console(1, this, "[UpdateCallStatus] Current Call Status: {0}",
|
||||
Status.Call != null ? Status.Call.Status.ToString() : "no call");
|
||||
Debug.Console(1, this,
|
||||
"[UpdateCallStatus] Current Call Status: {0} Active Call Count: {1} Need Wait For Host: {2}",
|
||||
Status.Call != null ? Status.Call.Status.ToString() : "no call", ActiveCalls.Count, Status.NeedWaitForHost.Wait);
|
||||
|
||||
if (Status.Call != null)
|
||||
{
|
||||
@@ -1750,17 +1782,32 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
Type = eCodecCallType.Video,
|
||||
};
|
||||
|
||||
if (!String.IsNullOrEmpty(_lastDialedMeetingNumber))
|
||||
{
|
||||
_lastDialedMeetingNumber = String.Empty;
|
||||
}
|
||||
ActiveCalls.Add(newCall);
|
||||
|
||||
//Debug.Console(1, this, "[UpdateCallStatus] IF w/ meeting_id AcitveCalls.Count == {1} - Current Call Status: {0}",
|
||||
//Status.Call != null ? Status.Call.Status.ToString() : "no call", ActiveCalls.Count);
|
||||
|
||||
OnCallStatusChange(newCall);
|
||||
}
|
||||
else
|
||||
} else if (String.IsNullOrEmpty(Status.Call.Info.meeting_id) && Status.NeedWaitForHost.Wait)
|
||||
{
|
||||
//Debug.Console(1, this, "[UpdateCallStatus] IF w/o meeting_id AcitveCalls.Count == {1} - Current Call Status: {0}",
|
||||
//Status.Call != null ? Status.Call.Status.ToString() : "no call", ActiveCalls.Count);
|
||||
var newCall = new CodecActiveCallItem
|
||||
{
|
||||
Name = "Waiting For Host",
|
||||
Number = "Waiting For Host",
|
||||
Id = "Waiting For Host",
|
||||
Status = newStatus,
|
||||
Type = eCodecCallType.Video,
|
||||
};
|
||||
|
||||
if (!String.IsNullOrEmpty(_lastDialedMeetingNumber))
|
||||
{
|
||||
_lastDialedMeetingNumber = String.Empty;
|
||||
}
|
||||
|
||||
ActiveCalls.Add(newCall);
|
||||
|
||||
OnCallStatusChange(newCall);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1771,15 +1818,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
switch (callStatus)
|
||||
{
|
||||
case zStatus.eCallStatus.IN_MEETING:
|
||||
if (Status.NeedWaitForHost.Wait)
|
||||
{
|
||||
Status.NeedWaitForHost.Wait = false;
|
||||
}
|
||||
existingCall.Status = eCodecCallStatus.Connected;
|
||||
break;
|
||||
case zStatus.eCallStatus.NOT_IN_MEETING:
|
||||
if (Status.NeedWaitForHost.Wait)
|
||||
{
|
||||
Status.NeedWaitForHost.Wait = false;
|
||||
}
|
||||
existingCall.Status = eCodecCallStatus.Disconnected;
|
||||
break;
|
||||
}
|
||||
|
||||
Debug.Console(1, this, "[UpdateCallStatus] ELSE ActiveCalls.Count == {1} - Current Call Status: {0}",
|
||||
Status.Call != null ? Status.Call.Status.ToString() : "no call", ActiveCalls.Count);
|
||||
|
||||
|
||||
OnCallStatusChange(existingCall);
|
||||
}
|
||||
@@ -1833,7 +1889,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
Status.Call.Info.meeting_password,
|
||||
GetSharingStatus(),
|
||||
GetIsHostMyself(),
|
||||
!String.Equals(Status.Call.Info.meeting_type,"NORMAL")
|
||||
!String.Equals(Status.Call.Info.meeting_type,"NORMAL"),
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1923,7 +1980,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
/// </summary>
|
||||
public override void StopSharing()
|
||||
{
|
||||
SendText("zCommand Call Sharing Disconnect");
|
||||
if (Status.Sharing.isSharingBlackMagic)
|
||||
{
|
||||
SendText("zCommand Call Sharing HDMI Stop");
|
||||
}
|
||||
else
|
||||
{
|
||||
SendText("zCommand Call Sharing Disconnect");
|
||||
}
|
||||
}
|
||||
|
||||
public override void PrivacyModeOn()
|
||||
|
||||
@@ -25,5 +25,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
//This layout will be selected when a call is connected and no content is being shared
|
||||
public string DefaultCallLayout { get; set; }
|
||||
|
||||
public int MinutesBeforeMeetingStart { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user