defmodule ExshomeClock.Services.LocalTime do
@moduledoc """
Provides a value for local time.
It subscribes to the changes in clock settings and current time.
"""
use Exshome.Dependency.GenServerDependency,
name: "local_time",
dependencies: [
{ExshomeClock.Services.UtcTime, :utc_time},
{ExshomeClock.Settings.ClockSettings, :settings}
]
@impl GenServerDependency
def handle_dependency_change(%DependencyState{deps: deps} = state) do
value =
DateTime.shift_zone!(
deps.utc_time,
deps.settings.timezone
)
update_value(state, value)
end
end