From 6fc35a7b9a36ed1d992c6256762ba72227e2d245 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Sun, 27 Apr 2025 10:14:19 +0300 Subject: [PATCH] enhanced device debouncing to accomodate for multiple calls from the different devices functions calls. --- lib/services/control_device_service.dart | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/services/control_device_service.dart b/lib/services/control_device_service.dart index 9913b52e..49463306 100644 --- a/lib/services/control_device_service.dart +++ b/lib/services/control_device_service.dart @@ -40,7 +40,7 @@ final class DebouncedControlDeviceService implements ControlDeviceService { DebouncedControlDeviceService({ required this.decoratee, - this.debounceDuration = const Duration(milliseconds: 800), + this.debounceDuration = const Duration(milliseconds: 1500), }); final _pendingRequests = <(String deviceUuid, Status status)>[]; @@ -59,15 +59,24 @@ final class DebouncedControlDeviceService implements ControlDeviceService { await Future.delayed(debounceDuration); - final lastRequest = _pendingRequests.last; + final groupedRequests = {}; + for (final request in _pendingRequests) { + final (_, requestStatus) = request; + groupedRequests[requestStatus.code] = request; + } _pendingRequests.clear(); try { - final (lastRequestDeviceUuid, lastRequestStatus) = lastRequest; - return decoratee.controlDevice( - deviceUuid: lastRequestDeviceUuid, - status: lastRequestStatus, - ); + var allSuccessful = true; + for (final request in groupedRequests.values) { + final (lastRequestDeviceUuid, lastRequestStatus) = request; + final success = await decoratee.controlDevice( + deviceUuid: lastRequestDeviceUuid, + status: lastRequestStatus, + ); + if (!success) allSuccessful = false; + } + return allSuccessful; } finally { _isProcessing = false; }