From 796bb14ccc887f40167afa4d2e188c6f10778ffe Mon Sep 17 00:00:00 2001 From: Foti Dim Date: Mon, 17 Jun 2024 10:39:17 +0200 Subject: [PATCH] Do not initialize global queue if not needed (#53) --- lib/src/ble_command_queue.dart | 50 ++++++++++++++-------------------- lib/src/universal_ble.dart | 1 + 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/lib/src/ble_command_queue.dart b/lib/src/ble_command_queue.dart index 4bd3861..14f9d24 100644 --- a/lib/src/ble_command_queue.dart +++ b/lib/src/ble_command_queue.dart @@ -1,19 +1,15 @@ import 'package:universal_ble/src/queue.dart'; import 'package:universal_ble/universal_ble.dart'; -/// Queue commands and manage queue per device +/// Set queue type and queue commands class BleCommandQueue { - QueueType queueType = QueueType.global; + QueueType queueType; Duration? timeout = const Duration(seconds: 10); OnQueueUpdate? onQueueUpdate; - final Queue _globalQueue = Queue(); final Map _queueMap = {}; + static const String globalQueueId = 'global'; - BleCommandQueue() { - _globalQueue.onRemainingItemsUpdate = (int items) { - onQueueUpdate?.call(QueueType.global.name, items); - }; - } + BleCommandQueue({this.queueType = QueueType.global}); Future queueCommand( Future Function() command, { @@ -21,30 +17,24 @@ class BleCommandQueue { String? deviceId, }) { Duration? duration = withTimeout ? timeout : null; - switch (queueType) { - case QueueType.global: - return _globalQueue.add(command, timeout: duration); - case QueueType.perDevice: - // If deviceId not available, use global queue - if (deviceId != null) { - return _getQueue(deviceId).add(command, timeout: duration); - } else { - return _globalQueue.add(command, timeout: duration); - } - case QueueType.none: - return duration != null ? command().timeout(duration) : command(); - } + + return switch (queueType) { + QueueType.global => _queue().add(command, timeout: duration), + QueueType.perDevice => _queue(deviceId).add(command, timeout: duration), + QueueType.none => + duration != null ? command().timeout(duration) : command(), + }; } - Queue _getQueue(String deviceId) { - Queue? queue = _queueMap[deviceId]; - if (queue == null) { - queue = Queue(); - queue.onRemainingItemsUpdate = (int items) { - onQueueUpdate?.call(deviceId, items); - }; - _queueMap[deviceId] = queue; - } + Queue _queue([String? id = globalQueueId]) => + _queueMap[id] ?? _newQueue(id ?? globalQueueId); + + Queue _newQueue(String id) { + final queue = Queue(); + queue.onRemainingItemsUpdate = (int items) { + onQueueUpdate?.call(id, items); + }; + _queueMap[id] = queue; return queue; } } diff --git a/lib/src/universal_ble.dart b/lib/src/universal_ble.dart index cacb665..b56e6ae 100644 --- a/lib/src/universal_ble.dart +++ b/lib/src/universal_ble.dart @@ -19,6 +19,7 @@ class UniversalBle { /// Set global timeout for all commands. /// Default timeout is 10 seconds + /// Set to null to disable static set timeout(Duration? duration) { _bleCommandQueue.timeout = duration; }