aprs.me/lib/aprsme_web/live/packets_live/index.ex
2025-07-05 15:51:39 -05:00

35 lines
1.1 KiB
Elixir

defmodule AprsmeWeb.PacketsLive.Index do
@moduledoc false
use AprsmeWeb, :live_view
use Gettext, backend: AprsmeWeb.Gettext
alias Aprsme.EncodingUtils
alias AprsmeWeb.Endpoint
@impl true
def mount(_params, _session, socket) do
if connected?(socket) do
Endpoint.subscribe("aprs_messages")
Phoenix.PubSub.subscribe(Aprsme.PubSub, "postgres:aprsme_packets")
end
{:ok, assign(socket, :packets, [])}
end
@impl true
def handle_info(%{event: "packet", payload: payload}, socket) do
# Sanitize the packet to prevent JSON encoding errors
sanitized_payload = EncodingUtils.sanitize_packet(payload)
packets = Enum.take([sanitized_payload | socket.assigns.packets], 100)
socket = assign(socket, :packets, packets)
{:noreply, socket}
end
@impl true
def handle_info({:postgres_packet, payload}, socket) do
sanitized_payload = Aprsme.EncodingUtils.sanitize_packet(payload)
packets = Enum.take([sanitized_payload | socket.assigns.packets], 100)
socket = assign(socket, :packets, packets)
{:noreply, socket}
end
end