1 """Coordinator for Spotify."""
3 from dataclasses
import dataclass
4 from datetime
import datetime, timedelta
6 from typing
import TYPE_CHECKING
8 from spotifyaio
import (
13 SpotifyConnectionError,
23 from .const
import DOMAIN
26 from .models
import SpotifyData
28 _LOGGER = logging.getLogger(__name__)
31 type SpotifyConfigEntry = ConfigEntry[SpotifyData]
36 """Class to hold Spotify data."""
38 current_playback: PlaybackState |
None
39 position_updated_at: datetime |
None
40 playlist: Playlist |
None
41 dj_playlist: bool =
False
47 SPOTIFY_DJ_PLAYLIST_URI =
"spotify:playlist:37i9dQZF1EYkqdzj48dyYq"
51 """Class to manage fetching Spotify data."""
53 current_user: UserProfile
54 config_entry: SpotifyConfigEntry
56 def __init__(self, hass: HomeAssistant, client: SpotifyClient) ->
None:
65 self.
_playlist_playlist: Playlist |
None =
None
69 """Set up the coordinator."""
72 except SpotifyConnectionError
as err:
73 raise UpdateFailed(
"Error communicating with Spotify API")
from err
77 current = await self.
clientclient.get_playback()
78 except SpotifyConnectionError
as err:
79 raise UpdateFailed(
"Error communicating with Spotify API")
from err
82 current_playback=
None,
83 position_updated_at=
None,
88 position_updated_at = dt_util.utcnow()
91 if (context := current.context)
is not None:
92 dj_playlist = context.uri == SPOTIFY_DJ_PLAYLIST_URI
97 SPOTIFY_DJ_PLAYLIST_URI,
103 if context.context_type == ContextType.PLAYLIST:
107 self.
_playlist_playlist = await self.
clientclient.get_playlist(context.uri)
108 except SpotifyNotFoundError:
110 "Spotify playlist '%s' not found. "
111 "Most likely a Spotify-created playlist",
115 except SpotifyConnectionError:
117 "Unable to load spotify playlist '%s'. "
118 "Continuing without playlist data",
124 current_playback=current,
125 position_updated_at=position_updated_at,
127 dj_playlist=dj_playlist,
None __init__(self, HomeAssistant hass, SpotifyClient client)
SpotifyCoordinatorData _async_update_data(self)