65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
""""Hacs base setup task."""
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
from datetime import timedelta
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from ..base import HacsBase
|
|
from ..enums import HacsCategory, HacsStage
|
|
from ..exceptions import HacsException
|
|
from .base import HacsTask
|
|
|
|
|
|
async def async_setup_task(hacs: HacsBase, hass: HomeAssistant) -> Task:
|
|
"""Set up this task."""
|
|
return Task(hacs=hacs, hass=hass)
|
|
|
|
|
|
class Task(HacsTask):
|
|
"""Hacs update default task."""
|
|
|
|
schedule = timedelta(hours=3)
|
|
stages = [HacsStage.STARTUP]
|
|
|
|
async def async_execute(self) -> None:
|
|
"""Execute the task."""
|
|
self.hacs.log.info("Loading known repositories")
|
|
|
|
await asyncio.gather(
|
|
*[
|
|
self.async_get_category_repositories(HacsCategory(category))
|
|
for category in self.hacs.common.categories or []
|
|
]
|
|
)
|
|
|
|
async def async_get_category_repositories(self, category: HacsCategory) -> None:
|
|
"""Get repositories from category."""
|
|
try:
|
|
repositories = await self.hacs.async_github_get_hacs_default_file(category)
|
|
except HacsException:
|
|
return
|
|
|
|
for repo in repositories:
|
|
if self.hacs.common.renamed_repositories.get(repo):
|
|
repo = self.hacs.common.renamed_repositories[repo]
|
|
if self.hacs.repositories.is_removed(repo):
|
|
continue
|
|
if repo in self.hacs.common.archived_repositories:
|
|
continue
|
|
repository = self.hacs.repositories.get_by_full_name(repo)
|
|
if repository is not None:
|
|
self.hacs.repositories.mark_default(repository)
|
|
if self.hacs.status.new and self.hacs.configuration.dev:
|
|
# Force update for new installations
|
|
self.hacs.queue.add(repository.common_update())
|
|
continue
|
|
self.hacs.queue.add(
|
|
self.hacs.async_register_repository(
|
|
repository_full_name=repo,
|
|
category=category,
|
|
default=True,
|
|
)
|
|
)
|