defmodule UiWeb.MorseLive do use Phoenix.LiveView require Logger @topic "morse_progress" def render(assigns) do UiWeb.PageView.render("morse.html", assigns) end def mount(%{ip: ip}, socket) do UiWeb.Endpoint.subscribe(@topic) {:ok, assign(socket, default_assigns(ip))} end def handle_event("toggle_morse", _value, %{assigns: %{ip: ip}} = socket) do Logger.info("#{ip} pressed the button!") if not Morse.Server.in_progress?() and ip_send_message?(ip) do Logger.info("Sending Telegram message.") spawn(fn -> Ui.TelegramBot.message("#{ip} pressed the button!") end) end Morse.Server.toggle_morse() {:noreply, socket} end def handle_event("toggle_hint", _value, socket) do {:noreply, update(socket, :hints_visible, &(not &1))} end def handle_info(progress, socket) do {:noreply, assign(socket, progress: progress, in_progress?: Morse.Server.in_progress?())} end defp default_assigns(ip) do [ progress: Morse.Server.progress(), in_progress?: Morse.Server.in_progress?(), hints_visible: false, ip: ip ] end defp ip_send_message?(ip) do not (String.starts_with?(ip, "192.168.") or String.starts_with?(ip, "10.") or ip == "127.0.0.1" or ip == "localhost" or ip == "0.0.0.0") end end