mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 04:34:56 +00:00
fix(essentials): Updates to resolve oddities with ZoomRoom directory browsing and dialing
This commit is contained in:
@@ -1080,10 +1080,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
{
|
{
|
||||||
var codec = Codec as IHasDirectory;
|
var codec = Codec as IHasDirectory;
|
||||||
|
|
||||||
SetCurrentDirectoryToRoot();
|
if (codec.CurrentDirectoryResultIsNotDirectoryRoot.BoolValue)
|
||||||
|
{
|
||||||
|
SetCurrentDirectoryToRoot();
|
||||||
|
|
||||||
RefreshDirectory();
|
RefreshDirectory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1161,10 +1163,23 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if (dc.ContactMethods.Count == 1)
|
||||||
|
{
|
||||||
|
var invitableContact = dc as IInvitableContact;
|
||||||
|
|
||||||
|
if (invitableContact != null)
|
||||||
|
{
|
||||||
|
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(invitableContact); });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If only one contact method, just dial that method
|
||||||
|
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If only one contact method, just dial that method
|
Debug.Console(1, "Unable to dial contact. No availble ContactMethod(s) specified");
|
||||||
DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // is DirectoryFolder
|
else // is DirectoryFolder
|
||||||
|
|||||||
@@ -69,6 +69,22 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||||||
[JsonProperty("directoryResults")]
|
[JsonProperty("directoryResults")]
|
||||||
public List<DirectoryItem> CurrentDirectoryResults { get; private set; }
|
public List<DirectoryItem> CurrentDirectoryResults { get; private set; }
|
||||||
|
|
||||||
|
public List<DirectoryItem> Contacts
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return CurrentDirectoryResults.OfType<DirectoryContact>().Cast<DirectoryItem>().ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DirectoryItem> Folders
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return CurrentDirectoryResults.OfType<DirectoryFolder>().Cast<DirectoryItem>().ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to store the ID of the current folder for CurrentDirectoryResults
|
/// Used to store the ID of the current folder for CurrentDirectoryResults
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -104,6 +120,15 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||||||
SortDirectory();
|
SortDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Filters the CurrentDirectoryResults by the predicate
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="predicate"></param>
|
||||||
|
public void FilterContacts(Func<DirectoryItem, bool> predicate)
|
||||||
|
{
|
||||||
|
CurrentDirectoryResults = CurrentDirectoryResults.Where(predicate).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sorts the DirectoryResults list to display all folders alphabetically, then all contacts alphabetically
|
/// Sorts the DirectoryResults list to display all folders alphabetically, then all contacts alphabetically
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -276,6 +276,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
if (zoomRooms.Count > 0)
|
if (zoomRooms.Count > 0)
|
||||||
{
|
{
|
||||||
// If so, setup a rooms and contacts folder and add them.
|
// If so, setup a rooms and contacts folder and add them.
|
||||||
|
|
||||||
|
directory.ResultsFolderId = "root";
|
||||||
|
|
||||||
roomFolder.Name = "Rooms";
|
roomFolder.Name = "Rooms";
|
||||||
roomFolder.ParentFolderId = "root";
|
roomFolder.ParentFolderId = "root";
|
||||||
roomFolder.FolderId = "rooms";
|
roomFolder.FolderId = "rooms";
|
||||||
@@ -292,22 +295,26 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (zoomContacts.Count == 0) return directory;
|
if (zoomContacts.Count == 0)
|
||||||
|
{
|
||||||
|
return directory;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Contact c in zoomContacts)
|
||||||
{
|
{
|
||||||
foreach (Contact c in zoomContacts)
|
var contact = new ZoomDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
|
||||||
|
|
||||||
|
contact.ContactMethods.Add(new ContactMethod() { Number = c.Jid, Device = eContactMethodDevice.Video, CallType = eContactMethodCallType.Video, ContactMethodId = c.Jid });
|
||||||
|
|
||||||
|
if (folders.Count > 0)
|
||||||
{
|
{
|
||||||
var contact = new ZoomDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
|
contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
|
||||||
|
|
||||||
if (folders.Count > 0)
|
|
||||||
{
|
|
||||||
contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
|
|
||||||
}
|
|
||||||
|
|
||||||
contacts.Add(contact);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
directory.AddContactsToDirectory(contacts);
|
contacts.Add(contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
directory.AddContactsToDirectory(contacts);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -361,6 +361,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
public CodecDirectory CurrentDirectoryResult
|
public CodecDirectory CurrentDirectoryResult
|
||||||
{
|
{
|
||||||
get { return _currentDirectoryResult; }
|
get { return _currentDirectoryResult; }
|
||||||
|
private set
|
||||||
|
{
|
||||||
|
_currentDirectoryResult = value;
|
||||||
|
|
||||||
|
Debug.Console(2, this, "CurrentDirectoryResult Updated. ResultsFolderId: {0}", _currentDirectoryResult.ResultsFolderId);
|
||||||
|
|
||||||
|
CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
|
||||||
|
|
||||||
|
OnDirectoryResultReturned(_currentDirectoryResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CodecPhonebookSyncState PhonebookSyncState { get; private set; }
|
public CodecPhonebookSyncState PhonebookSyncState { get; private set; }
|
||||||
@@ -374,9 +384,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
c => c.Name.IndexOf(searchString, 0, StringComparison.OrdinalIgnoreCase) > -1));
|
c => c.Name.IndexOf(searchString, 0, StringComparison.OrdinalIgnoreCase) > -1));
|
||||||
|
|
||||||
DirectoryBrowseHistoryStack.Clear();
|
DirectoryBrowseHistoryStack.Clear();
|
||||||
_currentDirectoryResult = directoryResults;
|
CurrentDirectoryResult = directoryResults;
|
||||||
|
|
||||||
OnDirectoryResultReturned(directoryResults);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetDirectoryFolderContents(string folderId)
|
public void GetDirectoryFolderContents(string folderId)
|
||||||
@@ -388,19 +397,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
DirectoryBrowseHistoryStack.Push(_currentDirectoryResult);
|
DirectoryBrowseHistoryStack.Push(_currentDirectoryResult);
|
||||||
|
|
||||||
_currentDirectoryResult = directoryResults;
|
CurrentDirectoryResult = directoryResults;
|
||||||
|
|
||||||
OnDirectoryResultReturned(directoryResults);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetCurrentDirectoryToRoot()
|
public void SetCurrentDirectoryToRoot()
|
||||||
{
|
{
|
||||||
DirectoryBrowseHistoryStack.Clear();
|
DirectoryBrowseHistoryStack.Clear();
|
||||||
|
|
||||||
_currentDirectoryResult = DirectoryRoot;
|
CurrentDirectoryResult = DirectoryRoot;
|
||||||
|
}
|
||||||
OnDirectoryResultReturned(DirectoryRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GetDirectoryParentFolderContents()
|
public void GetDirectoryParentFolderContents()
|
||||||
{
|
{
|
||||||
@@ -411,10 +417,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
var currentDirectory = DirectoryBrowseHistoryStack.Pop();
|
var currentDirectory = DirectoryBrowseHistoryStack.Pop();
|
||||||
|
|
||||||
_currentDirectoryResult = currentDirectory;
|
CurrentDirectoryResult = currentDirectory;
|
||||||
|
}
|
||||||
OnDirectoryResultReturned(currentDirectory);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BoolFeedback CurrentDirectoryResultIsNotDirectoryRoot { get; private set; }
|
public BoolFeedback CurrentDirectoryResultIsNotDirectoryRoot { get; private set; }
|
||||||
|
|
||||||
@@ -680,16 +684,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
private void SetUpDirectory()
|
private void SetUpDirectory()
|
||||||
{
|
{
|
||||||
DirectoryRoot = new CodecDirectory();
|
DirectoryRoot = new CodecDirectory() { ResultsFolderId = "root" };
|
||||||
|
|
||||||
_currentDirectoryResult = DirectoryRoot;
|
CurrentDirectoryResultIsNotDirectoryRoot = new BoolFeedback(() => CurrentDirectoryResult.ResultsFolderId != "root");
|
||||||
|
|
||||||
|
CurrentDirectoryResult = DirectoryRoot;
|
||||||
|
|
||||||
DirectoryBrowseHistory = new List<CodecDirectory>();
|
DirectoryBrowseHistory = new List<CodecDirectory>();
|
||||||
DirectoryBrowseHistoryStack = new Stack<CodecDirectory>();
|
DirectoryBrowseHistoryStack = new Stack<CodecDirectory>();
|
||||||
|
|
||||||
CurrentDirectoryResultIsNotDirectoryRoot = new BoolFeedback(() => _currentDirectoryResult != DirectoryRoot);
|
|
||||||
|
|
||||||
CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetUpRouting()
|
private void SetUpRouting()
|
||||||
@@ -1054,24 +1057,30 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
}
|
}
|
||||||
case "phonebooklistresult":
|
case "phonebooklistresult":
|
||||||
{
|
{
|
||||||
|
// This result will always be the complete contents of the directory and never
|
||||||
|
// A subset of the results via a search
|
||||||
|
|
||||||
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
|
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
|
||||||
|
|
||||||
|
var directoryResults =
|
||||||
|
zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
|
||||||
|
|
||||||
if (!PhonebookSyncState.InitialSyncComplete)
|
if (!PhonebookSyncState.InitialSyncComplete)
|
||||||
{
|
{
|
||||||
PhonebookSyncState.InitialPhonebookFoldersReceived();
|
PhonebookSyncState.InitialPhonebookFoldersReceived();
|
||||||
PhonebookSyncState.PhonebookRootEntriesReceived();
|
PhonebookSyncState.PhonebookRootEntriesReceived();
|
||||||
PhonebookSyncState.SetPhonebookHasFolders(false);
|
PhonebookSyncState.SetPhonebookHasFolders(true);
|
||||||
PhonebookSyncState.SetNumberOfContacts(Status.Phonebook.Contacts.Count);
|
PhonebookSyncState.SetNumberOfContacts(Status.Phonebook.Contacts.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
var directoryResults =
|
if (directoryResults.ResultsFolderId != "root")
|
||||||
zStatus.Phonebook.ConvertZoomContactsToGeneric(Status.Phonebook.Contacts);
|
{
|
||||||
|
directoryResults.ResultsFolderId = "root";
|
||||||
|
}
|
||||||
|
|
||||||
DirectoryRoot = directoryResults;
|
DirectoryRoot = directoryResults;
|
||||||
|
|
||||||
_currentDirectoryResult = DirectoryRoot;
|
CurrentDirectoryResult = directoryResults;
|
||||||
|
|
||||||
OnDirectoryResultReturned(directoryResults);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1227,7 +1236,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
{
|
{
|
||||||
Direction = eCodecCallDirection.Incoming,
|
Direction = eCodecCallDirection.Incoming,
|
||||||
Status = eCodecCallStatus.Ringing,
|
Status = eCodecCallStatus.Ringing,
|
||||||
Type = eCodecCallType.Unknown,
|
Type = eCodecCallType.Video,
|
||||||
Name = incomingCall.callerName,
|
Name = incomingCall.callerName,
|
||||||
Id = incomingCall.callerJID
|
Id = incomingCall.callerJID
|
||||||
};
|
};
|
||||||
@@ -1580,8 +1589,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
var newCall = new CodecActiveCallItem
|
var newCall = new CodecActiveCallItem
|
||||||
{
|
{
|
||||||
Name = Status.Call.Info.meeting_list_item.meetingName,
|
Name = Status.Call.Info.meeting_list_item.meetingName,
|
||||||
|
Number = Status.Call.Info.meeting_id,
|
||||||
Id = Status.Call.Info.meeting_id,
|
Id = Status.Call.Info.meeting_id,
|
||||||
Status = newStatus
|
Status = newStatus,
|
||||||
|
Type = eCodecCallType.Video,
|
||||||
};
|
};
|
||||||
|
|
||||||
ActiveCalls.Add(newCall);
|
ActiveCalls.Add(newCall);
|
||||||
@@ -1999,18 +2010,43 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
/// <param name="result"></param>
|
/// <param name="result"></param>
|
||||||
private void OnDirectoryResultReturned(CodecDirectory result)
|
private void OnDirectoryResultReturned(CodecDirectory result)
|
||||||
{
|
{
|
||||||
CurrentDirectoryResultIsNotDirectoryRoot.FireUpdate();
|
try
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "OnDirectoryResultReturned");
|
||||||
|
|
||||||
// This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology
|
var directoryResult = new CodecDirectory();
|
||||||
var handler = DirectoryResultReturned;
|
|
||||||
if (handler != null)
|
// If result is Root, create a copy and filter out contacts whose parent folder is not root
|
||||||
{
|
if (!CurrentDirectoryResultIsNotDirectoryRoot.BoolValue)
|
||||||
handler(this, new DirectoryEventArgs
|
{
|
||||||
{
|
Debug.Console(2, this, "Filtering DirectoryRoot to remove contacts for display");
|
||||||
Directory = result,
|
|
||||||
DirectoryIsOnRoot = !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue
|
directoryResult.ResultsFolderId = result.ResultsFolderId;
|
||||||
});
|
directoryResult.AddFoldersToDirectory(result.Folders);
|
||||||
}
|
directoryResult.AddContactsToDirectory(result.Contacts.Where((c) => c.ParentFolderId == result.ResultsFolderId).ToList());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
directoryResult = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(2, this, "Updating directoryResult. IsOnRoot: {0}", !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue);
|
||||||
|
|
||||||
|
// This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology
|
||||||
|
var handler = DirectoryResultReturned;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
handler(this, new DirectoryEventArgs
|
||||||
|
{
|
||||||
|
Directory = directoryResult,
|
||||||
|
DirectoryIsOnRoot = !CurrentDirectoryResultIsNotDirectoryRoot.BoolValue
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Error: {0}", e);
|
||||||
|
}
|
||||||
|
|
||||||
//PrintDirectory(result);
|
//PrintDirectory(result);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user