Add device registry support for Plex (#31797)
* Add device registry support for Plex * Fix model * Use Plex server as sensor device identifierpull/31818/head
parent
f0b2d50e41
commit
408b41ea02
|
@ -109,8 +109,10 @@ class PlexMediaPlayer(MediaPlayerDevice):
|
|||
self._is_player_active = False
|
||||
self._machine_identifier = device.machineIdentifier
|
||||
self._make = ""
|
||||
self._device_platform = None
|
||||
self._device_product = None
|
||||
self._device_title = None
|
||||
self._device_version = None
|
||||
self._name = None
|
||||
self._player_state = "idle"
|
||||
self._previous_volume_level = 1 # Used in fake muting
|
||||
|
@ -195,8 +197,10 @@ class PlexMediaPlayer(MediaPlayerDevice):
|
|||
device_url = "127.0.0.1"
|
||||
if "127.0.0.1" in device_url:
|
||||
self.device.proxyThroughServer()
|
||||
self._device_platform = self.device.platform
|
||||
self._device_product = self.device.product
|
||||
self._device_title = self.device.title
|
||||
self._device_version = self.device.version
|
||||
self._device_protocol_capabilities = self.device.protocolCapabilities
|
||||
self._player_state = self.device.state
|
||||
|
||||
|
@ -216,6 +220,7 @@ class PlexMediaPlayer(MediaPlayerDevice):
|
|||
self._player_state = session_device.state
|
||||
self._device_product = self._device_product or session_device.product
|
||||
self._device_title = self._device_title or session_device.title
|
||||
self._device_version = self._device_version or session_device.version
|
||||
else:
|
||||
_LOGGER.warning("No player associated with active session")
|
||||
|
||||
|
@ -724,3 +729,18 @@ class PlexMediaPlayer(MediaPlayerDevice):
|
|||
}
|
||||
|
||||
return attr
|
||||
|
||||
@property
|
||||
def device_info(self):
|
||||
"""Return a device description for device registry."""
|
||||
if self.machine_identifier is None:
|
||||
return None
|
||||
|
||||
return {
|
||||
"identifiers": {(PLEX_DOMAIN, self.machine_identifier)},
|
||||
"manufacturer": "Plex",
|
||||
"model": self._device_product or self._device_platform or self.make,
|
||||
"name": self.name,
|
||||
"sw_version": self._device_version,
|
||||
"via_device": (PLEX_DOMAIN, self.plex_server.machine_identifier),
|
||||
}
|
||||
|
|
|
@ -142,3 +142,17 @@ class PlexSensor(Entity):
|
|||
now_playing.append((now_playing_user, now_playing_title))
|
||||
self._state = len(self.sessions)
|
||||
self._now_playing = now_playing
|
||||
|
||||
@property
|
||||
def device_info(self):
|
||||
"""Return a device description for device registry."""
|
||||
if self.unique_id is None:
|
||||
return None
|
||||
|
||||
return {
|
||||
"identifiers": {(PLEX_DOMAIN, self._server.machine_identifier)},
|
||||
"manufacturer": "Plex",
|
||||
"model": "Plex Media Server",
|
||||
"name": "Activity Sensor",
|
||||
"sw_version": self._server.version,
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ class PlexServer:
|
|||
self.options = options
|
||||
self.server_choice = None
|
||||
self._owner_username = None
|
||||
self._version = None
|
||||
|
||||
# Header conditionally added as it is not available in config entry v1
|
||||
if CONF_CLIENT_IDENTIFIER in server_config:
|
||||
|
@ -102,6 +103,8 @@ class PlexServer:
|
|||
if owner_account:
|
||||
self._owner_username = owner_account[0]
|
||||
|
||||
self._version = self._plex_server.version
|
||||
|
||||
def refresh_entity(self, machine_identifier, device, session):
|
||||
"""Forward refresh dispatch to media_player."""
|
||||
unique_id = f"{self.machine_identifier}:{machine_identifier}"
|
||||
|
@ -196,6 +199,11 @@ class PlexServer:
|
|||
"""Return the Plex server owner username."""
|
||||
return self._owner_username
|
||||
|
||||
@property
|
||||
def version(self):
|
||||
"""Return the version of the Plex server."""
|
||||
return self._version
|
||||
|
||||
@property
|
||||
def friendly_name(self):
|
||||
"""Return name of connected Plex server."""
|
||||
|
|
|
@ -87,3 +87,8 @@ class MockPlexServer:
|
|||
def url_in_use(self):
|
||||
"""Return URL used by PlexServer."""
|
||||
return self._baseurl
|
||||
|
||||
@property
|
||||
def version(self):
|
||||
"""Mock version of PlexServer."""
|
||||
return "1.0"
|
||||
|
|
Loading…
Reference in New Issue