farmbot_os/farmbot_core/lib/farmbot_core/asset_workers/fbos_config_worker.ex

49 lines
2.0 KiB
Elixir

defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FbosConfig do
use GenServer
require Logger
alias Farmbot.Asset.FbosConfig
alias Farmbot.BotState
import Farmbot.Config,
only: [
get_config_value: 3,
update_config_value: 4
]
def preload(%FbosConfig{}), do: []
def start_link(%FbosConfig{} = fbos_config, _args) do
GenServer.start_link(__MODULE__, %FbosConfig{} = fbos_config)
end
def init(%FbosConfig{} = fbos_config) do
{:ok, %FbosConfig{} = fbos_config, 0}
end
def handle_info(:timeout, %FbosConfig{} = fbos_config) do
:ok = BotState.set_config_value(:arduino_debug_messages, fbos_config.arduino_debug_messages)
:ok = BotState.set_config_value(:auto_sync, fbos_config.auto_sync)
:ok = BotState.set_config_value(:beta_opt_in, fbos_config.beta_opt_in)
:ok = BotState.set_config_value(:disable_factory_reset, fbos_config.disable_factory_reset)
:ok = BotState.set_config_value(:firmware_input_log, fbos_config.firmware_input_log)
:ok = BotState.set_config_value(:firmware_output_log, fbos_config.firmware_output_log)
:ok = BotState.set_config_value(:network_not_found_timer, fbos_config.network_not_found_timer)
:ok = BotState.set_config_value(:os_auto_update, fbos_config.os_auto_update)
:ok = BotState.set_config_value(:sequence_body_log, fbos_config.sequence_body_log)
:ok = BotState.set_config_value(:sequence_complete_log, fbos_config.sequence_complete_log)
:ok = BotState.set_config_value(:sequence_init_log, fbos_config.sequence_init_log)
_ = handle_firmware_hardware(fbos_config.firmware_hardware)
{:noreply, fbos_config}
end
def handle_firmware_hardware(target_hardware) do
current_hardware = get_config_value(:string, "settings", "firmware_hardware")
if current_hardware != target_hardware do
Logger.debug("Updating firmware_hardware from #{current_hardware} to #{target_hardware}")
update_config_value(:string, "settings", "firmware_hardware", target_hardware)
end
end
end