From 2688e5b2d404100db86f5d6db6fdc7f95fd2b324 Mon Sep 17 00:00:00 2001 From: uvjustin <46082645+uvjustin@users.noreply.github.com> Date: Thu, 29 Sep 2022 18:07:26 -0700 Subject: [PATCH] Mask spotify content in owntone library (#79247) --- .../components/forked_daapd/browse_media.py | 4 +++ .../forked_daapd/test_browse_media.py | 28 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/forked_daapd/browse_media.py b/homeassistant/components/forked_daapd/browse_media.py index 88ca9ad60f85..099a042f58a5 100644 --- a/homeassistant/components/forked_daapd/browse_media.py +++ b/homeassistant/components/forked_daapd/browse_media.py @@ -229,6 +229,10 @@ def create_browse_media_response( if not children: # Directory searches will pass in subdirectories as children children = [] for item in result: + if item.get("data_kind") == "spotify" or ( + "path" in item and cast(str, item["path"]).startswith("spotify") + ): # Exclude spotify data from Owntone library + continue assert isinstance(item["uri"], str) media_type = OWNTONE_TYPE_TO_MEDIA_TYPE[item["uri"].split(":")[1]] title = item.get("name") or item.get("title") # only tracks use title diff --git a/tests/components/forked_daapd/test_browse_media.py b/tests/components/forked_daapd/test_browse_media.py index 23fc9fcf6eb0..957c52a88c5f 100644 --- a/tests/components/forked_daapd/test_browse_media.py +++ b/tests/components/forked_daapd/test_browse_media.py @@ -4,7 +4,11 @@ from http import HTTPStatus from unittest.mock import patch from homeassistant.components import media_source, spotify -from homeassistant.components.forked_daapd.browse_media import create_media_content_id +from homeassistant.components.forked_daapd.browse_media import ( + MediaContent, + create_media_content_id, + is_owntone_media_content_id, +) from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType from homeassistant.components.spotify.const import ( MEDIA_PLAYER_PREFIX as SPOTIFY_MEDIA_PLAYER_PREFIX, @@ -111,6 +115,16 @@ async def test_async_browse_media(hass, hass_ws_client, config_entry): "length_ms": 2951554, "uri": "library:artist:3815427709949443149", }, + { + "id": "456", + "name": "Spotify Artist", + "name_sort": "Spotify Artist", + "album_count": 1, + "track_count": 10, + "length_ms": 2254, + "uri": "spotify:artist:abc123", + "data_kind": "spotify", + }, ] mock_api.return_value.get_genres.return_value = [ {"name": "Classical"}, @@ -127,6 +141,13 @@ async def test_async_browse_media(hass, hass_ws_client, config_entry): "smart_playlist": False, "uri": "library:playlist:1", }, + { + "id": 2, + "name": "Spotify Playlist", + "path": "spotify:playlist:abc123", + "smart_playlist": False, + "uri": "library:playlist:2", + }, ] # Request browse root through WebSocket @@ -150,6 +171,11 @@ async def test_async_browse_media(hass, hass_ws_client, config_entry): """Browse the children of this BrowseMedia.""" nonlocal msg_id for child in children: + # Assert Spotify content is not passed through as Owntone media + assert not ( + is_owntone_media_content_id(child["media_content_id"]) + and "Spotify" in MediaContent(child["media_content_id"]).title + ) if child["can_expand"]: await client.send_json( {