defmodule Podbox.Download.Supervisor do @moduledoc """ A Supervision tree for managing the download system. """ use Supervisor alias Podbox.Download @doc false @spec start_link(Keyword.t()) :: Supervisor.on_start() def start_link(opts), do: Supervisor.start_link(__MODULE__, opts, name: __MODULE__) @doc false @impl true def init(_opts) do [ {Finch, name: Download.Finch}, Download.ConnectivityMonitor ] |> maybe_append(Download.Broadway, start_broadway?()) |> Supervisor.init(strategy: :one_for_one) end defp start_broadway? do :podbox |> Application.get_env(Podbox.Download, []) |> Keyword.get(:start_broadway?, true) end defp maybe_append(children, _child_spec, falsy) when falsy in [nil, false], do: children defp maybe_append(children, child_spec, _), do: Enum.concat(children, [child_spec]) end