Updating ===== Migrate to event listener (v3.x.x) ---------------------------------- Previously, to receive events you'd pass in a callback to `subscribe()`. This has been replaced by a more flexible mechanism. Before: .. code-block:: python async def receive_state(state: PlaybackState): print(f"New state: {state}") await api.subscribe(receive_state) After: .. code-block:: python from pyytlounge import EventListener class CustomListener(EventListener): def __init__(self): self.last_video_id: Optional[str] = None async def playback_state_changed(self, event: PlaybackStateEvent) -> None: """Called when playback state changes (position, play/pause)""" print( f"New state: {event.state} = id: {self.last_video_id} pos: {event.current_time} duration: {event.duration}" ) async def now_playing_changed(self, event: NowPlayingEvent) -> None: """Called when active video changes""" print( f"New state: {event.state} = id: {event.video_id} pos: {event.current_time} duration: {event.duration}" ) self.last_video_id = event.video_id with YtLoungeApi("Some device", CustomListener()) as api: ... await api.subscribe() By creating a subclass of `EventListener` you can override methods for each type of event you're interested in.