Skip to content

Commit

Permalink
use a dict instead of a series of ifs
Browse files Browse the repository at this point in the history
  • Loading branch information
barbibulle committed Jan 26, 2024
1 parent 90f2024 commit 5d63e52
Showing 1 changed file with 18 additions and 27 deletions.
45 changes: 18 additions & 27 deletions bumble/avrcp.py
Expand Up @@ -22,7 +22,6 @@
import logging
import struct
from typing import (
Any,
AsyncIterator,
Awaitable,
Callable,
Expand Down Expand Up @@ -736,32 +735,10 @@ class GenericValue(OpenIntEnum):
class Event:
event_id: EventId

@staticmethod
def from_bytes(pdu: bytes) -> Event:
event_id = pdu[0]
subclass: Any
# TODO: handle more subclasses
if event_id == EventId.PLAYBACK_STATUS_CHANGED:
subclass = PlaybackStatusChangedEvent
elif event_id == EventId.PLAYBACK_POS_CHANGED:
subclass = PlaybackPositionChangedEvent
elif event_id == EventId.TRACK_CHANGED:
subclass = TrackChangedEvent
elif event_id == EventId.PLAYER_APPLICATION_SETTING_CHANGED:
subclass = PlayerApplicationSettingChangedEvent
elif event_id == EventId.NOW_PLAYING_CONTENT_CHANGED:
subclass = NowPlayingContentChangedEvent
elif event_id == EventId.AVAILABLE_PLAYERS_CHANGED:
subclass = AvailablePlayersChangedEvent
elif event_id == EventId.ADDRESSED_PLAYER_CHANGED:
subclass = AddressedPlayerChangedEvent
elif event_id == EventId.UIDS_CHANGED:
subclass = UidsChangedEvent
elif event_id == EventId.VOLUME_CHANGED:
subclass = VolumeChangedEvent
else:
subclass = GenericEvent

@classmethod
def from_bytes(cls, pdu: bytes) -> Event:
event_id = EventId(pdu[0])
subclass = EVENT_SUBCLASSES.get(event_id, GenericEvent)
return subclass.from_bytes(pdu)

def __bytes__(self) -> bytes:
Expand Down Expand Up @@ -961,6 +938,20 @@ def __bytes__(self) -> bytes:
return bytes([self.event_id]) + bytes([self.volume])


# -----------------------------------------------------------------------------
EVENT_SUBCLASSES: Dict[EventId, Type[Event]] = {
EventId.PLAYBACK_STATUS_CHANGED: PlaybackStatusChangedEvent,
EventId.PLAYBACK_POS_CHANGED: PlaybackPositionChangedEvent,
EventId.TRACK_CHANGED: TrackChangedEvent,
EventId.PLAYER_APPLICATION_SETTING_CHANGED: PlayerApplicationSettingChangedEvent,
EventId.NOW_PLAYING_CONTENT_CHANGED: NowPlayingContentChangedEvent,
EventId.AVAILABLE_PLAYERS_CHANGED: AvailablePlayersChangedEvent,
EventId.ADDRESSED_PLAYER_CHANGED: AddressedPlayerChangedEvent,
EventId.UIDS_CHANGED: UidsChangedEvent,
EventId.VOLUME_CHANGED: VolumeChangedEvent,
}


# -----------------------------------------------------------------------------
class Delegate:
"""
Expand Down

0 comments on commit 5d63e52

Please sign in to comment.