<.header>

APRS Packets

Live and recent APRS packets from the network

<.link navigate={~p"/badpackets"} class="text-sm text-blue-600 hover:text-blue-800"> View Bad Packets → <.link navigate={~p"/"} class="text-sm text-blue-600 hover:text-blue-800"> ← Back to Map
<.table id="packets" rows={@packets}> <:col :let={packet} label="Sender"> <.link navigate={ ~p"/packets/#{Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))}" } class="text-blue-600 hover:text-blue-800 font-medium" > {Map.get(packet, :sender, Map.get(packet, "sender", ""))} <:col :let={packet} label="SSID"> {Map.get(packet, :ssid, Map.get(packet, "ssid", ""))} <:col :let={packet} label="Base Callsign"> <.link navigate={ ~p"/packets/#{Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))}" } class="text-blue-600 hover:text-blue-800 font-medium" > {Map.get(packet, :base_callsign, Map.get(packet, "base_callsign", ""))} <:col :let={packet} label="Data Type"> {Map.get(packet, :data_type, Map.get(packet, "data_type", ""))} <:col :let={packet} label="Symbol"> <% data = Map.get(packet, :data_extended) || %{} raw_table = Map.get(data, :symbol_table_id) || Map.get(data, "symbol_table_id") || "/" table = if raw_table in ["/", "\\", "]"], do: raw_table, else: "/" code = Map.get(data, :symbol_code) || Map.get(data, "symbol_code") || ">" %> {table}{code} <:col :let={packet} label="Path"> {Map.get(packet, :path, Map.get(packet, "path", ""))} <:col :let={packet} label="Latitude"> <% lat = Map.get(packet, :lat) || if( Map.has_key?(packet, :location) and not is_nil(packet.location) and function_exported?(Aprs.Packet, :lat, 1), do: Aprs.Packet.lat(packet), else: nil ) || case Map.get(packet, :data_extended) do %{} = data_ext -> Map.get(data_ext, :latitude) || Map.get(data_ext, "latitude") _ -> nil end %> {if lat, do: (is_float(lat) and :io_lib.format("~.6f", [lat]) |> List.to_string()) or (is_binary(lat) and Regex.replace(~r/(\d+\.\d{1,6})\d*/, lat, "\\1")) or lat, else: ""} <:col :let={packet} label="Longitude"> <% lon = Map.get(packet, :lon) || if( Map.has_key?(packet, :location) and not is_nil(packet.location) and function_exported?(Aprs.Packet, :lon, 1), do: Aprs.Packet.lon(packet), else: nil ) || case Map.get(packet, :data_extended) do %{} = data_ext -> Map.get(data_ext, :longitude) || Map.get(data_ext, "longitude") _ -> nil end %> {if lon, do: (is_float(lon) and :io_lib.format("~.6f", [lon]) |> List.to_string()) or (is_binary(lon) and Regex.replace(~r/(\d+\.\d{1,6})\d*/, lon, "\\1")) or lon, else: ""}
<%= if length(@packets) == 0 do %>

No packets

Packets will appear here as they are received.

<% end %>