mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-08-31 19:08:29 +00:00
Merge branch 'development' into hotfix/camera-presets
This commit is contained in:
commit
6553b43198
118 changed files with 9695 additions and 3297 deletions
|
|
@ -216,6 +216,10 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
return joinable;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("dialable")]
|
||||
public bool Dialable { get; set; }
|
||||
|
||||
//public string ConferenceNumberToDial { get; set; }
|
||||
[JsonProperty("conferencePassword")]
|
||||
public string ConferencePassword { get; set; }
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Lighting.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="PepperDash_Core, Version=1.0.42.30563, Culture=neutral, processorArchitecture=MSIL">
|
||||
<Reference Include="PepperDash_Core, Version=1.2.1.30543, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll</HintPath>
|
||||
</Reference>
|
||||
|
|
|
|||
|
|
@ -348,6 +348,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
if (b.DialInfo.ConnectMode.Value.ToLower() == "obtp" || b.DialInfo.ConnectMode.Value.ToLower() == "manual")
|
||||
meeting.IsOneButtonToPushMeeting = true;
|
||||
|
||||
meeting.Dialable = b.DialInfo.Calls.Call.Count > 0;
|
||||
|
||||
if (b.DialInfo.Calls.Call != null)
|
||||
{
|
||||
foreach (Call c in b.DialInfo.Calls.Call)
|
||||
|
|
|
|||
|
|
@ -940,7 +940,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
//digitals
|
||||
tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, meeting.Joinable);
|
||||
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, meeting.Id != "0");
|
||||
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, meeting.Dialable);
|
||||
|
||||
//serials
|
||||
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, meeting.Organizer);
|
||||
|
|
@ -994,7 +994,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
//Special Change for protected directory clear
|
||||
|
||||
trilist.SetBoolSigAction(joinMap.DirectoryClearSelected.JoinNumber, (b) => SelectDirectoryEntry(_directoryCodec, 0, _directoryTrilist, _directoryJoinmap));
|
||||
trilist.SetBoolSigAction(joinMap.DirectoryClearSelected.JoinNumber, (b) => SelectDirectoryEntry(codec, 0, trilist, joinMap));
|
||||
|
||||
// Report feedback for number of contact methods for selected contact
|
||||
|
||||
|
|
@ -1004,7 +1004,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
if (codec.DirectoryRoot != null)
|
||||
{
|
||||
trilist.SetUshort(joinMap.DirectoryRowCount.JoinNumber, (ushort)codec.DirectoryRoot.CurrentDirectoryResults.Count);
|
||||
var contactsCount = codec.DirectoryRoot.CurrentDirectoryResults.Where(c => c.ParentFolderId.Equals("root")).ToList().Count;
|
||||
trilist.SetUshort(joinMap.DirectoryRowCount.JoinNumber, (ushort)contactsCount);
|
||||
Debug.Console(2, this, ">>> contactsCount: {0}", contactsCount);
|
||||
|
||||
var clearBytes = XSigHelpers.ClearOutputs();
|
||||
|
||||
|
|
@ -1020,7 +1022,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
codec.DirectoryResultReturned += (sender, args) =>
|
||||
{
|
||||
trilist.SetUshort(joinMap.DirectoryRowCount.JoinNumber, (ushort)args.Directory.CurrentDirectoryResults.Count);
|
||||
var isRoot = codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue == false;
|
||||
var argsCount = isRoot
|
||||
? args.Directory.CurrentDirectoryResults.Where(a => a.ParentFolderId.Equals("root")).ToList().Count
|
||||
: args.Directory.CurrentDirectoryResults.Count;
|
||||
|
||||
trilist.SetUshort(joinMap.DirectoryRowCount.JoinNumber, (ushort)argsCount);
|
||||
Debug.Console(2, this, ">>> argsCount: {0}", argsCount);
|
||||
|
||||
var clearBytes = XSigHelpers.ClearOutputs();
|
||||
|
||||
|
|
@ -1184,46 +1192,47 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
return GetXSigString(tokenArray);
|
||||
}
|
||||
|
||||
private string UpdateDirectoryXSig(CodecDirectory directory, bool isRoot)
|
||||
{
|
||||
var xSigMaxIndex = 1023;
|
||||
var tokenArray = new XSigToken[directory.CurrentDirectoryResults.Count > xSigMaxIndex
|
||||
? xSigMaxIndex
|
||||
: directory.CurrentDirectoryResults.Count];
|
||||
private string UpdateDirectoryXSig(CodecDirectory directory, bool isRoot)
|
||||
{
|
||||
var xSigMaxIndex = 1023;
|
||||
var tokenArray = new XSigToken[directory.CurrentDirectoryResults.Count > xSigMaxIndex
|
||||
? xSigMaxIndex
|
||||
: directory.CurrentDirectoryResults.Count];
|
||||
|
||||
Debug.Console(2, this, "IsRoot: {0}, Directory Count: {1}, TokenArray.Length: {2}", isRoot,
|
||||
directory.CurrentDirectoryResults.Count, tokenArray.Length);
|
||||
Debug.Console(2, this, "IsRoot: {0}, Directory Count: {1}, TokenArray.Length: {2}", isRoot, directory.CurrentDirectoryResults.Count, tokenArray.Length);
|
||||
|
||||
var contacts = directory.CurrentDirectoryResults.Count > xSigMaxIndex
|
||||
? directory.CurrentDirectoryResults.Take(xSigMaxIndex)
|
||||
: directory.CurrentDirectoryResults;
|
||||
var contacts = directory.CurrentDirectoryResults.Count > xSigMaxIndex
|
||||
? directory.CurrentDirectoryResults.Take(xSigMaxIndex)
|
||||
: directory.CurrentDirectoryResults;
|
||||
|
||||
var counterIndex = 1;
|
||||
foreach (var entry in contacts)
|
||||
{
|
||||
var arrayIndex = counterIndex - 1;
|
||||
var entryIndex = counterIndex;
|
||||
var contactsToDisplay = isRoot
|
||||
? contacts.Where(c => c.ParentFolderId == "root")
|
||||
: contacts.Where(c => c.ParentFolderId != "root");
|
||||
|
||||
Debug.Console(2, this, "Entry{2:0000} Name: {0}, Folder ID: {1}", entry.Name, entry.FolderId, entryIndex);
|
||||
var counterIndex = 1;
|
||||
foreach (var entry in contactsToDisplay)
|
||||
{
|
||||
var arrayIndex = counterIndex - 1;
|
||||
var entryIndex = counterIndex;
|
||||
|
||||
if (entry is DirectoryFolder && entry.ParentFolderId == "root")
|
||||
{
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, String.Format("[+] {0}", entry.Name));
|
||||
Debug.Console(2, this, "Entry{2:0000} Name: {0}, Folder ID: {1}, Type: {3}, ParentFolderId: {4}",
|
||||
entry.Name, entry.FolderId, entryIndex, entry.GetType().GetCType().FullName, entry.ParentFolderId);
|
||||
|
||||
counterIndex++;
|
||||
counterIndex++;
|
||||
if (entry is DirectoryFolder)
|
||||
{
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, String.Format("[+] {0}", entry.Name));
|
||||
|
||||
continue;
|
||||
}
|
||||
counterIndex++;
|
||||
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, entry.Name);
|
||||
continue;
|
||||
}
|
||||
|
||||
counterIndex++;
|
||||
}
|
||||
|
||||
return GetXSigString(tokenArray);
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(entryIndex, entry.Name);
|
||||
|
||||
counterIndex++;
|
||||
}
|
||||
|
||||
return GetXSigString(tokenArray);
|
||||
}
|
||||
|
||||
private void LinkVideoCodecCallControlsToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
|
||||
|
|
@ -1393,11 +1402,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, call.IsOnHold);
|
||||
|
||||
//serials
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(stringIndex + 1, call.Name ?? String.Empty);
|
||||
tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 2, call.Number ?? String.Empty);
|
||||
tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 3, call.Direction.ToString());
|
||||
tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 4, call.Type.ToString());
|
||||
tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 5, call.Status.ToString());
|
||||
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, call.Name ?? String.Empty);
|
||||
tokenArray[stringIndex + 1] = new XSigSerialToken(stringIndex + 2, call.Number ?? String.Empty);
|
||||
tokenArray[stringIndex + 2] = new XSigSerialToken(stringIndex + 3, call.Direction.ToString());
|
||||
tokenArray[stringIndex + 3] = new XSigSerialToken(stringIndex + 4, call.Type.ToString());
|
||||
tokenArray[stringIndex + 4] = new XSigSerialToken(stringIndex + 5, call.Status.ToString());
|
||||
if(call.Duration != null)
|
||||
{
|
||||
// May need to verify correct string format here
|
||||
|
|
@ -1417,12 +1426,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
|
||||
//serials
|
||||
tokenArray[arrayIndex] = new XSigSerialToken(stringIndex + 1, String.Empty);
|
||||
tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 2, String.Empty);
|
||||
tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 3, String.Empty);
|
||||
tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 4, String.Empty);
|
||||
tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 5, String.Empty);
|
||||
tokenArray[arrayIndex + 5] = new XSigSerialToken(stringIndex + 6, String.Empty);
|
||||
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, String.Empty);
|
||||
tokenArray[stringIndex + 1] = new XSigSerialToken(stringIndex + 2, String.Empty);
|
||||
tokenArray[stringIndex + 2] = new XSigSerialToken(stringIndex + 3, String.Empty);
|
||||
tokenArray[stringIndex + 3] = new XSigSerialToken(stringIndex + 4, String.Empty);
|
||||
tokenArray[stringIndex + 4] = new XSigSerialToken(stringIndex + 5, String.Empty);
|
||||
tokenArray[stringIndex + 5] = new XSigSerialToken(stringIndex + 6, String.Empty);
|
||||
|
||||
arrayIndex += offset;
|
||||
stringIndex += maxStrings;
|
||||
|
|
|
|||
|
|
@ -303,11 +303,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
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 });
|
||||
contact.ContactMethods.Add(new ContactMethod()
|
||||
{
|
||||
Number = c.Jid,
|
||||
Device = eContactMethodDevice.Video,
|
||||
CallType = eContactMethodCallType.Video,
|
||||
ContactMethodId = c.Jid
|
||||
});
|
||||
|
||||
if (folders.Count > 0)
|
||||
{
|
||||
contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
|
||||
contact.ParentFolderId = c.IsZoomRoom
|
||||
? roomFolder.FolderId // "rooms"
|
||||
: contactFolder.FolderId; // "contacts"
|
||||
}
|
||||
|
||||
contacts.Add(contact);
|
||||
|
|
@ -1502,6 +1510,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
meeting.Privacy = b.IsPrivate ? eMeetingPrivacy.Private : eMeetingPrivacy.Public;
|
||||
|
||||
meeting.Dialable = meeting.Id != "0";
|
||||
|
||||
// No meeting.Calls data exists for Zoom Rooms. Leaving out for now.
|
||||
var now = DateTime.Now;
|
||||
if (meeting.StartTime < now && meeting.EndTime < now)
|
||||
|
|
|
|||
|
|
@ -59,9 +59,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
private CameraBase _selectedCamera;
|
||||
private string _lastDialedMeetingNumber;
|
||||
|
||||
private CTimer contactsDebounceTimer;
|
||||
|
||||
|
||||
private readonly ZoomRoomPropertiesConfig _props;
|
||||
|
||||
private bool _meetingPasswordRequired;
|
||||
|
||||
private bool _waitingForUserToAcceptOrRejectIncomingCall;
|
||||
|
||||
public void Poll(string pollString)
|
||||
{
|
||||
if(_meetingPasswordRequired || _waitingForUserToAcceptOrRejectIncomingCall) return;
|
||||
|
||||
SendText(string.Format("{0}{1}", pollString, SendDelimiter));
|
||||
}
|
||||
|
||||
public ZoomRoom(DeviceConfig config, IBasicCommunication comm)
|
||||
: base(config)
|
||||
{
|
||||
|
|
@ -75,13 +88,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
if (_props.CommunicationMonitorProperties != null)
|
||||
{
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication,
|
||||
_props.CommunicationMonitorProperties);
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, _props.CommunicationMonitorProperties.PollInterval, _props.CommunicationMonitorProperties.TimeToWarning, _props.CommunicationMonitorProperties.TimeToError,
|
||||
() => Poll(_props.CommunicationMonitorProperties.PollString));
|
||||
}
|
||||
else
|
||||
{
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000,
|
||||
"zStatus SystemUnit" + SendDelimiter);
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, () => Poll("zStatus SystemUnit"));
|
||||
}
|
||||
|
||||
DeviceManager.AddDevice(CommunicationMonitor);
|
||||
|
|
@ -366,26 +378,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void SelectCamera(string key)
|
||||
{
|
||||
if (Cameras == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (CameraIsMutedFeedback.BoolValue)
|
||||
{
|
||||
CameraMuteOff();
|
||||
}
|
||||
|
||||
var camera = Cameras.FirstOrDefault(c => c.Key.IndexOf(key, StringComparison.OrdinalIgnoreCase) > -1);
|
||||
if (camera != null)
|
||||
{
|
||||
Debug.Console(1, this, "Selected Camera with key: '{0}'", camera.Key);
|
||||
SelectedCamera = camera;
|
||||
|
||||
if (CameraIsMutedFeedback.BoolValue)
|
||||
{
|
||||
CameraMuteOff();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Unable to select camera with key: '{0}'", key);
|
||||
}
|
||||
SendText(string.Format("zConfiguration Video Camera selectedId: {0}", key));
|
||||
}
|
||||
|
||||
public CameraBase FarEndCamera { get; private set; }
|
||||
|
|
@ -648,8 +646,27 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
if (a.PropertyName == "SelectedId")
|
||||
{
|
||||
SelectCamera(Configuration.Video.Camera.SelectedId);
|
||||
// this will in turn fire the affected feedbacks
|
||||
if (Cameras == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var camera = Cameras.FirstOrDefault(c => c.Key.IndexOf(Configuration.Video.Camera.SelectedId, StringComparison.OrdinalIgnoreCase) > -1);
|
||||
if (camera != null)
|
||||
{
|
||||
Debug.Console(1, this, "Camera selected with key: '{0}'", camera.Key);
|
||||
|
||||
SelectedCamera = camera;
|
||||
|
||||
if (CameraIsMutedFeedback.BoolValue)
|
||||
{
|
||||
CameraMuteOff();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "No camera found with key: '{0}'", Configuration.Video.Camera.SelectedId);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -960,6 +977,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void SendText(string command)
|
||||
{
|
||||
if (_meetingPasswordRequired)
|
||||
{
|
||||
Debug.Console(2, this, "Blocking commands to ZoomRoom while waiting for user to enter meeting password");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_waitingForUserToAcceptOrRejectIncomingCall)
|
||||
{
|
||||
Debug.Console(2, this, "Blocking commands to ZoomRoom while waiting for user to accept or reject incoming call");
|
||||
return;
|
||||
}
|
||||
|
||||
if (CommDebuggingIsOn)
|
||||
{
|
||||
Debug.Console(1, this, "Sending: '{0}'", command);
|
||||
|
|
@ -1355,22 +1384,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
|
||||
|
||||
var directoryResults =
|
||||
zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
|
||||
|
||||
if (!PhonebookSyncState.InitialSyncComplete)
|
||||
{
|
||||
PhonebookSyncState.InitialPhonebookFoldersReceived();
|
||||
PhonebookSyncState.PhonebookRootEntriesReceived();
|
||||
PhonebookSyncState.SetPhonebookHasFolders(true);
|
||||
PhonebookSyncState.SetNumberOfContacts(Status.Phonebook.Contacts.Count);
|
||||
}
|
||||
|
||||
directoryResults.ResultsFolderId = "root";
|
||||
|
||||
DirectoryRoot = directoryResults;
|
||||
|
||||
CurrentDirectoryResult = directoryResults;
|
||||
UpdateDirectory();
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -1499,36 +1513,37 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
case "phonebook":
|
||||
{
|
||||
zStatus.Contact contact = new zStatus.Contact();
|
||||
|
||||
if (responseObj["Updated Contact"] != null)
|
||||
{
|
||||
var updatedContact =
|
||||
JsonConvert.DeserializeObject<zStatus.Contact>(
|
||||
responseObj["Updated Contact"].ToString());
|
||||
|
||||
var existingContact =
|
||||
Status.Phonebook.Contacts.FirstOrDefault(c => c.Jid.Equals(updatedContact.Jid));
|
||||
|
||||
if (existingContact != null)
|
||||
{
|
||||
// Update existing contact
|
||||
JsonConvert.PopulateObject(responseObj["Updated Contact"].ToString(),
|
||||
existingContact);
|
||||
}
|
||||
{
|
||||
contact = responseObj["Updated Contact"].ToObject<zStatus.Contact>();
|
||||
}
|
||||
else if (responseObj["Added Contact"] != null)
|
||||
{
|
||||
var jToken = responseObj["Updated Contact"];
|
||||
if (jToken != null)
|
||||
{
|
||||
var newContact =
|
||||
JsonConvert.DeserializeObject<zStatus.Contact>(
|
||||
jToken.ToString());
|
||||
|
||||
// Add a new contact
|
||||
Status.Phonebook.Contacts.Add(newContact);
|
||||
}
|
||||
contact = responseObj["Added Contact"].ToObject<zStatus.Contact>();
|
||||
}
|
||||
|
||||
var existingContactIndex = Status.Phonebook.Contacts.FindIndex(c => c.Jid.Equals(contact.Jid));
|
||||
|
||||
if (existingContactIndex > 0)
|
||||
{
|
||||
Status.Phonebook.Contacts[existingContactIndex] = contact;
|
||||
}
|
||||
else
|
||||
{
|
||||
Status.Phonebook.Contacts.Add(contact);
|
||||
}
|
||||
|
||||
if(contactsDebounceTimer == null)
|
||||
{
|
||||
contactsDebounceTimer = new CTimer(o => UpdateDirectory(), 2000);
|
||||
}
|
||||
else
|
||||
{
|
||||
contactsDebounceTimer.Reset();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case "bookingslistresult":
|
||||
|
|
@ -1584,6 +1599,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
Id = incomingCall.callerJID
|
||||
};
|
||||
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = true;
|
||||
|
||||
ActiveCalls.Add(newCall);
|
||||
|
||||
OnCallStatusChange(newCall);
|
||||
|
|
@ -1610,6 +1627,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
OnCallStatusChange(existingCall);
|
||||
}
|
||||
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
UpdateCallStatus();
|
||||
}
|
||||
|
||||
|
|
@ -1992,6 +2011,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
/// </summary>
|
||||
private void GetBookings()
|
||||
{
|
||||
if (_meetingPasswordRequired || _waitingForUserToAcceptOrRejectIncomingCall) return;
|
||||
|
||||
SendText("zCommand Bookings List");
|
||||
}
|
||||
|
||||
|
|
@ -2179,6 +2200,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
);
|
||||
}
|
||||
|
||||
_meetingPasswordRequired = false;
|
||||
base.OnCallStatusChange(item);
|
||||
|
||||
Debug.Console(1, this, "[OnCallStatusChange] Current Call Status: {0}",
|
||||
|
|
@ -2218,6 +2240,42 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
}
|
||||
}
|
||||
|
||||
private void UpdateDirectory()
|
||||
{
|
||||
Debug.Console(2, this, "Updating directory");
|
||||
var directoryResults = zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
|
||||
|
||||
if (!PhonebookSyncState.InitialSyncComplete)
|
||||
{
|
||||
PhonebookSyncState.InitialPhonebookFoldersReceived();
|
||||
PhonebookSyncState.PhonebookRootEntriesReceived();
|
||||
PhonebookSyncState.SetPhonebookHasFolders(true);
|
||||
PhonebookSyncState.SetNumberOfContacts(Status.Phonebook.Contacts.Count);
|
||||
}
|
||||
|
||||
directoryResults.ResultsFolderId = "root";
|
||||
|
||||
DirectoryRoot = directoryResults;
|
||||
|
||||
CurrentDirectoryResult = directoryResults;
|
||||
|
||||
//
|
||||
if (contactsDebounceTimer != null)
|
||||
{
|
||||
ClearContactDebounceTimer();
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearContactDebounceTimer()
|
||||
{
|
||||
Debug.Console(2, this, "Clearing Timer");
|
||||
if (!contactsDebounceTimer.Disposed && contactsDebounceTimer != null)
|
||||
{
|
||||
contactsDebounceTimer.Dispose();
|
||||
contactsDebounceTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Will return true if the host is myself (this zoom room)
|
||||
/// </summary>
|
||||
|
|
@ -2549,7 +2607,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
PasswordRequired += (devices, args) =>
|
||||
{
|
||||
Debug.Console(0, this, "***********************************PaswordRequired. Message: {0} Cancelled: {1} Last Incorrect: {2} Failed: {3}", args.Message, args.LoginAttemptCancelled, args.LastAttemptWasIncorrect, args.LoginAttemptFailed);
|
||||
Debug.Console(2, this, "***********************************PaswordRequired. Message: {0} Cancelled: {1} Last Incorrect: {2} Failed: {3}", args.Message, args.LoginAttemptCancelled, args.LastAttemptWasIncorrect, args.LoginAttemptFailed);
|
||||
|
||||
if (args.LoginAttemptCancelled)
|
||||
{
|
||||
|
|
@ -2626,6 +2684,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void AcceptCall()
|
||||
{
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
var incomingCall =
|
||||
ActiveCalls.FirstOrDefault(
|
||||
c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming));
|
||||
|
|
@ -2635,6 +2695,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public override void AcceptCall(CodecActiveCallItem call)
|
||||
{
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
SendText(string.Format("zCommand Call Accept callerJID: {0}", call.Id));
|
||||
|
||||
call.Status = eCodecCallStatus.Connected;
|
||||
|
|
@ -2646,6 +2708,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void RejectCall()
|
||||
{
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
var incomingCall =
|
||||
ActiveCalls.FirstOrDefault(
|
||||
c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming));
|
||||
|
|
@ -2655,6 +2719,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public override void RejectCall(CodecActiveCallItem call)
|
||||
{
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
SendText(string.Format("zCommand Call Reject callerJID: {0}", call.Id));
|
||||
|
||||
call.Status = eCodecCallStatus.Disconnected;
|
||||
|
|
@ -2781,16 +2847,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void LeaveMeeting()
|
||||
{
|
||||
SendText("zCommand Call Leave");
|
||||
_meetingPasswordRequired = false;
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
SendText("zCommand Call Leave");
|
||||
}
|
||||
|
||||
public override void EndCall(CodecActiveCallItem call)
|
||||
{
|
||||
_meetingPasswordRequired = false;
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
SendText("zCommand Call Disconnect");
|
||||
}
|
||||
|
||||
public override void EndAllCalls()
|
||||
{
|
||||
_meetingPasswordRequired = false;
|
||||
_waitingForUserToAcceptOrRejectIncomingCall = false;
|
||||
|
||||
SendText("zCommand Call Disconnect");
|
||||
}
|
||||
|
||||
|
|
@ -3440,17 +3515,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
public void SubmitPassword(string password)
|
||||
{
|
||||
_meetingPasswordRequired = false;
|
||||
Debug.Console(2, this, "Password Submitted: {0}", password);
|
||||
Dial(_lastDialedMeetingNumber, password);
|
||||
//OnPasswordRequired(false, false, true, "");
|
||||
}
|
||||
|
||||
void OnPasswordRequired(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message)
|
||||
{
|
||||
_meetingPasswordRequired = !loginFailed || !loginCancelled;
|
||||
|
||||
var handler = PasswordRequired;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new PasswordPromptEventArgs(lastAttemptIncorrect, loginFailed, loginCancelled, message));
|
||||
{
|
||||
Debug.Console(2, this, "Meeting Password Required: {0}", _meetingPasswordRequired);
|
||||
|
||||
handler(this, new PasswordPromptEventArgs(lastAttemptIncorrect, loginFailed, loginCancelled, message));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue