Home Assistant Unofficial Reference 2024.12.1
cast.py
Go to the documentation of this file.
1 """Google Cast support for the Plex component."""
2 
3 from __future__ import annotations
4 
5 from pychromecast import Chromecast
6 from pychromecast.controllers.plex import PlexController
7 
8 from homeassistant.components.cast import DOMAIN as CAST_DOMAIN
9 from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType
10 from homeassistant.core import HomeAssistant
11 
12 from . import async_browse_media as async_browse_plex_media, is_plex_media_id
13 from .services import process_plex_payload
14 
15 
17  hass: HomeAssistant, cast_type: str
18 ) -> list[BrowseMedia]:
19  """Create a root object for media browsing."""
20  return [
22  title="Plex",
23  media_class=MediaClass.APP,
24  media_content_id="",
25  media_content_type="plex",
26  thumbnail="https://brands.home-assistant.io/_/plex/logo.png",
27  can_play=False,
28  can_expand=True,
29  )
30  ]
31 
32 
34  hass: HomeAssistant,
35  media_content_type: MediaType | str,
36  media_content_id: str,
37  cast_type: str,
38 ) -> BrowseMedia | None:
39  """Browse media."""
40  if is_plex_media_id(media_content_id):
41  return await async_browse_plex_media(
42  hass, media_content_type, media_content_id, platform=CAST_DOMAIN
43  )
44  if media_content_type == "plex":
45  return await async_browse_plex_media(hass, None, None, platform=CAST_DOMAIN)
46  return None
47 
48 
50  hass: HomeAssistant, chromecast: Chromecast, media_type: str, media_id: str
51 ) -> None:
52  """Play media."""
53  result = process_plex_payload(hass, media_type, media_id)
54  controller = PlexController()
55  chromecast.register_handler(controller)
56  offset_in_s = result.offset / 1000
57  controller.play_media(result.media, offset=offset_in_s)
58 
59 
60 async def async_play_media(
61  hass: HomeAssistant,
62  cast_entity_id: str,
63  chromecast: Chromecast,
64  media_type: MediaType | str,
65  media_id: str,
66 ) -> bool:
67  """Play media."""
68  if is_plex_media_id(media_id):
69  await hass.async_add_executor_job(
70  _play_media, hass, chromecast, media_type, media_id
71  )
72  return True
73 
74  return False
bool async_play_media(HomeAssistant hass, str cast_entity_id, Chromecast chromecast, MediaType|str media_type, str media_id)
Definition: cast.py:66
BrowseMedia|None async_browse_media(HomeAssistant hass, MediaType|str media_content_type, str media_content_id, str cast_type)
Definition: cast.py:38
list[BrowseMedia] async_get_media_browser_root_object(HomeAssistant hass, str cast_type)
Definition: cast.py:18
None _play_media(HomeAssistant hass, Chromecast chromecast, str media_type, str media_id)
Definition: cast.py:51
PlexMediaSearchResult process_plex_payload(HomeAssistant hass, str content_type, str content_id, PlexServer|None default_plex_server=None, bool supports_playqueues=True)
Definition: services.py:124
def is_plex_media_id(media_content_id)
Definition: __init__.py:64