From b459e3eb9d7d182dba4bf09b1768c8f992eef080 Mon Sep 17 00:00:00 2001 From: Nathan Spencer Date: Mon, 24 Nov 2025 01:12:13 +0000 Subject: [PATCH] Encode svg in image entity --- custom_components/oasis_mini/image.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/custom_components/oasis_mini/image.py b/custom_components/oasis_mini/image.py index 4250ac1..b7a200c 100644 --- a/custom_components/oasis_mini/image.py +++ b/custom_components/oasis_mini/image.py @@ -21,9 +21,9 @@ async def async_setup_entry( ) -> None: """ Set up image entities for Oasis devices from a config entry. - + Creates an OasisDeviceImageEntity for each device in the entry's runtime data and registers them with Home Assistant. - + Parameters: hass (HomeAssistant): Home Assistant core instance. entry (OasisDeviceConfigEntry): Config entry containing runtime data and device registrations. @@ -33,10 +33,10 @@ async def async_setup_entry( def make_entities(new_devices: list[OasisDevice]): """ Create an Image entity for each OasisDevice using the enclosing config entry's runtime data. - + Parameters: new_devices (list[OasisDevice]): Devices to create image entities for. - + Returns: list[OasisDeviceImageEntity]: A list of image entity instances, one per device. """ @@ -65,9 +65,9 @@ class OasisDeviceImageEntity(OasisDeviceEntity, ImageEntity): ) -> None: """ Create an Oasis device image entity tied to a coordinator and a specific device. - + Initializes the entity with the provided coordinator, device, and image description and synchronizes its initial state from the coordinator. - + Parameters: coordinator (OasisDeviceCoordinator): Coordinator providing updates and Home Assistant context. device (OasisDevice): The Oasis device this entity represents. @@ -80,9 +80,9 @@ class OasisDeviceImageEntity(OasisDeviceEntity, ImageEntity): def image(self) -> bytes | None: """ Provide the entity's image bytes, generating and caching an SVG from the device when available. - + If the device cannot produce an SVG, the entity's image URL and last-updated timestamp are set and no bytes are returned. When an SVG is produced, the content type is set to "image/svg+xml" and the SVG bytes are cached for future calls. - + Returns: bytes: The image content bytes, or `None` if no image is available yet. """ @@ -92,14 +92,14 @@ class OasisDeviceImageEntity(OasisDeviceEntity, ImageEntity): self._attr_image_last_updated = dt_util.now() return None self._attr_content_type = "image/svg+xml" - self._cached_image = Image(self.content_type, svg) + self._cached_image = Image(self.content_type, svg.encode()) return self._cached_image.content @callback def _handle_coordinator_update(self) -> None: """ Update image metadata and cached image when the coordinator reports changes to the device's track or progress. - + If the device's track_id or progress changed and updates are allowed (the device is playing or there is no cached image), update image last-updated timestamp, record the new track_id and progress, clear the cached image to force regeneration, and set the image URL to UNDEFINED when the track contains inline SVG content or to the device's track_image_url otherwise. When Home Assistant is available, propagate the update to the base class handler. """ device = self.device @@ -120,4 +120,4 @@ class OasisDeviceImageEntity(OasisDeviceEntity, ImageEntity): self._attr_image_url = device.track_image_url if self.hass: - super()._handle_coordinator_update() \ No newline at end of file + super()._handle_coordinator_update()