mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
Refactor debounce duration handling in BatchControlDevicesService and ControlDeviceService
This commit is contained in:
@ -11,7 +11,7 @@ abstract interface class BatchControlDevicesService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoteBatchControlDevicesService implements BatchControlDevicesService {
|
final class RemoteBatchControlDevicesService implements BatchControlDevicesService {
|
||||||
@override
|
@override
|
||||||
Future<bool> batchControlDevices({
|
Future<bool> batchControlDevices({
|
||||||
required List<String> uuids,
|
required List<String> uuids,
|
||||||
@ -44,14 +44,15 @@ class RemoteBatchControlDevicesService implements BatchControlDevicesService {
|
|||||||
final class DebouncedBatchControlDevicesService
|
final class DebouncedBatchControlDevicesService
|
||||||
implements BatchControlDevicesService {
|
implements BatchControlDevicesService {
|
||||||
final BatchControlDevicesService decoratee;
|
final BatchControlDevicesService decoratee;
|
||||||
final Duration _debounceDuration;
|
final Duration debounceDuration;
|
||||||
final List<(List<String> uuids, String code, Object value)> _pendingRequests = [];
|
|
||||||
bool _isProcessing = false;
|
final _pendingRequests = <(List<String> uuids, String code, Object value)>[];
|
||||||
|
var _isProcessing = false;
|
||||||
|
|
||||||
DebouncedBatchControlDevicesService({
|
DebouncedBatchControlDevicesService({
|
||||||
required this.decoratee,
|
required this.decoratee,
|
||||||
Duration debounceDuration = const Duration(milliseconds: 1500),
|
this.debounceDuration = const Duration(milliseconds: 1500),
|
||||||
}) : _debounceDuration = debounceDuration;
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> batchControlDevices({
|
Future<bool> batchControlDevices({
|
||||||
@ -61,17 +62,11 @@ final class DebouncedBatchControlDevicesService
|
|||||||
}) async {
|
}) async {
|
||||||
_pendingRequests.add((uuids, code, value));
|
_pendingRequests.add((uuids, code, value));
|
||||||
|
|
||||||
if (_isProcessing) {
|
if (_isProcessing) return false;
|
||||||
log(
|
|
||||||
'Request added to queue',
|
|
||||||
name: 'DebouncedBatchControlDevicesService',
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isProcessing = true;
|
_isProcessing = true;
|
||||||
|
|
||||||
await Future.delayed(_debounceDuration);
|
await Future.delayed(debounceDuration);
|
||||||
|
|
||||||
final lastRequest = _pendingRequests.last;
|
final lastRequest = _pendingRequests.last;
|
||||||
_pendingRequests.clear();
|
_pendingRequests.clear();
|
||||||
|
@ -36,14 +36,15 @@ final class RemoteControlDeviceService implements ControlDeviceService {
|
|||||||
|
|
||||||
final class DebouncedControlDeviceService implements ControlDeviceService {
|
final class DebouncedControlDeviceService implements ControlDeviceService {
|
||||||
final ControlDeviceService decoratee;
|
final ControlDeviceService decoratee;
|
||||||
final Duration _debounceDuration;
|
final Duration debounceDuration;
|
||||||
final List<(String deviceUuid, Status status)> _pendingRequests = [];
|
|
||||||
bool _isProcessing = false;
|
|
||||||
|
|
||||||
DebouncedControlDeviceService({
|
DebouncedControlDeviceService({
|
||||||
required this.decoratee,
|
required this.decoratee,
|
||||||
Duration debounceDuration = const Duration(milliseconds: 1500),
|
this.debounceDuration = const Duration(milliseconds: 1500),
|
||||||
}) : _debounceDuration = debounceDuration;
|
});
|
||||||
|
|
||||||
|
final _pendingRequests = <(String deviceUuid, Status status)>[];
|
||||||
|
var _isProcessing = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> controlDevice({
|
Future<bool> controlDevice({
|
||||||
@ -52,23 +53,17 @@ final class DebouncedControlDeviceService implements ControlDeviceService {
|
|||||||
}) async {
|
}) async {
|
||||||
_pendingRequests.add((deviceUuid, status));
|
_pendingRequests.add((deviceUuid, status));
|
||||||
|
|
||||||
if (_isProcessing) {
|
if (_isProcessing) return false;
|
||||||
log(
|
|
||||||
'Request added to queue',
|
|
||||||
name: 'DebouncedControlDeviceService',
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isProcessing = true;
|
_isProcessing = true;
|
||||||
|
|
||||||
await Future.delayed(_debounceDuration);
|
await Future.delayed(debounceDuration);
|
||||||
|
|
||||||
final lastRequest = _pendingRequests.last;
|
final lastRequest = _pendingRequests.last;
|
||||||
_pendingRequests.clear();
|
_pendingRequests.clear();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final ( lastRequestDeviceUuid, lastRequestStatus) = lastRequest;
|
final (lastRequestDeviceUuid, lastRequestStatus) = lastRequest;
|
||||||
return decoratee.controlDevice(
|
return decoratee.controlDevice(
|
||||||
deviceUuid: lastRequestDeviceUuid,
|
deviceUuid: lastRequestDeviceUuid,
|
||||||
status: lastRequestStatus,
|
status: lastRequestStatus,
|
||||||
|
Reference in New Issue
Block a user