From 334d71c1ca0ffe6e8b1528d899a3b5449e26a1b1 Mon Sep 17 00:00:00 2001 From: abelino Date: Fri, 27 Oct 2023 15:29:59 -0700 Subject: [PATCH] Add a useful properties others can subscribe to --- lib/nerves_hub_link/application.ex | 6 ++++++ lib/nerves_hub_link/connection.ex | 3 +++ lib/nerves_hub_link/socket.ex | 7 ++++++- mix.exs | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/nerves_hub_link/application.ex b/lib/nerves_hub_link/application.ex index a34bae2..8e5eb7a 100644 --- a/lib/nerves_hub_link/application.ex +++ b/lib/nerves_hub_link/application.ex @@ -22,6 +22,12 @@ defmodule NervesHubLink.Application do } children = [ + {PropertyTable, + name: NervesHubLink, + properties: [ + {["status"], :disconnected}, + {["update_available"], nil} + ]}, {UpdateManager, fwup_config}, Connection, {Socket, config} diff --git a/lib/nerves_hub_link/connection.ex b/lib/nerves_hub_link/connection.ex index 4b6eaeb..1730510 100644 --- a/lib/nerves_hub_link/connection.ex +++ b/lib/nerves_hub_link/connection.ex @@ -95,6 +95,7 @@ defmodule NervesHubLink.Connection do """ @spec connected() :: :ok def connected() do + PropertyTable.put(NervesHubLink, ["status"], :connected) Agent.update(__MODULE__, fn _ -> {:connected, current_time()} end) end @@ -103,6 +104,8 @@ defmodule NervesHubLink.Connection do """ @spec disconnected() :: :ok def disconnected() do + PropertyTable.put(NervesHubLink, ["status"], :disconnected) + # If we are already in a disconnected state, then don't # overwrite the existing value so we can measure from # the first point of disconnect diff --git a/lib/nerves_hub_link/socket.ex b/lib/nerves_hub_link/socket.ex index 0a301b5..1e3c138 100644 --- a/lib/nerves_hub_link/socket.ex +++ b/lib/nerves_hub_link/socket.ex @@ -262,6 +262,8 @@ defmodule NervesHubLink.Socket do end defp handle_join_reply(%{"firmware_url" => url} = update) when is_binary(url) do + PropertyTable.put(NervesHubLink, ["update_available"], true) + case NervesHubLinkCommon.Message.UpdateInfo.parse(update) do {:ok, %NervesHubLinkCommon.Message.UpdateInfo{} = info} -> UpdateManager.apply_update(info) @@ -272,7 +274,10 @@ defmodule NervesHubLink.Socket do end end - defp handle_join_reply(_), do: :noop + defp handle_join_reply(_) do + PropertyTable.put(NervesHubLink, ["update_available"], false) + :noop + end defp maybe_join_console(socket) do if socket.assigns.remote_iex do diff --git a/mix.exs b/mix.exs index 5263a83..46e5145 100644 --- a/mix.exs +++ b/mix.exs @@ -103,6 +103,7 @@ defmodule NervesHubLink.MixProject do {:nerves_runtime, "~> 0.8"}, {:nerves_hub_link_common, "~> 0.4"}, {:nerves_hub_ca_store, "~> 1.0.0"}, + {:property_table, "~> 0.2"}, {:slipstream, "~> 1.0 or ~> 0.8"}, {:x509, "~> 0.5"} ]