defmodule ExshomePlayer.Variables.Title do @moduledoc """ Playback title. """ alias ExshomePlayer.Services.PlayerState use Exshome.Dependency.GenServerDependency, name: "player_title", dependencies: [{PlayerState, :player}] @impl GenServerDependency def handle_dependency_change(%DependencyState{deps: %{player: %PlayerState{} = player}} = state) do title = extract_title(player.metadata) update_value(state, title) end @spec extract_title(map() | nil) :: String.t() defp extract_title(nil), do: "" defp extract_title(%{"icy-title" => title}), do: title defp extract_title(%{"artist" => artist, "title" => title}), do: "#{artist} - #{title}" defp extract_title(%{"title" => title}), do: title defp extract_title(_), do: "Unknown title" end