mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Simplify async_track_time_interval implementation (#117956)
This commit is contained in:
parent
fc4ea774ca
commit
6c6a5f496a
@ -1571,11 +1571,10 @@ class _TrackTimeInterval:
|
|||||||
cancel_on_shutdown: bool | None
|
cancel_on_shutdown: bool | None
|
||||||
_track_job: HassJob[[datetime], Coroutine[Any, Any, None] | None] | None = None
|
_track_job: HassJob[[datetime], Coroutine[Any, Any, None] | None] | None = None
|
||||||
_run_job: HassJob[[datetime], Coroutine[Any, Any, None] | None] | None = None
|
_run_job: HassJob[[datetime], Coroutine[Any, Any, None] | None] | None = None
|
||||||
_cancel_callback: CALLBACK_TYPE | None = None
|
_timer_handle: asyncio.TimerHandle | None = None
|
||||||
|
|
||||||
def async_attach(self) -> None:
|
def async_attach(self) -> None:
|
||||||
"""Initialize track job."""
|
"""Initialize track job."""
|
||||||
hass = self.hass
|
|
||||||
self._track_job = HassJob(
|
self._track_job = HassJob(
|
||||||
self._interval_listener,
|
self._interval_listener,
|
||||||
self.job_name,
|
self.job_name,
|
||||||
@ -1587,32 +1586,32 @@ class _TrackTimeInterval:
|
|||||||
f"track time interval {self.seconds}",
|
f"track time interval {self.seconds}",
|
||||||
cancel_on_shutdown=self.cancel_on_shutdown,
|
cancel_on_shutdown=self.cancel_on_shutdown,
|
||||||
)
|
)
|
||||||
self._cancel_callback = async_call_at(
|
self._schedule_timer()
|
||||||
hass,
|
|
||||||
self._track_job,
|
def _schedule_timer(self) -> None:
|
||||||
hass.loop.time() + self.seconds,
|
"""Schedule the timer."""
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
assert self._track_job is not None
|
||||||
|
hass = self.hass
|
||||||
|
loop = hass.loop
|
||||||
|
self._timer_handle = loop.call_at(
|
||||||
|
loop.time() + self.seconds, self._interval_listener, self._track_job
|
||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _interval_listener(self, now: datetime) -> None:
|
def _interval_listener(self, _: Any) -> None:
|
||||||
"""Handle elapsed intervals."""
|
"""Handle elapsed intervals."""
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
assert self._run_job is not None
|
assert self._run_job is not None
|
||||||
assert self._track_job is not None
|
self._schedule_timer()
|
||||||
hass = self.hass
|
self.hass.async_run_hass_job(self._run_job, dt_util.utcnow(), background=True)
|
||||||
self._cancel_callback = async_call_at(
|
|
||||||
hass,
|
|
||||||
self._track_job,
|
|
||||||
hass.loop.time() + self.seconds,
|
|
||||||
)
|
|
||||||
hass.async_run_hass_job(self._run_job, now, background=True)
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_cancel(self) -> None:
|
def async_cancel(self) -> None:
|
||||||
"""Cancel the call_at."""
|
"""Cancel the call_at."""
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
assert self._cancel_callback is not None
|
assert self._timer_handle is not None
|
||||||
self._cancel_callback()
|
self._timer_handle.cancel()
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
Loading…
x
Reference in New Issue
Block a user