diff --git a/homeassistant/components/plex/media_browser.py b/homeassistant/components/plex/media_browser.py index 4b2bb502d69..1df624e265b 100644 --- a/homeassistant/components/plex/media_browser.py +++ b/homeassistant/components/plex/media_browser.py @@ -66,7 +66,7 @@ def browse_media( # noqa: C901 if media_content_type in ("plex_root", None): return root_payload(hass, is_internal, platform=platform) - def item_payload(item, short_name=False): + def item_payload(item, short_name=False, extra_params=None): """Create response payload for a single media item.""" try: media_class = ITEM_TYPE_MEDIA_CLASS[item.type] @@ -75,7 +75,9 @@ def browse_media( # noqa: C901 payload = { "title": pretty_title(item, short_name), "media_class": media_class, - "media_content_id": generate_plex_uri(server_id, item.ratingKey), + "media_content_id": generate_plex_uri( + server_id, item.ratingKey, params=extra_params + ), "media_content_type": item.type, "can_play": True, "can_expand": item.type in EXPANDABLES, @@ -209,7 +211,13 @@ def browse_media( # noqa: C901 continue payload["children"].append(station_payload(item)) else: - payload["children"].append(item_payload(item)) + extra_params = None + hub_context = hub.context.split(".")[-1] + if hub_context in ("continue", "inprogress", "ondeck"): + extra_params = {"resume": 1} + payload["children"].append( + item_payload(item, extra_params=extra_params) + ) return BrowseMedia(**payload) if special_folder: @@ -279,7 +287,7 @@ def browse_media( # noqa: C901 return response -def generate_plex_uri(server_id, media_id): +def generate_plex_uri(server_id, media_id, params=None): """Create a media_content_id URL for playable Plex media.""" if isinstance(media_id, int): media_id = str(media_id) @@ -290,6 +298,7 @@ def generate_plex_uri(server_id, media_id): scheme=DOMAIN, host=server_id, path=media_id, + query=params, ) ) diff --git a/homeassistant/components/plex/services.py b/homeassistant/components/plex/services.py index 5a6dd657942..8cf714b8823 100644 --- a/homeassistant/components/plex/services.py +++ b/homeassistant/components/plex/services.py @@ -112,6 +112,7 @@ def process_plex_payload( ) -> PlexMediaSearchResult: """Look up Plex media using media_player.play_media service payloads.""" plex_server = default_plex_server + extra_params = {} if content_id.startswith(PLEX_URI_SCHEME + "{"): # Handle the special payload of 'plex://{}' @@ -132,6 +133,7 @@ def process_plex_payload( else: # Handle legacy payloads without server_id in URL host position content = int(plex_url.host) # type: ignore[arg-type] + extra_params = dict(plex_url.query) else: content = json.loads(content_id) @@ -152,6 +154,8 @@ def process_plex_payload( content = {"plex_key": content} content_type = DOMAIN + content.update(extra_params) + if playqueue_id := content.pop("playqueue_id", None): if not supports_playqueues: raise HomeAssistantError("Plex playqueues are not supported on this device") diff --git a/tests/components/plex/fixtures/media_1.xml b/tests/components/plex/fixtures/media_1.xml index 838afb2959c..7392eaeef92 100644 --- a/tests/components/plex/fixtures/media_1.xml +++ b/tests/components/plex/fixtures/media_1.xml @@ -1,4 +1,4 @@ -