Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ device_setup_url =
System.get_env("DEVICE_SETUP_URL") ||
raise "System environment variable `DEVICE_SETUP_URL` was not set. Use value `goatmire.fly.dev`, or set up your own server from the repo at https://github.com/protolux-electronics/goatmire"

## For local development is useful by default is false
device_setup_insecure = System.get_env("DEVICE_SETUP_INSECURE") == "true"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

helps in local development


config :name_badge, :device_setup_url, device_setup_url
config :name_badge, :device_setup_insecure, device_setup_insecure

# Optional: Calendar sync via iCal secret address (read-only)
# Set CALENDAR_URL to your Google Calendar secret iCal address before building.
Expand Down
9 changes: 5 additions & 4 deletions lib/name_badge/battery.ex
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ defmodule NameBadge.Battery do
min_voltage = 3.0
max_voltage = 4.2

percentage = ((v - min_voltage) / (max_voltage - min_voltage) * 100)
|> max(0)
|> min(100)
|> round()
percentage =
((v - min_voltage) / (max_voltage - min_voltage) * 100)
|> max(0)
|> min(100)
|> round()

percentage
end
Expand Down
9 changes: 5 additions & 4 deletions lib/name_badge/mocks/battery_mock.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ defmodule NameBadge.BatteryMock do
min_voltage = 3.0
max_voltage = 4.2

percentage = ((v - min_voltage) / (max_voltage - min_voltage) * 100)
|> max(0)
|> min(100)
|> round()
percentage =
((v - min_voltage) / (max_voltage - min_voltage) * 100)
|> max(0)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

format

|> min(100)
|> round()

percentage
end
Expand Down
59 changes: 56 additions & 3 deletions lib/name_badge/screen/name_badge.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,27 @@ defmodule NameBadge.Screen.NameBadge do
@name_size_default 36
@company_size_default 24

@impl NameBadge.Screen
def render(%{show_qr: true, qr_code: qr_code}) do
case qr_code do
nil ->
"""
#align(center + horizon)[
#text(font: "New Amsterdam", size: 24pt)[No QR code available]
]
"""

qr ->
"""
#align(center + horizon)[
#image(height: 80%, format: "svg", bytes("#{qr}"))

Scan to reach me !
]
"""
end
end

@impl NameBadge.Screen
def render(%{valid?: false}) do
"""
Expand Down Expand Up @@ -59,10 +80,41 @@ defmodule NameBadge.Screen.NameBadge do

case config do
%{"first_name" => _first_name, "last_name" => _last_name} ->
{:ok, assign(screen, config: config, valid?: true)}
qr_code = generate_qr_code(config)

{:ok,
assign(screen,
config: config,
valid?: true,
qr_code: qr_code,
show_qr: false,
button_hints: %{b: "Show QR"}
)}

_config ->
{:ok, assign(screen, valid?: false, button_hints: %{a: "Set up WiFi", b: "View QR code"})}
{:ok,
assign(screen,
valid?: false,
show_qr: false,
button_hints: %{a: "Set up WiFi", b: "View QR code"}
)}
end
end

defp generate_qr_code(config) do
Map.get(config, "qr_link")
|> qr_code_for_url()
end

defp qr_code_for_url(nil), do: nil
defp qr_code_for_url(""), do: nil

defp qr_code_for_url(url) do
with {:ok, _code} = result <- QRCode.create(url),
{:ok, qr_code_svg} <- QRCode.render(result) do
qr_code_svg
|> String.replace("\\", "\\\\")
|> String.replace("\"", "\\\"")
end
end

Expand All @@ -80,7 +132,8 @@ defmodule NameBadge.Screen.NameBadge do
def handle_button(:button_2, :single_press, screen) do
cond do
screen.assigns.valid? ->
{:noreply, screen}
new_show_qr = !screen.assigns.show_qr
{:noreply, assign(screen, :show_qr, new_show_qr)}

true ->
{:noreply, navigate(screen, NameBadge.Screen.Settings.QrCode)}
Expand Down
7 changes: 6 additions & 1 deletion lib/name_badge/screen/settings/qr_code.ex
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ defmodule NameBadge.Screen.Settings.QrCode do
end

defp qr_code_for_token(token) do
url = "https://#{device_setup_url()}/device/#{token}/config"
scheme =
if Application.get_env(:name_badge, :device_setup_insecure, false),
do: "http",
else: "https"

url = "#{scheme}://#{device_setup_url()}/device/#{token}/config"

{:ok, qr_code_svg} =
url
Expand Down
10 changes: 8 additions & 2 deletions lib/name_badge/socket.ex
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ defmodule NameBadge.Socket do
@impl Slipstream
def handle_call(:connected?, _from, socket), do: {:reply, connected?(socket), socket}

defp config,
do: [uri: "wss://#{Application.get_env(:name_badge, :device_setup_url)}/device/websocket"]
defp config do
url = Application.get_env(:name_badge, :device_setup_url)

ws_scheme =
if Application.get_env(:name_badge, :device_setup_insecure, false), do: "ws", else: "wss"

[uri: "#{ws_scheme}://#{url}/device/websocket"]
end
end