diff --git a/custom_components/bahmcloud_store/views.py b/custom_components/bahmcloud_store/views.py index d356c5d..ce7fca5 100644 --- a/custom_components/bahmcloud_store/views.py +++ b/custom_components/bahmcloud_store/views.py @@ -441,4 +441,56 @@ class BCSRestartView(HomeAssistantView): return web.json_response({"ok": True}) except Exception as e: _LOGGER.exception("BCS restart failed: %s", e) - return web.json_response({"ok": False, "message": str(e) or "Restart failed"}, status=500) \ No newline at end of file + return web.json_response({"ok": False, "message": str(e) or "Restart failed"}, status=500) + +class BCSRepoDetailView(HomeAssistantView): + url = "/api/bcs/repo" + name = "api:bcs_repo" + requires_auth = True + + def __init__(self, core: Any) -> None: + self.core: BCSCore = core + + async def get(self, request: web.Request) -> web.Response: + repo_id = (request.query.get("repo_id") or "").strip() + if not repo_id: + return web.json_response({"ok": False, "message": "Missing repo_id"}, status=400) + + try: + repo = await self.core.ensure_repo_details(repo_id) + if not repo: + return web.json_response({"ok": False, "message": "Repo not found"}, status=404) + + inst = self.core.get_installed(repo_id) or {} + installed = bool(inst) + domains = inst.get("domains") or [] + if not isinstance(domains, list): + domains = [] + + return web.json_response({ + "ok": True, + "repo": { + "id": repo.id, + "name": repo.name, + "url": repo.url, + "source": repo.source, + "owner": repo.owner, + "provider": repo.provider, + "repo_name": repo.provider_repo_name, + "description": repo.provider_description or repo.meta_description, + "default_branch": repo.default_branch, + "latest_version": repo.latest_version, + "latest_version_source": repo.latest_version_source, + "category": repo.meta_category, + "meta_author": repo.meta_author, + "meta_maintainer": repo.meta_maintainer, + "meta_source": repo.meta_source, + "installed": installed, + "installed_version": inst.get("installed_version"), + "installed_manifest_version": inst.get("installed_manifest_version"), + "installed_domains": domains, + } + }, status=200) + except Exception as e: + _LOGGER.exception("BCS repo details failed: %s", e) + return web.json_response({"ok": False, "message": str(e) or "Repo details failed"}, status=500)