From 34ba1797f4b1bc3208cd4181fdd4cd6bf6df00f4 Mon Sep 17 00:00:00 2001 From: connor rigby Date: Mon, 22 Jan 2018 13:01:14 -0800 Subject: [PATCH] Fix fwupdates requireing a reboot --- VERSION | 2 +- lib/farmbot/system/updates/update_handler.ex | 3 ++ lib/farmbot/system/updates/updates.ex | 34 +++++++++++++------- nerves/host/update_handler.ex | 2 ++ nerves/target/update_handler.ex | 4 +++ 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/VERSION b/VERSION index dfda3e0b..f3b5af39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.1.0 +6.1.1 diff --git a/lib/farmbot/system/updates/update_handler.ex b/lib/farmbot/system/updates/update_handler.ex index 9ec6ea27..21ab6faf 100644 --- a/lib/farmbot/system/updates/update_handler.ex +++ b/lib/farmbot/system/updates/update_handler.ex @@ -12,4 +12,7 @@ defmodule Farmbot.System.UpdateHandler do @doc "Setup updates." @callback setup(atom) :: :ok | {:error, term} + + @doc "If a fw has already been applied." + @callback requires_reboot? :: boolean end diff --git a/lib/farmbot/system/updates/updates.ex b/lib/farmbot/system/updates/updates.ex index 690eb9ec..56ecaff3 100644 --- a/lib/farmbot/system/updates/updates.ex +++ b/lib/farmbot/system/updates/updates.ex @@ -22,20 +22,30 @@ defmodule Farmbot.System.Updates do @doc "Force check updates." def check_updates(reboot) do - token = ConfigStorage.get_config_value(:string, "authorization", "token") - if token do - case Farmbot.Jwt.decode(token) do - {:ok, %Farmbot.Jwt{os_update_server: normal_update_server, beta_os_update_server: beta_update_server}} -> - override = ConfigStorage.get_config_value(:string, "settings", "os_update_server_overwrite") - if ConfigStorage.get_config_value(:bool, "settings", "beta_opt_in") do - do_check_updates_http(override || beta_update_server, reboot) - else - do_check_updates_http(override || normal_update_server, reboot) - end - _ -> no_token() + if @handler.requires_reboot? do + if reboot do + Logger.info 1, "Farmbot applied an update. Rebooting." + Farmbot.System.reboot("Update reboot required") + else + Logger.info 1, "Farmbot already applied an update. Please reboot." + :ok end else - no_token() + token = ConfigStorage.get_config_value(:string, "authorization", "token") + if token do + case Farmbot.Jwt.decode(token) do + {:ok, %Farmbot.Jwt{os_update_server: normal_update_server, beta_os_update_server: beta_update_server}} -> + override = ConfigStorage.get_config_value(:string, "settings", "os_update_server_overwrite") + if ConfigStorage.get_config_value(:bool, "settings", "beta_opt_in") do + do_check_updates_http(override || beta_update_server, reboot) + else + do_check_updates_http(override || normal_update_server, reboot) + end + _ -> no_token() + end + else + no_token() + end end end diff --git a/nerves/host/update_handler.ex b/nerves/host/update_handler.ex index 4526ada0..e290874d 100644 --- a/nerves/host/update_handler.ex +++ b/nerves/host/update_handler.ex @@ -21,4 +21,6 @@ defmodule Farmbot.Host.UpdateHandler do def setup(_env) do :ok end + + def requires_reboot?, do: false end diff --git a/nerves/target/update_handler.ex b/nerves/target/update_handler.ex index 12909c6a..6b5762b5 100644 --- a/nerves/target/update_handler.ex +++ b/nerves/target/update_handler.ex @@ -28,4 +28,8 @@ defmodule Farmbot.Target.UpdateHandler do def setup(_) do :ok end + + def requires_reboot? do + !Nerves.Firmware.allow_upgrade? + end end