From 2bb7a6950a6e1cc7d74e6db66e408efad1f85c40 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Wed, 23 Apr 2025 10:52:08 +0300 Subject: [PATCH] Refactor debounce duration handling in BatchControlDevicesService and ControlDeviceService --- .../batch_control_devices_service.dart | 23 ++++++++----------- lib/services/control_device_service.dart | 23 ++++++++----------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/lib/services/batch_control_devices_service.dart b/lib/services/batch_control_devices_service.dart index c8d0bfc2..76dbe480 100644 --- a/lib/services/batch_control_devices_service.dart +++ b/lib/services/batch_control_devices_service.dart @@ -11,7 +11,7 @@ abstract interface class BatchControlDevicesService { }); } -class RemoteBatchControlDevicesService implements BatchControlDevicesService { +final class RemoteBatchControlDevicesService implements BatchControlDevicesService { @override Future batchControlDevices({ required List uuids, @@ -44,14 +44,15 @@ class RemoteBatchControlDevicesService implements BatchControlDevicesService { final class DebouncedBatchControlDevicesService implements BatchControlDevicesService { final BatchControlDevicesService decoratee; - final Duration _debounceDuration; - final List<(List uuids, String code, Object value)> _pendingRequests = []; - bool _isProcessing = false; + final Duration debounceDuration; + + final _pendingRequests = <(List uuids, String code, Object value)>[]; + var _isProcessing = false; DebouncedBatchControlDevicesService({ required this.decoratee, - Duration debounceDuration = const Duration(milliseconds: 1500), - }) : _debounceDuration = debounceDuration; + this.debounceDuration = const Duration(milliseconds: 1500), + }); @override Future batchControlDevices({ @@ -61,17 +62,11 @@ final class DebouncedBatchControlDevicesService }) async { _pendingRequests.add((uuids, code, value)); - if (_isProcessing) { - log( - 'Request added to queue', - name: 'DebouncedBatchControlDevicesService', - ); - return false; - } + if (_isProcessing) return false; _isProcessing = true; - await Future.delayed(_debounceDuration); + await Future.delayed(debounceDuration); final lastRequest = _pendingRequests.last; _pendingRequests.clear(); diff --git a/lib/services/control_device_service.dart b/lib/services/control_device_service.dart index b115990d..ab04a398 100644 --- a/lib/services/control_device_service.dart +++ b/lib/services/control_device_service.dart @@ -36,14 +36,15 @@ final class RemoteControlDeviceService implements ControlDeviceService { final class DebouncedControlDeviceService implements ControlDeviceService { final ControlDeviceService decoratee; - final Duration _debounceDuration; - final List<(String deviceUuid, Status status)> _pendingRequests = []; - bool _isProcessing = false; + final Duration debounceDuration; DebouncedControlDeviceService({ required this.decoratee, - Duration debounceDuration = const Duration(milliseconds: 1500), - }) : _debounceDuration = debounceDuration; + this.debounceDuration = const Duration(milliseconds: 1500), + }); + + final _pendingRequests = <(String deviceUuid, Status status)>[]; + var _isProcessing = false; @override Future controlDevice({ @@ -52,23 +53,17 @@ final class DebouncedControlDeviceService implements ControlDeviceService { }) async { _pendingRequests.add((deviceUuid, status)); - if (_isProcessing) { - log( - 'Request added to queue', - name: 'DebouncedControlDeviceService', - ); - return false; - } + if (_isProcessing) return false; _isProcessing = true; - await Future.delayed(_debounceDuration); + await Future.delayed(debounceDuration); final lastRequest = _pendingRequests.last; _pendingRequests.clear(); try { - final ( lastRequestDeviceUuid, lastRequestStatus) = lastRequest; + final (lastRequestDeviceUuid, lastRequestStatus) = lastRequest; return decoratee.controlDevice( deviceUuid: lastRequestDeviceUuid, status: lastRequestStatus,