Home Assistant Unofficial Reference 2024.12.1
remote.py
Go to the documentation of this file.
1 """Support for Jellyfin remote commands."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Iterable
6 import time
7 from typing import Any
8 
10  ATTR_DELAY_SECS,
11  ATTR_NUM_REPEATS,
12  DEFAULT_DELAY_SECS,
13  DEFAULT_NUM_REPEATS,
14  RemoteEntity,
15 )
16 from homeassistant.core import HomeAssistant, callback
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 
19 from . import JellyfinConfigEntry
20 from .const import LOGGER
21 from .coordinator import JellyfinDataUpdateCoordinator
22 from .entity import JellyfinClientEntity
23 
24 
26  hass: HomeAssistant,
27  entry: JellyfinConfigEntry,
28  async_add_entities: AddEntitiesCallback,
29 ) -> None:
30  """Set up Jellyfin remote from a config entry."""
31  coordinator = entry.runtime_data
32 
33  @callback
34  def handle_coordinator_update() -> None:
35  """Add remote per session."""
36  entities: list[RemoteEntity] = []
37  for session_id, session_data in coordinator.data.items():
38  if (
39  session_id not in coordinator.remote_session_ids
40  and session_data["SupportsRemoteControl"]
41  ):
42  entity = JellyfinRemote(coordinator, session_id)
43  LOGGER.debug("Creating remote for session: %s", session_id)
44  coordinator.remote_session_ids.add(session_id)
45  entities.append(entity)
46  async_add_entities(entities)
47 
48  handle_coordinator_update()
49 
50  entry.async_on_unload(coordinator.async_add_listener(handle_coordinator_update))
51 
52 
54  """Defines a Jellyfin remote entity."""
55 
56  def __init__(
57  self,
58  coordinator: JellyfinDataUpdateCoordinator,
59  session_id: str,
60  ) -> None:
61  """Initialize the Jellyfin Remote entity."""
62  super().__init__(coordinator, session_id)
63  self._attr_unique_id_attr_unique_id = f"{coordinator.server_id}-{session_id}"
64 
65  @property
66  def is_on(self) -> bool:
67  """Return if the client is on."""
68  return self.session_datasession_data["IsActive"] if self.session_datasession_data else False
69 
70  def send_command(self, command: Iterable[str], **kwargs: Any) -> None:
71  """Send a command to the client."""
72  num_repeats = kwargs.get(ATTR_NUM_REPEATS, DEFAULT_NUM_REPEATS)
73  delay = kwargs.get(ATTR_DELAY_SECS, DEFAULT_DELAY_SECS)
74 
75  for _ in range(num_repeats):
76  for single_command in command:
77  self.coordinator.api_client.jellyfin.command(
78  self.session_idsession_id, single_command
79  )
80  time.sleep(delay)
None send_command(self, Iterable[str] command, **Any kwargs)
Definition: remote.py:70
None __init__(self, JellyfinDataUpdateCoordinator coordinator, str session_id)
Definition: remote.py:60
None async_setup_entry(HomeAssistant hass, JellyfinConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: remote.py:29