diff --git a/lib/sender/chat_integration.ex b/lib/sender/chat_integration.ex new file mode 100644 index 0000000..727142b --- /dev/null +++ b/lib/sender/chat_integration.ex @@ -0,0 +1,36 @@ +defmodule Sender.ChatIntegration do + @moduledoc false + + @chat_capability "chat@1" + @aether_embed_prefix "/aether/chat/embed/" + + def embed_path(stream_id \\ "default") when is_binary(stream_id) do + if chat_available?() do + {:ok, @aether_embed_prefix <> channel_slug(stream_id)} + else + :unavailable + end + end + + def chat_available? do + Code.ensure_loaded?(Tribes.PluginRegistry) && + Tribes.PluginRegistry.provides?(@chat_capability) + rescue + _error -> false + end + + defp channel_slug(stream_id) do + "sender-stream-" <> slugify(stream_id) + end + + defp slugify(value) do + value + |> String.downcase() + |> String.replace(~r/[^a-z0-9]+/u, "-") + |> String.trim("-") + |> case do + "" -> "default" + slug -> slug + end + end +end diff --git a/lib/sender_web/live/home_live.ex b/lib/sender_web/live/home_live.ex index be7a223..751d089 100644 --- a/lib/sender_web/live/home_live.ex +++ b/lib/sender_web/live/home_live.ex @@ -14,10 +14,17 @@ defmodule SenderWeb.HomeLive do on_mount({Tribes.Plugin.LiveUserAuth, :live_user_optional}) + alias Sender.ChatIntegration alias Tribes.Plugin.Layouts def mount(_params, _session, socket) do - {:ok, assign(socket, :page_title, "Streaming")} + chat_embed_path = + case ChatIntegration.embed_path() do + {:ok, path} -> path + :unavailable -> nil + end + + {:ok, socket |> assign(:page_title, "Streaming") |> assign(:chat_embed_path, chat_embed_path)} end def render(assigns) do @@ -34,13 +41,29 @@ defmodule SenderWeb.HomeLive do
-No live stream selected.
-No live stream selected.
+