diff --git a/homeassistant/components/image_upload/__init__.py b/homeassistant/components/image_upload/__init__.py index 2bf28d13fd2e..ff86d4441e49 100644 --- a/homeassistant/components/image_upload/__init__.py +++ b/homeassistant/components/image_upload/__init__.py @@ -24,7 +24,7 @@ from homeassistant.helpers.storage import Store from homeassistant.helpers.typing import ConfigType, VolDictType from homeassistant.util import dt as dt_util -from .const import DOMAIN +from .const import DOMAIN, FOLDER_IMAGE _LOGGER = logging.getLogger(__name__) STORAGE_KEY = "image" @@ -45,7 +45,7 @@ CONFIG_SCHEMA = cv.empty_config_schema(DOMAIN) async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the Image integration.""" - image_dir = pathlib.Path(hass.config.path("image")) + image_dir = pathlib.Path(hass.config.path(FOLDER_IMAGE)) hass.data[DOMAIN] = storage_collection = ImageStorageCollection(hass, image_dir) await storage_collection.async_load() ImageUploadStorageCollectionWebsocket( diff --git a/homeassistant/components/image_upload/const.py b/homeassistant/components/image_upload/const.py index f7607f745c79..89981b9dc302 100644 --- a/homeassistant/components/image_upload/const.py +++ b/homeassistant/components/image_upload/const.py @@ -1,3 +1,4 @@ """Constants for the Image Upload integration.""" DOMAIN = "image_upload" +FOLDER_IMAGE = "image" diff --git a/homeassistant/components/image_upload/media_source.py b/homeassistant/components/image_upload/media_source.py index ee9511e2c369..d1fc978c2783 100644 --- a/homeassistant/components/image_upload/media_source.py +++ b/homeassistant/components/image_upload/media_source.py @@ -2,6 +2,10 @@ from __future__ import annotations +import pathlib + +from propcache.api import cached_property + from homeassistant.components.media_player import BrowseError, MediaClass from homeassistant.components.media_source import ( BrowseMediaSource, @@ -12,7 +16,7 @@ from homeassistant.components.media_source import ( ) from homeassistant.core import HomeAssistant -from .const import DOMAIN +from .const import DOMAIN, FOLDER_IMAGE async def async_get_media_source(hass: HomeAssistant) -> ImageUploadMediaSource: @@ -30,6 +34,11 @@ class ImageUploadMediaSource(MediaSource): super().__init__(DOMAIN) self.hass = hass + @cached_property + def image_folder(self) -> pathlib.Path: + """Return the image folder path.""" + return pathlib.Path(self.hass.config.path(FOLDER_IMAGE)) + async def async_resolve_media(self, item: MediaSourceItem) -> PlayMedia: """Resolve media to a url.""" image = self.hass.data[DOMAIN].data.get(item.identifier) @@ -38,7 +47,9 @@ class ImageUploadMediaSource(MediaSource): raise Unresolvable(f"Could not resolve media item: {item.identifier}") return PlayMedia( - f"/api/image/serve/{image['id']}/original", image["content_type"] + f"/api/image/serve/{image['id']}/original", + image["content_type"], + path=self.image_folder / item.identifier / "original", ) async def async_browse_media( diff --git a/tests/components/image_upload/test_media_source.py b/tests/components/image_upload/test_media_source.py index d66e099bdc9d..3545abcb7992 100644 --- a/tests/components/image_upload/test_media_source.py +++ b/tests/components/image_upload/test_media_source.py @@ -1,5 +1,6 @@ """Test image_upload media source.""" +from pathlib import Path import tempfile from unittest.mock import patch @@ -79,6 +80,7 @@ async def test_resolving( assert item is not None assert item.url == f"/api/image/serve/{image_id}/original" assert item.mime_type == "image/png" + assert item.path == Path(hass.config.path("image")) / image_id / "original" invalid_id = "aabbccddeeff" with pytest.raises(