1 """Helper methods for common Plex integration operations."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from typing
import TYPE_CHECKING, Any, TypedDict
8 from plexapi.gdm
import GDM
9 from plexwebsocket
import PlexWebsocket
13 from .const
import DOMAIN, SERVERS
16 from .
import PlexServer
20 """Typed description of plex data stored in `hass.data`."""
22 servers: dict[str, PlexServer]
23 dispatchers: dict[str, list[CALLBACK_TYPE]]
24 websockets: dict[str, PlexWebsocket]
26 gdm_debouncer: Callable[[], Coroutine[Any, Any,
None]]
30 """Get typed data from hass.data."""
31 return hass.data[DOMAIN]
35 """Get Plex server from hass.data."""
40 """Return a formatted title for the given media item."""
42 if media.type ==
"album":
46 title = f
"{media.parentTitle} - {media.title}"
47 elif media.type ==
"episode":
48 title = f
"{media.seasonEpisode.upper()} - {media.title}"
50 title = f
"{media.grandparentTitle} - {title}"
51 elif media.type ==
"season":
54 title = f
"{media.parentTitle} - {title}"
55 elif media.type ==
"track":
56 title = f
"{media.index}. {media.title}"
60 if media.type
in [
"album",
"movie",
"season"]:
64 title += f
" ({year!s})"
PlexData get_plex_data(HomeAssistant hass)
def pretty_title(media, short_name=False)
PlexServer get_plex_server(HomeAssistant hass, str server_id)