diff --git a/custom_components/bahmcloud_store/core.py b/custom_components/bahmcloud_store/core.py index 061571b..d70a74c 100644 --- a/custom_components/bahmcloud_store/core.py +++ b/custom_components/bahmcloud_store/core.py @@ -1,8 +1,10 @@ from __future__ import annotations import asyncio +import json import logging from dataclasses import dataclass +from pathlib import Path from typing import Any from homeassistant.core import HomeAssistant @@ -55,6 +57,21 @@ class BCSCore: self.repos: dict[str, RepoItem] = {} self._listeners: list[callable] = [] + self.version: str = self._read_manifest_version() + + def _read_manifest_version(self) -> str: + """ + Read the integration version from manifest.json to avoid version mismatches + between backend and frontend strings. + """ + try: + manifest_path = Path(__file__).resolve().parent / "manifest.json" + data = json.loads(manifest_path.read_text(encoding="utf-8")) + v = data.get("version") + return str(v) if v else "unknown" + except Exception: + return "unknown" + def add_listener(self, cb) -> None: self._listeners.append(cb) @@ -88,7 +105,7 @@ class BCSCore: for c in custom_repos: merged[c.id] = RepoItem( id=c.id, - name=c.name or c.url, + name=c.name or c.url, # Will be replaced by provider repo_name if name missing url=c.url, source="custom", ) @@ -97,7 +114,7 @@ class BCSCore: for r in merged.values(): r.provider = detect_provider(r.url) - # Enrich owner/description (best-effort; never break the store) + # Enrich owner/description/name (best-effort; never break the store) await self._enrich_repos(merged) self.repos = merged @@ -112,12 +129,19 @@ class BCSCore: async def enrich_one(r: RepoItem) -> None: async with sem: info = await fetch_repo_info(self.hass, r.url) + r.provider = info.provider or r.provider if info.owner: r.owner = info.owner if info.description: r.description = info.description + # If the custom repo had no name provided, use repo_name from provider + if r.source == "custom": + if (not r.name) or (r.name == r.url) or (r.name.startswith("http")): + if info.repo_name: + r.name = info.repo_name + await asyncio.gather(*(enrich_one(r) for r in merged.values()), return_exceptions=True) async def _load_index_repos(self) -> tuple[list[RepoItem], int]: