mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-31 13:25:00 +00:00
Merge pull request #803 from PepperDash/hotfix/add-IPasswordPrompt
Hotfix/add i password prompt
This commit is contained in:
@@ -948,5 +948,24 @@ namespace PepperDash.Essentials
|
||||
/// 15214
|
||||
/// </summary>
|
||||
public const uint PinDialogDot4 = 15214;
|
||||
|
||||
// Password Prompt Dialog **************************
|
||||
|
||||
/// <summary>
|
||||
/// 15301
|
||||
/// </summary>
|
||||
public const uint PasswordPromptDialogVisible = 15301;
|
||||
/// <summary>
|
||||
/// 15302
|
||||
/// </summary>
|
||||
public const uint PasswordPromptTextPress = 15302;
|
||||
/// <summary>
|
||||
/// 15306
|
||||
/// </summary>
|
||||
public const uint PasswordPromptCancelPress = 15306;
|
||||
/// <summary>
|
||||
/// 15307
|
||||
/// </summary>
|
||||
public const uint PasswordPromptErrorVisible = 15307;
|
||||
}
|
||||
}
|
||||
@@ -118,6 +118,14 @@ namespace PepperDash.Essentials
|
||||
|
||||
//----- through 3120
|
||||
|
||||
/// <summary>
|
||||
/// 3201
|
||||
/// </summary>
|
||||
public const uint PasswordPromptMessageText = 3201;
|
||||
/// <summary>
|
||||
/// 3202
|
||||
/// </summary>
|
||||
public const uint PasswordPromptPasswordText = 3202;
|
||||
|
||||
/// <summary>
|
||||
/// 3812
|
||||
|
||||
@@ -83,6 +83,9 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
StringBuilder SearchStringBuilder = new StringBuilder();
|
||||
BoolFeedback SearchStringBackspaceVisibleFeedback;
|
||||
|
||||
StringFeedback PasswordStringFeedback;
|
||||
StringBuilder PasswordStringBuilder = new StringBuilder();
|
||||
|
||||
ModalDialog IncomingCallModal;
|
||||
|
||||
eKeypadMode KeypadMode;
|
||||
@@ -180,8 +183,22 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
});
|
||||
SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]);
|
||||
|
||||
SetupDirectoryList();
|
||||
PasswordStringFeedback = new StringFeedback(() =>
|
||||
{
|
||||
if (PasswordStringBuilder.Length > 0)
|
||||
{
|
||||
Parent.Keyboard.EnableGoButton();
|
||||
return PasswordStringBuilder.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
Parent.Keyboard.DisableGoButton();
|
||||
return "";
|
||||
}
|
||||
});
|
||||
PasswordStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.PasswordPromptPasswordText]);
|
||||
|
||||
SetupDirectoryList();
|
||||
|
||||
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
|
||||
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
|
||||
@@ -199,6 +216,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
|
||||
StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
|
||||
|
||||
|
||||
if (Codec is IPasswordPrompt)
|
||||
{
|
||||
SetupPasswordPrompt();
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -299,6 +322,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
{
|
||||
case eCodecCallStatus.Connected:
|
||||
// fire at SRL item
|
||||
HidePasswordPrompt();
|
||||
KeypadMode = eKeypadMode.DTMF;
|
||||
DialStringBuilder.Remove(0, DialStringBuilder.Length);
|
||||
DialStringFeedback.FireUpdate();
|
||||
@@ -1328,7 +1352,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
/// </summary>
|
||||
void RevealKeyboard()
|
||||
{
|
||||
if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
|
||||
if (_passwordPromptDialogVisible)
|
||||
{
|
||||
Debug.Console(2, "Attaching Keyboard to PasswordPromptDialog");
|
||||
DetachDialKeyboard();
|
||||
DetachSearchKeyboard();
|
||||
var kb = Parent.Keyboard;
|
||||
kb.KeyPress -= Keyboard_PasswordKeyPress;
|
||||
kb.KeyPress += Keyboard_PasswordKeyPress;
|
||||
kb.HideAction = this.DetachPasswordKeyboard;
|
||||
kb.GoButtonText = "Submit";
|
||||
kb.GoButtonVisible = true;
|
||||
PasswordStringCheckEnables();
|
||||
kb.Show();
|
||||
}
|
||||
else if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial)
|
||||
{
|
||||
var kb = Parent.Keyboard;
|
||||
kb.KeyPress -= Keyboard_DialKeyPress;
|
||||
@@ -1350,6 +1388,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
SearchStringKeypadCheckEnables();
|
||||
kb.Show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1405,6 +1444,32 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event handler for keyboard dialing
|
||||
/// </summary>
|
||||
void Keyboard_PasswordKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e)
|
||||
{
|
||||
if (_passwordPromptDialogVisible)
|
||||
{
|
||||
if (e.Text != null)
|
||||
PasswordStringBuilder.Append(e.Text);
|
||||
else
|
||||
{
|
||||
if (e.SpecialKey == KeyboardSpecialKey.Backspace)
|
||||
PasswordKeypadBackspacePress();
|
||||
else if (e.SpecialKey == KeyboardSpecialKey.Clear)
|
||||
PasswordKeypadClear();
|
||||
else if (e.SpecialKey == KeyboardSpecialKey.GoButton)
|
||||
{
|
||||
(Codec as IPasswordPrompt).SubmitPassword(PasswordStringBuilder.ToString());
|
||||
HidePasswordPrompt();
|
||||
}
|
||||
}
|
||||
PasswordStringFeedback.FireUpdate();
|
||||
PasswordStringCheckEnables();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call
|
||||
/// </summary>
|
||||
@@ -1418,6 +1483,11 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress;
|
||||
}
|
||||
|
||||
void DetachPasswordKeyboard()
|
||||
{
|
||||
Parent.Keyboard.KeyPress -= Keyboard_PasswordKeyPress;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shows the camera controls subpage
|
||||
/// </summary>
|
||||
@@ -1671,6 +1741,40 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
Parent.Keyboard.DisableGoButton();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the Password keypad
|
||||
/// </summary>
|
||||
void PasswordKeypadClear()
|
||||
{
|
||||
PasswordStringBuilder.Remove(0, SearchStringBuilder.Length);
|
||||
PasswordStringFeedback.FireUpdate();
|
||||
PasswordStringCheckEnables();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
void PasswordKeypadBackspacePress()
|
||||
{
|
||||
PasswordStringBuilder.Remove(PasswordStringBuilder.Length - 1, 1);
|
||||
|
||||
PasswordStringFeedback.FireUpdate();
|
||||
PasswordStringCheckEnables();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks the enabled states of various elements around the keypad
|
||||
/// </summary>
|
||||
void PasswordStringCheckEnables()
|
||||
{
|
||||
var textIsEntered = PasswordStringBuilder.Length > 0;
|
||||
if (textIsEntered)
|
||||
Parent.Keyboard.EnableGoButton();
|
||||
else
|
||||
Parent.Keyboard.DisableGoButton();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Returns the text value for the keypad dial entry field
|
||||
@@ -1716,5 +1820,61 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
||||
Dial = 0,
|
||||
DTMF
|
||||
}
|
||||
|
||||
void SetupPasswordPrompt()
|
||||
{
|
||||
var passwordPromptCodec = Codec as IPasswordPrompt;
|
||||
|
||||
passwordPromptCodec.PasswordRequired += new EventHandler<PasswordPromptEventArgs>(passwordPromptCodec_PasswordRequired);
|
||||
|
||||
TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptCancelPress, HidePasswordPrompt);
|
||||
TriList.SetSigFalseAction(UIBoolJoin.PasswordPromptTextPress, RevealKeyboard);
|
||||
}
|
||||
|
||||
void passwordPromptCodec_PasswordRequired(object sender, PasswordPromptEventArgs e)
|
||||
{
|
||||
if (e.LoginAttemptCancelled)
|
||||
{
|
||||
HidePasswordPrompt();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(e.Message))
|
||||
{
|
||||
TriList.SetString(UIStringJoin.PasswordPromptMessageText, e.Message);
|
||||
}
|
||||
|
||||
if (e.LoginAttemptFailed)
|
||||
{
|
||||
// TODO: Show a message modal to indicate the login attempt failed
|
||||
return;
|
||||
}
|
||||
|
||||
TriList.SetBool(UIBoolJoin.PasswordPromptErrorVisible, e.LastAttemptWasIncorrect);
|
||||
|
||||
ShowPasswordPrompt();
|
||||
}
|
||||
|
||||
private bool _passwordPromptDialogVisible;
|
||||
|
||||
void ShowPasswordPrompt()
|
||||
{
|
||||
// Clear out any previous data
|
||||
PasswordKeypadClear();
|
||||
|
||||
_passwordPromptDialogVisible = true;
|
||||
TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
|
||||
RevealKeyboard();
|
||||
}
|
||||
|
||||
void HidePasswordPrompt()
|
||||
{
|
||||
if (_passwordPromptDialogVisible)
|
||||
{
|
||||
_passwordPromptDialogVisible = false;
|
||||
Parent.Keyboard.Hide();
|
||||
TriList.SetBool(UIBoolJoin.PasswordPromptDialogVisible, _passwordPromptDialogVisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes the functionality required to prompt a user to enter a password
|
||||
/// </summary>
|
||||
public interface IPasswordPrompt
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifies when a password is required or is entered incorrectly
|
||||
/// </summary>
|
||||
event EventHandler<PasswordPromptEventArgs> PasswordRequired;
|
||||
|
||||
/// <summary>
|
||||
/// Submits the password
|
||||
/// </summary>
|
||||
/// <param name="password"></param>
|
||||
void SubmitPassword(string password);
|
||||
}
|
||||
|
||||
public class PasswordPromptEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Indicates if the last submitted password was incorrect
|
||||
/// </summary>
|
||||
public bool LastAttemptWasIncorrect { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates that the login attempt has failed
|
||||
/// </summary>
|
||||
public bool LoginAttemptFailed { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates that the process was cancelled and the prompt should be dismissed
|
||||
/// </summary>
|
||||
public bool LoginAttemptCancelled { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// A message to be displayed to the user
|
||||
/// </summary>
|
||||
public string Message { get; private set; }
|
||||
|
||||
public PasswordPromptEventArgs(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message)
|
||||
{
|
||||
LastAttemptWasIncorrect = lastAttemptIncorrect;
|
||||
LoginAttemptFailed = loginFailed;
|
||||
LoginAttemptCancelled = loginCancelled;
|
||||
Message = message;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -203,6 +203,7 @@
|
||||
<Compile Include="Devices\PC\Laptop.cs" />
|
||||
<Compile Include="Devices\ReconfigurableDevice.cs" />
|
||||
<Compile Include="Devices\VolumeDeviceChangeEventArgs.cs" />
|
||||
<Compile Include="DeviceTypeInterfaces\IPasswordPrompt.cs" />
|
||||
<Compile Include="DeviceTypeInterfaces\ITvPresetsProvider.cs" />
|
||||
<Compile Include="DeviceTypeInterfaces\LanguageLabel.cs" />
|
||||
<Compile Include="DeviceTypeInterfaces\ILanguageProvider.cs" />
|
||||
|
||||
@@ -160,7 +160,19 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
/// </summary>
|
||||
public interface IInvitableContact
|
||||
{
|
||||
bool IsInvitableContact { get; }
|
||||
}
|
||||
|
||||
public class InvitableDirectoryContact : DirectoryContact, IInvitableContact
|
||||
{
|
||||
[JsonProperty("isInvitableContact")]
|
||||
public bool IsInvitableContact
|
||||
{
|
||||
get
|
||||
{
|
||||
return this is IInvitableContact;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -209,8 +221,6 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
[JsonProperty("title")]
|
||||
public string Title { get; set; }
|
||||
|
||||
|
||||
|
||||
[JsonProperty("contactMethods")]
|
||||
public List<ContactMethod> ContactMethods { get; set; }
|
||||
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
<Compile Include="VideoCodec\Interfaces\IHasParticipants.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IHasSelfviewPosition.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IHasSelfviewSize.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IHasStartMeeting.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\iVideoCodecInfo.cs" />
|
||||
<Compile Include="Codec\iHasCallFavorites.cs" />
|
||||
<Compile Include="Codec\iHasCallHistory.cs" />
|
||||
|
||||
@@ -736,6 +736,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends the delimiter and send the command to the codec
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
public void SendText(string command)
|
||||
{
|
||||
if (CommDebuggingIsOn)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes the ability to start an ad-hoc meeting
|
||||
/// </summary>
|
||||
public interface IHasStartMeeting
|
||||
{
|
||||
/// <summary>
|
||||
/// The default meeting duration in minutes
|
||||
/// </summary>
|
||||
uint DefaultMeetingDurationMin { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Start an ad-hoc meeting for the specified duration
|
||||
/// </summary>
|
||||
/// <param name="duration"></param>
|
||||
void StartMeeting(uint duration);
|
||||
}
|
||||
}
|
||||
@@ -236,14 +236,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to be able to inplement IInvitableContact on DirectoryContact
|
||||
/// </summary>
|
||||
public class ZoomDirectoryContact : DirectoryContact, IInvitableContact
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class Phonebook
|
||||
{
|
||||
[JsonProperty("Contacts")]
|
||||
@@ -302,7 +294,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
foreach (Contact c in zoomContacts)
|
||||
{
|
||||
var contact = new ZoomDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
|
||||
var contact = new InvitableDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
|
||||
|
||||
contact.ContactMethods.Add(new ContactMethod() { Number = c.Jid, Device = eContactMethodDevice.Video, CallType = eContactMethodCallType.Video, ContactMethodId = c.Jid });
|
||||
|
||||
@@ -927,6 +919,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
PhoneCallStatus_InCall,
|
||||
PhoneCallStatus_Init,
|
||||
}
|
||||
|
||||
public class MeetingNeedsPassword
|
||||
{
|
||||
[JsonProperty("needsPassword")]
|
||||
public bool NeedsPassword { get; set; }
|
||||
|
||||
[JsonProperty("wrongAndRetry")]
|
||||
public bool WrongAndRetry { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -25,10 +25,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
IRouting,
|
||||
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
|
||||
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing, IHasZoomRoomLayouts, IHasParticipantPinUnpin,
|
||||
IHasParticipantAudioMute, IHasSelfviewSize
|
||||
IHasParticipantAudioMute, IHasSelfviewSize, IPasswordPrompt, IHasStartMeeting
|
||||
{
|
||||
private const long MeetingRefreshTimer = 60000;
|
||||
private const uint DefaultMeetingDurationMin = 30;
|
||||
public uint DefaultMeetingDurationMin { get; private set; }
|
||||
|
||||
private const string Delimiter = "\x0D\x0A";
|
||||
|
||||
private readonly GenericQueue _receiveQueue;
|
||||
@@ -45,12 +46,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
private StringBuilder _jsonMessage;
|
||||
private int _previousVolumeLevel;
|
||||
private CameraBase _selectedCamera;
|
||||
private string _lastDialedMeetingNumber;
|
||||
|
||||
private readonly ZoomRoomPropertiesConfig _props;
|
||||
|
||||
public ZoomRoom(DeviceConfig config, IBasicCommunication comm)
|
||||
: base(config)
|
||||
{
|
||||
DefaultMeetingDurationMin = 30;
|
||||
|
||||
_props = JsonConvert.DeserializeObject<ZoomRoomPropertiesConfig>(config.Properties.ToString());
|
||||
|
||||
_receiveQueue = new GenericQueue(Key + "-rxQueue", Thread.eThreadPriority.MediumPriority, 512);
|
||||
@@ -730,7 +734,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
ConsoleAccessLevelEnum.AccessOperator);
|
||||
if (!_props.DisablePhonebookAutoDownload)
|
||||
{
|
||||
CrestronConsole.AddNewConsoleCommand(s => SendText("zCommand Phonebook List Offset: 0 Limit: 512"),
|
||||
CrestronConsole.AddNewConsoleCommand(s => SendText("zCommand Phonebook List Offset: 0 Limit: 10000"),
|
||||
"GetZoomRoomContacts", "Triggers a refresh of the codec phonebook",
|
||||
ConsoleAccessLevelEnum.AccessOperator);
|
||||
}
|
||||
@@ -851,7 +855,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
if (!_props.DisablePhonebookAutoDownload)
|
||||
{
|
||||
_syncState.AddQueryToQueue("zCommand Phonebook List Offset: 0 Limit: 512");
|
||||
_syncState.AddQueryToQueue("zCommand Phonebook List Offset: 0 Limit: 10000");
|
||||
}
|
||||
|
||||
_syncState.AddQueryToQueue("zCommand Bookings List");
|
||||
@@ -1349,7 +1353,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
}
|
||||
case "meetingneedspassword":
|
||||
{
|
||||
// TODO: notify user to enter a password
|
||||
var meetingNeedsPassword =
|
||||
responseObj.ToObject<zEvent.MeetingNeedsPassword>();
|
||||
|
||||
if (meetingNeedsPassword.NeedsPassword)
|
||||
{
|
||||
var prompt = "Password required to join this meeting. Please enter the meeting password.";
|
||||
|
||||
OnPasswordRequired(meetingNeedsPassword.WrongAndRetry, false, false, prompt);
|
||||
}
|
||||
else
|
||||
{
|
||||
OnPasswordRequired(false, false, true, "");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case "needwaitforhost":
|
||||
@@ -2041,9 +2058,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
|
||||
public override void Dial(string number)
|
||||
{
|
||||
_lastDialedMeetingNumber = number;
|
||||
SendText(string.Format("zCommand Dial Join meetingNumber: {0}", number));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dials a meeting with a password
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="password"></param>
|
||||
public void Dial(string number, string password)
|
||||
{
|
||||
Debug.Console(2, this, "Dialing meeting number: {0} with password: {1}", number, password);
|
||||
SendText(string.Format("zCommand Dial Join meetingNumber: {0} password: {1}", number, password));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invites a contact to either a new meeting (if not already in a meeting) or the current meeting.
|
||||
/// Currently only invites a single user
|
||||
@@ -2051,7 +2080,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
/// <param name="contact"></param>
|
||||
public override void Dial(IInvitableContact contact)
|
||||
{
|
||||
var ic = contact as zStatus.ZoomDirectoryContact;
|
||||
var ic = contact as InvitableDirectoryContact;
|
||||
|
||||
if (ic != null)
|
||||
{
|
||||
@@ -2069,6 +2098,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Starts a PMI Meeting for the specified duration (or default meeting duration if 0 is specified)
|
||||
/// </summary>
|
||||
/// <param name="duration">duration of meeting</param>
|
||||
public void StartMeeting(uint duration)
|
||||
{
|
||||
uint dur = DefaultMeetingDurationMin;
|
||||
|
||||
if (duration > 0)
|
||||
dur = duration;
|
||||
|
||||
SendText(string.Format("zCommand Dial StartPmi Duration: {0}", dur));
|
||||
}
|
||||
|
||||
public override void EndCall(CodecActiveCallItem call)
|
||||
{
|
||||
SendText("zCommand Call Disconnect");
|
||||
@@ -2672,7 +2716,28 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region IPasswordPrompt Members
|
||||
|
||||
public event EventHandler<PasswordPromptEventArgs> PasswordRequired;
|
||||
|
||||
public void SubmitPassword(string password)
|
||||
{
|
||||
Debug.Console(2, this, "Password Submitted: {0}", password);
|
||||
Dial(_lastDialedMeetingNumber, password);
|
||||
}
|
||||
|
||||
void OnPasswordRequired(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message)
|
||||
{
|
||||
var handler = PasswordRequired;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new PasswordPromptEventArgs(lastAttemptIncorrect, loginFailed, loginCancelled, message));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Zoom Room specific info object
|
||||
|
||||
Reference in New Issue
Block a user