diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs index 36d73a3e..c3b3715f 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs @@ -16,6 +16,8 @@ namespace PepperDash.Essentials.AppServer.Messengers private readonly string _propName; + private List _itemKeys = new List(); + /// /// Constructs a messenger for a device that implements ISelectableItems /// @@ -41,7 +43,7 @@ namespace PepperDash.Essentials.AppServer.Messengers itemDevice.ItemsUpdated += (sender, args) => { - SendFullStatus(); + SetItems(); }; itemDevice.CurrentItemChanged += (sender, args) => @@ -49,6 +51,22 @@ namespace PepperDash.Essentials.AppServer.Messengers SendFullStatus(); }; + SetItems(); + } + + /// + /// Sets the items and registers their update events + /// + private void SetItems() + { + /// Clear out any existing item actions + foreach (var item in _itemKeys) + { + RemoveAction($"/{item}"); + } + + _itemKeys.Clear(); + foreach (var input in itemDevice.Items) { var key = input.Key; @@ -59,13 +77,18 @@ namespace PepperDash.Essentials.AppServer.Messengers localItem.Select(); }); - localItem.ItemUpdated += (sender, args) => - { - SendFullStatus(); - }; + _itemKeys.Add(key.ToString()); + + localItem.ItemUpdated -= LocalItem_ItemUpdated; + localItem.ItemUpdated += LocalItem_ItemUpdated; } } + private void LocalItem_ItemUpdated(object sender, EventArgs e) + { + SendFullStatus(); + } + private void SendFullStatus(string id = null) { try