From 442e2eecd58707ac40879328ae88279e37e5c80b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 26 Feb 2022 00:58:45 -0800 Subject: [PATCH] Kodi: Mark MJPEG cameras using PNGs as incompatible (#67257) --- homeassistant/components/kodi/browse_media.py | 13 ++++++++++++- homeassistant/components/kodi/media_player.py | 11 +++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/kodi/browse_media.py b/homeassistant/components/kodi/browse_media.py index 519c4dc7c1b..73247d23a9d 100644 --- a/homeassistant/components/kodi/browse_media.py +++ b/homeassistant/components/kodi/browse_media.py @@ -186,6 +186,15 @@ async def item_payload(item, get_thumbnail_url=None): ) +def media_source_content_filter(item: BrowseMedia) -> bool: + """Content filter for media sources.""" + # Filter out cameras using PNG over MJPEG. They don't work in Kodi. + return not ( + item.media_content_id.startswith("media-source://camera/") + and item.media_content_type == "image/png" + ) + + async def library_payload(hass): """ Create response payload to describe contents of a specific library. @@ -228,7 +237,9 @@ async def library_payload(hass): child.thumbnail = "https://brands.home-assistant.io/_/kodi/logo.png" with contextlib.suppress(media_source.BrowseError): - item = await media_source.async_browse_media(hass, None) + item = await media_source.async_browse_media( + hass, None, content_filter=media_source_content_filter + ) # If domain is None, it's overview of available sources if item.domain is None: library_info.children.extend(item.children) diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index 56b0abb6a15..53798a7ccd9 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -77,7 +77,12 @@ from homeassistant.helpers.network import is_internal_request from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import homeassistant.util.dt as dt_util -from .browse_media import build_item_response, get_media_info, library_payload +from .browse_media import ( + build_item_response, + get_media_info, + library_payload, + media_source_content_filter, +) from .const import ( CONF_WS_PORT, DATA_CONNECTION, @@ -916,7 +921,9 @@ class KodiEntity(MediaPlayerEntity): return await library_payload(self.hass) if media_source.is_media_source_id(media_content_id): - return await media_source.async_browse_media(self.hass, media_content_id) + return await media_source.async_browse_media( + self.hass, media_content_id, content_filter=media_source_content_filter + ) payload = { "search_type": media_content_type,