Refactor debounce duration handling in BatchControlDevicesService and ControlDeviceService

This commit is contained in:
Faris Armoush
2025-04-23 10:52:08 +03:00
parent 46860619a0
commit 2bb7a6950a
2 changed files with 18 additions and 28 deletions

View File

@ -11,7 +11,7 @@ abstract interface class BatchControlDevicesService {
});
}
class RemoteBatchControlDevicesService implements BatchControlDevicesService {
final class RemoteBatchControlDevicesService implements BatchControlDevicesService {
@override
Future<bool> batchControlDevices({
required List<String> uuids,
@ -44,14 +44,15 @@ class RemoteBatchControlDevicesService implements BatchControlDevicesService {
final class DebouncedBatchControlDevicesService
implements BatchControlDevicesService {
final BatchControlDevicesService decoratee;
final Duration _debounceDuration;
final List<(List<String> uuids, String code, Object value)> _pendingRequests = [];
bool _isProcessing = false;
final Duration debounceDuration;
final _pendingRequests = <(List<String> 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<bool> 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();