Add device registry support for Plex (#31797)

* Add device registry support for Plex

* Fix model

* Use Plex server as sensor device identifier
pull/31818/head
jjlawren 2020-02-13 18:37:52 -06:00 committed by GitHub
parent f0b2d50e41
commit 408b41ea02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 0 deletions

View File

@ -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),
}

View File

@ -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,
}

View File

@ -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."""

View File

@ -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"