Combine Bluetooth update coordinator subscriptions to reduce code duplication (#97503)

This commit is contained in:
J. Nick Koston 2023-07-31 01:03:19 -07:00 committed by GitHub
parent 5c4e47c127
commit 37cdd51183
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,8 +41,7 @@ class BasePassiveBluetoothCoordinator(ABC):
self.logger = logger self.logger = logger
self.address = address self.address = address
self.connectable = connectable self.connectable = connectable
self._cancel_track_unavailable: CALLBACK_TYPE | None = None self._on_stop: list[CALLBACK_TYPE] = []
self._cancel_bluetooth_advertisements: CALLBACK_TYPE | None = None
self.mode = mode self.mode = mode
self._last_unavailable_time = 0.0 self._last_unavailable_time = 0.0
self._last_name = address self._last_name = address
@ -97,7 +96,8 @@ class BasePassiveBluetoothCoordinator(ABC):
@callback @callback
def _async_start(self) -> None: def _async_start(self) -> None:
"""Start the callbacks.""" """Start the callbacks."""
self._cancel_bluetooth_advertisements = async_register_callback( self._on_stop.append(
async_register_callback(
self.hass, self.hass,
self._async_handle_bluetooth_event, self._async_handle_bluetooth_event,
BluetoothCallbackMatcher( BluetoothCallbackMatcher(
@ -105,19 +105,22 @@ class BasePassiveBluetoothCoordinator(ABC):
), ),
self.mode, self.mode,
) )
self._cancel_track_unavailable = async_track_unavailable( )
self.hass, self._async_handle_unavailable, self.address, self.connectable self._on_stop.append(
async_track_unavailable(
self.hass,
self._async_handle_unavailable,
self.address,
self.connectable,
)
) )
@callback @callback
def _async_stop(self) -> None: def _async_stop(self) -> None:
"""Stop the callbacks.""" """Stop the callbacks."""
if self._cancel_bluetooth_advertisements is not None: for unsub in self._on_stop:
self._cancel_bluetooth_advertisements() unsub()
self._cancel_bluetooth_advertisements = None self._on_stop.clear()
if self._cancel_track_unavailable is not None:
self._cancel_track_unavailable()
self._cancel_track_unavailable = None
@callback @callback
def _async_handle_unavailable( def _async_handle_unavailable(