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; }