From 25a744fa01458f8387bc1749318f3a3210f2c76d Mon Sep 17 00:00:00 2001 From: Michael Hallock Date: Fri, 30 Dec 2022 21:45:00 -0500 Subject: [PATCH] Fixes a some critical bugs in the edit screens for devices / traits which could result in lost configuration --- .../Controllers/GoogleDeviceController.cs | 5 +++-- .../Controllers/GoogleTraitController.cs | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleDeviceController.cs b/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleDeviceController.cs index 6aa590f..268fb92 100644 --- a/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleDeviceController.cs +++ b/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleDeviceController.cs @@ -234,7 +234,8 @@ public IActionResult Edit([Required] string deviceId) [ExportModelState] public IActionResult Edit([Required] string deviceId, DeviceViewModel viewModel) { - if (!_deviceRepository.Contains(deviceId)) + var existingDevice = _deviceRepository.FindById(deviceId); + if (existingDevice is null) { return NotFound(); } @@ -276,7 +277,7 @@ public IActionResult Edit([Required] string deviceId, DeviceViewModel viewModel) RoomHint = viewModel.RoomHint, Name = nameInfo, DeviceInfo = deviceInfo, - Traits = new List() + Traits = existingDevice.Traits }; // Final validation diff --git a/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleTraitController.cs b/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleTraitController.cs index 21feca3..73790bf 100644 --- a/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleTraitController.cs +++ b/src/HomeAutio.Mqtt.GoogleHome/Controllers/GoogleTraitController.cs @@ -207,7 +207,6 @@ public IActionResult Edit([Required] string deviceId, [Required] string traitId, } // Set new values - var existingtrait = device.Traits.FirstOrDefault(x => x.Trait == traitEnumId); var commands = !string.IsNullOrEmpty(viewModel.Commands) ? JsonConvert.DeserializeObject>>(viewModel.Commands) : null; var trait = new DeviceTrait { @@ -224,6 +223,10 @@ public IActionResult Edit([Required] string deviceId, [Required] string traitId, } }; + // Replace trait + device.Traits.Remove(device.Traits.First(x => x.Trait == traitEnumId)); + device.Traits.Add(trait); + // Final validation foreach (var error in DeviceTraitValidator.Validate(trait)) {